Ch ương 7: Deadlock (khoá chết)

48
ating System Concepts with Java – 7 th Edition, Nov 15, 2006 Silberschatz, Galvin and Gagne ©2007 Chương 7: Deadlock (khoá chết) Nguyễn Đôn Quang Trí Nguyễn Thanh Tuấn

description

Ch ương 7: Deadlock (khoá chết). Nguyễn Đôn Quang Trí Nguyễn Thanh Tuấn. Ch ương 7: Deadlock. Các vấn đề về Deadlock Mô hình hệ thống Mô tả Deadlock Phương pháp để xử lý Deadlock Phòng chống Deadlock Tránh Deadlock Phát hiện Deadlock Phục hồi từ Deadlock. Mục đích của chương. - PowerPoint PPT Presentation

Transcript of Ch ương 7: Deadlock (khoá chết)

Page 1: Ch ương  7:   Deadlock (khoá chết)

Operating System Concepts with Java – 7th Edition, Nov 15, 2006 Silberschatz, Galvin and Gagne ©2007

Chương 7: Deadlock (khoá chết)

Nguyễn Đôn Quang TríNguyễn Thanh Tuấn

Page 2: Ch ương  7:   Deadlock (khoá chết)

7.2 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Chương 7: Deadlock

Các vấn đề về Deadlock Mô hình hệ thống Mô tả Deadlock Phương pháp để xử lý Deadlock Phòng chống Deadlock Tránh Deadlock Phát hiện Deadlock Phục hồi từ Deadlock

Page 3: Ch ương  7:   Deadlock (khoá chết)

7.3 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Mục đích của chương

Để mô tả deadlocks, nhằm ngăn chặn hoàn toàn các tiến trình xảy ra từ việc hoàn thành công việc của chúng.

Để giới thiệu một số các phương pháp khác nhau hoặc tránh deadlock trong một hệ thống máy tính.

Page 4: Ch ương  7:   Deadlock (khoá chết)

7.4 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Các vấn đề Deadlock

Là một tập các tiến trình mỗi tiến trình nắm giữ một tài nguyên và việc chờ để thu được một tài nguyên khác được nắm giữ bởi một tiến trình khác trong tập.

Ví dụ Hệ thống có 2 đĩa cứng. Tiến trình P1 và P2 mỗi tiến trình nắm giữ một đĩa và

mỗi nhu cầu của một số khác. Ví dụ

Tín hiệu cờ A và B, khởi tạo ban đầu là 1

P0 P1

chờ (A); chờ (B)

chờ (B); chờ (A)

Page 5: Ch ương  7:   Deadlock (khoá chết)

7.5 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Ví dụ qua cầu

Sự giao thông 1 chiều. Tất cả các phần của một cầu có thể được

xem như là một nguồn tài nguyên. Nếu deadlock xảy ra, nó có thể được giải

quyết nếu một chiếc xe hơi lùi lại (ưu tiên cho các nguồn tài nguyên và phục hồi).

Một số chiếc xe có thể bị tắc nghẽn nếu deadlock xảy ra.

Page 6: Ch ương  7:   Deadlock (khoá chết)

7.6 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Mô hình hệ thống

Nguồn tài nguyên loại R1, R2, . . ., Rm

Chu kỳ CPU , không gian nhớ, thiết bị vào/ra

Mỗi loại tài nguyên Ri lại có Wi trường.

Mỗi tiến trình lại sử dụng lại sử dụng một nguồn tài nguyên như sau: Yêu cầu Sử dụng Thoát

Page 7: Ch ương  7:   Deadlock (khoá chết)

7.7 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Mô tả Deadlock

Loại trừ lẫn nhau: chỉ một tiến trình hiện thời có thể sử dụng một nguồn tài nguyên.

Giữ và chờ đợi: Một tiến trình nắm giữ ít nhất một nguồn tài nguyên là việc chờ đợi để thu được bổ sung nguồn tài nguyên được nắm giữ bởi các tiến trình khác.

Không có sự ưu tiên: Một nguồn tài nguyên có thể được giả phóng chỉ tự ý bởi tiến trình nắm giữ nó, sau đó tiến trình đó đã hoàn thành tác vụ của nó.

