Tải bản đầy đủ (.pdf) (20 trang)

bài giảng hệ điề hành phân tán phần 5 pdf

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (221.73 KB, 20 trang )

Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 74-

Hình 3.20. Giải pháp cuộc hẹn Ada cho vấn đề u tiên QT đọc yếu
Kết hợp câu lệnh chấp nhận và câu lệnh chọn cung cấp việc loại trừ ràng buộc và đồng
bộ cho đọc/ghi. Đọc/Ghi thực sự cũng có thể đợc nhúng trong phục vụ đồng bộ. Đọc
đồng thời vẫn có thể dùng câu lệnh accept-startread bằng việc fork QT hoặc luồng
khác. Trong hệ phân tán, tên điểm vào có thể đợc truyền đi và cuộc hẹn của thủ tục
đợc thực hiện bằng lời gọi thủ tục từ xa.
3.6 Mô hình đối tợng các phục vụ tài nguyên
Nhu cầu đồng bộ xuất hiện từ việc chia xẻ tài nguyên. Để làm tăng hiệu quả việc sử
dụng tài nguyên cần giao trách nhiệm cho phục vụ quản lý tài nguyên. Sử dụng khái
niệm hớng đối tợng đối với tài nguyên sẽ cung cấp sự trong suốt tài nguyên tới các
khách. Một tài nguyên đợc coi là một đối tợng ảo và đợc trình bày dới dạng một
tập các thao tác chính xác đợc khách gọi. Đồng bộ và điều khiển đồng thời giữa các
đối tợng phục vụ là hoàn toàn trong suốt với các khách. Hơn nữa truyền thông giữa
các khách và phục vụ đối tợng có thể trong suốt bằng cách dùng các lời gọi thủ tục từ
xa. Sự đồng thời trong phục vụ có thể đợc thực hiện tốt bằng cách dùng đa luồng cho
phép đáp ứng đồng thời các yêu cầu của nhiều khách. Do các luồng chia xẻ vùng địa
chỉ chung, phơng pháp đồng bộ biến chia xẻ đợc sử dụng để phối hợp các luồng.
Trong RPC và cuộc hẹn đã thảo luận nhiều về việc đồng bộ CTĐ. Trong một vài ứng
dụng, các khách có thể a thích gửi các yêu cầu dị bộ cho phục vụ. Một yêu cầu không
cần sự đáp lại nên là dị bộ. Điều này cũng có thể xảy ra khi cần lời dáp cho một câu
hỏi song để hiệu quả hơn, QT khách thực hiện một công việc khác thay vì bị kết khối.
Có hai phơng pháp thi hành việc CTĐ không đồng bộ với phục vụ: một là định nghĩa
RPC dị bộ mới, hai là ứng với mỗi RPC tạo một luồng của QT khách. Cả hai phơng
pháp đều cần tới cơ chế ngôn ngữ, với cơ chế đó QT có thể biết đợc việc hoàn thành
và lấy đợc kết quả của các RPC.
3.7. Ngôn ngữ lập trình đồng thời
các RPC


S
erver tài nguyên đa luồn
g
(Đồng bộ hóa và đồng thời)
Đ
a luồn
g

Các QT khách cộng tác
Mô hình đối tợng
(Trong suốt tài nguyên)
(Trong suốt truyền thông )
Đ
ồng bộ biến chia xẻ
H
ình 3.21. Cấu trúc của phục vụ tài nguyên phục vụ đối tợn
g

Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 75-
Ngôn ngữ lập trình đồng thời là một hệ chơng trình hỗ trợ việc đặc tả tính đồng thời,
sự đồng bộ, việc truyền thông trong tơng tác giữa các QT đồng thời. Sự thi hành của
ngôn ngữ lập trình đồng thời đợc dành cho HĐH phân tán hơn là chơng trình dịch
nh kiểu các ngôn ngữ tuần tự. Điều đó do tính đồng thời, đồng bộ và truyền thông QT
là một vần đề thời gian chạy. Ngôn ngữ lập trình đồng thời có thể đợc xem nh là sự
mở rộng từ ngôn ngữ tuần tự đã tồn tại. Chúng ta xem xét cơ chế đồng bộ theo minh
họa trong hình 3.22.
Cơ chế đồng bộ đợc phân thành hai loại: Biến chia xẻ hoặc CTĐ. Monitor là một ví
dụ thông dụng nhất cho khái niệm đồng bộ biến chia xẻ cho những ngôn ngữ đồng
thời. Sự thể hiện trừu tợng nhờ khái niệm monitor làm cho nó trở thành mô hình thích

hợp đối với đối tợng dữ liệu và phục vụ tài nguyên. Những ngôn ngữ cổ điển sử dụng
monitor là Concurent Pascal, Modula và Turing Plus. Concurent Pascal là ngôn ngữ
đầu tiên hỗ trợ monitor. Modula là một ngôn ngữ đợc phát triển với mục đích nhấn
mạnh tầm quan trọng của modun chơng trình. Nhờ bổ sung môdun giao tiếp hỗ trợ
monitor, Modula sử dụng môđun thiết bị nhằm thi hành các I/O trừu tợng cho phép
mềm dẻo hơn khi giao tiếp với nhân. Turing là một ngôn ngữ tuần tự đợc thiết kế
phục vụ chỉ dẫn tới các công thức toán học mạnh. Turing Plus là một mở rộng của
Turing nhằm hỗ trợ monitor cho lập trình đồng thời. Tồn tại nhiều ngôn ngữ đồng thời
dựa trên monitor và việc định nghĩa monitor cũng rất đa dạng. Điều khác nhau chính
của chúng là ngữ nghĩa là toán tử signal cùng lời gọi monitor lồng nhau và quy định
phạm vi của các biến.
Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 76-
Một ngôn ngữ đồng thời danh tiếng khác sử dụng biến chung đồng bộ đồng thời là
Path Pascal, một biến thể của khoảng tới hạn điều kiện - CCR trong QT phân tán - DP
(Distributed Processes) và Argus. Biểu thức Path là cách đặc tả ngữ nghĩa cho một tính
toán đồng thời. Tuy nhiên, biểu thức Path đơn giản không hiệu quả trong các mô hình
cộng tác QT trong đó đòi hỏi thông tin trạng thái về tài nguyên chia xẻ. Biểu thức Path
mở rộng đợc đề xuất để thể hiện việc mở rộng mô hình kiểu đó nhng khi mở rộng
nh vậy thì sự đẹp đẽ ban đầu lại bị mất đi. Khoảng tới hạn điều kiện CCR dễ dàng
đợc thi hành. Đánh giá các điều kiện nhằm tách khối các QT là rất đáng giá. Điều này
có thể đợc giải quyết bằng wait và signal hiển theo điều kiện tơng tự nh biến điều
kiện trong tiếp cận monitor.
Hai phơng pháp đồng bộ CTĐ đồng bộ và dị bộ đợc sử dụng trong nhiều ngôn ngữ
đồng thời. Việc nhận hoặc gửi TĐ có thể đợc xác định bằng cách chỉ trực tiếp tên
nguồn và tên đích của TĐ. Tuy nhiên, nh đã đợc diễn giải ở trên, cách chỉ tên nh
vậy là không thực tế. Mềm dẻo hơn, QT TT là không trực tiếp mà đợc thực hiện bằng
cách qua kênh định danh. Cổng (Port) và hộp th (Mailbox) là hai kênh chuyển định
danh. Cổng cho phép truyền thông nhiều-một. Hộp th cho phép truyền thông nhiều-
nhiều. Sử dụng cổng hoặc hộp th không giới hạn việc cung cấp gửi TĐ dị bộ. GYPSY

là ngôn ngữ bậc cao đầu tiên sử dụng hộp th để gửi các TĐ dị bộ. PLITS là ngôn ngữ
sử dụng việc CTĐ dị bộ nhng định danh trực tiếp các môđun QT. Vấn đề định tên
trực tiếp trong PLITS đợc làm nhẹ bớt bằng việc bổ sung khóa TĐ và những phép
toán cho phép loại bỏ những thông tin đợc bổ sung từ bên gửi. Một QT nhận có thể
Đối
xứng
(cuộc
hẹn)
Đồn
g
b

D

b

Định
danh
QT
trực
tiếp
Bất
đối
xứng
(hỏi
/
đáp)
Định
danh
gián

tiếp
(cổng
/ hộp
th)
Định
danh
thủ
tục
Cấu
trúc
chơng
trình
Kiểu
trừu
tợng
Cấu
trúc
điều
khiển
CSP
DP
X-11 PASCAL
đồng thời
DP
Argue
không

Path
Pascal
Gray SR

Socket
SLIPS
ADA
DP
CSR
đồng
thời
nhúng
trong
HĐH
H
ình 3.22. Phân loại cơ chế đồng bộ và truyền thôn
g

RPC
đồng
bộ
Biến
dạng
của
RPC
RPC
Định
danh
QT
Định
danh
QT
Định
danh

thủ
tục
Định
danh
thủ
tục
Path Monitor CCR
Đ

n
g

bộ
h
óa





c
h
ế

t
r
uyề
n
t
h

ô
n
g
Bi
ế
n
c
hi
a
x


C
h
uyể
n
t
h
ô
n
g

đ
i
ệp

Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 77-
nhận mọi TĐ từ bất cứ nơi gửi nào hay bất cứ TĐ nào với cùng một khoá thẻ (tagged
key) thực sự. Hợp lý hơn nếu QT nhận trở thành một phục vụ dành cho khách phức mà

