Tải bản đầy đủ (.doc) (15 trang)

Tiểu luận môn học hệ tin học phân tán

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 (198.17 KB, 15 trang )

Tiểu luận môn học "Hệ tin học phân tán"
PHẦN I: LÝ THUYẾT
ĐỒNG BỘ TRONG HỆ PHÂN TÁN
I. Đặt vấn đề
Một vấn đề cần quan tâm trong hệ phân tán là các tiến trình phối hợp với nhau
và đồng bộ chúng như thế nào.
Trong hệ tập trung ta sử dụng các đoạn găng, loại trừ tương hỗ và các vấn đề
đồng bộ hệ thống khác thường được giải quyết bằng các phương pháp như
semaphore và monitor.
Trong hệ phân tán các kỹ thuật như semaphore và monitor không hoạt động vì
nó hoàn toàn dựa vào việc có bộ nhớ chia xẻ và vì vậy ta cần các kỹ thuật khác.
Ví dụ:
Hai tiến trình tương tác sử dụng một semaphore thì cả hai phải có thể truy cập
được semaphore. Trong hệ tập trung, semaphore được lưu trữ trong kernel (trong hệ
điều hành đây là phần cốt lõi của chương trình cư trú trong bộ nhớ và thực hiện hầu
hết các nhiệm vụ điều hành chính như quản lý thao tác vào ra đĩa và quản lý bộ
nhớ) và truy cập bằng cách các tiến trình sử dụng các lệnh gọi hệ thống.
Nếu hai event xuất hiện trong hệ phân tán, thì vấn đề xác định event nào xuất hiện
trước là khó khăn.
Các vấn đề đặt ra là :
- Làm thế nào để xác định trật tự quan hệ của các event
- Một tiến trình có xảy trước một tiến trình khác hay không?
Việc xác định sự kiện có xảy ra hay không trong các máy khác nhau là khó
khăn
II. Đồng bộ đồng hồ
* Trong hệ tập trung:
Trong hệ tập trung việc gắn bó thời gian là dễ dàng, Ta có thể đọc được thời
gian hiện hành. Nếu ta đọc thời gian hệ thống lần thứ hai thì giá trị đồng hồ của lần
đọc thứ nhất chắc chắn sẽ nhỏ hơn lần đọc thứ hai.
Một tiến trình đọc thời gian bằng lệnh gọi hệ thống tới kernel. Nếu tiến trình A
đọc thời gian sau đó tiến trình B đọc thì giá trị thời gian B đọc là lớn hơn (có thể


bằng) với giá trị của A.
* Trong các hệ phân tán
Trong hệ phân tán do có nhiều bộ xử lý và mỗi bộ xử lý có đồng hồ riêng. Nếu
ta đọc đồng hồ trên máy A đầu tiên và sau đó đọc đồng hồ trên máy B ta có thể có
giá trị lần đọc thứ hai nhỏ hơn lần đọc thứ nhất. Điều này là do không có đồng hồ
chung.
Ví dụ: Ta soạn thảo file trên máy B và dịch trên máy A. Đồng hồ của máy A
nhanh hơn máy B. Tại thời gian thực là 10:00 ta tạo một file f.c. máy B ghi thời
gian tạo file tại 111. Hai phút sau ta dịch file f.c và tạo f.o. Máy A ghi thời gian tạo
file f.o là 115. Tại 10:03, ta thực hiện thay đổi trên file f.c. Máy B ghi nhận thời
Phạm Văn Tuấn Trang 1
Tiểu luận môn học "Hệ tin học phân tán"
gian cập nhật file là 113. Một phút sau ta dịch lại file f.c. Lúc này máy A sẽ không
dịch f.c vì f.o có nhãn thời gian lớn hơn f.c.
Hiện tượng này xảy ra là do việc không có thời gian toàn cục và các đồng hồ
khác nhau chạy với tốc độ khác nhau.
Có hai hướng đồng bộ đồng hồ: Một là đồng bộ các đồng hồ thực trong hệ
thống. Trong nhiều ứng dụng phân tán, không cần thiết phải sử dụng đồng hồ vật lý.
Ta chỉ cần biết trật tự của các event, vì vậy đơn giản ta chỉ sử dụng đồng hồ logic.
Lamport nhận ra ba điểm quan trọng về vấn đề này trong hệ phân tán:
- Nếu hai tiến trình không tương tác với nhau thì việc đồng bộ đồng hồ là
không cần thiết.
- Trật tự xuất hiện của các event là vấn đề then chốt hơn là thời gian thực.
- Sự chính xác tuyệt đối thì không quan trọng bằng sự gắn bó( đồng hồ logic
đối với đồng hồ vật lý)
Như vậy cần thiết phải xác định hai event có phải là quan hệ nhân quả hay song
song hay không.
- Nếu hai event là nhân quả thì một event phải có trước một event khác.
- Nếu hai event là song song thì nó có thể xuất hiện ở bất kỳ trật tự nào.
Đối với những thuật toán quan tâm đến sự gắn bó bên trong của các đồng hồ

