QUẢN TRỊ DEADLOCK
PHÁT HIỆN DEADLOCK
Nếu một hệ thống không dùng giao thức phòng ngừa deadlock, khi đó sơ đồ phát hiện và khôi phục phải được sử dụng. Một giải thuật kiểm tra trạng thái của hệ thống được gọi theo một chu kỳ để xác định xem deadlock có xẩy ra hay không. Nếu có, hệ thống phải khôi phục lại từ deadlock, muốn vậy hệ thống phải:
• Duy trì thông tin về sự cấp phát hiện hành các hạng mục dữ liệu cho các giao dịch cũng như các yêu cầu hạng mục dữ liệu chưa được chưa được giải quyết. • Cung cấp một thuật toán sử dụng các thông tin này để xác định hệ thống đã đi
vào trạng thái deadlock chưa.
• Phục hồi từ deadlock khi phát hiện được deadlock đã xảy ra.
PHÁT HIỆN DEADLOCK
Deadlock có thể mô tả chính xác bằng đồ thị định hướng được gọi là đồ thị chờ (wait for graph). Đồ thị này gồm một cặp G = < V, E >, trong đó V là tập các đỉnh và E là tập các
cung. Tập các đỉnh gồm tất cả các giao dịch trong hệ thống. Mỗi phần tử của E là một cặp Ti → Tj, nó chỉ ra rằng Tichờ Tjgiải phóng một hạng mục dữ liệu nó cần.
Khi giao dịch Tiyêu cầu một hạng mục dữ liệu đang bị giữ bởi giao dịch Tjkhi đó cung Ti → Tj được xen vào đồ thị. Cạnh này bị xoá đi chỉ khi giao dịch Tj không còn giữ hạng mục dữ liệu nào mà Ticần.
Deadlock tồn tại trong hệ thống nếu và chỉ nếu đồ thị chờ chứa một chu trình. Mỗi giao dịch tham gia vào chu trình này được gọi là bị deadlock. Để phát hiện deadlock, hệ thống phải duy trì đồ thị chờ và gọi theo một chu kỳ thủ tục tìm kiếm chu trình. Ta xét ví dụ sau:
Đồ thị chờ (phi chu trình)
figure V-
Do đồ thị không có chu trình nên hệ thông không trong trạng thái deadlock. Bây giờ, giả sử T28yêu cầu một hạng mục dữ liệu được giữ bởi T27, cung T28→ T27được xen vào đồ thị, điều này dẫn đến tồn tại một chu trình T26 → T27 → T28 → T26 có nghĩa là hệ thống rơi vào tình trạng deadlock và T26, T27 , T28bị deadlock.
figure V-
Vấn đề đặt ra là khi nào thì chạy thủ tục phát hiện ? câu trả lời phụ thuộc hai yêu tố sau: 1. Deadlock thường xảy ra hay không ?
Nếu deadlock thường xảy ra, việc chạy thủ tục phát hiện diễn ra thường xuyên hơn. Các hạng mục dữ liệu được cấp cho các giao dịch bị deadlock sẽ không sẵn dùng cho các giao dịch khác đến khi deadlock bị phá vỡ. Hơn nữa, số chu trình trong đồ thị có thể tăng lên. Trong trường hợp xấu nhất, ta phải gọi thủ tục phát hiện mỗi khi có một yêu cầu cấp phát không được cấp ngay.