CHƢƠNG 6 TREO MÁY DEADLOCK
6.2 Ngăn ngừa bếtắc
Ngăn ngừa bế tắc (deadlock prevention) là đảm bảo để ớt nhất một trong bốn điều kiện trỡnh bày trong phần trước khụng xẩy ra, tức là loại trừ trước khả năng xảy ra bế tắc. Bốn điều kiện xẩy ra bế tắc cú thể ngăn ngừa như sau:
1) Loại trừ tƣơng hỗ
Cú thể trỏnh loại trừ tương hỗ đối với những tài nguyờn cho phộp nhiều tiến trỡnh sử dụng một lỳc vớ dụ cỏc file trong chế độ đọc. Tuy nhiờn, trờn thực tế luụn luụn tồn tại tài nguyờn khụng cú khả năng chia sẻ đồng thời như vậy và cần đảm bảo loại trừ tương hỗ khi sử dụng chỳng. Do vậy khụng thể ngăn ngừa điều kiện về loại trừ tương hỗ.
2) Giữ và chờ
Cú hai cỏch ngăn ngừa điều kiện này. Cỏch thứ nhất là yờu cầu tiến trỡnh phải nhận đủ toàn bộ tài nguyờn cần thiết trước khi thực hiện tiếp, nếu khụng nhận đủ, tiến trỡnh bị phong tỏa để chờ cho đến khi cú thể nhận đủ tài nguyờn. Cỏch này thường khụng hiệu quả do tiến trỡnh phải chờ đợi rất lõu để lấy đủ tài nguyờn trong khi cú thể thực hiện với một số tài nguyờn được cấp. Ngoài ra tiến trỡnh sẽ giữ toàn bộ tài nguyờn đến khi thực hiện xong, kể cả tài nguyờn chưa cần đến, gõy lóng phớ tài nguyờn.
Cỏch thứ hai là tiến trỡnh chỉ được yờu cầu tài nguyờn nếu tiến trỡnh khụng giữ tài nguyờn nào khỏc. Trước khi tiến trỡnh yờu cầu thờm tài nguyờn, tiến trỡnh phải giải phúng tài nguyờn đó được cấp và yờu cầu lại (nếu cần) cựng với tài nguyờn mới.
3) Khụng cú phõn phối lại
Điều kiện này cú thể ngăn ngừa như sau. Khi một tiến trỡnh yờu cầu tài nguyờn nhưng khụng được do đó bị cấp phỏt, hệ điều hành sẽ thu hồi lại toàn bộ tài nguyờn tiến trỡnh đang giữ. Tiến trỡnh chỉ cú thể thực hiện tiếp sau khi lấy được tài nguyờn cũ cựng với tài nguyờn mới yờu cầu.
Một cỏch thực hiện khỏc là khi tiến trỡnh yờu cầu tài nguyờn, nếu tài nguyờn cũn trống, ta cấp phỏt ngay. Nếu tài nguyờn do tiến trỡnh khỏc giữ và tiến trỡnh này đang chờ cấp thờm tài nguyờn thỡ thu hồi lại để cấp cho tiến trỡnh yờu cầu. Nếu hai điều kiện trờn đều khụng thỏa thỡ tiến trỡnh yờu cầu tài nguyờn phải chờ.
4) Chờ đợi vũng trũn
Một trong những cỏch ngăn ngừa chờ đợi vũng trũn là xỏc định một thứ tự cho cỏc dạng tài nguyờn trong hệ thống và chỉ cho phộp tiến trỡnh yờu cầu tài nguyờn sao cho tài nguyờn mà tiến trỡnh yờu cầu sau cú thứ tự lớn hơn tài nguyờn mà tiến trỡnh đú yờu cầu trước.
Nguyờn tắc trờn được minh họa như sau. Giả sử trong hệ thống cú n dạng tài nguyờn ký hiệu R1, R2, …, Rn. Cỏc dạng tài nguyờn cú thể là mỏy in, ổ đĩa, .v.v. Tiếp theo, khụng mất tớnh tổng quỏt, ta giả sử những dạng tài nguyờn này được sắp xếp theo thứ tự tăng dần của chỉ số, tức là R1 đứng trước R2, R2 đứng trước R3, v.v. Với cỏch sắp xếp như vậy ta cú thể trỏnh bế tắc bằng cỏch chỉ cho phộp tiến trỡnh yờu cầu tài nguyờn theo thứ tự tăng của chỉ số. Nếu tiến
trỡnh đó yờu cầu một số tài nguyờn dạng Ri thỡ sau đú tiến trỡnh chỉ được phộp yờu cầu tài nguyờn dạng Rj nếu j > i. Nếu tiến trỡnh cần nhiều tài nguyờn cựng dạng thỡ tiến trỡnh phải yờu cầu tất cả tài nguyờn dạng đú cựng một lỳc.
Cú thể dễ dàng kiểm tra, việc ỏp dụng quy tắc trờn cho phộp ngăn ngừa chờ đợi vũng trũn. Giả sử xẩy ra chờ đợi vũng trũn do tiến trỡnh P đó cú Ri và yờu cầu Rj trong khi tiến trỡnh Q đó cú Rj và yờu cầu Ri. Ta sẽ thấy ngay điều này khụng thể xẩy ra do một trong hai tiến trinh vi phạm quy tắc núi trờn (hoặc i > j hoặc j > i).