Professional Documents
Culture Documents
Chuong 5. Dong Bo Hoa Tien Trinh - Ver4
Chuong 5. Dong Bo Hoa Tien Trinh - Ver4
Chương 5
ĐỒNG BỘ HÓA CÁC TIẾN TRÌNH
Thảo luận
Ví dụ đồng bộ hóa
• Buf: Buffer
• SIZE: cỡ của buffer Đây là bài toán vùng
đệm có giới hạn
• counter: biến chung
2/2016 Chương 5. Đồng bộ hóa các Tiến Trình 3
2/4
Ví dụ đồng bộ hóa
• Các phát biểu counter++ và counter– được xây
dựng như sau
• Counter++ • Counter--
register1 = counter; register2 = counter;
register1 = register1 + 1; register2 = register2 - 1;
counter = register1; counter = register2;
P2
Ghi
t0 t1 t2 time
• Truy xuất đồng thời vào vùng dữ liệu dùng chung có
thể tranh chấp với process khác có thể gây ra sự
mâu thuẫn dữ liệu cần kiểm soát.
2/2016 Chương 5. Đồng bộ hóa các Tiến Trình 8
3/3
Tương tranh và đồng bộ
• Tình huống xuất hiện khi nhiều tiến trình
cùng thao tác trên dữ liệu chung và kết
quả các thao tác đó phụ thuộc vào thứ tự
thực hiện của các tiến trình trên dữ liệu
chung đó gọi là tình huống tương tranh (race
condition)
• Để tránh các tình huống tương tranh, các tiến
trình cần được đồng bộ theo một phương
thức nào đó cần giải pháp đồng bộ hóa
các tiến trình
Tiến trình A
B cố gắng vào B ra khỏi
B vào CS CS
CS
Tiến trình B
T1 T2 B bị khóa T3 T4 Time
A trong CS
Nếu B muốn vào CS: B sẽ bị khoá chờ A ra khỏi CS B
mới được vào CS.
2/2016 Chương 5. Đồng bộ hóa các Tiến Trình 15
5/5
Miền găng (Critical Section)
Khi giải quyết bài toán CS chú ý 4 điều kiện sau:
(1) Không có hai tiến trình cùng ở trong CS cùng lúc.
(2) Không có giả thiết về tốc độ của các tiến trình, cũng
như về số lượng bộ xử lý.
(3) Một tiến trình bên ngoài CS không được ngăn cản các
tiến trình khác vào CS.
(4) Không có tiến trình nào phải chờ vô hạn để được vào
CS.
while (TRUE){
while (turn ==1); // Wait //neu turn=1 thi A vao vong while de doi
critical_section(); //neu turn=0 thi A được vào CS
turn = 1; //Cho phép B vào CS
noncritical-section();
}
Process B
while (TRUE){
while (turn ==0); // Wait //neu turn=0 thi B vao vong while de doi
critical_section(); //neu turn=1 thi B được vào CS
turn = 0; //Cho phép A vào CS
noncritical-section();
}
Up(s)
{ e = e + 1;
if (e<= 0 )
{ exit(Q,f); //lấy một tiến trình Q ra khỏi hàng đợi f
status (Q) = ready; //chuyển Q sang trạng thái sẵn sàng
enter(Q,ready-queue); //đưa Q vào hàng đợi sẵn sàng của hệ thống }
}
Signal(c)
{
if (f(c) != NULL)
{ exit(Q,f(c)); //Lấy tiến trình Q đang chờ trên c
statusQ) = ready; //chuyển Q sang trạng thái sẵn sàng
enter(Q,ready-queue); //đưa Q vào hàng đợi sẵn sàng.
}
}
c P2 P5
Procedure 1
Procedure N
Khởi tạo