Chu trình chờ đợi: một tập hợp các tiến trình {P0, P1, …, P0} đang chờ mà trong đó P0 đang chờ một nguồn tài nguyên được nắm giữ bởi P1, P1 đang chờ tài nguyên được giữ bởi P2, …, Pn–1 đang chờ tài nguyên đang được giữ bởi quá trình Pn, and P0 đang chờ tài nguyên đang được giữ bởi quá trình P0.

Deadlock có thể xảy ra nếu 4 trạng thái giữ xảy ra cùng một lúc.

Page 8: Ch ương  7:   Deadlock (khoá chết)

7.8 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Đồ thị cấp phát tài nguyên

Một tập các đỉnh V được chia làm hai loại nút: P = {P1, P2, …, Pn}, là tập hợp các quá trình

hoạt động trong hệ thống. R = {R1, R2, …, Rm}, là tập hợp chứa tất cả

các loại tài nguyên trong hệ thống. Cạnh yêu cầu – hướng cạnh từ Pi Rj

Cạnh gán - hướng cạnh từ Rj Pi

Đồ thị này chứa một tập các đỉnh V và tập hợp các cạnh E

Page 9: Ch ương  7:   Deadlock (khoá chết)

7.9 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Đồ thị cấp phát tài nguyên (Tiếp.)

Tiến trình

Loại tài nguyên với 4 thể hiện

Pi yêu cầu thể hiện của Rj

Pi đang giữ một đối tượng của Rj

Pi

Pi

Rj

Rj

Page 10: Ch ương  7:   Deadlock (khoá chết)

7.10 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Một ví dụ về đồ thị cấp phát tài nguyên

Page 11: Ch ương  7:   Deadlock (khoá chết)

7.11 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Đồ thị cấp phát tài nguyên với một deadlock

Page 12: Ch ương  7:   Deadlock (khoá chết)

7.12 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Đồ thị cấp phát tài nguyên có chu trình nhưng không có deadlock

Page 13: Ch ương  7:   Deadlock (khoá chết)

7.13 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Tóm lại

Nếu đồ thị cấp phát tài nguyên không có chu trình không có deadlock.

Nếu đồ thị cấp phát tài nguyên có chu trình Mỗi loại tài nguyên có đúng một thể

hiện, thì có deadlock. Nếu một loại tài ngugyên có nhiều thể

hiện thì có thể có deadlock.

Page 14: Ch ương  7:   Deadlock (khoá chết)

7.14 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Ví dụ Java về Deadlock

Luồng A Luồng B

Page 15: Ch ương  7:   Deadlock (khoá chết)

7.15 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Ví dụ về Java Deadlock

Deadlock có thể có nếu:

Luồng A -> khoá Y -> Luồng B -> khoá X -> Luồng A

Page 16: Ch ương  7:   Deadlock (khoá chết)

7.16 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Xử lý Deadlocks trong Java

Page 17: Ch ương  7:   Deadlock (khoá chết)

7.17 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Xử lý Deadlocks trong Java

Page 18: Ch ương  7:   Deadlock (khoá chết)

7.18 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Các phương pháp xử lý Deadlocks

Đảm bảo rằng hệ thống sẽ không bao giờ rơi vào tình trạng deadlock.

Có thể cho phép hệ thống đi vào deadlock, phát hiện nó và phục hồi.

Có thể bỏ qua vấn đề này và giả vờ deadlock không bao giờ xảy ra trong hệ thống. Giải pháp này được dùng trong nhiều hệ điều hành kể cả UNIX.

Page 19: Ch ương  7:   Deadlock (khoá chết)

7.19 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Ngăn chặn deadlock

Loại trừ hỗ tương – không cần thiết để chia sẻ tài nguyên; một số tài nguyên về thực chất không thể chia sẻ.

Giữ và chờ cấp thêm tài nguyên – phải đảm bảo rằng khi một tiến trình yêu cầu cấp thêm tài nguyên, nó không nắm giữ nguồn tài nguyên nào khác. Một giao thức có thể được dùng là đòi hỏi mỗi quá trình

yêu cầu và được cấp phát tất cả tài nguyên trước khi nó bắt đầu thực thi, hoặc một giao thức khác cho phép một quá trình yêu cầu tài nguyên chỉ khi quá trình này không có tài nguyên nào..

Tái sử dụng nguồn tài nguyên thấp cạn kiệt; có thể bị mất đi.

Ngăn chặn deadlock có thể được thực hiện bởi các cách sau.

