Giải thuật xác định trạng thái an tồn

Một phần của tài liệu Giáo trình tổng quan về DHD (Trang 83)

- Đọc/Ghi ngày, tháng, năm

d) Sử dụng thơng đ iệp:

3.5.4.1 Giải thuật xác định trạng thái an tồn

Nếu hệ thống cĩ thể thỏa mãn các nhu cầu tài nguyên tối đa của mỗi tiến trình theo một thứ tự cấp phát nào đĩ mà khơng bị tắc nghẽn thì gọi là hệ thống ở trạng thái là an tồn. Hệ thống ở trạng thái khơng an tồn cĩ thể dẫn đến tình trạng tắc nghẽn. Ta cĩ giải thuật xác định trạng thái an tồn như sau:

int NumResources;//số tài nguyên, một tài nguyên cĩ thể cĩ nhiều thể hiện (instance) int NumProcs;//số tiến trình trong hệ thống

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 Max[NumProcs, NumResources]; //Max[p,r]= nhu cầu tối đa của tiến trình p về tài nguyên r

int Allocation[NumProcs, NumResources];// Allocation[p,r] = số tài nguyên r đã cấp phát cho tiến trình p

int Need[NumProcs, NumResources]; // Need[p,r] = Max[p,r] - Allocation[p,r]= số tài nguyên r mà tiến trình p cịn cần sử dụng

int Finish[NumProcs] = false; //Finish[p]=true là tiến trình p đã thực thi xong; B1.Tìm tiến trình i thoả các điều kiện sau:

- Tiến trình i chưa thực thi xong: Finish[i] = false

- Mọi nhu cầu về tài nguyên của tiến trình i đều cĩ thểđáp ứng: Need[i,j] <= Available[j], với mọi tài nguyên j

Nếu khơng cĩ tiến trình i như thế thì đến bước 3, nếu cĩ xuống bước 2 B2. Cấp phát mọi tài nguyên mà tiến trình i cần

- Cấp phát đủ tài nguyên cho tiến trình i.

Allocation[i,j]= Allocation[i,j]+Need[i,j]; ∀j

need[i,j]=0 ; ∀j

Available[j]= Available[j] - Need[i,j]; - Đánh dấu tiến trình i thực hiện xong

Finish[i] = true;

- Thu hồi lại tất cả tài nguyên đã cấp cho tiến trình i, cập nhật lại số tài nguyên j khả dụng Available[j]= Available[j] + Allocation[i,j];

- Quay lại bước 1

B3. Nếu Finish[i] = true với mọi i, thì hệ thống ở trạng thái an tồn, ngược lại là khơng an tồn.

Một phần của tài liệu Giáo trình tổng quan về DHD (Trang 83)

Tải bản đầy đủ (PDF)

(200 trang)