Thư viện tri thức trực tuyến
Kho tài liệu với 50,000+ tài liệu học thuật
© 2023 Siêu thị PDF - Kho tài liệu học thuật hàng đầu Việt Nam

Tài liệu đồng bộ hóa
Nội dung xem thử
Mô tả chi tiết
Nhóm dịch hệ phân tán –Lớp MTT- K50 - DHBKHN
Chương 6 : Đồng bộ hóa
(Synchronization)
Trong chương này chúng ta sẽ tìm hiểu bằng cách nào các tiến trình đồng bộ hóa được với
nhau. Ví dụ, thay vì nhiều tiến trình đồng thời truy nhập vào một tài nguyên chia sẻ thì chúng cấp
quyền truy nhập tạm thời cho nhau. Một ví dụ khác, nhiều tiến trình đôi khi cần trả lời cho 1 sự
kiện nào đó, nói cách khác, cần xác định thông điệp m1 của tiến trình P được gửi trước hay sau
thông điệp m2 cùa tiến trình Q.
Đồng bộ hóa trong các hệ thống phân tán thường khó hơn rất nhiều so với đồng bộ hóa
trong các hệ đơn hoặc đa xử lý.
Vấn đề trong chương này hướng tới đồng hộ hóa dựa trên thời gian hoạt động, tức là thời
gian có tính tương quan giữa các tiến trình hơn là thời gian tuyệt đối.
Trong nhiều trường hợp, đồng bộ hóa có thể được giải quyết bằng cách một nhóm các tiến
trình có thể sử dụng 1 tiến trình được thực thi bằng cách lấy trung bình một vài thuật toán lựa
chọn.
6.1 Đồng bộ hóa đồng hồ (Clock Synchronization).
Trong một hệ tập trung, thời gian hệ thống là rõ ràng. Khi một tiến trình muốn biết thời
gian hệ thống, nó chỉ cần đưa ra 1 lời gọi hệ thống và đợi kernel trả lời. Nếu tiến trình A hỏi thời
gian, ngay sau đó tiến trình B hỏi thời gian, thì thời gian mà B nhận được sẽ lớn hơn(đôi khi
bằng) so với thời gian mà A nhận được. Chắc chắn không bao giờ có chuyện thời gian B nhận
được nhỏ hơn A. Nhưng trong một hệ thống phân tán, đạt được sự thống nhất về thời gian như
vậy không hề đơn giản.
Hãy lấy 1 ví dụ đơn giản trong chương trình make của Unix. Thông thường thì trong
Unix, các chương trình lớn được chia nhỏ ra nhiều file nguồn, để khi có thay đổi trong 1 file
nguồn thì chỉ có file đó phải được biên dịch lại mà không phải là tất cả chương trình. Nếu 1
chương trình có 100 files, thì không nhất thiết phải biên dịch lại toàn bộ bởi 1 file bất kì thay đổi
với tốc độ cao hơn bất kì 1 người lập trình nào có thể làm việc. Lệnh make làm việc hết sức đơn
giản. Khi lập trình viên thay đổi file nguồn và chạy lệnh make thì thời điểm đó được đánh dấu
cho tất cả các file nguồn đã bị modify. Nếu file input.c có thời gian là 2151 và file đối tượng
tương ứng của nó output.o có thời gian là 2150 thì lệnh make hiểu rằng input.c đã bị thay đổi sau
khi output.o được tạo ra. Như vậy cần phải biên dịch lại input.c để cho ra phiên bản output.o mới.
Trong trường hợp khác, nếu thời gian của output.o là 2144 còn thời gian của input.c là 2143 thì
không cần biên dịch lại file này. Như vậy lệnh make kiểm tra lại toàn bộ file nguồn và chỉ gọi
trình biên dịch biên dịch những file cần thiết.
Bây giờ hãy tưởng tượng những gì xảy ra trong một hệ phân tán cũng với lệnh make như
trên. Nếu hệ thống không đạt được sự thống nhất về thời gian, sự việc sẽ xảy ra như trong sơ đồ
sau:
Page | 1