Page 20: Ch ương  7:   Deadlock (khoá chết)

7.20 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Ngăn chặn deadlock (Tiếp.)

Không đòi lại tài nguyên từ quá trình đang giữ chúng – Nếu một quá trình đang giữ một số tài nguyên và yêu

cầu tài nguyên khác mà không được cấp phát tức thì tới nó (nghĩa là, quá trình phải chờ) thì tất cả tài nguyên hiện đang giữ được đòi lại.

Những tài nguyên bị đòi lại được thêm tới danh sách các tài nguyên mà quá trình đang chờ.

Tiến trình sẽ được khởi động lại chỉ khi nó có thể nhận lại tài nguyên cũ của nó cũng như các tài nguyên mới mà nó đang yêu cầu.

Chu trình chờ đợi – áp đặt toàn bộ thứ tự của tất cả loại tài nguyên và đòi hỏi mỗi quá trình trong thứ tự tăng của số lượng.

Page 21: Ch ương  7:   Deadlock (khoá chết)

7.21 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Tránh deadlock

Đơn giản và hữu ích nhất yêu cầu mỗi quá trình khai báo số lớn nhất tài nguyên của mỗi loại mà nó cần.

Xây dựng một giải thuật đảm bảo hệ thống sẽ không bao giờ đi vào trạng thái deadlock.

Trạng thái cấp phát tài nguyên được định nghĩa bởi số tài nguyên sẳn dùng và tài nguyên được cấp phát và số yêu cầu tối đa của các quá trình.

Yêu cầu hệ thống thông tin bổ sung về cách tài nguyên được yêu cầu.

Page 22: Ch ương  7:   Deadlock (khoá chết)

7.22 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Trạng thái an toàn Khi một tiến trình yêu cầu một nguồn tài nguyên sẵn có,hệ

thống phải quyết định lập tức nếu nguồn tài nguyên được cấp rời khỏi hệ thống trong một trạng thái an toàn.

Hệ thống trong trạng thái an toàn nếu ở đó tồn tại một thứ tự <P1, P2, …, Pn> cho tất cả các tiến trình, đối với mỗi thứ tự Pi, các tài nguyên mà Pi yêu cầu vẫn có thể được thoả mãn bởi tài nguyên hiện có cộng với các tài nguyên được giữ bởi tất cả Pj, với j<i.

Trong trường hợp này: Nếu những tài nguyên mà quá trình Pi yêu cầu không

sẳn dùng tức thì thì Pi có thể chờ cho đến khi tất cả Pj hoàn thành.

Khi chúng hoàn thành, Pi có thể đạt được tất cả những tài nguyên nó cần, hoàn thành các tác vụ được gán, trả về những tài nguyên được cấp phát cho nó và kết thúc.

Khi Pi kết thúc, Pi+1 có thể đạt được các tài nguyên nó cần

Page 23: Ch ương  7:   Deadlock (khoá chết)

7.23 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Tóm lại

Nếu một hệ thống ở trong trạng thái an toàn Không có các deadlock.

Nếu một hệ thống ở trong trạng thái không an toàn có thể xảy ra deadlock.

Tránh deadlock chắc chắn rằng hệ thống sẽ không bao giờ đi vào trạng thái không an toàn.

Page 24: Ch ương  7:   Deadlock (khoá chết)

7.24 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

An toàn, Không an toàn, trạng thái deadlock

Page 25: Ch ương  7:   Deadlock (khoá chết)

7.25 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Giải thuật tránh deadlock

Với một thể hiện của mỗi loại nguồn tài nguyên. Sử dụng một đồ thị cấp phát tài nguyên.

Với nhiều thể hiện của mỗi loại tài nguyên.Sử dụng giải thuật của Banker.

Page 26: Ch ương  7:   Deadlock (khoá chết)

7.26 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Ý tưởng đồ thị cấp phát tài nguyên

Một cạnh thỉnh cầu Pi Rj hiển thị quá trình Pi có thể yêu cầu tài nguyên Rj; được thực hiện bởi một dấu đứt khoảng.

Khi một tiến trình yêu cầu một nguồn tài nguyên cạnh thỉnh cầu chuyển tới cạnh yêu cầu .

Cạnh yêu cầu chuyển tới một cạnh gán khi nguồn tài nguyên cấp được cấp phát cho tiến trình.