(chứ không quan tâm đến việc đồng hồ có đúng với thời gian thực hay không) thì ta
nói là các đồng hồ logic.
Đối với những thuật toán mà các đồng hồ không chỉ phải giống nhau mà còn
không được lệch với thời gian thực, ta nói là đồng hồ vật lý.
III. Quan hệ happens-before (quan hệ có trước)
Ký hiệu: a→ b
- Nếu a và b là hai event trong cùng một tiến trình và a xuất hiện trước b thì
a→ b
- Nếu a là một thông điệp gửi bởi một tiến trình và b là thông điệp nhận bởi
một tiến trình khác thì a→ b, bất chấp quan hệ giữa các đồng hồ.
- Nếu a→ b và b→ c thì a→ c
- Nếu hai event a và b xảy ra ở hai tiến trình riêng biệt và không trao đổi
thông điệp thì ta không thể nói a→ b hay b→ a. Các tiến trình này được gọi là song
song (a||b)
Quan hệ happens-before là trật tự từng phần:
Trong hệ phân tán ta không thể nói hay là không cần thiết phải nói trong hai
event event nào xảy ra trước.
Phạm Văn Tuấn Trang 2
Tiểu luận môn học "Hệ tin học phân tán"

Hình 1. Quan hệ có trước của các event
IV. Thuật toán đồng bộ đồng hồ logic Lamport
Mục đích để ấn định các timestamp logic cho các event.
Yêu cầu:
- Nếu event A có trước event B thì timestamp của A nhỏ hơn timestamp của B.
- Nếu A gửi thông điệp và B nhận thông điệp tương ứng thì timestamp của A
nhỏ hơn timestamp của B.
Thuật toán: Giả sử timestamp hiện tại trên bộ xử lý P
i
là C

i
. Khi một event mới
xuất hiện cục bộ tại P
i
, ta đặt C
i
thành C
i
+ 1. Khi P
i
gửi một thông điệp tới P
j
, P
i
cần
phải sao timestamp hiện thời của nó vào thông điệp (T
m
=C
i
). Khi P
j
nhận được
thông điệp này, P
j
có thể đọc timestamp và hiệu chỉnh cho phù hợp. Nếu timestamp
của thông điệp lớn hơn thời gian cục bộ của P
j
thì P
j
cần phải tăng đồng hồ của nó.

Nếu timestamp của thông điệp nhỏ hơn thời gian cục bộ của P
j
thì P
j
sử dụng chính
giá trị đồng hồ của nó. Nghĩa là: C
j
<= max{C
j
+1, T
m
+1}
Cần chú ý rằng các bộ xử lý khác nhau có thể có timestamp giống nhau với các
event. Thuật toán này tạo cho các event các timestamp trật tự từng phần. Đối với
một số ứng dụng trong hệ phân tán, trật tự từng phần có thể gây ra sự mơ hồ. Ví dụ
một hệ thống xử lý giao dịch có thể quyết định trật tự của các giao dịch đang xử lý
dựa trên các timestamp của chúng. Tất cả các bộ xử lý nên xử lý các giao dịch theo
cùng một trật tự. Nếu hai giao dịch có cùng timestamp thì trật tự thực hiện của
chúng có thể không gắn bó. Để tránh vấn đề này ta có thể sử dụng các timestamp
trật tự toàn phần.
Khi ta đã có các timestamp trật tự từng phần thì việc tạo ra các timestamp trật tự
toàn phần là dễ dàng. Ta chỉ cần thêm ID của bộ xử lý vào các timestamp trật tự
từng phần. Bằng cách này sẽ không có hai event có cùng timestamp, và thỏa yêu
cầu ban đầu. nghĩa là nếu event A có trước event B thì timestamp của A nhỏ hơn
timestamp của B.
Timestamp trật tự toàn phần của Lamport được sử dụng rộng rãi trong nhiều
ứng dụng phân tán. Tuy nhiên có cũng có nhược điểm. Nếu A có trước B thì ta biết
rằng timestamp của A nhỏ hơn của B. Nhưng khi timestamp của A nhỏ hơn của B
thì ta không biết được A có trước B hay không. Tuy nhiên ta biết một cách chắc
Phạm Văn Tuấn Trang 3

