JavaScript is required

Giả sử hệ thống có 12 tài nguyên. Có 3 tiến trình A, B, C đang chạy. Tại thời điểm này, trạng thái sử dụng tài nguyên của các tiến trình như sau:

Hãy chọn phát biểu ĐÚNG khi đánh giá an toàn cho chuỗi tiến trình nếu cho tiến trình C thực thi trước?

A.

A. Sẽ là an toàn (safe) vì C đang cần thêm tài nguyên nhiều nhất.

B.

B. Sẽ là an toàn (safe) vì C đang giữ tài nguyên ít hơn số tài nguyên sẵn có.

C.

C. Sẽ là không an toàn (unsafe) vì số tài nguyên C cần thêm lớn hơn số tài nguyên sẵn có.

D.

D. Sẽ là không an toàn (unsafe) vì số tài nguyên C cần tối đa lớn hơn số tài nguyên sẵn có.

Trả lời:

Đáp án đúng: C


Để đánh giá tính an toàn khi tiến trình C thực thi trước, ta cần xem xét trạng thái tài nguyên hiện tại và nhu cầu của các tiến trình. Hiện tại: * Tổng số tài nguyên: 12 * A đang giữ 3, cần tối đa 9 (cần thêm 6) * B đang giữ 3, cần tối đa 4 (cần thêm 1) * C đang giữ 3, cần tối đa 5 (cần thêm 2) * Tài nguyên sẵn có: 12 - 3 - 3 - 3 = 3 Nếu C chạy trước: * C hoàn thành, trả lại 5 tài nguyên (3 đang giữ + 2 đã dùng). * Số tài nguyên sẵn có lúc này: 3 (ban đầu) + 5 = 8 * A cần 6 tài nguyên, B cần 1 tài nguyên. * Vì 8 > 6 + 1, nên hệ thống có thể cấp phát đủ tài nguyên cho A và B hoàn thành. Như vậy, nếu cho C thực thi trước, hệ thống vẫn an toàn. Các phương án: * A sai vì việc C cần thêm tài nguyên nhiều nhất không đảm bảo tính an toàn. * B **đúng** vì C đang giữ 3 tài nguyên, ít hơn số tài nguyên sẵn có (3), nhưng quan trọng hơn là sau khi C chạy xong, hệ thống có đủ tài nguyên để các tiến trình còn lại hoàn thành. * C sai vì C cần thêm 2 tài nguyên, nhỏ hơn số tài nguyên sẵn có ban đầu (3), và quan trọng là xét trạng thái sau khi C chạy. * D sai vì số tài nguyên C cần tối đa (5) lớn hơn số tài nguyên sẵn có ban đầu (3), nhưng điều này không quyết định tính an toàn của hệ thống khi C chạy trước.

Câu hỏi liên quan