Khi một nguồn tài nguyên được giải phóng bởi một tiến trình, cạnh gán chuyển trở lại thành cạnh thỉnh cầu.

Các tài nguyên phải được yêu cầu trước trong hệ thống.

Page 27: Ch ương  7:   Deadlock (khoá chết)

7.27 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Đồ thị cấp phát tài nguyên

Page 28: Ch ương  7:   Deadlock (khoá chết)

7.28 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Trạng thái không an toàn trong đồ thị cấp phát tài nguyên

Page 29: Ch ương  7:   Deadlock (khoá chết)

7.29 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Giải thuật của đồ thị cấp phát tài nguyên

Giả sử rằng Pi yêu cầu tài nguyên Rj.

Yêu cầu có thể được gán chỉ nếu chuyển cạnh yêu cầu tới cạnh gán không dẫn đến việc hình thành chu trình trong đồ thị cấp phát tài nguyên.

Page 30: Ch ương  7:   Deadlock (khoá chết)

7.30 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Giải thuật Banker

Nhiều thể hiện của mỗi loại tài nguyên.

Mỗi tiến trình phải khai báo số tối đa các thể hiện của mỗi loại tài nguyên mà nó cần.

Khi một tiến trình yêu cầu một nguồn tài nguyên nó có thể phải chờ đợi.

Khi một tiến trình nhận được tất cả các nguồn tài nguyên của nó, nó phải trả lại chúng trong một khoảng thời gian có hạn.

Page 31: Ch ương  7:   Deadlock (khoá chết)

7.31 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Cấu trúc dữ liệu cho giải thuật Banker

Available: một vector có chiều dài m hiển thị số lượng tài nguyên sẳn dùng của mỗi loại. Nếu Available[j]= k, có k thể hiện của loại tài nguyên Rj sẳn dùng.

Max: một ma trận n x m định nghĩa số lượng tối đa yêu cầu của mỗi quá trình. Nếu Max[i, j] = k, thì quá trình Pi có thể yêu cầu nhiều nhất k thể hiện của loại tài nguyên Rj.

Allocation: một ma trận n x m định nghĩa số lượng tài nguyên của mỗi loại hiện được cấp tới mỗi quá trình. Nếu Allocation[i, j] = k, thì quá trình Pi hiện được cấp k thể hiện của loại tài nguyên Rj.

Need: một ma trận n x m hiển thị yêu cầu tài nguyên còn lại của mỗi quá trình. Nếu Need[i, j] = k, thì quá trình Pi có thể cần thêm k thể hiện của loại tài nguyên Rj để hoàn thành tác vụ của nó. Chú ý rằng,

Need [i,j] = Max[i,j] – Allocation [i,j].

Gọi n là số quá trình trong hệ thống và m là số loại tài nguyên trong hệ thống.

Page 32: Ch ương  7:   Deadlock (khoá chết)

7.32 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Giải thuật an toàn

1. Gọi Work và Finish là các vector có chiều dài m và n tương ứng. Khởi tạo:

Work = AvailableFinish [i] = false cho i = 0, 1, …, n- 1.

2. Tìm i thoả: (a) Finish [i] = false

(b) Needi WorkNếu không có i nào thỏa, di chuyển tới bước 4.

3. Work = Work + Allocationi

Finish[i] = truechuyển ttới bước 2.

4. If Finish [i] == true cho tất cả i, thì hệ thống ở trong trạng thái an toàn.

Page 33: Ch ương  7:   Deadlock (khoá chết)

7.33 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Giải thuật yêu cầu tài nguyên cho tiến trình Pi

Cho Request là vector yêu cầu cho quá trình Pi. Nếu Requesti [j] = k thì tiến trình Pi muốn k thể hiện của loại tài nguyên instances of resource type Rj..

1. Nếu Requesti Needi chuyển tới bước 2. Ngược lại, phát sinh một điều kiện lỗi vì quá trình vượt quá yêu cầu tối đa của nó.

2. Nếu Requesti Available, chuyển tới bước 3. Ngược lại Pi phải chờ, vì tài nguyên không sẵn có.

3. Giả sử hệ thống cấp phát các tài nguyên được yêu cầu tới tiến trình Pi bằng cách thay đổi trạng thái sau:

Available = Available – Request;

Allocationi = Allocationi + Requesti;