Tiểu luận môn học "Hệ tin học phân tán"
chắn rằng B không có trước A, nhung không bao giờ biết được A có trước B hay
không. Một số thông tin định thời, về bản chất là thông tin song song bị mất trong
suốt tiến trình.
V. Đồng bộ tiến trình
Đồng bộ các tiến trình là một tập hợp các kỹ thuật sử dụng để phối hợp việc
thực hiện các tiến trình. Ví dụ, một tiến trình có thể chỉ chạy tới một thời điểm nào
đó, tại đó nó sẽ dừng và chờ tiến trình khác hoàn thành . Một tài nguyên chung (như
thiết bị hay việc cấp phát bộ nhớ) có thể yêu cầu truy nhập duy nhất và các tiến
trình phải được phối hợp với nhau để bảo đảm việc truy cập là hợp lệ và duy nhất.
Trong các hệ tập trung, thường tuân theo truy cập loại trừ đối với mã chia xẻ. Loại
trừ tương hỗ được thực hiện thông qua cơ chế thử nghiệm và đặt then cài trong phần
cứng và semaphores, thông điệp và các biến điều kiện trong phần mềm. Trong phần
này ta sẽ xét đến vần đề loại trừ tương hỗ trong các hệ phân tán.
5.1. Loại trừ tương hỗ phân tán
Loại trừ tương hỗ bảo đảm rằng nhiều tiến trình chia xẻ các tài nguyên và
không chia xẻ cùng một tài nguyên tại cùng một thời điểm
Truy cập song song đến một tài nguyên chia xẻ bằng các yêu cầu của người sử
dụng không có sự phối hợp của server được tuần tự để bảo đảm tính toàn vẹn của
tài nguyên chia xẻ
Loại trừ tương hỗ trong hệ phân tán:
- Hệ thống bao gồm nhiều tiến trình thường sử dụng các vùng găng
- Khi một tiến rình phải đọc hay cập nhật các cấu trúc chia xẻ bất kỳ nó phải:
- Vào một đoạn găng
- Thực hiện các tác vụ của nó
- Rời khỏi đoạn găng
Ta sử dụng các cấu trúc đặc biệt để tuần tự truy cập vào vùng găng (semaphore,
monitor )
Vấn đề loại trừ tương hỗ trong hệ phân tán rất phức tạp do không có bộ nhớ
chia xẻ, không có đồng hồ vật lý chung và không dự đoán được các trễ truyền

thông. Đa số các kỹ thuật mà ta đã biết không hỗ trợ trong hệ phân tán do không có
ý niệm bộ nhớ chia xẻ. Ta phải cần các kỹ thuật mới để đạt được loại trừ tương hỗ.
5.2. Thuật toán tập trung
Thuật toán tập trung mô phỏng hệ thống một bộ xử lý. Một tiến trình trong hệ
phân tán được chọn là coordinator. Khi một tiến trình muốn vào một đoạn găng, nó
sẽ gửi một thông điệp yêu cầu (request message) (nhận biết đoạn găng nếu có nhiều
hơn một đoạn găng) đến coordinator. Coordinator duy trì hàng đợi các yêu cầu truy
cập đoạn găng.
Phạm Văn Tuấn Trang 4
Tiểu luận môn học "Hệ tin học phân tán"
Nếu không có tiến trình nào đang ở trong đoạn găng, coordinator sẽ gửi trả về
một thông điệp chấp nhận (grant message) và đánh dấu tiến trình khi sử dụng đoạn
găng. Tuy nhiên, nếu một tiến trình khác đã yêu cầu đoạn găng trước đó, thì server
sẽ không trả lời và tiến trình yêu cầu găng bị chặn.
Khi tiến trình thực hiện xong với đoạn găng của nó, nó sẽ gửi thông điệp thoát
ra (release message) đến coordinator. Coordinator sau đó sẽ gửi một thông điệp
chấp nhận đến tiến trình tiếp theo trong hàng đợi của nó.
Hình 2. Thuật toán tập trung
Đặc tính:
- Bảo đảm loại trừ tương hỗ
- Thuật toán hợp lý (trật tự FIFO)
- Số thông điệp yêu cầu nhỏ: 3 thông điệp yêu cầu, chấp nhận, giải phóng
- Phụ thuộc hoàn toàn vào coordinator. Nếu coordinator bị sự cố thì toàn bộ hệ
thống ngừng hoạt động.
- Thuật toán này dễ sử dụng và thay đổi.
Thuật toán này hợp lý ở điểm tất cả các yêu cầu được xử lý theo trật tự. Đáng
tiếc, một tiến trình không thể phân biệt được giữa đang bị chặn (không nhận được
chấp nhận vì một tiến trình khác đang ở trong đoạn găng) và không đáp ứng vì
coordinator đã ngừng.
Hơn nữa một server tập trung có thể bị hiện tượng cổ chai trong các hệ thống