không cần biết tên của các khách. Nói thêm là kênh TT phức giữa khách và phục vụ
đợc thiết lập khi dùng các khóa khác nhau đối với TĐ.
Chính vì vậy, bên nhận có thể đợc coi nh là một phục vụ dành cho nhiều khách mà
không cần biết tên của các khách. Sử dụng khoá thẻ khác nhau có thể tạo nên những
kênh truyền khác nhau giữa phục vụ và khách.
Thiên hớng trên đợc sử dụng trong ngôn ngữ C đồng thời để chuyển đồng bộ những
TĐ dị bộ. Có thể đặt tên cho kênh bằng cách sử dụng những cấu trúc ngôn ngữ bậc cao
qua các lời gọi thủ tục và đợc gọi là RPC dị bộ.
CTĐ đồng bộ có thể đối xứng hoặc không đối xứng, phụ thuộc vào kịch bản truyền
thông. CTĐ đồng bộ không đối xứng giả thiết hai chủ thể truyền thông có quan hệ
chủ/tớ - master/slave (chính-phụ - primary/secondary). Đối tợng chính phát yêu cầu
và đối tợng phụ đáp ứng câu trả lời cho yêu cầu đó. Khi thi hành trong mô hình phục
vụ/client thì phục vụ đóng vai trò nh là đối tợng nhận yêu cầu phục vụ. CTĐ đồng
bộ đối xứng là khái niệm cuộc hẹn khi các QT truyền thông đang cố gắng tích cực
đồng bộ với một QT khác. Tơng tự, cả đồng bộ hỏi/đáp và cuộc hẹn đều yêu cầu thiết
lập kênh truyền thông bằng tên QT hoặc lời gọi thủ tục. Cổng và hộp th không thể áp
dụng ở đây vì chúng đợc dùng cho gửi dị bộ. RPC quy ớc dùng CTĐ đồng bộ không
đối xứng và các lời gọi thủ tục đợc hợp thể hoá trong một số ngôn ngữ đồng thời nh
DP, Argus và Mesa. Các ngôn ngữ này cũng bổ sung đồng bộ CCR hoặc monitor biến
chia xẻ. Do RPC là phơng pháp truyền thông quan trọng trong hệ phân tán nên nó
đợc tích hợp nh một gói phần mêm trong hầu hết HĐH hiện nay.
CTĐ đồng bộ đối xứng dùng cuộc hẹn. CSP dùng cách đánh tên QT cho cuộc hẹn. DP
mở rộng thêm tên thủ tục trong QT, nơi cuộc hẹn có thể xẩy ra tại các điểm khác nhau.
Hiệu quả sử dụng cuộc hẹn theo kiểu RPC tìm thấy trong Ada. Thi hành Ada cho cuộc
hẹn RPC là đúng hoàn toàn. Lệnh seclect hỗ trợ lời gọi cuộc hẹn không định trớc
(truyền thông chọn lọc). Bổ sung thêm những chức năng về quá hạn (time-out) và điểm
vào thủ tục cho vector ngắt trong những lệnh accept. Ada trở thành thích hợp cho lập
trình hệ thống và lập trình thời gian thực. Hình 3.20 trình bày sự phân loại các mô tả
trên đây về đồng bộ và truyền thông ngôn ngữ đồng thời. Nhiều ngôn ngữ đồng thời
dùng cách tổ hợp các cơ chế. ví dụ, ngôn ngữ SR (Synchronizing Resources) có hâu hết

các cấu trúc cần thiết cho lập trình đồng thời. SR dùng sự trừu tợng tài nguyên, PRC
dị bộ và RPC cuộc hẹn, truyền thông chọn lọc, mô đun hóa phần cứng và mô đun hóa
ngắt.
Đi tới các tiệm cận ngôn ngữ đồng thời khác ngoài hớng mở rộng đơn giản các ngôn
ngữ tuần tự cũng rất có giá trị. Bàn luận trên đây chỉ ra rằng quản lý QT đồng thời,
đồng bộ cũng nh truyền thông thực ra là những vấn đề trực giao với khía cạnh tính
toán của ngôn ngữ tuần tự. Thực ra cần tìm một ngôn ngữ phối hợp theo phơng thức
đơn giản và hiệu quả để xây dựng chơng trình đồng thời bằng cách kết nối một vài
thực thể truyền thông cơ sở lại và cung cấp ý nghĩa truyền thông và đồng bộ nhau cho
chúng. Các thực thể truyền thông là QT, tài nguyên, hoặc cả hai hoặc là đối tợng trừu
tợng. Với giá thiết CTĐ cho truyền thông và đồng bộ QT, thì các vấn đề mấu chốt chỉ
là thực thể đợc mô hình hóa nh thế nào, các chơng trình đồng thời đợc giải quyết
ra sao và các kênh truyền thông giữa các thực thể sẽ đợc đặt tên lôgic và quản lý nh
thế nào ? Một ngôn ngữ đồng thời mới (chi tiết hơn, hệ lập trình đồng thời) có thể đợc
xây dựng dựa trên những mô hình tính toán và truyền thông. Đoạn dới đây giới thiệu
và so sánh ba hệ thống, đợc thiết kế theo dòng tiếp cận này: Occam, SR và Linda.
Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 78-
Occam tiến hóa từ nhiều ý tởng trong CSP. Nó đợc dùng rộng rãi để lập trình đồng
thời trong các hệ thống Transputer và xử lý tín hiệu số DSP (Digital Signal
Processing). Transputer và DSP là các máy tính đơn chíp với bộ nhớ trong cục bộ và
tuyến truyền thông nhanh. Nó có thể cấu hình để ánh xạ các QT đồng thời tới xử lý
song song hiệu quả với việc truyền thông dữ liệu thờng xuyên giữa các bộ xử lý nhờ
tuyến tốc độ cao. Do các bộ xử lý đơn chíp này có bộ nhớ cục bộ hạn chế nên OCCAM
giả thiết hạt QT nhỏ. Mỗi lệnh sai khiến (gán, vào và ra) đợc coi nh những QT
nguyên thủy. Lệnh đợc nhóm với nhau nhờ lệnh contructors thành lệnh hợp thành
theo một trong ba kiểu thực hiện: thực hiện tuần tự các lệnh (cấu trúc SEQ), thực hiện
song song các lệnh (cấu trúc PAR), thực hiện dị bộ và không định trớc cấu trúc ALT
tơng tự nh lệnh alternative trong CSP. Hai cấu trúc bổ sung, IF và WHILE cần đến
để điều chỉnh dòng tuần tự thực hiện cấu trúc. Cấu trúc có thể cộng tác với các biến

cục bộ và có thể gộp trong cấu trúc khác. Mặc dù lệnh là QT nguyên thủy thực hiện
đợc, cấu trúc là đơn vị QT lập lịch chuẩn. Không có sự chia sẽ biến toàn cục giữa các
cấu trúc khác nhau. Đồng bộ đợc thực hiện bằng cách sử dụng khái niệm cuộc hẹn
của lệnh input/output trong CSP, ngoại trừ tên các kênh truyền thông dùng các tên
kênh toàn cục khai báo tờng minh. Sử dụng cấu trúc để dàn xếp các chơng trình
đồng thời và kênh toàn cục để truyền thông giữa các cấu trúc làm cho trình biên dịch
dễ tạo ra mã xếp lịch các QT tới bộ xử lý.
Trong SR, chơng trình đồng thời là một tập các tài nguyên, khác với cách nhìn QT
của Occam. Tài nguyên đợc trừu tợng nh một môđun gồm khai báo và thân. Khai
báo đặc tả những thực thể nhập đối với các tài nguyên khác và thực thể xuất đối với các
phép toán trên chính tài nguyên này. Thân chứa một phần khởi tạo, một hoặc nhiều QT
và một mã kết thúc. Các QT trong một tài nguyên có thể đồng thời hoặc tơng tác nhau
nhờ biến chia sẻ trong nguốn đó. Các tài nguyên khác nhau tơng tác nhờ các
operations tơng tự nh
thực thể thủ tục trong Ada. Thực thể operations hoặc là QT
hoặc là thủ tục.
Minh họa cho một tài nguyên đợc dẫn ra qua việc thực hiện lệnh CREATE
tên_tài_nguyên trả lại năng lực để truyền thông sau này với các phép toán tài nguyên.
Phép toán tài nguyên đợc dẫn ra lênh CALL đồng bộ hoặc lệnh SEND không đồng bộ
tới tài nguyên khi dùng năng lực tài nguyên. Trong Occam, năng lực là mềm dẻo hơn
so với kênh toàn cục. Chúng đợc tạo ra một cách động và có thể đợc truyền nh một
biến. Thêm vào nữa, năng lực có thể trình bày đa thể hiện của một tài nguyên và đạt
đợc cả khái niệm đặt tên kênh và điều khiển truy nhập. Cuộc hẹn đợc đặc tả bằng
lệnh nhập (in) với điểm vào phép toán có lựa chọn (ana) để hỗ trợ truyền thông chọn
lọc và lựa chọn (by) để lập lịch các yêu cầu sắp giải quyết. SR dùng trừu tợng dữ liệu
và hỗ trợ hầu hết mọi kiểu đồng bộ CTĐ và chia sẻ biến.
Linda khác biệt với Occam hoặc SR. Nó không là một ngôn ngữ lập trình nhng một
mô hình dữ liệu chia xẻ duy nhất có thể đợc tích hợp với bất kỳ ngôn ngữ lập trình
nào để hỗ trợ cộng tác QT trong lập trình song song. QT và dữ liệu chia xẻ trong mô
hình Linda đợc trình bày đồng nhất nh một tập không sắp xếp của các bộ (tuple) mà

mỗi bộ có dạng t = (tag, value), trong đó tag là tên kí hiệu của bộ dữ liệu còn value
là danh sách giá trị có kiểu phù hợp với bộ đó. QT là bộ hoạt động (active tuple) còn
bộ dữ liệu là bộ thụ động (pass tuple). Các bộ thuộc lớp không gian bộ (TS), một vùng
bộ nhớ lôgic địa chỉ hóa đợc nội dung chia xẻ, có thể phân tán một cách vật lý để
trình bày cấu trúc dữ liệu phân tán trong không gian bài toán. Linda cung cấp ba
nguyên thủy cơ sở để truy nhập bộ. Hai nguyên thủy in(s) và out(s) là nhận kết khối từ
TS và gửi không kết khối tới TS, ở đây, s là một mẫu hoặc một anti-tuple có dạng s =
Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 79-
(tag, Actual, formats). in(s) làm phù hợp với mẫu s dựa vào bộ t với thẻ tag và thực tế
Actual. Nếu phù hợp, nghi thức trong s đợc gán bằng các giá trị tơng ứng trong t và
QT gọi đợc tiếp tục. Sau đó, bộ này bị xoá khỏi TS. Trong trờng hợp phù hợp bội (có
nhiều hơn một bộ phù hợp) thì chỉ có duy nhất một bộ đợc chọn một cách tuỳ biến.
Phép toán in bị kết khối theo nghĩa QT gọi bị ngừng lại cho đến khi có đợc sự phù
hợp. Phép toán out đơn giản tính giá trị của biểu thức trong s và đa vào trong TS. Cập
nhật bộ đợc thực hiện này sau khi có sự phù hợp in ngay sau một nguyên thủy out.
Nguyên thủy thứ ba là rd đợc dùng để đánh giá bộ. Nguyên thủy này tơng tự nh in,
ngoại trừ còn phải làm phù hợp với các bộ còn lại trong TS. Các phiên bản in và rd
không kết khối cũng đợc Linda hỗ trợ.
Linda có một nguyên thủy bổ sung eval(s) tạo ra QT. Phép toán eval khởi tạo (fork)
một QT mới nhằm đánh giá tất cả các biểu thức trong s. Các biểu thức này thờng chứa
các thủ tục. eval tơng tự nh out, ngoại trừ việc s đợc đa vào TS trớc khi đánh giá
nó. Khi QT đ
ợc hoàn thành (tức mọi biểu thức đã đợc tính), s cùng các giá trị kết
quả thành một bộ dữ liệu thụ động. Linda là cách trừu tợng nhất để mô hình hóa cộng
tác quá trình. Do chỉ có một số rất ít các phép toán nguyên thủy, Linda có thể đợc gắn
vào ngôn ngữ cơ sở, chẳng hạn C. C-Lind là thi hành của mô hình Linda trong C.
Hình 3.23 mô tả những nét khác nhau cơ sở giữa Occam, SR và Linda theo các phơng
diện là khái niệm hệ thống cơ sở, mô hình dữ liệu căn bản, cách thức đặt tên cho kênh
truyền thông.