Needi = Needi – Requesti; Nếu an toàn tài nguyên được cấp phát cho Pi. Nếu không an toàn Pi phải chờ, và trạng thái cấp phát tài

nguyên cũ được phục hồi.

Page 34: Ch ương  7:   Deadlock (khoá chết)

7.34 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Ví dụ cho thuật giải Banker

5 tiến trình P0 đến P4;

3 loại tài nguyên:

A (10 thể hiện), B (5 thể hiện), and C (7 thể hiện). Trạng thái hệ thống ở thời điểm T0:

Allocation Max Available

A B C A B C A B C

P0 0 1 0 7 5 3 3 3 2

P1 2 0 0 3 2 2

P2 3 0 2 9 0 2

P3 2 1 1 2 2 2

P4 0 0 2 4 3 3

Page 35: Ch ương  7:   Deadlock (khoá chết)

7.35 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Ví dụ (Tiếp.)

Nội dung ma trận Need được định nghĩa là Max-Allocation và là:

Need

A B C

P0 7 4 3

P1 1 2 2

P2 6 0 0

P3 0 1 1

P4 4 3 1

Hệ thống hiện ở trong trạng thái an toàn thứ tự thoả tiêu chuẩn < P1, P3, P4, P2, P0>.

Page 36: Ch ương  7:   Deadlock (khoá chết)

7.36 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Ví dụ: P1 Yêu cầu (1,0,2)

