CHƯƠNG 15 PHỐI HỢP VÀ THỎA THUẬN
Một ví dụ thú vị đặc biệt là nơi không có máy chủ, và một bộ sưu tập của các quá trình ngang hàng phải phối hợp truy cập của họ để chia sẻ tài nguyên với nhau. Điều này xảy ra thường xuyên trên các mạng như Ethernet và IEEE 802.11 mạng không dây trong 'ad hoc' chế độ, nơi mà các giao diện mạng hợp tác như các đồng nghiệp để chỉ có một nút truyền tại một thời điểm trên các phương tiện chia sẻ. Xem xét, cũng có thể, một hệ thống giám sát số lượng vị trí tuyển dụng trong một bãi đậu xe với một quá trình ở mỗi lối vào và lối ra theo dõi số lượng xe vào và ra. Mỗi quá trình giữ một số của tổng số xe trong bãi đậu xe và hiển thị hay không nó là đầy đủ. Các quy trình phải cập nhật các số chia sẻ của số lượng xe nhất quán. Có một số cách để đạt được điều đó, nhưng nó sẽ là thuận lợi cho các quá trình này để có thể có được loại trừ lẫn nhau chỉ bằng cách giao tiếp với nhau, loại bỏ sự cần thiết cho một máy chủ riêng biệt. Nó rất hữu ích để có một cơ chế chung cho phân phối loại trừ lẫn nhau mà chúng ta - một trong đó là độc lập với chương trình quản lý tài nguyên cụ thể trong câu hỏi. Bây giờ chúng ta xem xét một số thuật toán để đạt được điều đó.
15.2.1 Các thuật toán để loại trừ lẫn nhau Chúng ta hãy xem xét một hệ thống xử lý N pi i? 12} N? ? ? =, Mà không chia sẻ các biến. Các quá trình truy cập tài nguyên phổ biến, nhưng họ làm như vậy trong một phần quan trọng. Vì lợi ích của sự đơn giản, chúng ta giả định rằng chỉ có một phần quan trọng. Nó là đơn giản để mở rộng các thuật toán chúng tôi trình bày với nhiều hơn một phần quan trọng. Chúng tôi cho rằng hệ thống này là không đồng bộ, các quy trình không thất bại và chuyển tin nhắn là đáng tin cậy, do đó bất kỳ tin nhắn gửi cuối cùng được chuyển giao nguyên vẹn, đúng một lần. Các giao thức cấp ứng dụng để thực hiện một phần quan trọng như sau: nhập () // vào phần quan trọng - nếu khối resourceAccesses cần thiết () // truy cập chia sẻ tài nguyên trong phần cảnh quan trọng () // bỏ phần quan trọng - các quá trình khác có thể doanh nghiệp nhập yêu cầu thiết yếu của chúng tôi để loại trừ lẫn nhau như sau: ME1: (an toàn) Tại hầu hết một quá trình có thể thực hiện trong các phần quan trọng (CS) tại một thời điểm. Me2: (liveness) Yêu cầu để nhập và thoát khỏi phần quan trọng cuối cùng thành công. Điều kiện Me2 nghĩa tự do từ cả hai bế tắc và đói. Một bế tắc sẽ bao gồm hai hoặc nhiều hơn các quá trình trở thành bị mắc kẹt vô thời hạn trong khi cố gắng để vào hay ra khỏi phần quan trọng, bởi đức hạnh của phụ thuộc lẫn nhau của họ. Nhưng thậm chí không có một bế tắc, một thuật toán kém có thể dẫn đến nạn đói: hoãn vô thời hạn nhập cảnh đối với một quá trình đã yêu cầu nó. Sự vắng mặt của nạn đói là một điều kiện công bằng. Một vấn đề công bằng là thứ tự mà các quy trình nhập vào phần quan trọng. Nó không phải là có thể ra lệnh cho nhập cảnh vào phần quan trọng bởi thời đại mà các quá trình yêu cầu nó, bởi vì sự vắng mặt của đồng hồ toàn cầu. Nhưng một yêu cầu sự công bằng hữu ích mà đôi khi được thực hiện làm cho việc sử dụng xảy ra, trước khi đặt hàng (Mục 14.4) giữa các tin nhắn có yêu cầu nhập cảnh vào phần quan trọng:
đang được dịch, vui lòng đợi..