Hệ thống Mô hình đối tợng Đặt tên kênh
Occam Ngôn ngữ lập trình
đồng thời
Quá trình Kênh toàn cục tĩnh

SR Ngôn ngữ lập trình
đồng thời
Tài nguyên Năng lực động
Linda Ngôn ngữ lập trình
đồng thời
Cấu trúc dữ liệu
phân tán
Thẻ kết hợp

Hình 3.23 So sánh Occam, SR và Linda
3.8 Lập trình phân tán và lập trình trên mạng
Occam, RS và Linda đợc mô tả nh những ngôn ngữ đồng thời hoặc những mô hình
cho hệ thống chặt chẽ. Chúng không đáp ứng đợc cho hệ thống không chặt chẽ hoặc
là mạng máy tính, nơi những vấn đề về khả năng trong suốt và khả năng tơng tác các
toán tử là cần đợc suy nghĩ. Trong hệ thống lỏng, sự thực hiện các hệ chơng trình
đồng thời cần đợc cung cấp sự truyền thông tin cậy, đối tợng riêng biệt, nhân bản dữ
liệu và một hệ thống hỗn tạp. Hai ngôn ngữ lập trình ORCA và JAVA là ví dụ liên
quan đến lập trình hệ phân tán và mạng.
3.8.1 ORCA

Orca là ngôn ngữ lập trình động thời dựa trên mô hình đối tợng chia sẻ logic cho hệ
thống phân tán lỏng. Nó hỗ trợ việc thực hiện song song của QT trên các máy khác
nhau nhờ truy nhập đồng thời đối tợng dữ liệu chia xẻ. Đối tợng dữ liệu chia xẻ là
các thể hiện của kiểu dữ liệu trừu tợng đợc ngời dùng định nghĩa. Chúng có thể
đợc phân tán vật lý hoặc đợc nhân bản để truy nhập cục bộ hiệu quả và thuận tiện

nhng chúng hoàn toàn trong suốt đối với chơng trình ứng dụng nhờ thi hành của
Orca.
Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 80-
QT Orca mỗi khi đợc khởi tạo, truyền thông xuyên qua các đối tợng chia xẻ khi
dùng các phép toán ngời dùng định nghĩa trên các đối tợng đó. Ưu điểm của việc sử
dụng biến chia xẻ cho TTLQT thì tơng phản với CTĐ là hoàn toàn rành mạch. Truyền
thông liên bộ xử lý là hoàn toàn trong suốt và các thông tin toàn cục có thể đợc chia
xẻ trực tiếp. Viết một chơng trình đồng thời là gần gũi với kiểu lập trình thông
thờng. Thêm nữa, nếu thể hiện cấu trúc dữ liệu phức tạp của đối tợng đợc phân tán
vật lý, việc sử dụng CTĐ tờng minh để truy cập vào từng phần của cấu trúc dữ liệu sẽ
trở nên khó khăn nếu không quá dài dòng.
Khái niệm cốt lõi đợc dùng trong hệ thống Orca là đối tợng chia xẻ lôgic và kiểu dữ
liệu trừu tợng. Khái niệm đối tợng chia xẻ lôgic (hoặc cấu trúc dữ liệu) đã từng biết
trong Linda còn khái niệm kiểu dữ liệu trừu tợng có trong SR. Trong Linda đối tợng
chai xẻ (bao gồm dữ liệu và QT) là các bộ trong không gian bộ. Phơng thức truy nhập
là phù hợp (địa chỉ hóa nội dung) nhng ở mức thấp (nguyên thủy in, out, rd). Mặc dù
về ngữ nghĩa thì khá đơn giản và đẹp đẽ, nhng viết một chơng trình với cấu trúc dữ
liệu phức tạp trong Linda là không trực giác (nhúng trong những ngôn ngữ lập trình).
Dùng kiểu dữ liệu trừu tợng trong Orca thì cho phép sự chặt chẽ kiểm tra kiểu và độ
mềm dẻo của các phép toán trên đối tợng. SR là ngôn ngữ định kiểu mạnh và có tính
trừu tợng kiểu dữ liệu giống nh Orca. Tuy nhiên, do không có khái niệm đối tợng
chia xẻ logic nên SR phải dựa vào một tập hợp lớn nguyên thủy đồng bộ và truyền
thông (cuộc hẹn, CALL, SEND, năng lực và những đồng bộ biến chia xẻ khác). Mặt dù
ngôn ngữ này khá dồi dào cho lập trình đồng thời, nhng đồng bộ và truyền thông QT
lại không trong suốt. Orca đợc xem nh ngôn ngữ thoả hiệp tốt giữa Linda và RS.
QT đồng thời trong Orca đợc kích hoạt bằng cách tạo ra một QT mới trên một máy
hoàn toàn xác định bởi lệnh fork:
fork Tên_QT ( các tham số) { on [ số Bộ XL]}
Tham số đợc truyền từ QT cha xuống QT con có thể là giá trị, đối tợng thờng hoặc

đối tợng chia xẻ. Giá trị và đối tợng thờng là những dữ liệu cục bộ của QT. Đối
tợng chia xẻ là toàn cục. Chúng đợc nhân bản tại mỗi bộ xử lý và cần một giao thức
cập nhật nguyên tử để duy trì nhất quán của các bản sao của đối tợng chia xẻ.
Hai kiểu đồng bộ trên đối tợng đợc Orca cung cấp là loại trừ ràng buộc và cộng tác
có điều kiện. Orca cho rằng tất cả các phép toán đều hoàn toàn cô lập trên đối tợng.
Mỗi đối tợng đợc gắn một khóa để loại trừ ràng buộc. Khoá chỉ có hiệu lực tại mức
đối tợng và đợc giới hạn với đối tợng đơn. Khoá chia xẻ đợc cung cấp để cho phép
cùng một lúc có nhiều phép toán đọc đối tợng. Để cộng tác có điều kiện, Orca sử
dụng lệnh an toàn (Guarded) tơng tự nh trong CSP:
Operation Op(parameters) //operation Tên_toán_tử(các_tham_số)
Guarded condition do statements; //Guarded điều_kiện do các_câu_lệnh;
Guarded condition do statements; // Guarded điều_kiện do các_câu_lệnh;
Lệnh trong toán tử chỉ đợc thực hiện khi điều_kiện trong Guarded là đúng. Nếu
không thì QT đó bị chặn lại. Nếu có hơn một điều kiện đúng, thì chỉ một lệnh điều
kiện đợc chọn động để cung cấp cách thức thực hiện không xác định. Một toán tử đối
tợng trong một chơng trình ứng dụng trên Orca đợc biên dịch thành nguyên thủy
invoke (yêu cầu).
invoke
(object, operation, parameters)
Các nguyên thủy invoke đợc bẫy tới hệ thống thời gian thực hiện Orca (Orca RTS:
Orca Run Time System). RTS kiểm tra xem đối tợng có phải là chỉ đọc. Nếu đúng,
RTS đặt khoá chia xẻ cho bản sao địa phơng, thực hiện QT đọc, sau đó lại mở khóa
Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 81-
đối tợng. Nếu không, RTS khởi tạo một TĐ quảng bá đến tất cả các vị trí của đối
tợng chia xẻ, bao gồm chính nó, để cập nhật đối tợng và kết khối QT. Khi nhận TĐ
quảng bá để ghi lên đối tợng, RTS đặt một khoá ghi lên đối tợng, thực hiện toán tử
ghi và mở khoá đối tợng. Nếu thông điệp quảng bá hình thành cục bộ, nó sẽ kết khối
QT.
RTS giả thiết truyền thông là tin cậy. Nó hỗ trợ tầng quảng bá tin cậy ngay dới hệ

thống thời gian chạy. Tầng quảng bá tin cậy đó có thể thi hành nhiều giao thức quảng
bá theo những đòi hỏi ngữ nghĩa khác nhau. Giao thức quảng bá kỳ vọng đảm bảo rằng
mọi phía đối tợng nhận đợc toàn bộ các TĐ quảng bá và tất cả các TĐ đợc phân
phát theo đúng một thứ tự (tức là quảng bá đợc xem nh là một nguyên tử). Thi hành
giao thức quảng bá nguyên tử đợc trình bày ở chơng sau, tuy vậy ở đây giới thiệu
khái quát cách tiếp cận đơn giản trong Orca để thực hiện quảng bá nguyên tử. Khi
quảng bá đợc RTS yêu cầu, nhân của RTS gửi một TĐ điểm-điểm đến lời gọi nhân
đặc biệt sequencer. Sequencer gắn một số hiệu dãy tới yêu cầu và quảng bá TĐ bao
gồm các số hiệu dãy tới mọi phía đối tợng nhân bản. Chi số dãy đợc mỗi nhân dùng
để xác định thứ tự phân phát TĐ, kiểm tra TĐ bội, và yêu cầu sequencer chuyển lại
một TĐ nếu nh TĐ đó bị mất.
Đối tợng là đơn vị dữ liệu nền tảng trong Orca. Đối tợng đợc trình bày bằng một
cấu trúc dữ liệu chẳng hạn nh danh sách, cây hoặc đồ thị, thờng đợc dùng bằng con
trỏ trong ngôn ngữ lập trình quy ớc. Con trỏ (pointer) là một địa chỉ máy. Truyền địa
chỉ máy là kém ngữ nghĩa và có thể dẫn đến xung đột an ninh CTĐ ở HPT. Cơ chế cho
phép thi hành và truyền cấu trúc dữ liệu phức tạp có sẵn để tạo ra mô hình đối tợng
chia xẻ hữu dụng. Orca giải quyết vấn đề này bằng cách thay thế con trỏ bởi tên. Với
mỗi đối t
ợng đợc RTS quản lý, mảng logic các dữ liệu có cấu trúc sẽ đợc duy trì
cho đối tợng. Ví dụ, một cây nhị phân đơn giản t với 3 nút {A, B, C} và các liên kết
trái và phải, đợc trình bày nh sau:
t[1] = 6,A,8
t[6] = 0,B,0
t[8] = 0,C,0
Mỗi nút trong cấu trúc dữ liệu này đợc tạo động bởi nguyên thủy RTS addnode(t), trả
lại tên n cho nút đó. Tên n đợc dùng nh số hiệu của cấu trúc mảng để đặt tên cho nút
cũng nh để liên kết tới các nút khác. Tơng tự cũng có một nguyên thuỷ xóa nút là
deletenote(t,n). Chỉ dẫn tới nút đã bị xóa sẽ gặp lỗi thực hiện. Mảng đối tợng mang
tính lôgic: định vị và giải phóng lu giữ chúng đợc RTS quản lý động. Dùng nút đặt
tên để thi hành cấu trúc dữ liệu đạt đợc hiệu lực tới con trỏ mà không cần địa chỉ

