Professional Documents
Culture Documents
ĐIỀU HÀNH
Phần 6: Bế tắc
Phần 6: Bế tắc
6.1 Bài toán bế tắc
! Một tập hợp các tiến trình, trong đó mỗi tiến trình giữ một tài
nguyên và đợi một tài nguyên đang bị chiếm giữ bởi một tiến
trình khác trong tập hợp này
! Ví dụ:
! Hai semaphore A và B được khởi tạo bằng 1
! P0 : wait (A); wait(B)
! P1 : wait (B); wait(A)
Phần 6: Bế tắc
6.3 Đồ thị phân phối tài nguyên
Phần 6: Bế tắc
6.4 Các phương pháp xử lý khi có
bế tắc
! Cho phép hệ thống vào trạng thái bế tắc, phát hiện và khôi
phục lại
! Bỏ qua và giả định rằng bế tắc không bao giờ xảy ra (hầu
hết các HĐH lựa chọn cách thức này, bao gồm cả Linux và
Windows)
! Khi tiến trình yêu cầu một tài nguyên có sẵn, hệ thống
phải quyết định liệu việc cấp phát tài nguyên đó cho
phép hệ thống ở trạng thái an toàn
! Hệ thống ở trạng thái an toàn nếu có một chuỗi các tiến
trình trong hệ thống <P1, P2, …, Pn> sao cho với mỗi
Pi, tài nguyên mà Pi có thể yêu cầu là các tài nguyên sẵn
sàng hoặc các tài nguyên chiếm giữ bởi Pj với j < i
! Nghĩa là:
! Nếu tài nguyên mà Pi không có sẵn ngay thì Pi có thể chờ đến khi Pj xong
! Khi Pj xong thì Pi lấy được các tài nguyên cần thiết, thực thi, trả lại tài
nguyên rồi kết thúc
Trần Trọng Hiếu - ĐH Công nghệ - ĐH QG HN
Ví dụ trạng thái an toàn 18
Nếu cạnh khai báo P1 --- > R2 chuyển thành cạnh yêu cầu thì sẽ xảy ra
bế tắc
Trần Trọng Hiếu - ĐH Công nghệ - ĐH QG HN
24
Sử dụng thuật toán banker
! Mỗi tài nguyên có thể có nhiều đơn vị
! Mỗi tiến trình phải khai báo số lượng tài nguyên tối đa sẽ sử
dụng
! Khi tiến trình yêu cầu tài nguyên, nó có thể phải chờ
! Khi tiến trình lấy tất cả các tài nguyên cần thiết, nó phải trả
lại sau một khoảng thời gian có hạn
Phần 6: Bế tắc
6.5 Khôi phục khi bế tắc xảy ra
4. Nếu Finish [i] == false với một số 0 ≤ i ≤ n-1, thì hệ thống ở trạng thái bế tắc.
Và nếu Finish [i] == false thì Pi bị bế tắc
Độ phức tạp của thuật toán O(m.n2)
Trần Trọng Hiếu - ĐH Công nghệ - ĐH QG HN
Ví dụ: Thuật toán nhận diện 34
! 5 tiến trình P0 P1 P2 P3 P4
! 3 nguồn tài nguyên: A (7 đơn vị), B (2 đơn vị), and C (6 đơn vị)
! Tại thời điểm t0, trạng thái của hệ thống là:
Allocation Request Available
ABC ABC ABC
P0 010 000 000
P1 200 202
P2 303 000
P3 211 100
P4 002 002
! Chuỗi <P0, P2, P3, P1, P4> cho phép Finish[i] = true với tất cả 0 ≤ i ≤ n-1