BẾ TẮC VÀ CHỐNG BẾ TẮCBẾ TẮC VÀ CHỐNG BẾ TẮC
2.6.4 Phát hiện bế tắc
Để phát hiện bế tắc HĐH thường cài đặt một thuật toán để phát hiện hệ thống có tồn tại hiện tượng chờ đợi vòng tròn hay không.
HĐH phải cài đặt cơ chế độc quyền để bảm bảo tài nguyên chia sẻ và thực hiện cấp phát tài nguyên một lần để ngăn chặng việc chiếm giữ và yêu cầu cấp mới tài nguyên.
BẾ TẮC VÀ CHỐNG BẾ TẮCBẾ TẮC VÀ CHỐNG BẾ TẮC BẾ TẮC VÀ CHỐNG BẾ TẮC
2.6.4 Phát hiện bế tắc
Khi phát hiện bế tắc HĐH sử dụng một số giải pháp:
Thoát tất cả các tiến trình bị bế tắc.
Sao lưu lại mỗi tiến trình bị bế tắc tại một vài điểm, sau đó khởi động lại tất cả các tiến trình
Thu hồi tài nguyên của tiến trình bế tắc, để cấp phát cho một tiến trình trong tập tiến trình bế tắc, giúp tiến trình này ra khỏi bế tắc
Dùng toàn bộ quyền ưu tiên sử dụng tài nguyên cho một tiến trình, để tiến trình này ra khỏi bế tắc
BẾ TẮC VÀ CHỐNG BẾ TẮCBẾ TẮC VÀ CHỐNG BẾ TẮC BẾ TẮC VÀ CHỐNG BẾ TẮC
2.6.4 Phát hiện bế tắc
Cần sử dụng các cấu trúc dữ liệu sau: int Available[NumResources];
// Available[r]= số lượng các thể hiện còn tự do của tài nguyên r int Allocation[NumProcs, NumResources];
// Allocation[p,r] = số lượng tài nguyên r thực sự cấp phát cho p int Request[NumProcs, NumResources];
BẾ TẮC VÀ CHỐNG BẾ TẮCBẾ TẮC VÀ CHỐNG BẾ TẮC BẾ TẮC VÀ CHỐNG BẾ TẮC
2.6.4 Phát hiện bế tắc
Giải thuật phát hiện bế tắc.
1. int Work[NumResources] = Available; int Finish[NumProcs];
for (i = 0; i < NumProcs; i++) Finish[i] = (Allocation[i] = = 0); 2. Tìm i sao cho
Finish[i] = = false
Request[i] <= Work ; nếu không có i như thế, đến bước 4. 3. Work = Work + Allocation[i];
Finish[i] = true ; đến bước 2
4. Nếu Finish[i] = = true với mọi i, thì hệ thống không có bế tắc. Nếu Finish[i] = = false với một số giá trị i, thì các tiến trình mà
BẾ TẮC VÀ CHỐNG BẾ TẮCBẾ TẮC VÀ CHỐNG BẾ TẮC BẾ TẮC VÀ CHỐNG BẾ TẮC