máy. Truyền cấu trúc dữ liệu phức tạp trở thành chấp nhận đợc với việc trả thêm tổng
phí trong hệ thống thời gian chạy.
3.8.2 Java

Mục tiêu nguyên thủy của Orca là hỗ trợ lập trình đồng thời trong hệ phân tán. Vấn đề
thi hành chính yếu của nó là tính toán phân tán và tạo độ trong suốt truyền thông tới
các QT cộng tác. Java đợc đa ra theo một phối cảnh khác. Nó là ngôn ngữ lập trình
và môi trờng lập trình, nhằm đạt đợc khả năng cộng tác trong phát triển phần mềm
mạng. Chúng ta có thể hình dung rằng ứng dụng mạng chứa một tập hợp các môdun
phần mềm đợc phân tán một cách vật lý trên một hệ mạng diện rộng hỗn tạp. Mỗi
môdun phần mềm có thể đợc thi hành và duy trì bởi những cá thể khác nhau trên
những nút mạng. Để thực hiện một ứng dụng mạng thì phải tập hợp một số modun trên
Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 82-
tới một nút mạng đơn. Khả năng liên thao tác để mở một ứng dụng mạng cần sự hỗ trợ
của ba hệ thông cơ sở:
1. Các giao diện chuẩn định nghĩa tốt để tích hợp các môđun phần mềm,
2. Năng lực thực hiện môđun phần mềm trên máy tính bất kỳ,
3. Hạ tầng cho cộng tác và vận chuyển modun phần mềm
Để thuận tiện tích hợp phần mềm, Java thông qua mô hình hớng đối tợng, một kiểu
lập trình đã đợc dùng rộng rãi khi phát triển những phần mềm lớn. Ngôn ngữ Java
tơng tự ngôn ngữ hớng đối tợng C++. Với sự chấp nhận với một ít kiểu dữ liệu, nh
số và logic, mọi thực thể phần mềm đợc mô hình hóa nh một đối tợng Java. Một
đối tợng là một tóm lợc của dữ liệu và các thủ tục (hoặc phơng pháp) liên quan trên
đối tợng đó. Đối tợng đợc tạo ra bằng việc thuyết minh lớp qua ví dụ. Lớp là một
mẫu xác định các biến cũng nh những phơng pháp chung cho tất cả các đối tợng
cùng kiểu (lớp). Lớp này thờng chứa đựng lớp khác (thừa kế). Chúng là cơ sở để xây
dựng các khối trong chơng trình Java. Các file lớp thờng dùng phân loại và sắp xếp
trong các th viện lớp đợc gọi là gói. các gói có thể đợc nạp cục bộ hay từ xa để
khởi tạo đối tợng. Phát triển phần mềm mạng trở thành dễ điều khiển hơn do các th

viện lớp đợc chia xẻ.
Tiếp cận đặt ra với Java là cho phép chạy mọi modul phần mềm tại mọi nơi theo ngữ
nghĩa của khái niệm máy ảo. Hệ thống Java với trình biên dịch và trình phiên dịch.
Đầu tiên, chơng trình Java đợc biên dịch thành file lớp chứa các mã trung gian đợc
gọi là applet (tiểu dụng). Tiểu dụng là chơng trình độc lập máy và có thể đợc thông
dịch trên mọi máy tính có trình thông dịch Java. Thông dịch trên mã trung gian là kém
hiệu quả hơn so với chạy mã máy biên dịch. Tuy nhiên,
u điểm lớn của cách thức này
là mã trung gian đợc chuyển đi nh những TĐ tới bất cứ môi trờng nào và chạy trực
tiếp không cần dịch lại. Một ứng dụng mạng có thể mang bất cứ một file mã byte nào
trên đờng truyền để thực hiện. Do các bản sao của file mã không cần lu cục bộ, bài
toán duy trì tính nhất quán cập nhật phiên bản trong phát triển phần mềm cộng tác
đợc loại bỏ.
Java đợc ràng buộc cẩn thận nhằm đảm bảo tính độc lập máy. Một vài đặc trng của
ngôn ngữ thông dụng là nguyên nhân làm cho các vấn đề liên thao tác hoặc an toàn
đợc loại bỏ khỏi ngôn ngữ. Ví dụ, Java không cung cấp con trỏ, kiểu cấu trúc, chuyển
đổi kiểu ngầm định hoặc thừa kế bội. Khái niệm về file đầu (.h) trong C cũng bị loại
trừ khỏi Java. Hơn nữa, mọi phơng thức và biến trong file lớp Java là đợc chhỉ dẫn
bằng tên và đợc giải quyết trớc khi thực hiện. Việc làm chậm giải pháp tên đòi hỏi
sự hỗ trợ của dịch vụ tên. Nó cung cấp sự trong suốt truy nhập, trong suốt định vị và
an toàn bổ sung.
Hạ tầng để chuyển vận tiểu dụng Java đợc sáng tỏ tốt nhất nhờ việc tích hợp Java
cùng với hệ thống duyệt WWW. Theo nhiều khía cạnh, triết lý của Java cũng rất giống
với duyệt Web là sử dụng giao thức giao vận nh giao thức chuyển siêu văn bản HTTP
để chuyển các modun HTML dọc theo các nút mạng hỗn tạp. HTML là ngôn ngữ đánh
dấu độc lập máy để mô tả dữ liệu siêu văn bản. Giống nh file lớp trong Java, file
HTML là đối tợng có thể chứa các file HTML khác và có thể định vị và liên kết khi
dùng bộ định vị tài nguyên tổng thể toàn mạng URL. Tiểu dụng Java có thể hợp nhất
trong một file HTML và đợc thông dịch bởi trình thông dịch Java đã đợc dựng nội
trong trình duyệt. Theo cách đó, trình duyệt vừa có thể hiển thị nội dung dữ liệu siêu

văn bản tĩnh vừa có thể chạy linh hoạt tiểu dụng Java. Trình ứng dụng là vô kể. Với
trình duyệt đa luồng và Java đa luồng, thì trình duyệt có thể hiển thị đồng thời văn bản
cũng nh hình ảnh động và trở thành tơng tác giữa khách và phục vụ của ứng dụng.
Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 83-
Một cách hiệu quả, trang Web đợc trình bày dới một file HTML trở thành lối vào
của tiểu dụng Java. Khái niệm thực hiện thông dịch trực tuyến trong Java không phải là
mới. Ví dụ, Postscript và dữ liệu đồ họa GIF cũng đợc thông dịch trong hệ thống trình
duyệt. Tuy nhiên, Java là ngôn ngữ đa năng đã đợc suy nghĩ cẩn thận cho lập trình
mạng.
Lu ý cuối cùng là vấn đề an toàn khi thiết kế Java. An toàn là vấn đề khó tính trong
lập trình mạng hệ thống mở. Thêm nữa, để định nghĩa ngôn ngữ chặt chẽ nhằm đề
phòng sự lạm dụng của ngôn ngữ, Java là ngôn ngữ định kiểu mạnh giống nh Orca.
Mọi đối tợng trong Java phải đợc định kiểu tờng minh. Trình biên dịch làm hiệu
lực những kiểm tra kiểu tĩnh. Do mỗi máy thấy đợc tiểu dụng từ bên ngoài theo mã
trung gian, cần phải xác minh mã trung gian không phải bị làm giả hay biến dạng.
Kiểu và những thông tin điều khiển khác đợc tích hợp với mọi tiểu dụng. Trớc khi
thực hiện một tiểu dụng, mã của nó buộc phải đợc kiểm tra chặt chẽ bộ kiểm tra Java
(Java Virifier) xem sự vi phạm về truyền tham số, chuyển đổi kiểu bất hợp pháp, khả
năng tràn (vợt trần) và hụt (xuống quá đáy) stack, vi phạm truy nhập và sinh mã trung
gian giả bởi trình biên dịch đáng ngờ. Việc kiểm tra lỗi thời gian chạy ở mức tối thiểu
nhất nhằm có đợc sự thực hiện hiệu quả.
Một vần đề về an toàn khác đáng chú ý tới lập trình trên mạng là sự nhái lại đối tợng.
Khi tiểu dụng thực hiện có thể gọi một đối tợng khác. File lớp đã đợc tải cho đối
tợng có thể là tiểu dụng đích thực với cùng tên và xuất hiện nhng có thể không phải
từ địa hạt mong muốn. Ví dụ, đối tợng lớp đối với hệ thống file và vào ra I/O nên đến
là địa phơng. Mỗi lớp file lớp đợc tơng ứng một địa hạt bảo vệ. Địa hạt đợc phân
ra ít nhất là ba mức: máy tính cục bộ, mạng cục bộ và mạng toàn cục mà mức máy tính
cục bộ có mức bảo vệ cao nhất. Khi tải một file lớp, các lớp với độ bảo vệ cao hơn
đợc u tiên hơn các lớp độ bảo vệ thấp hơn. Hơn nữa, lớp trong một dịa hạt chỉ truy

