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

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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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 [...]... quan hệ kéo theo trong quan hệ có trước ta có điều phải chứng minh sản xuất thứ i → tiêu thụ thứ i → sản xuất thứ (i+N) Phạm Văn Tuấn Trang 14 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... 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 Bất kỳ tiến trình nào cũng có thể dừng Bất kỳ tiến trình nào cũng có thể dừng Token bị mất, tiến trình dừng 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: → sản xuất thứ i → tiêu thụ.. .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... 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 Tiểu luận môn học "Hệ tin học phân tán" sản xuất tiêu thụ producei advance(FULL) await(FULL,i) consumei advance(EMPTY) await(EMPTY,i) consumei+N Với phép toán thứ i ta có:... coordinator mới Thông điệp khởi tạo từ 5 Thông điệp khởi tạo từ 2 Tiến trình 2 và 5 cùng đồng thời nhận thấy coordinator (tiến trình 7) đã dừng Hình 7 Thuật toán Ring Phạm Văn Tuấn Trang 11 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 Tập trung 3 thông điệp: Request Grant Release Lamport Ricart&Agrawala Token Ring Phạm Văn Tuấn 3(N-1) thông điệp Request + Reply... 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ó: producei → consumei Đồng thời ta cũng có các quan hệ có trước sau: - Ở tiến trình tiêu thụ: consumei → 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) → consumei+N Vậy theo quan hệ kéo theo của quan hệ. .. 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... 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

Ngày đăng: 06/01/2014, 14:52

Mục lục

  • PHẦN I: LÝ THUYẾT

  • II. Đồng bộ đồng hồ

  • III. Quan hệ happens-before (quan hệ có trước)

  • Hình 1. Quan hệ có trước của các event

  • IV. Thuật toán đồng bộ đồng hồ logic Lamport

  • V. Đồng bộ tiến trình

    • 5.1. Loại trừ tương hỗ phân tán

    • 5.2. Thuật toán tập trung

    • 5.4. Thuật toán Ricart & Agrawala

    • 5.5. Thuật toán Token Ring

    • PHẦN II: BÀI TẬP

Tài liệu cùng người dùng

Tài liệu liên quan