Giải thuật nhãn thời gian

Một phần của tài liệu Hệ điều hành phân tán (Trang 40 - 42)

Giải thuật nhãn thời gian dùng nhãn thời gian của Lamport đảm bảo truy nhập chính xác tới phần tới hạn. Giao thức thực hiện bởi vì có một phương pháp ưu tiên của các yêu cầu có thể được sắp xếp toàn cục. Có một bộ xử lý cho phép từ các bộ xử lý khác đi vào phần tới hạn, và bộ xử lý này sẽ từ chối cho phép tới tất cả các bộ xử lý khác.

Nhãn thời gian Lamport phục vụ như 1 đồng hồ toàn cục. Vì nó là thứ tự tuyệt đối, có sự sắp xếp toàn cục giữa tất cả các bộ xử lý đã yêu cầu phần tới hạn.

Một cách chuyển giải thuật dễ thấy trong giao thức là để mỗi bộ xử lý báo yêu cầu của nó đi vào phần tới hạn. Tất cả các bộ xử lý khác phải trả lời, đưa ra các yêu cầu hiện thời. Các trả lời này mang nhãn thời gian tại bên trả lời yêu cầu phần tới hạn hay giá trị không nếu bên trả lời không đợi hay sử dụng phần tới hạn. Khi bộ xử lý đi ra phần tới hạn, nó báo cho tất cả các bộ xử lý khác. Bằng cách xem xét các thông tin này, mỗi bộ xử lý có thể đặt hàng đợi ưu tiên giống nhau của các bộ xử lý đợi đi vào phần tới hạn. Khi bộ xử lý tìm thấy hàng đợi ưu tiên, nó biết rằng không có bộ xử lý khác nghĩ rằng nó ở đầu của hàng đợi ưu tiên, như vậy nó an toàn đi vào phần tới hạn.

Các biến dùng trong giải thuật Ricarat và Agrawala

timestamp currentime Thời gian Lamport hiện thời timestamp my_timestamp Nhãn thời gian yêu cầu

integer reply_count Số hiệu cho phép cần tập hợp trước khi vào phần tới hạn CS(critical section).

boolean reply_deffered[M] reply_deffered[i] đúng nếu trì hoãn trả lời yêu cầu của bộ xử lý j

Giả sử bộ xử lý p gửi yêu cầu đến bộ xử lý q. Bộ xử lý p sẽ bị chặn ít nhất chođến khi có trả lời của q.Nếu q có yêu cầu ưu tiên cao hơn p, p sẽ bị chặn cho đến khi q tách ra khỏi phần tới hạn. Bộ xử lý q biết quan hệ ưu tiên của các yêu cầu; do vậy không cần đến vòng liên kết.

Giải thuật 2 vòng thực hiện như sau : Khi bộ xử lý muốn đi vào phần tới hạn, nó ghi lại nhãn thời gian hiện thời và gửi yêu cầu tới tất cả bộ xử lý khác. Khi bộ xử lý nhận yêu cầu mà nó sẽ cấp, nó gửi trả lời tới bên yêu cầu. Khi bộ xử lý nhận một yêu cầu muộn hơn chủ của nó, nó sẽ từ chối yêu cầu. Khi đó bộ xử lý chỉ cần làm trễ việc gửi trả lời tới bên yêu cầu mà không cần gửi thông báo bắt đầu. Khi bộ xử lý nhận các trả lời của tất cả các yêu cầu của nó, nó biết yêu cầu của nó sớm hơn tất cả các người khác và nó đi vào phần tới hạn. Khi rời khỏi phần tới hạn, nó gửi các yêu cầu mà nó đã chậm lại.

Dưới đây là các giải thuật yêu cầu token, giám sát phần tới hạn Giải thuật yêu cầu phần tới hạn

Request_CS()

my_timestamp= current_timestamp is_requesting=TRUE

reply_pending=M-1

for every other processor j, send(j,REMOTE_REQUEST;my_timestamp) wait until reply_pending is 0

Giải thuật cho nhánh giám sát phần tới hạn

CS_Monitor():

wait until a REMOTE_REQUEST or a REPLY message is received REMOTE_REQUEST (sender;request_time):

let j be the sender of the REMOTE_REQUEST message. if( not is_requesting or my_timestamp>request_timestamp) send(j,REPLY)

else reply_deffered[j]=TRUE REPLY(sender):

reply_pending=reply_pending-1

Để tách ra khỏi phần tới hạn,bộ xử lý xử lý tất cả các trả lời trì hoãn của nó. Sau đây là giải thuật

Giải thuật giải phóng phần tới hạn

Release_CS()

is_requesting=FALSE for j=1 through M

if reply_deffered[j]=TRUE send (j,REPLY)

reply_deffered[j]=FALSE

Một phần của tài liệu Hệ điều hành phân tán (Trang 40 - 42)