nhập đợc các phơng pháp trong cùng địa hạt. Các phơng pháp thuộc các lớp trong
một địa hạt khác đợc truy nhập chỉ khi chúng đợc khai báo là công cộng. Quy tắc tải
các lớp tuân theo Bộ tải lớp Java (the Java Class Loader) do ngời lập trình Java định
nghĩa.
Câu hỏi và bài tập
3.1. Khái niệm QT và luồng, ý nghĩa của khái niệm luồng. Đặc điểm chính trong
mô hình Client/Server trong hệ phân tán.
3.2. Vai trò của dịch vụ thời gian trong hệ phân tán. Giải pháp đồng hồ vật lý và
đồng hồ lôgic trong hệ phân tán.
3.3. Đồng bộ hóa sử dụng biến chung
3.4. Đồng bộ hóa chuyển thông điệp
Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 84-
chơng IV. Truyền thông và cộng tác liên quá trình
Các QT cộng tác trong hệ thống máy tính tơng tác lẫn nhau theo mô hình TTLQT
nhằm phối hợp thực hiện. TTLQT và cộng tác QT phân tán là chủ đề chính của chơng
này. Chơng ba đã nhấn mạnh tầm quan trọng của mô hình clien/server đối với truyền
thông và quan hệ gắn kết giữa TTLQT và đồng bộ. TTLQT đóng vai trò đáng kể hơn
trong hệ phân tán do chỉ có phơng pháp trao đổi dữ liệu QT là CTĐ
. Vì vậy mọi mô
hình truyền thông liên QT mức cao đều đợc xây dựng trên nền CTĐ. Mọi cộng tác
QT phân tán đều dựa vào truyền thông liên QT CTĐ.
TTLQT phụ thuộc vào năng lực định vị thực thể truyền thông. Đây chính là vai trò của
dịch vụ tên
trong hệ phân tán. Chơng này trình bày ba mô hình truyền thông CTĐ cơ
sở và mô hình dịch vụ tên. Tiếp theo là một minh hoạ cộng tác QT phân tán sử dụng
hai bài toán kinh điển của TTCTĐ: loại trừ ràng buộc phân tán và chọn thủ lĩnh.
TTLQT có thể đợc xem xét tại các mức trừu tợng khác nhau. Bảng 4.1 cho năm mức
từ mạng tới hệ giao vận và tới các QT ứng dụng. Theo phơng diện HĐH phân tán, đầu
tiên quan tâm tới ba mức trên chuyển vận TĐ trong các QT phân tán. Chúng là CTĐ,

mô hình truyền thông định hớng dịch vụ mức cao sử dụng truyền thông hỏi/đáp và
truyền thông giao dịch dựa trên mô hình hỏi/đáp và CTĐ.
Bảng 4.1. cho thấy CTĐ là mức thấp nhất của TT giữa các QT TT. TT hỏi/đáp dựa trên
khái niệm client/server. Khi đợc thi hành nh lời gọi thủ tục trong chơng trình phân
tán, mô hình TT đợc quy tới lời gọi thủ tục từ xa (RPC). Một cách tự nhiên, hỏi/đáp
hoặc RPC dựa trên phơng tiện CTĐ cơ sở.
Giao dịch là một dãy các TT hỏi/đáp đòi hỏi TT nguyên tử. Giao dịch biểu diễn đơn vị
cơ sở của TT đối với các ứng dụng mức cao, chẳng hạn hệ CSDL. Thực hiện đồng thời
các giao dịch cần đợc đồng bộ để duy trì tính nhất quán của hệ thống. Ngoài ra, khái
niệm bộ nhớ chia xẻ lôgic hoặc đối tợng dữ liệu là phơng pháp TT khác biệt đáng kể
so với ba mô hình CTĐ. Trong hệ thống chỉ với bộ nhớ vật lý phân tán, bộ nhớ chia xẻ
đợc mô phỏng bởi CTĐ. Lợi thế của bộ nhớ chia xẻ lôgic là dễ dàng lập trình, do TT
là trong suốt. Giao dịch và bộ nhớ chia xẻ phân tán đợc trình bày trong các chơng 6
và 7.
Bảng 4.1. Các mức khác nhau của TT
Giao dịch
Hỏi / Đáp (RPC)
TTLQT
CTĐ
HĐH mạng Kết nối giao vận
Mạng truyền thông Chuyển gói
4.1 Truyền thông CTĐ
TĐ là một tập các đối tợng dữ liệu, mà cấu trúc và sự giải thich chúng đợc xác định
bởi các QT ngang hàng với nó. Đối tợng dữ liệu trong TĐ thờng đợc định kiểu
nhằm dễ dàng chuyển đổi đối tợng dữ liệu trong hệ thống hỗn tạp. TĐ bao gồm đầu
TĐ (chứa thông tin điều khiển phụ thuộc hệ thống) và thân TĐ với kích thớc cố định
hoặc biến thiên. Trong hệ thống CTĐ, QT TT chuyển các TĐ đợc đóng gói tới dịch
vụ giao vận hệ thống cung cấp kết nối truyền TĐ trong mạng. Giao diện tới dịch vụ
giao vận là dịch vụ nguyên thủy hiển, chẳng hạn gửi và nhận, hoặc biến thể nào đó của
cả hai. Ngữ nghĩa của các dịch vụ nguyên thủy TT này cần xác định hoàn toàn. Các bài

Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 85-
toán chính đợc đa ra trong các đoạn sau đây bao gồm TT là trực tiếp hay gián tiếp,
kết khối hay không kết khối, tin cậy hay không tin cậy, dùng vùng đệm hay không.
4.1.1. Dịch vụ TT nguyên thủy cơ sở

Hai dịch vụ TT nguyên thủy cơ sở dới đây là ví dụ để gửi và nhận TĐ. Sẽ là hiệu quả
đối với QT ứng dụng khi chỉ rõ thực thể TT và TĐ đợc truyền:
send (đích, TĐ)
receive (nguồn, TĐ)
trong đó nguồn hoặc đích = (tên QT, liên kết, hộp th hoặc cổng).
Một câu hỏi nảy sinh trực tiếp từ dịch vụ nguyên thủy là làm thế nào để địa chỉ hóa
thực thể TT, nguồn hoặc đích? Dới đây bàn luận về bốn lựa chọn trên: tên QT, kết
nối, hộp th, cổng.
Đầu tiên, giả sử địa chỉ hóa thực thể TT bằng tên QT
(tức là định danh QT toàn cục).
Khi thi hành thực sự, định danh QT toàn cục có thể đợc tạo duy nhất qua kết hợp địa
chỉ máy chủ mạng với số hiệu QT cục bộ đợc sinh. Sơ đồ này ngầm định rằng chỉ có
một đờng TT lôgic trực tiếp tồn tại giữa cặp hai QT gửi và nhận nh hình 4.1.a đã chỉ
ra. Điều này tơng tự TT input/output dùng trong CSP mà đoạn 3.5.3 đã chỉ ra hạn chế
của cách tiếp cận này. Sơ đồ địa chỉ đợc chỉ dẫn là địa chỉ đối xứng do các QT
gửi/nhận tơng ứng biết rõ nhau trong dịch vụ TT nguyên thủy. Trong một số trờng
hợp, thuận lợi hơn cho QT nhận là nhận đợc TĐ từ nguồn cha biết. Trong trờng
hợp nh thế, địa chỉ nguồn của DV nguyên thủy nhận là một biến vào mà đợc cho giá
trị định danh QT gửi TĐ đó (nếu có một QT nhận). Địa chỉ gửi và nhận là bất đối xứng
do chỉ QT gửi cần định vị ngời nhận. Hình 4.1.b. chỉ ra các trờng hợp tổng quát hơn
của DV nguyên thuỷ nhận.
Sơ đồ trên giả thiết tồn tại đờng TT trực tiếp giữa cặp hai QT. Thực tế, đờng TT là
trong suốt hoàn toàn vì vậy đã không chú ý tới kết nối khi giao vận TĐ. Về quan niệm
thì đơn giản nhng để hợp lý chỉ có một đờng TT định hớng kép giữa mỗi cặp hai

QT TT. Để cho phép đờng truyền dữ liệu phức giữa các QT và TT trực tiếp, bắt buộc
định danh đợc mỗi đờng đi trong dịch vụ TT nguyên thuỷ. Đòi hỏi này đa đến khái
niệm kết nối
hay liên kết, tơng tự với khái niệm chu trình ảo trong mạng TT. TĐ có
thể đợc gửi theo các chu trình ảo khác nhau. Nh vậy, điểm TT phức trong một QT
cần phải đinh danh bằng việc sử dụng các kết nối khác nhau, mỗi kết nối đó ánh xạ tới
một đờng TT thực sự. Giống nh chu trình ảo, kết nối đợc tạo và loại bỏ theo yêu
cầu. Chúng đợc nhân hệ thống quản lý cục bộ và là những kênh TT không định
hớng. TĐ đợc gửi qua một kết nối đợc hớng vào một đờng TT mạng và đợc
phân phối tới các máy chủ ở xa. Máy chủ từ xa ánh xạ TĐ tới kết nối đầu vào trong QT
nhận. Hình 4.1.c chỉ ra tính hợp lý của việc duy trì hai kết nối giữa các QT khi dùng
hai số hiệu kết nối khác nhau. QT đọc cần chú ý kết nối là tơng tự với tên điểm vào
thủ tục trong cuộc hẹn (đoạn 3.5.3) với lý do là chúng đều cung cấp điểm TT phức
trong một QT. Tuy nhiên, giao vận dữ liệu bằng truyền tham số trong cuộc hẹn là định
hớng kép.
Dùng tên QT và số hiệu kết nối để định vị các điểm TT cung cấp cơ chế TT trực tiếp

giữa các QT ngang hàng. Tuy nhiên, đôi khi TT gián tiếp
cũng đợc a chuộng. QT
gửi không quan tâm tới định danh riêng biệt của QT nhận cho đến khi có một QT nhận
đợc TĐ. Tơng tự, QT nhận chỉ quan tâm đến chính TĐ mà không cần biết QT gửi.
Ví dụ, client phức có thể đòi hỏi dịch vụ từ một trong nhiều dịch vụ phức (định danh
của khách có thể đợc chứa trong chính TĐ). Kịch bản TT này là cồng kềnh khi dùng
TT trực tiếp thi hành. Đây là tình huống chung trong cuộc sống hàng ngày, và đợc
Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 86-
giải quyết bằng hộp th chung. CTĐ dùng hộp th chung là sơ đồ TT gián tiếp cung
cấp cả TT đa điểm và đa đờng một cách hợp lý. Kịch bản này đợc minh hoạ trong
hình 4.2.