lớn. coordinator có thể quá tải và các đường truyền thông gần như có thể bị tắc
nghẽn
5.3. Thuật toán Lamport
Giả thiết: thông điệp truyền theo trật tự FIFO
- P
i
gửi thông điệp yêu cầu (t
i
,i) (request message) đến các tiến rình khác và cả
chính nó.
- Khi P
j
nhận một yêu cầu từ P
i
, nó gửi thông điệp trả lời (reply message) tới P
i
và đặt yêu cầu vào hàng đợi
- Thông điệp từ tiến trình gửi được nhận tại tất cả các trạm theo trật tự đã gửi.
Phạm Văn Tuấn Trang 5
Tiểu luận môn học "Hệ tin học phân tán"
- Các thông điệp không bị mất
Một tiến trình P
i
thực hiện đoạn găng chỉ khi:
- P
i
nhận được thông điệp trả lời có nhãn thời gian lớn hơn t
i
từ các tiến trình
khác

- Yêu cầu của chính nó ở đầu hàng đợi
Tiến trình thoát khỏi đoạn găng:
- Khi thực hiện xong, tiến trình xóa yêu cầu của nó ra khởi hàng đợi và gửi
thông điệp thoát ra (release message) đến tất cả các tiến trình.
- Lúc nhận được thông điệp release từ P
i
, các tiến trình xóa yêu cầu của P
i
ra
khỏi hàng đợi.
(a) cả hai tiến trình 0 và 2 yêu cầu vào đoạn găng
(b) tiến trình 0 vào đoạn găng vì nó có yêu cầu đầu tiên
(c) tiến trình 0 rời đoạn găng, tiến trình 2 vào đoạn găng.
Hình 3. Thuật toán Lamport
Chứng minh sự đúng đắn của thuật toán:
Giả sử Pi và P
j
đang thực hiện CS tại cùng một thời điểm. Điều này có nghĩa là
P
i
và P
j
cùng có yêu cầu tại đầu hàng đợi. Giả sử rằng yêu cầu của P
i
có timestamp
nhỏ hơn của P
j
. Rõ ràng là yêu cầu của S
i
phải có trong hàng đợi của P

j
, khi S
j
đang
vào đoạn găng. Điều này đưa đến mâu thuẫn với yêu cầu của chính P
j
lại ở đầu hàng
đợi khi có một yêu cầu có timestamp nhỏ hơn hiện diện. Như vậy P
i
và P
j
không thể
cùng vào đoạn găng tại một thời điểm.
5.4. Thuật toán Ricart & Agrawala
Ricart & Agrawala đưa ra thuật toán loại trừ tương hỗ phân tán vào năm 1981.
Thuật toán yêu cầu như sau:
- Trật tự toàn bộ các event trong hệ thống (ví dụ thuật toán Lamport hay các
thuật toán khác)
- Các thông điệp là đáng tin cậy (mỗi thông điệp là ACK)
Khi một tiến trình muốn vào đoạn găng, nó:
1. Tạo một thông điệp chứa (nhận dạng tiến trình (máy, số tiến trình), tên của
đoạn găng và thời gian hiện thời).
2. Gửi một thông điệp yêu cầu tới tất cả các tiến trình khác trong nhóm.
Phạm Văn Tuấn Trang 6
Tiểu luận môn học "Hệ tin học phân tán"
3. Đợi tới khi tất cả các tiến trình khác trong nhóm có chấp nhận.
4. Vào đoạn găng.
Khi một tiến trình nhận được thông điệp yêu cầu, nó có thể ở một trong ba trạng
thái sau:
Trường hợp 1: Bên nhận không muốn vào đoạn găng, gửi OK cho bên gửi