Kiểm tra Request Available (nghĩa là, (1,0,2) (3,3,2) true.

Allocation Need Available

A B C A B C A B C

P0 0 1 0 7 4 3 2 3 0

P1 3 0 2 0 2 0

P2 3 0 1 6 0 0

P3 2 1 1 0 1 1

P4 0 0 2 4 3 1

Thực thi giải thuật an toàn của chúng ta và tìm thứ tự< P1, P3, P4, P0, P2> thỏa yêu cầu an toàn.

Một yêu cầu (3,3,0) bởi P4 có thể được gán không?

Một yêu cầu (0,2,0) bởi P0 có thể được gán không?

Page 37: Ch ương  7:   Deadlock (khoá chết)

7.37 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Phát hiện Deadlock

Cho phép hệ thống rơi vào tình trạng deadlock. Giải thuật để phát hiện deadlock. Ý tưởng phục hồi.

Page 38: Ch ương  7:   Deadlock (khoá chết)

7.38 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Một thể hiện của mỗi loại tài nguyên

Đồ thị chờ wait-for Các nút là các tiến trình. Pi Pj nếu Pi đang chờ cho Pj.

Deadlock tồn tại trong hệ thống nếu và chỉ nếu đồ thị chờ chứa chu trình. Để phát hiện deadlock, hệ thống cần duy trì đồ thị chờ và định kỳ gọi giải thuật để tìm kiếm chu trình trong đồ thị.

Một giải thuật phát hiện chu trình trong đồ thị yêu cầu độ phức tạp n2 thao tác, ở đây n là số cạnh của đồ thị.

Page 39: Ch ương  7:   Deadlock (khoá chết)

7.39 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Đồ thị cấp phát tài nguyên và đồ thị chờ.

Đồ thị cấp phát tài nguyên Đồ thị chờ tương ứng

Page 40: Ch ương  7:   Deadlock (khoá chết)

7.40 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Nhiều thể hiện của một loại tài nguyên

Available: một vector độ dài m hiển thị số lượng sẵn có của mỗi loại.

Allocation: Một ma trận n x m định nghĩa số lượng tài nguyên của mỗi loại hiện được cấp phát tới mỗi tiến trình.

Request: Một ma trận n x m hiển thị yêu cầu hiện tại của mỗi tiến trình. Nếu Request [ij] = k, thì tiến trình Pi đang yêu cầu k nữa của loại tài nguyên Rj.

Page 41: Ch ương  7:   Deadlock (khoá chết)

7.41 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Giải thuật phát hiên Deadlock

1. Gọi Work và Finish là 2 vector có chiều dài m and n tương ứng, khởi tạo:

(a) Work = Available

(b)Cho i = 1,2, …, n, nếu Allocationi 0, thì Finish[i] = false; ngược lại, Finish[i] = true.

2. Tìm chỉ số i thoả:

(a)Finish[i] == false

(b)Requesti Work

Nếu không có i nào thoả, chuyển tới bước 4.

Page 42: Ch ương  7:   Deadlock (khoá chết)

7.42 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Thuật giải tránh Deadlock (Tiếp.)

3. Work = Work + Allocationi

Finish[i] = trueChuyển tới bước 2.

4. Nếu Finish[i] == false, cho một vài i, 1 i n, thì hệ thống đang ở tình trạng deadlock. Ngoài ra, nếu Finish[i] == false, thì tiến trình Pi bị deadlock.

Giải thuật này yêu cầu độ phức tạp O(m x n2) để phát hiện hệ thống có ở trong tình trạng deadlock hay không.

Page 43: Ch ương  7:   Deadlock (khoá chết)

7.43 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Ví dụ cho giải thuật tránh Deadlock

5 tiến trình P0 đến P4; 3 loại tài nguyên A (7 thể hiện), B (2 thể hiện), and C (6 thể hiện).

Ở thời điểm T0 trạng thái cấp phát tài nguyên như sau:

Allocation Request Available

A B C A B C A B C

P0 0 1 0 0 0 0 0 0 0

P1 2 0 0 2 0 2

P2 3 0 3 0 0 0

P3 2 1 1 1 0 0

P4 0 0 2 0 0 2

Thứ tự <P0, P2, P3, P1, P4> sẽ dẫn đến Finish[i] = true cho tất cả i.

Page 44: Ch ương  7:   Deadlock (khoá chết)

7.44 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Ví dụ (Tiếp.)

P2 yêu cầu thêm thể hiện của loại C.

Request

A B C

P0 0 0 0

P1 2 0 1

P2 0 0 1

P3 1 0 0

P4 0 0 2 Trạng thái của hệ thống?

Có thể đòi lại tài nguyên được giữ bởi tiến trình P0, but insufficient resources to fulfill other processes; requests.

Deadlock tồn tại, bao gồm các tiến trình P1, P2, P3, and P4.

Page 45: Ch ương  7:   Deadlock (khoá chết)

7.45 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Sử dụng giải thuật phát hiện Deadlock

Khi nào thì chúng ta nên nạp giải thuật phát hiện deadlock? Câu trả lời phụ thuộc vào hai yếu tố:

Deadlock có khả năng xảy ra thường xuyên như thế nào? Bao nhiêu quá trình sẽ bị ảnh hưởng bởi

deadlock khi nó sẽ ra? Phân chia cho mỗi chu kỳ.

Nếu giải thuật phát hiện deadlock được nạp trong những thời điểm bất kỳ, thì có nhiều chu trình trong đồ thị tài nguyên. Chúng ta không thể nói quá trình nào của nhiều quá trình bị deadlock “gây ra” deadlock.

Page 46: Ch ương  7:   Deadlock (khoá chết)

7.46 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Phục hồi Deadlock: Kết thúc tiến trình

Huỷ bỏ tất cả các tiến trình bị deadlock. Hủy bỏ một tiến trình tại thời điểm cho đến khi chu trình

deadlock bị xóa. Chúng ta nên chọn tiến trình nào để huỷ bỏ?

Độ ưu tiên của quá trình. Tiến trình đã được tính toán bao lâu và bao lâu nữa quá

trình sẽ tính toán trước khi hoàn thành tác vụ được chỉ định của nó.

Bao nhiêu và loại tài nguyên gì tiến trình đang sử dụng. Bao nhiêu tài nguyên nữa tiến trình cần để hoàn thành. Bao nhiêu tiến trình sẽ cần được kết thúc. Tiến trình là giao tiếp hay dạng bó?

Page 47: Ch ương  7:   Deadlock (khoá chết)

7.47 Silberschatz, Galvin and Gagne ©2007Operating System Concepts with Java – 7th Edition, Nov 15, 2006

Phục hồi Deadlock: Lấy lại tài nguyên

Chọn nạn nhân – tối thiểu chi phí. Trở lại trạng thái trước Rollback – phục hồi tiến trình

tới trạng thái an toàn, khởi động lại từ trạng thái gần nhất trước đó.

Đói tài nguyên – cùng tiến trình luôn được chọn như là nạn nhân, bao gồm số lượng phục hồi trong yếu tố chi phí.

Page 48: Ch ương  7:   Deadlock (khoá chết)

Operating System Concepts with Java – 7th Edition, Nov 15, 2006 Silberschatz, Galvin and Gagne ©2007

Kết thúc chương 7