Về quan niệm, hộp th là cấu trúc dữ liệu toàn cục chia xẻ của QT sản xuất (gửi) và
QT khách hàng (nhận). Dùng hộp th đòi hỏi sự đồng bộ chính xác dọc theo mạng mà
đây là một bài toán khó. Do hộp th là dùng cho TT, có thể gắn với nó một cấu trúc
chuyển vận yếu và thi hành chúng bằng cách dùng vùng đệm và liên kết TT. Cổng là
một ví dụ tốt cho hộp th. Cổng là một khái niệm trừu tợng về một dòng xếp hàng có
kích thớc cố định hoạt động theo FIFO đợc nhân duy trì. TĐ có thể gắn vào đuôi và
loại bỏ từ dòng đợi bởi các thao tác gửi và nhận xuyên qua một đờng TT. Nh vậy,
cổng tơng tự nh danh sách ngoại trừ chúng là định hớng kép và có vùng đệm. Các
QT TT qua cổng là gián tiếp. Cổng đợc tạo bởi QT ngời dùng nhờ lời gọi hệ thống
đặc biệt và có thể đợc phù hợp với QT chủ và đủ năng lực. Chúng đợc chỉ dẫn bằng
số hiệu cổng, mà không thể bị nhầm lẫn với địa chỉ cổng giao vận trong giao vận gói
(địa chỉ cổng giao vận là cổng mạng và trong suốt với QT ngời dùng). Khi thi hành,
cổng QT đợc ánh xạ tới cổng giao vận và ngợc lại. Cổng hoặc hộp th đợc hình
dung nh là phục vụ TT và đồng bộ, đã đợc biện luận trong đoạn 3.6. Thuật ngữ cổng
và hộp th thờng đợc tráo đổi (thay thế nhau) trong một vài tài liệu. Tơng tự nh
socket và cổng trong HĐH UNIX. Socket là giao diện mức cao sử dụng khái niệm
cổng. Cổng có chủ nhân là QT riêng biệt. Cổng cung cấp TT nhiều-một (n-1). Hộp th
là đối tợng chia xẻ và cho phép truyền thông nhiều-nhiều (n-n).
4.1.2. Đồng bộ hóa TĐ và vùng đệm

TT CTĐ phụ thuộc một số điểm đồng bộ. Khi gửi TĐ tới đích xa, TĐ đó đợc chuyển
tới nhân hệ thống gửi để thực hiện chuyển giao TĐ cho mạng TT. Cuối cùng, TĐ đi tới
đợc nhân hệ thống đích (ở xa) thực hiện việc trao trả TĐ cho QT đích. Đồng bộ hóa
L
iên kế
t
(c)
định danh
QT đối
x

ứn
g

(
a
)

Đ
ịnh danh
QT bất đối
xứng
(b)
H
ình 4.1. Dịch vụ TT nguyên thuỷ gửi / nhận trực tiếp
TT đa đờn
g

(b)
H
ộp
th
H
ình 4.2. Dịch vụ TT nguyên thuỷ gửi / nhận gián tiếp
TT đa điểm
(a)
H
ộp
th
H
ộp

th
Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 87-
truyền TĐ xảy xa giữa QT ngời dùng và nhân hệ thống, nhân và nhân, và QT nguồn
và QT đích. Hình 4.3. chỉ rõ các giai đọan khác nhau của CTĐ trong hệ thống.








Dịch vụ nguyên thủy gửi và nhận đợc coi là kết khối nếu QT gọi cần kết khối để phân
phối hay nhận TĐ tơng ứng. Hầu hết hệ thống cho phép chọn dịch vụ nguyên thủy
gửi/nhận kết khối hoặc không kết khối. Hầu hết ngầm định gửi không kết khối và nhận
kết khối. Lý do là để thuận tiện, giả thiết rằng phân phối TĐ là đáng tin cậy và QT gửi
có thể tiếp tục công việc một cách hiệu quả sau khi TĐ đã đợc dàn xếp và nhân bản
tới nhân gửi. Mặt khác, QT nhận cần chờ cho đến khi TĐ xuất hiện để thực hiện công
việc của mình. Tuy nhiên, không phải mọi trờng đều nh vậy. Chẳng hạn, QT gửi có
thể mong muốn đồng bộ với QT nhận hoặc QT nhận mong muốn TĐ từ QT gửi phức
và không thể không đủ chỗ cho thao tác nhận riêng biệt. Tại phía nhận, kết khối là
hoàn toàn rõ ràng; nó cần đợc kết khối theo sự xuất hiện của TĐ. Về phía QT gửi, rắc
rối hơn đôi chút. QT gửi nên chờ việc nhận đợc TĐ của nhân nguồn, nhân đích, hoặc
QT đích hoặc thậm chí hoàn thiện một số thao tác của QT nhận? Danh sách dới đây
chỉ dẫn năm chức năng khác nhau của dịch vụ nguyên thủy gửi theo sơ đồ ở hình 4.3:
1. Gửi không kết khối, 1+8: QT gửi đợc loại bỏ sau khi TĐ đã đợc dàn xếp và sao tới
nhân nguồn.
2. Gửi kết khối, 1+2+7+8: QT gửi đợc loại bỏ sau khi TĐ đã đợc truyền tới mạng
3. Gửi kết khối tin cậy, 1+2+3+6+7+8: QT gửi bị loại bỏ sau khi TĐ đã đợc nhân đích

nhận xong.
4. Gửi kết khối tờng minh, 1+2+3+4+5+6+7+8: QT gửi bị loại bỏ sau khi TĐ đã đợc
QT nhận xong
5. Hỏi và đáp, 1-4, dịch vụ, 5-8: QT gửi bị loại bỏ sau khi TĐ đã đợc xử lý bởi QT
nhận và lời đáp trở lại QT gửi.
Phơng án đầu tiên là gửi dị bộ
còn những phơng án khác đều là gửi đồng bộ. Phơng
án cuối cùng chính là TT clien/server. Trong gửi dị bộ, QT gửi bị kết khối nếu nhân tại
nó cha sẵn sàng tiếp nhận TĐ, có thể do thiếu không gian vùng đệm. Đây là đòi hỏi
tối thiểu nhất vì rất nguy hiểm nếu QT gửi tiếp tục công việc (chẳng hạn, tạo ra một
TĐ mới) trớc khi nhân gửi nắm điều khiển TĐ. Khi giả thiết là gửi/nhận dị bộ, ta
mong muốn rằng dịch vụ nguyên thủy cần cho một mã quay về cho biết kết quả thành
công hay thất bại của thao tác để qua phân tích mã quay về để hoặc gửi TĐ tiếp theo
hoặc xử lý lỗi.
Trong sơ đồ hình 4.3, ngầm định tồn tại vùng đệm trong nhân gửi, nhân nhận và mạng
TT. Vùng đệm trong nhân hệ thống cho phép TĐ đợc gửi đến thậm chí khi TĐ trớc
nó cha đợc phân phối. Do QT gửi và nhận chạy dị bộ, chúng tạo ra và xử lý các TĐ
theo các mức độ (tốc độ) khác nhau. Do có vùng đệm, sự không đồng nhất này trở nên
êm ả. Thêm nữa, khả năng QT gửi bị kết khối đợc rút gọn và thông lợng truyền tổng
QT gửi nhân mạng nhân QT nhận
nguồn đích

1 2 TĐ 3 4


8 7 ACK 6 5

Hình 4.3. Các giai đoạn đồng bộ TĐ
Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 88-

thể TĐ đợc tăng lên. Vùng đệm đợc dùng để điều khiển lu lợng trong mạng TT.
Trong HĐH, thông thờng vùng đệm đợc chia xẻ bởi TT gửi và nhận đa thanh phần.
Quản lý vùng đệm hiệu quả trở thành một bài toán quan trọng. Quản lý vùng đệm
không chính quy có thể trở thành nguyên nhân bế tắc TT.
Về lôgic, có thể kết hợp vùng đệm trong nhân gửi, nhân nhận, và mạng thành một
vùng đệm lớn. QT gửi tạo ra TĐ và chèn chúng vào vùng đệm còn QT nhận xóa khỏi
vùng đệm và sử dụng chúng. Nếu vùng đệm là không giới hạn, QT gửi dị bộ là không
kết khối. Một trờng hợp đặc biệt khác là mọi thành phần là vắng vùng đệm (zero-
buffer). Trong trờng hợp này, QT gửi và QT nhận bắt buộc phải đồng bộ (trách nhiệm
đồng bộ hóa dành cho ngời viết chơng trình các QT này) để đủ năng lực truyền TĐ
(bất cứ TĐ nào xuất hiện thì trớc hết phải đợi TĐ trớc đó). Điều này tơng tự nh
khái niệm cuộc hẹn và là một kiểu gửi/nhận kết khối tờng minh.
4.1.3. API ống dẫn và Socket

Nh đã nói ở trên, tồn tại lợng lớn và đa dạng các dịch vụ nguyên thủy TT CTĐ với
các khái niệm và giả thiết khác nhau. Khi TT đợc thực hiện nhờ một tập hoàn toàn
xác định các giao diện chơng trình ứng dụng chuẩn (API) sẽ tạo thuận lợi cho ngời
dùng và hiệu quả cho hệ thống. TT QT ngời dùng sử dụng một API độc lập với môi
trờng TT hạ tầng. ống dẫn (pipe) và socket là hai API TTLQT đợc sử dụng rộng rãi
trong cả hai môi trờng UNIX và Windows.
Nh trình bày trong đoạn 3.5.3 thì chia xẻ kênh TT về mặt lôgic là tơng đơng với
chia xẻ biến. Cả hai đều là chia xẻ đối tợng. Trong thực tế, kênh TT đợc thi hành bởi
chia xẻ lu trữ, chẳng hạn không gian nhân, bộ nhớ, hoặc file. Trong hệ đơn xử lý hỗ
trợ QT TT có thể mô phỏng kênh TT nhờ chia xẻ bộ nhớ trong không gian nhân. QT
ngời dùng thấy đợc kênh TT theo trình diễn bởi API. Chi tiết nội tại và thi hành,
chẳng hạn nh dung tích của kênh và đồng bộ truy nhập bộ nhớ, đợc nhân quản lý và
trong suốt với ngời dùng. ống dẫn đợc thi hành bằng một vùng đệm dòng byte FIFO
kích thớc cố định đợc nhân duy trì. Đợc hai QT TT sử dụng, phục vụ ống dẫn nh
một kết nối TT không định hớng mà một QT có thể ghi dữ liệu vào đuôi của ống dẫn
và một QT khác có thể đọc từ đầu của nó. ống dẫn đợc khởi tạo bởi lời gọi hệ thống