Trường hợp 2: Bên nhận đang ở trong đoạn găng; không trả lời và đưa yêu cầu
vào hàng đợi yêu cầu cục bộ.
Trường hợp 3: Bên nhận muốn vào đoạn găng và đã gửi yêu cầu. Trong trường
hợp này, bên nhận so sánh nhãn thời gian (timestamp) trong thông điệp nhận được
với nhãn mà nó đã gửi ra . Nhãn sớm hơn sẽ chiếm được. Nếu bên nhận không
chiếm được nó sẽ gửi OK đến bên gửi. Nếu bên nhận có nhãn thời gian sớm hơn, nó
sẽ chiếm được và không trả lời. Thay vào đó, nó sẽ thêm yêu cầu vào hàng đợi của
nó.
Khi một tiến trình đã hoạt động với đoạn găng của nó. nó gửi OK đến các tiến
trình khác trong hàng đợi của nó và xóa tiến trình ra khỏi hàng đợi.
Một ví dụ giải quyết tranh chấp (hình vẽ). Ở đây có hai tiến trình 0 và 2 yêu cầu
cùng truy cập một tài nguyên (đoạn găng). Tiến rình 0 gửi yêu cầu của nó với nhãn
thời gian 8 và tiến trình 2 gửi yêu cầu với nhãn thời gian 12.
(a). Vì tiến trình 1 không muốn vào đoạn găng, ngay lập tức nó gửi chấp nhận
cho cả hai tiến trình 0 và 2. Tiến trình 0 muốn vào đoạn găng. Nó thấy rằng nhãn
thời gian của tiến trình 2 là trễ hơn nhãn của nó, vì vậy tiến trình 0 chiếm được. Nó
xếp hàng một yêu cầu từ 2.
(b). Tiến trình 2 cũng muốn vào đoạn găng. Khi nó so sánh nhãn thời gian của
nó với nhãn nó nhận được từ tiến trình 0, nó thấy rằng nó không chiếm được đoạn
găng vì vậy nó trả lời chấp nhận cho tiến trình 0 và tiếp tục đợi cho đến khi tất cả
các tiến trình chấp nhận cho nó vào đoạn găng.
(c). Ngay khi tiến trình 2 gửi chấp nhận đến tiến trình 0, tiến trình 0 nhận được
chấp nhận của toàn bộ nhóm và nó có thể vào đoạn găng. Khi tiến trình 0 thực hiện
xong nó kiểm tra hàng đợi các chấp nhận chưa giải quyết của nó và tìm thấy tiến
trình 2 trong hàng đợi này. nó gửi chấp nhận vào đoạn găng cho tiến trình 2. (d).
Bây giờ tiến trình 2 đã nhận được chấp nhận của mọi tiến trình và có thể vào đoạn
găng.
hình vẽ
Hình 4. Thuật toán Ricart & Agrawala
Phạm Văn Tuấn Trang 7

2
Process 0
releases
resource
Tiểu luận môn học "Hệ tin học phân tán"
Chứng minh tính đúng đắn của thuật toán
Giả sử Pi và P
j
đang thực hiện CS tại cùng một thời điểm và timestamp yêu cầu
của P
i
và nhỏ hơn P
j
. Điều này có nghĩa là P
i
đưa ra yêu cầu của nó đầu tiên và sau
đó nhận yêu cầu của P
j
, mặt khác timestamp yêu cầu của P
j
sẽ phải nhỏ hơn. P
i
và P
j
cùng thực hiện đoạn găng nghĩa là P
i
gửi thông điệp trả lời tới P
j
trước khi thoát
khỏi đoạn găng. Điều này dẫn đến mâu thuẫn một tiến trình không được phép gửi

thông điệp trả lời nếu timestamp yêu cầu của nó nhỏ hơn timestamp của thông điệp
gửi đến. Như vậy P
i
và P
j
không thể cùng vào đoạn găng tại một thời điểm.
Ricart & Agrawala algorithm
timestamp current_time Thời gian Lamport hiện thời
timestamp my_timestamp nhãn thời gian của yêu cầu
integer reply_pending Số của chấp nhận chưa giải quyết
boolean is_requesting Nhận giá trị TRUE đoạn găng đã được sử dụng
boolean reply_defferred[N] Nhận giá trị TRUE cho yêu cầu tiếp theo
Request_CS()
my_timestamp = current_time
is_requesting = TRUE
reply_pending = N – 1
for every other processor j,
send (j, REMOTE_REQUEST; my_timestamp)
wait until reply_pending = 0
Release_CS()
is_requesting = FALSE
for j = 1 to N
if reply_defferred[j] = TRUE
send(j, REPLY)
reply_defferred[j] = FALSE
CS.Monitor()
Wait until REMOTE_REQUEST or REPLY arrives
REMOTE_REQUEST(sender; request_timestamp):
if (not is_requesting or
my_timestamp > request_timestamp)