pipe cho hai đặc tả ống dẫn (tơng tự nh đặc tả file), một để đọc và một để ghi. Kịch
bản điển hình để ống dẫn giữa hai QT là vì một QT phải khởi tạo ống dẫn, fork QT
khác, gắn QT cha vào đầu đọc ống dẫn và gắn đầu ghi ống dẫn tới QT con. Nh vậy
một dòng dữ liệu một chiều trở thành chuyển dịch giữa QT cha và con khi sử dụng các
thao tác ghi và đọc bình thờng. Đặc tả ống dẫn đợc các QT TT chia xẻ. Điều này
ngụ ý rằng ống dẫn đợc sử dụng chỉ với các QT có quan hệ với nhau (tức là, QT đợc
khởi tạo thông qua thao tác fork). Trong điều kiện thông thờng, QT đọc và ghi đợc
giả thiết là chạy đồng thời đối với mọi ống dẫn đợc tạo. ống dẫn chỉ tồn tại trong
khoảng thời gian cả hai QT đọc và ghi hoạt động. Thao tác ghi ống dẫn không kèm
thao tác đọc tơng ứng là vô nghĩa do ống dẫn ngừng tồn tại khi QT ghi kết thúc.
Dữ liệu trong ống dẫn mặc nhiên là dòng byte liên tục. Tiếp cận này đợc chọn nhằm
khớp với giả thiết chung cấu trúc file hớng byte của UNIX. Đôi khi mong muốn rằng
là dòng dữ liệu cấu trúc, chẳng hạn TĐ độ dài biến đổi trong kênh và khái niệm ống
dẫn có thể đợc mở rộng để bao gói cả TĐ. Kiểu kênh TT này đợc hiểu là dòng xếp
hàng TĐ. Dòng xếp hàng TĐ đợc thi hành trong không gian bộ nhớ của nhân. Nhiều
hệ thống cung cấp dòng xếp hàng TĐ nh là một IPC API.
Với những QT không quan hệ (fork), cần định danh ống dẫn vì đặc tả ống dẫn không
thể chia xẻ. Một giải pháp là thay cấu trúc dữ liệu ống dẫn nhân bằng một file FIFO
đặc biệt. File FIFO đặc biệt đợc định danh duy nhất bằng tên đờng tơng tự nh file
Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 89-
thông thờng. ống dẫn với tên đờng đợc gọi là ống dẫn có tên. Với một tên duy
nhất, ống dẫn có tên có thể đợc chia xẻ giữa các QT rời rạc xuyên qua các máy tính
khác nhau với một hệ thống file chung. Do ống dẫn có tên là file thì các QT TT không
cần đồng thời tồn tại. QT ghi có thể ghi xong dữ liệu tới một ống dẫn có tên và kết
thúc trớc khi một thao tác đọc file xuất hiện. ống dẫn có tên dùng ngữ nghĩa của một
file thông thờng. Chúng đợc khởi tạo bởi câu lệnh open trớc khi tạo ra truy nhập tới
file FIFO.
ống dẫn và ống dẫn có tên thi hành bài toán IPC giữa nhà sản xuất và khách hàng.
Trong bài toán nhà sản xuất và khách hàng, QT sản xuất (gửi) và QT khách (nhận)

tơng tác nhau thông qua một vùng đệm chung để hoàn thành TTLQT. Vấn đề đồng
bộ là loại trừ ràng buộc đối với truy nhập vùng đệm và cộng tác có điều kiện khi vùng
đệm là đầy hoặc rỗng. Truy nhập vùng đệm đợc chú ý nh khoảng tới hạn mà cần
đợc giám sát. Điều kiện tràn hoặc rỗng của vùng đệm là tơng tự kết khối của gửi
(sản xuất) và nhận (khách hàng) với một vùng đệm cố định. Thi hành ống dẫn và ống
dẫn có tên đơn thuần bảo đảm tính nguyên tử của vùng đệm nhân chia xẻ và file FIFO
đặc biệt và việc kết khối thao tác ghi và đọc khi vùng lu trữ chia xẻ là đầy hoặc rỗng.
Các byte đợc ghi từ QT phức tới ống dẫn đợc đảm bảo không khi nào là chen lẫn.
Cẩn thận đặc biệt khi ghi dữ liệu riêng tới ống dẫn trớc khi nó trở nên đầy. Hoặc toàn
bộ các byte của TĐ đợc ghi vào ống dẫn hoặc không.
Dùng ống dẫn định danh gặp một hạn chế từ tên miền đơn trong hệ thống file chung.
Để đạt đợc TT QT liên miền mà không có cấu trúc dữ liệu hoặc file có tên duy nhất
và đợc chia xẻ, cần có một IPC API chạy trên đỉnh của dịch vụ giao vận. Hai API TT
liên QT liên miền đợc dùng rộng rãi nhất là socket Berkeley và Giao diện mức giao
vận hệ thống 5 (TLI). Socket Berkerley là ví dụ minh họa API TT.
Việc đặt tên kênh TT qua một miền hỗn tạp là không khả thi. Tuy nhiên, kênh TT có
thể đợc hình dung nh
một cặp gồm hai đầu mút TT. Socket là mút TT của kết nối TT
đợc quản lý bởi dịch vụ giao vận. Tơng tự việc sử dụng ống dẫn cho phép file I/O có
ngữ nghĩa đối với việc đọc từ và ghi tới ống dẫn, mô hình I/O mạng socket dựa trên I/O
File quy ớc. Trừu tợng hóa I/O mạng nh I/O file làm tăng tính trong suốt truy nhập
trong hệ thống. Socket đợc tạo ra nhờ lời gọi hệ thống socket cho một đặc tả socket
phục vụ các thao tác I/O mạng tiếp sau, bao gồm cả đọc/ghi hớng file và gửi/nhận đặc
trng TT. Lời gọi hệ thống socket cũng đợc sử dụng trong nhiều giao thức mạng nh
TCP, UDP và IP. TCP là giao thức giao vận dòng thực hiện hớng kết nối và UDP là
giao thức giao vận sơ đồ không kết nối. Chúng là hai giao thức giao vận chính. IP đợc
dùng để truyền dòng gói dữ liệu và là giao thức tầng mạng không kết nối trong bộ giao
thức Internet. Đặc tả socket là nút TT logic (LCE: Logic Communication EndPoint)
cục bộ đối với một QT; nó bắt buộc phải phù hợp với nút TT vật lý (PCE: Physic CE)
để truyền dữ liệu. Nút TT vật lý đợc đặc tả bởi địa chỉ máy chủ mạng và cặp cổng

giao vận. Địa chỉ máy chủ mạng là toàn cục, trong khi số hiệu của giao vận đợc sinh
cục bộ bởi dịch vụ giao vận. Việc phù hợp một LCE với một PCE đợc thi hành bằng
lời gọi hệ thống bind. Hình 4.4. chỉ ra một ví dụ TT ngang hàng không kết nối dùng
các lời gọi hệ thống socket, bind và sendto/recvfrom. Do TT là không kết nối nên mỗi
lời gọi sendto/recvfrom bắt buộc chứa đặc tả socket cục bộ và PCE từ xa.
Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 90-

Trong TT socket không kết nối mỗi QT ngang hàng bắt buộc phải biết PCE từ xa của
nó. Có thể đợc loại bỏ việc gọi tên hiển của PCE từ xa trong lời gọi gửi/nhận nếu lời
gọi socket kết nối ràng buộc một LCE cục bộ với PCE từ xa của nó trớc khi bắt đầu
truyền dữ liệu. Sau thao tác kết nối, truyền dữ liệu có thể đơn giản là send/recv hoặc
write/read không có đặc tả của PCE từ xa. Lời gọi socket kết nối thông thờng đợc
dành riêng cho TT Client/Server hớng kết nối. Đối với TT Client/Server, dịch vụ cần
có đợc PCE rõ ràng. Một phục vụ sẽ cần TT với khách phức có PCE cha biết. Khách
đa ra một lời gọi connect tới phục vụ để hẹn (cuộc hẹn), với yêu cầu khách nhờ một
accept và thiết lập có kết quả một kết nối tới khách đó. Về khái niệm, điều này tơng
đơng với thi hành cuộc hẹn Ada trong TT liên miền. Hình 4.5. minh họa TT socket


QT ngang hàng



socket socket


bind bind




sendto/recvfrom

nút TT lôgic
(socket, LCE)
mút truyền thông
vật lý (PCE)
nút TT lôgic
(socket, LCE)
nút truyền thông
vật lý (PCE)
QT ngang hàn
g

read
H
ình 4.5. Truyền thông socket Client/Server hớng kết nối
P
hục vụ
write
bind
socket
accept
connect
write
read
socket
listen
K
hách

Cuộc hẹn
Yêu cầu
Trả lời
Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 91-
Client/Server hớng kết nối. Trong thi hành UNIX, lời gọi socket listen đợc dùng để
chỉ ra phục vụ sẽ chấp nhận một kết nối và đặc tả độ dài dòng xếp hàng (bao nhiêu lời
hỏi xảy ra có thể xếp hàng). Lời gọi accept hẹn với lời gọi connect đợc tích lũy lại
trong dòng xếp hàng listen. Một lời gọi accept sẽ kết khối nếu cha có một connect
giải quyết. Nếu có, nó xoá bỏ yêu cầu connect từ dòng đợi và đa ra một đặc tả socket
mới đợc dùng để TT với khách đã đợc kết nối. Đặc tả socket cũ còn lại trong dịch vụ
cho các yêu cầu khách khác. Trong thi hành phục vụ đồng thời, QT (luồng) con là
đợc phân nhánh đối với mỗi kết nối sử dụng đặc tả socket mới.
4.1.4. Socket an toàn

Socket đã trở thành API CTĐ phổ biến nhất trong cộng đồng Internet. Do việc sử dụng
rộng rãi các ứng dụng Windows mà nhóm chuẩn WinSock, bao gồm hơn 30 hãng công
nghiệp (kể cả MicroSoft) đã phát triển một socket Windows chuẩn (WinSock).
WinSock bắt nguồn từ socket Berkeley. Nó gồm một tập công phu các API và đợc mở
rộng nhằm cung cấp tính trong suốt giao vận hoàn hảo khi sử dụng giao diện cung cấp
dịch vụ (SPI: Service Provider Interface) trừu tợng làm dễ dàng tơng thích plug-in
cho hầu hết các giao thức giao vận. Phiên bản gần nhất cũng chứa tầng socket an toàn
(SSL: Secure Socket Layer).
Đòi hỏi an toàn TT trên Internet đã thúc đẩy IETF (Internet Engineering Task Force)
phát triển SSL. Mục tiêu SSL là cung cấp:
- Bảo mật trong TT socket khi dùng mã đối xứng để mã hoá dữ liệu
- Toàn vẹn dữ liệu trong socket khi kiểm tra tính toàn vẹn TĐ
- Xác thực phục vụ và khách khi dùng mã hóa khóa công khai bất đối xứng.
Điểm chủ yếu của SSL chứa trong hai mức giao thức: một giao thức Handshake và một
giao thức Record Layer. Giao thức Handshake tơng ứng thiết lập các khóa ghi (khóa

phiên TT để bí mật dữ liệu) và MAC (Message Authentication Check để toàn vẹn dữ
liệu) bí mật và xác nhận tính xác thực của phục vụ và khách. Giao thức Record Layer
thích hợp để phân đoạn, nén/giãn nén và mã hóa/giải mã các bản ghi của TĐ. Kết quả
cuối cùng của giao thức Handshake là một cấu trúc dữ liệu chia xẻ (đợc gọi là
mastersecret) chỉ khách và phục vụ biết đợc, mà có thể đợc biến đổi thành write key
và một MAC secret để TT an toàn bằng Record Layer.
Hình 4.6. trình bày một kịch bản đơn giản của giao thức Handshake SSL. Khách muốn
liên lạc với phục vụ bằng cách gửi TĐ ClientHello tới phục vụ đó. Thành phần chính
của TĐ chứa một số ngẫu nhiên (randomC) và một tập thuật toán mật mã
(CipherSuites). Số ngẫu nhiên đợc dùng để tính toán mastersecret quyết định.
CipherSuites là một danh sách lựa chọn mã hóa đợc phục vụ đàm phán và chọn. Phục
vụ trả lại cho khách một TĐ phục vụHello chứa một số ngẫu nhiên randomS, một thuật
toán mã hóa CipherSuite đợc chọn và một định danh phiên cho kết nối.
Tại thời điểm này, phục vụ có thể xác nhận định danh của nó bằng việc gửi một giấy
chứng nhận tới khách. Giấy chứng nhận đợc cho bằng giấy xác thực (CA) nhóm ba.
Giấy chứng nhận đợc QT cấp giấy ký khi dùng khóa bí mật của nó và nh vậy không
thể dễ giả mạo. SSL dùng xác nhận X.509. Phục vụ có thể yêu cầu giấy chứng nhận
của khách. Mỗi một chứng nhận mang thành phần khóa công khai trong cặp gồm khóa
công khai và khóa bí mật của đối tợng đợc ghi nhận (khách hoặc phục vụ). Khách
cần khóa công khai của phục vụ để biến đổi thông tin bí mật tới phục vụ. Mã hóa khóa
công khai đợc trình bày trong chơng sau. Phơng pháp cặp khóa kép (công khai và
bí mật) đợc coi là một thuật toán mã hóa. Với nó, một TĐ đợc mã hóa bởi một khóa
công khai có thể đợc giải mã bằng khóa bí mật tơng ứng và ngợc lại. Khóa công
Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 92-
khai đợc ghi nhận bằng thông tin công khai còn khóa bí mật chỉ có các đối tợng
biết. Để đơn giản hóa trong trình bày giao thức Handshake SSL ở hình 4.6 đã bỏ qua
việc xác nhận tính hợp lệ của các giấy chứng nhận.
Không cần giấy chứng nhận, một phục vụ nặc danh có thể gửi khoá công khai của nó
trong TĐ phục vụKeyExchange tới Khách. Khóa công khai này không cần phải là khóa

đã đợc ghi nhận. Phục vụ sinh tạm thời khóa công khai để sử dụng theo từng lần yêu
cầu của khách. Khách đáp lại bằng một TĐ ClientKeyExchange mang một pre-
mastersecret mã hóa theo khóa công khai tạm thời của phục vụ. Chỉ có phục vụ với
khóa bí mật tơng ứng mới giải mã đợc pre-mastersecret. Lúc đó, cả khách và phục
vụ chia xẻ pre-mastersecret và hai số ngẫu nhiên. Cả hai QT độc lập áp dụng hàm băm
một chiều tới thông tin chia xẻ để chuyển pre-mastersecret quyết định chứa khóa ghi
(write key) và MAC bí mật. Các khóa và MAC bí mật này đợc dùng để liên kết với bộ
mật mã vừa đợc đàm phán. Chúng đợc ChangeCipherSpec tạo hiệu quả nhằm thay
thế bộ mật mã cũ bằng một bộ mới. Các TĐ finished chấm dứt việc bắt tay. Chúng
cũng đợc dùng để xác minh việc trao đổi khóa và xác thực có thành công hay không.
Việc kiểm tra thông qua xác nhận TĐ finished chứa kết quả băm của mastersecret
đợc móc nối với mọi TĐ bắt tay.
TT socket an toàn đợc bắt đầu sau khi TĐ finished đã đợc trao đổi và kiểm tra. Mọi
TĐ socket tiếp sau đợc mã hóa theo thuật toán mã hóa và khóa ghi bí mật đã đợc
thiết lập cho đến khi phiên đợc thơng lợng lại. Mọi TĐ chứa một bộ kiểm tra xác
thực TĐ là kết quả băm TĐ với MAC bí mật. Không có MAC bí mật, sản xuất MAC
cho TĐ tạm thời trở nên bất hợp lý. TĐ socket đợc xử lý bởi Record Layer trở thành
bí mật và bền vững. Khái niệm giao thức socket an toàn vẫn đang đợc tiếp tục tiến
hóa và cải tiến.
4.1.5. Truyền thông nhóm và phân phát bội (multicast)

Mô hình TT CTĐ đợc trình bày trên đây dùng cho TT điểm-điểm. Mục này mô tả nhu
cầu và thi hành TT nhóm đa điểm. Cần lu ý là nhóm là bản chất để phát triển phần
mềm cộng tác trong hệ phân tán hay tự trị. Quản trị nhóm các QT hoặc đối tợng cần
có cơ chế TT phân phát bội để gửi TĐ tới các thành viên trong nhóm. Tồn tại hai kịch
F
inishe
d

S

ERVER
S
erverKeyExchange
CLIEN
T

F
inishe
d

server
p
ublic ke
y
hashed messa
g
e and secre
t
ChangeCipherSpec
randomS
,
Ci
p
herSuite
,
sesion i
d
ClientHello
randomC
,

Ci
p
herSuites
S
erverHello
S
ocket Message
H
ình 4.6. Giao thức Handshake
S
ocket Message
ClientKeyExchange
encr
yp
ted
p
re-mastersecre
t
ChangeCipherSpec
encr
yp
ted
p
re-mastersecre
t
Hà Quang Thụy Bài giảng Hệ điều hành phân tán (Phần 1)
- 93-
bản ứng dụng TT phân phát bội. Đầu tiên là một khách mong muốn cố níu kéo một
dịch vụ từ bất kỳ phục vụ nào miễn là có khả năng đáp ứng dịch vụ. Thứ hai là một
khách đòi hỏi dịch vụ từ tất cả các thành viên trong nhóm phục vụ.

Trong trờng hợp đầu tiên, không cần phải tất cả phục vụ đáp ứng lại mà chỉ cần một
phục vụ. Phân phát bội đợc thực hiện trên cơ sở cố gắng nhất (best-effort) và đợc lặp
lại nếu cần thiết. Hệ thống chỉ cần đảm bảo phân phát bội TĐ tới các QT không bị mắc
lỗi có thể đạt đợc. Cách nh vậy gọi là phân phát bội cố gắng nhất.
Trong trờng hợp sau, cần đảm bảo là mọi phục vụ đều nhận đợc yêu cầu và tính bền
vững trong các phục vụ có thể đợc duy trì. TĐ phân phát bội cần đợc đáp ứng cho tất
cả các phục vụ nhận hoặc không một phục vụ nào (tức là toàn bộ hoặc không cái nào);
cách này thờng đợc gọi là phân phát bội tin cậy. Đòi hỏi toàn bộ hoặc không cái nào
có nghĩa là TĐ phân phát bội nhận đợc cần đợc đa vào vùng đệm trớc khi phân
phối cho QT ứng dụng. Chú ý trong phân phát bội tin cậy đồng bộ ảo, TĐ có thể đợc
phân phối trớc khi nhận đợc (Đồng bộ ảo đợc thảo luận ở phần sau).
Ihi hành phân phát bội phức tạp hơn vì gặp nhiều thiếu thốn do cha có phân phát bội
nguyên tử. Lỗi của QT nhận hoặc kết nối truyền thông có thể đợc QT khởi tạo TĐ
phát hiện khi sử dụng cơ chế quá hạn hoặc xác nhận. QT khởi tạo sau đó có thể thoát
ra hoặc tiếp tục phân phát bội bằng cách loại bỏ thành viên lỗi trong nhóm. Lỗi của
khởi tạo một chiều (haft-way) trong phân phát bội chỉ mới đợc giải quyết một cách
giả định. Rất khó khăn để xác định khởi tạo là có lỗi hay không. Để xác định thoát từ
lỗi hoặc toàn bộ các bộ phận của phân phát bội là hoàn thiện, một trong các QT nhận
bắt buộc đợc chọn nh một khởi tạo mới. Kỹ thuật thông thờng còn đòi hỏi các QT
nhận phải đa vào bộ đệm phân phát bội cho tới khi TĐ đã trở nên an toàn cho phân
phối. Lỗi đợc kiểm soát nhờ hệ thống ảo. Phân phát bội bỏ qua đồng bộ ảo là không
thực sự tin cậy; chúng chỉ là cố-gắng-nhất
.
Quan hệ trực tiếp với bài toán phân phối tin cậy là bài toán về thứ tự phân phối các TĐ.
Khi TĐ phức là phân phát bội tới cùng một nhóm, chúng xuất hiện tại các thành viên
khác nhau trong nhóm theo các thứ tự khác nhau (do tính biến động của độ trễ trong
mạng).
Hình 4.7 cho một số ví dụ TT nhóm yêu cầu thứ tự TĐ: G và s tơng ứng biểu diễn
nhóm và nguồn TĐ. QT s có thể đứng ngoài nhóm hoặc là một thành viên của nhóm.
Giả thiết rằng TĐ phân phát bội cần đợc nhận và phân phối ngay lập lức theo thứ tự

chúng đợc gửi. Nếu giả thiết này là đúng thì công việc lập trình nhóm đơn giản hơn
rất nhiều. Tuy nhiên điều đáng tiếc là giả thiết này không có thực và thiếu ý nghĩa vì
trong hệ phân tán không có đợc thời gian toàn cục và giao vận TĐ trong mạng gặp độ
trễ TT đáng kể và không ổn định. Về ngữ nghĩa, phân phát bội có thể đợc xác định
sao cho TĐ đợc nhận theo thứ tự khác nhau tại các nút khác nhau có thể đợc sắp xếp
lại và phân phối tới QT ứng dụng theo quy tắc chặt chẽ nhỏ hơn. Thứ tự phân phát bội
dới đây đợc xếp theo độ tăng của tính chặt chẽ:
+ Thứ tự FIFO: TĐ phân phát bội từ nguồn đơn đợc phân phối theo thứ tự chúng đợc
gửi.
+ Thứ tự nhân quả: TĐ quan hệ nhân quả từ nguồn phức đợc phân phối theo thứ tự
nhân quả của chúng.
+ Thứ tự tổng: Mọi TĐ phân phát bội tới một nhóm đợc phân phối tới mọi thành viên
của nhóm theo cùng thứ tự. Một thứ tự tin cậy và tổng đợc gọi là thứ tự nguyên tử.
Tại mỗi nút, chơng trình điều khiển TT chịu trách nhiệm nhận TĐ và sắp xếp lại theo
thứ tự tới QT ứng dụng. Điều này tơng tự nh tính chất mô hình bất biến của hệ thống

×