send(sender, REPLY)
else
reply_defferred[sender] = TRUE
REPLY (sender)
reply_pending
So sánh hai thuật toán
Thuật toán Ricart-Agrawala tối ưu hơn thuật toán Lamport:
- Thông điệp release được kết hợp với thông điệp reply
Phạm Văn Tuấn Trang 8
Tiểu luận môn học "Hệ tin học phân tán"
Các khác nhau cơ bản:
- Ý tưởng của Lamport là để duy trì các bản sao gắn bó của một cấu trúc dữ liệu
bản sao.
- Ricart-Agrawala tránh cấu trúc dữ liệu và chỉ truyền sự thay đổi trạng thái.
- Thông điệp cần thiết cho việc thực hiện đoạn găng của thuật toán Lamport là
3(N-1) và của thuật toán Ricart-Agrawala là 2(N-1)
5.5. Thuật toán Token Ring
Đối với thuật toán này, ta giả sử rằng có một nhóm các tiến trình không có trật
tự nhưng có thể áp đặt vào một nhóm.Ví dụ, ta có thể nhận biết mỗi tiến trình bằng
địa chỉ máy của nó và ID của tiến trình để có được trật tự. Sử dụng trật tự áp đặt
này, một vòng logic được xây dựng trong phần mềm. Mỗi tiến trình được ấn định
một vị trí trong vòng và mỗi tiến trình phải biết tiến trình tiếp theo nó trong vòng
tròn.
Vòng tròn được khởi tạo bằng cách gửi một token tới tiến trình 0. Token được
luân chuyển vòng (tiến trình n đến tiến trình (n+1)mod kích thước vòng).
Khi một tiến trình chiếm được token, nó kiểm tra xem nếu nó nó có thể vào
đoạn găng hay không. Nếu có thể, nó vào đoạn găng và thực hiện các công việc của
nó. Khi thoát ra nó chuyển token cho tiến trình kế tiếp.
Nếu một tiến trình không muốn vào đoạn găng, đơn giản nó chỉ chuyển token .
Chỉ có một tiến trình có token tại một thời điểm và nó phải có token để vào

đoạn găng, vì vậy loại trừ tương hỗ được bảo đảm. Thứ tự cũng được định nghĩa tốt
do đó không có hiện tượng "chết đói" xảy ra. Hạn chế lớn nhất của thuật toán này là
nếu token bị mất, nó sẽ được khởi tạo lại. Việc xác định token bị mất là khó khăn.
(a) Nhóm các tiến trình không có trật tự trong một mạng
(b) Cấu trúc vòng tròn logic trong phần mềm
Hình 5. Thuật toán Token Ring
Phạm Văn Tuấn Trang 9
Token
Tiểu luận môn học "Hệ tin học phân tán"
5.6. Các thuật toán bầu cử
Nhiều thuật toán phân tán yêu cầu một tiến trình hoạt động như một
coordinator. Thường thì không có vấn đề gì đối với việc tiến trình nào sẽ là
coordinator. Vấn đề ở đây là ta phải chọn coordinator như thế nào. Nếu một tiến
trình chọn làm coordinator kết thúc hay bị rơi hoặc bị kết thúc không bình thường
thì ta phải chọn lại coordinator mới
Các yêu cầu (cho việc bầu cử)
- Mỗi tiến trình phải có một số duy nhất, ví dụ địa chỉ mạng của nó.
- Mỗi tiến trình phải biết số tiến trình của tất cả các tiến trình khác.
- Mọi tiến trình phải chấp nhận coordinator mới khi sự bầu cử kết thúc
5.6.1. Thuật toán Bully
Thuật toán Bully chọn tiến trình có số nhận dạng lớn nhất là coordinator. Nó
hoạt động như sau:
1. Khi một tiến trình p phát hiện coordinator không đáp ứng yêu cầu, nó khởi
tạo một sự bầu cử:
a. p gửi một thông điệp bầu cử cho tất cả các tiến trình có số cao hơn.
b. Nếu không có trả lời, thì p sẽ chiếm được và trở thành coordinator mới
c. Nếu có một tiến trình trả lời thì tiến trình đó sẽ tiếp quản và p đã thực hiện
xong công việc của nó.
2. Nếu một tiến trình nhận một thông điệp bầu cử từ một tiến trình có số thấp
hơn tại một thời điểm bất kỳ. Nó:

a. Gửi thông điệp OK trả lời nếu nó chấp nhận việc bầu cử
b. Gửi thông điệp bầu cử cho các tiến trình có số lớn hơn
3. Nếu một tiến trình nhận được thông điệp OK, nó biết rằng có tiến trình mạnh
hơn và thoát ra khỏi qua sự bầu cử.
4. Cuối cùng có một tiến trình không nhận được thông điệp OK. Nó thông báo
đã chiếm được bằng cách gửi cho tất cả các tiến trình một thông điệp báo rằng nó là
coordinator mới.
Hình 6. Thuật toán Bully
Phạm Văn Tuấn Trang 10
Tiểu luận môn học "Hệ tin học phân tán"
5.6.2. Thuật toán Ring
Thuật toán vòng tròn dựa trên việc sắp xếp các tiến trình phân tán trong một
vòng tròn. Trong thuật toán này không sử dụng token
- Mỗi tiến trình biết tiến trình nào kế tiếp nó
- Khi một tiến trình nhận thấy rằng coordinator không đáp ứng, nó xây dựng
một thông điệp bầu cử. Thông điệp này bao gồm số tiến trình của tiến trình khởi tạo
sự bầu cử.
- Thông điệp bầu cử sau đó được gửi đến tiến trình kế tiếp
- Khi nhận được thông điệp, tiến trình kế tiếp gắn số tiến trình của nó vào thông
điệp bầu cử.
- Thông điệp sẽ đi quanh vòng tròn
- Khi tiến trình gửi thông điệp bầu cử nhận được thông điệp trả lời (sau khi đi
qua vòng tròn). Thông điệp bao gồm số tiến trình (ID của tiến trình) của tất cả các
tiến trình đang hoạt động trong môi trường phân tán
- Tiến trình gửi thông điệp bầu cử sau đó sẽ trích ID của các tiến trình lớn hơn
và tạo một thông điệp coordinator bao gồm ID của tiến trình lớn nhất.
- Thông điệp này sẽ được gửi quanh vòng tròn
- Mỗi tiến trình trong vòng sẽ ghi nhận tiến trình nào sẽ là coordinator mới
Hình 7. Thuật toán Ring
Phạm Văn Tuấn Trang 11

Tiến trình 2 và 5 cùng đồng thời
nhận thấy coordinator (tiến trình 7)
đã dừng
Thông điệp khởi tạo từ 5
Thông điệp khởi tạo từ 2
Tiểu luận môn học "Hệ tin học phân tán"
So sánh một số thuật toán
Thuật toán Số thông điệp Hạn chế
Tập trung
3 thông điệp:
Request
Grant
Release
Phụ thuộc hoàn toàn vào
coordinator. Nếu coordinator bị sự
cố thì toàn bộ hệ thống ngừng hoạt
động.
Hiện tượng cổ chai .
Lamport
3(N-1) thông điệp
Request + Reply
+Release (gửi và
nhận giữa các tiến
trình)
Bất kỳ tiến trình nào cũng có thể
dừng
Ricart&Agrawala
2(N-1) thông điệp
Request + Grant
(gửi và nhận giữa

các tiến trình)
Bất kỳ tiến trình nào cũng có thể
dừng
Token Ring
1 đến ∞
Token bị mất, tiến trình dừng
Phạm Văn Tuấn Trang 12
Tiểu luận môn học "Hệ tin học phân tán"
PHẦN II: BÀI TẬP
Bài 2 (chương IV)
Đề: Trên cơ sở kiến thức đã lĩnh hội trong phần IV.2.2, ta hãy chứng minh các quan
hệ có trước:

Nhằm phục vụ mục đích này, ta thành lập hai hàm nguyên thủy advance(E)-tăng 1
đưn vị cho eventcount và await(E,i)-treo cho tới khi E có giá trị nhỏ nhất là bằng i
Phép toán thứ i: advance(E) → await(E,i)
Bài giải:
Ta có thể viết các tiến trình theo các hàm nguyên thủy như sau:
advance(E)
• Tăng giá trị của E lên 1, chỉ báo rằng một event đã xảy ra.
read(E)
• Trả về giá trị hiện hành của E
await(E, v)
• Treo tiến trình cho tới khi giá trị của E ít nhất là bằng v
Ta định nghĩa
- Hai eventcount FULL và EMPTY được khởi động bằng giá trị 0
- Biến nguyên i khởi động bằng 0 là cục bộ đối với tiến trình sản xuất và tiêu thụ
- Chỉ sản xuất khi số sản phẩm sản xuất - số sản phẩm đã tiêu thụ < N
- Chỉ tiêu thụ sản phẩm khi số sản phẩm sản xuất - số sản phẩm đã tiêu thụ > 0
Ta có thể viết các tiến trình như sau:

Sản xuất
Eventcount * FULL
Tiêu thụ
Eventcount * EMPTY
int i = 0;
while (TRUE)
{
i++;
await(EMPTY, i-N);
{Chuyển khi i- EMPTY ≤ N}
produce item;
advance(FULL);
}
int i = 0;
while (TRUE)
{
i++;
await(FULL,i);
{Chuyển khi FULL - i ≥ 0}
consume item;
advance(EMPTY);
}
Biểu diễn quan hệ có trước của các sự kiện như sau:
( Xem sơ đồ ở trang bên )
Phạm Văn Tuấn Trang 13
sản xuất thứ i → tiêu thụ thứ i → sản xuất thứ (i+N)
Tiểu luận môn học "Hệ tin học phân tán"
Với phép toán thứ i ta có:
- Ở tiến trình sản xuất:
produce

i
→ advance(FULL) (1)
- Chuyển đổi giữa tiến trình sản xuất và tiêu thụ:
advance(FULL) → await (FULL,i): theo giả thiết (2)
- Ở tiến trình tiêu thụ:
await(FULL,i) → consume
i
(3)
Vậy theo quan hệ kéo theo của quan hệ có trước trong trật tự từng phần từ (1), (2),
(3) ta có:
produce
i
→ consume
i
Đồng thời ta cũng có các quan hệ có trước sau:
- Ở tiến trình tiêu thụ:
consume
i
→ advance(EMPTY) (4)
- Chuyển đổi giữa tiến trình tiêu thụ và sản xuất:
advance(EMPTY) → await (EMPTY,i): theo giả thiết (5)
- Ở tiến trình sản xuất:
await (EMPTY,i) → consume
i+N
Vậy theo quan hệ kéo theo của quan hệ có trước trong trật tự từng phần, từ (4), (5),
(6) ta có:
consume
i



produce
i+N
Như vậy cũng theo quan hệ kéo theo trong quan hệ có trước ta có điều phải chứng
minh
Phạm Văn Tuấn Trang 14
sản xuất
tiêu thụ
produce
i

advance(FULL)
await(FULL,i)
consume
i
advance(EMPTY)
consume
i+N
.
.
.
sản xuất thứ i → tiêu thụ thứ i → sản xuất thứ (i+N)
await(EMPTY,i)
.
.
.
Tiểu luận môn học "Hệ tin học phân tán"
TÀI LIỆU THAM KHẢO
[1] TS. Lê Văn Sơn - "Hệ tin học phân tán" Nhà xuất bản Đại học quốc gia thành
phố Hồ Chí Minh 2002.
[2] Một số bài tham khảo trên Internet

MỤC LỤC
PHẦN I: LÝ THUYẾT 1
ĐỒNG BỘ TRONG HỆ PHÂN TÁN 1
I. Đặt vấn đề 1
II. Đồng bộ đồng hồ 1
III. Quan hệ happens-before (quan hệ có trước) 2
Hình 1. Quan hệ có trước của các event 3
IV. Thuật toán đồng bộ đồng hồ logic Lamport 3
V. Đồng bộ tiến trình 4
5.1. Loại trừ tương hỗ phân tán 4
5.2. Thuật toán tập trung 4
5.3. Thuật toán Lamport 5
5.4. Thuật toán Ricart & Agrawala 6
5.5. Thuật toán Token Ring 9
5.6. Các thuật toán bầu cử 10
5.6.1. Thuật toán Bully 10
5.6.2. Thuật toán Ring 11
PHẦN II: BÀI TẬP 13
Phạm Văn Tuấn Trang 15

×