P - ndtien-practice-c
Download
Report
Transcript P - ndtien-practice-c
Chương 7: Deadlock
Nguyên lý hệ điều hành
Nguyễn Đức Thịnh - ĐHNNHN
Chương 7: Deadlock
Vấn đề deadlock
Mô hình hệ thống
Đặc trưng deadlock
Phương pháp xử lý deadlock
Ngăn chặn deadlock
Tránh deadlock
Phát hiện deadlock
Phục hồi sau deadlock
Nguyên lý hệ điều hành
7.2
Nguyễn Đức Thịnh - ĐHNNHN
Mục tiêu
Mô tả chi tiết về deadlock, nguyên nhân khiến cho các tiến trình chạy
đồng thời không thể hoàn thành
Một số phương pháp ngăn chặn hoặc tránh deadlock trong một hệ
thống máy tính
Nguyên lý hệ điều hành
7.3
Nguyễn Đức Thịnh - ĐHNNHN
Vấn đề deadlock
Một tập các process bị block, mỗi process giữ một tài nguyên và chờ
để nhận một tài nguyên được giữ bởi một process khác
Ví dụ
Hệ thống có 2 disk drive
P1 và P2, mỗi process đều giữ một disk drive và đều cần disk drive
còn lại
Ví dụ
semaphores A và B, khởi tạo bằng 1
P0
wait (A);
Nguyên lý hệ điều hành
P1
wait(B) wait (B);
7.4
wait(A)
Nguyễn Đức Thịnh - ĐHNNHN
Ví dụ Bridge Crossing
Lưu thông một chiều
Mỗi section của một bridge có thể xem như một resource
Nếu deadlock xuất hiện, có thể được giải quyết nếu một xe car
lùi lại (preempt resources và rollback)
Vài xe car có thể bị lùi lại nếu một deadlock xuất hiện
Starvation có thể xảy ra
Chú ý – Nhiều OS không ngăn chặn hoặc xử lý deadlock
Nguyên lý hệ điều hành
7.5
Nguyễn Đức Thịnh - ĐHNNHN
Mô hình hệ thống
Kiểu tài nguyên R1, R2, . . ., Rm
CPU cycle, không gian bộ nhớ, thiết bị I/O
Mỗi loại tài nguyên Ri có Wi thực thể.
Mỗi process sử dụng một tài nguyên như sau:
request
use
release
Nguyên lý hệ điều hành
7.6
Nguyễn Đức Thịnh - ĐHNNHN
Đặc trưng Deadlock
Deadlock có thể xuất hiện nếu bốn điều kiện sau xảy ra đồng thời:
Mutual exclusion: chỉ một process có thể sử dụng một tài
nguyên tại một thời điểm
Giữ và chờ: một process giữ ít nhất một tài nguyên đang chờ để
nhận các tài nguyên khác được giữ bởi các process khác
Không preemption: một tài nguyên chỉ có thể được giả phóng
một cách tự nguyện bởi process giữ nó, after that process has
completed its task
Đợi vòng tròn: tồn tại một tập {P0, P1, …, Pn} của các process
đang chờ đợi trong đó P0 đang đợi một tài nguyên được giữ bởi
P1, P1 đang đợi một tài nguyên được giữ bởi P2, …, Pn–1 đang đợi
một tài nguyên được giữ bởi Pn, và Pn đang đợi một tài nguyên
được giữ bởi P0.
Nguyên lý hệ điều hành
7.7
Nguyễn Đức Thịnh - ĐHNNHN
Đồ thị Phân bổ tài nguyên
Tập các đỉnh V và tập các cạnh E.
V được chia thành hai tập:
P = {P1, P2, …, Pn}, bao gồm các process trong hệ thống
R = {R1, R2, …, Rm}, bao gồm tất cả các loại tài nguyên trong
hệ thống
request edge – cạnh có hướng Pi Rj
assignment edge – cạnh có hướng Rj Pi
Nguyên lý hệ điều hành
7.8
Nguyễn Đức Thịnh - ĐHNNHN
Resource-Allocation Graph (Cont.)
Process
Kiểu tài nguyên với 4 thực thể
Pi yêu cầu thực thể của Rj
Pi
Rj
Pi đang giữ một thực thể của Rj
Pi
Rj
Nguyên lý hệ điều hành
7.9
Nguyễn Đức Thịnh - ĐHNNHN
Ví dụ về một đồ thị phân bổ tài nguyên
Nguyên lý hệ điều hành
7.10
Nguyễn Đức Thịnh - ĐHNNHN
Đồ thị phân bổ tài nguyên với một deadlock
Nguyên lý hệ điều hành
7.11
Nguyễn Đức Thịnh - ĐHNNHN
Đồ thị với một Cycle nhưng không có Deadlock
Nguyên lý hệ điều hành
7.12
Nguyễn Đức Thịnh - ĐHNNHN
Các tính chất cơ bản
Nếu đồ thị không có cycle không có deadlock
Nếu đồ thị có một cycle
nếu chỉ một instance của mỗi loại tài nguyên, thì deadlock
nếu có vài instance của mỗi loại tài nguyên, có thể có deadlock
Nguyên lý hệ điều hành
7.13
Nguyễn Đức Thịnh - ĐHNNHN
Phương thức để quản lý deadlock
Đảm bảo rằng hệ thống sẽ không bao giờ rơi vào trạng thái deadlock
Cho phép hệ thống rơi vào trạng thái deadlock và phục hồi
Bỏ qua vấn đề và cho rằng deadlock không bao giờ xuất hiện trong hệ
thống; được sử dụng bởi hầu hết các OS, kể cả UNIX
Nguyên lý hệ điều hành
7.14
Nguyễn Đức Thịnh - ĐHNNHN
Ngăn chặn Deadlock
Hạn chế các request
Mutual Exclusion – không cần đối với resource chia sẻ được;
bắt buộc đối với resource không chia sẻ được
Giữ và Chờ – phải đảm bảo rằng khi một process request một
resource, nó không giữ các resource khác
Đảm bảo process chỉ đưa ra request và được cấp phát các
resource của nó trước khi nó bắt đầu thực thi, hoặc cho phép
process đưa ra request chỉ khi nó không giữ resource nào cả
Sử dụng ít tài nguyên; có thể có starvation
Nguyên lý hệ điều hành
7.15
Nguyễn Đức Thịnh - ĐHNNHN
Ngăn chặn Deadlock
No Preemption –
Nếu một process đang giữ một số resource đưa ra request về
resource khác và không thể được cấp phát ngay thì tất cả
resource đang được giữ phải được giải phóng
Preempted resource được thêm vào danh sách các resource mà
process đang chờ
Process sẽ được restart chỉ khi nó có thể lấy lại các resource cũ
của nó, cũng như các resource mới mà nó đang request
Circular Wait – áp đặt một thứ tự lên tất cả các resource type, và yêu
cầu process đưa ra request theo thứ tự tăng dần
Nguyên lý hệ điều hành
7.16
Nguyễn Đức Thịnh - ĐHNNHN
Tránh Deadlock
Hệ thống phải có thêm một số thông tin ban đầu
Mô hình đơn giản và hiệu quả nhất yêu cầu mỗi process thông báo
số lượng nhiều nhất các resource của mỗi type mà nó có thể cần
Deadlock-avoidance algorithm sẽ chủ động xem xét trạng thái cấp
phát resource để đảm bảo không bao giờ có circular-wait
Trạng thái cấp phát resource được định nghĩa bởi số lượng
resource có trong hệ thống và số lượng đã được cấp phát, và số
lượng lớn nhất mà mỗi process có thể request.
Nguyên lý hệ điều hành
7.17
Nguyễn Đức Thịnh - ĐHNNHN
Safe State
Khi một process đưa ra requests tới một resource hiện có, hệ thống
phải quyết định xem việc cấp phát ngay có giữ cho hệ thống ở trong
safe state hay không
Hệ thống ở trong safe state nếu tồn tại một dãy <P1, P2, …, Pn> của
tất cả các process trong hệ thống sao cho mỗi đối với mỗi Pi thì các
resource mà Pi có thể đưa ra request có thể được đáp ứng bởi các
resource hiện đang sẵn sàng và resource giữ bởi các Pj, với j < i
Nói cách khác:
Nếu không đáp ứng ngay được request của Pi thì Pi có thể chờ
đến khi tất cả Pj kết thúc
Khi các Pj kết thúc, Pi nhận được resource cần thiết, thực thi và
giải phóng các resource đã được cấp, rồi kết thúc
Khi Pi kết thúc, Pi +1 nhận được các resource cần thiết, và cứ như
vậy.
Nguyên lý hệ điều hành
7.18
Nguyễn Đức Thịnh - ĐHNNHN
Các tính chất cơ bản
Nếu hệ thống ở trong safe state không có deadlock
Nếu hệ thống ở trong unsafe state có thể xuất hiện deadlock
Tránh đảm bảo hệ thống không bao giờ ở trong unsafe state.
Nguyên lý hệ điều hành
7.19
Nguyễn Đức Thịnh - ĐHNNHN
Safe, Unsafe, Deadlock State
Nguyên lý hệ điều hành
7.20
Nguyễn Đức Thịnh - ĐHNNHN
Các thuật toán tránh
Chỉ có một instance thuộc mỗi resource type
Dùng resource-allocation graph
Có nhiều instances thuộc mỗi resource type
Dùng thuật toán banker
Nguyên lý hệ điều hành
7.21
Nguyễn Đức Thịnh - ĐHNNHN
Resource-Allocation Graph
Claim edge Pi Rj tương ứng với việc process Pj có thể request
resource Rj; thể hiện bởi nét đứt
Claim edge chuyển thành request edge khi process đưa ra request
tới resource
Request edge chuyển thành assignment edge khi resource được
cấp phát cho process
Khi một resource được giải phóng bởi process, assignment edge lại
chuyển thành claim edge
Resource phải được thông báo trước cho hệ thống
Nguyên lý hệ điều hành
7.22
Nguyễn Đức Thịnh - ĐHNNHN
Resource-Allocation Graph
Nguyên lý hệ điều hành
7.23
Nguyễn Đức Thịnh - ĐHNNHN
Unsafe State trong Resource-Allocation Graph
Nguyên lý hệ điều hành
7.24
Nguyễn Đức Thịnh - ĐHNNHN
Thuật toán Resource-Allocation Graph
Giả sử rằng process Pi đưa ra request tới resource Rj
Request chỉ được chấp thuận nếu việc chuyển request edge thành
assignment edge không tạo thành cycle trong resource allocation
graph
Nguyên lý hệ điều hành
7.25
Nguyễn Đức Thịnh - ĐHNNHN
Thuật toán Banker
Nhiều instance
Mỗi process phải đưa ra thông báo trước về số lượng nhiều nhất nó
có thể dùng
Khi một process đưa ra request tới một resource nó có thể phải chờ
Khi một process nhận được tất cả các resource cần thiết thì nó phải
trả lại sau một khoảng thời gian hữu hạn
Nguyên lý hệ điều hành
7.26
Nguyễn Đức Thịnh - ĐHNNHN
Cấu trúc dữ liệu cho thuật toán Banker
Đặt n = số lượng process và m = số lượng resource type.
Available: Vector có chiều dài m. Nếu available [j] = k thì có k
instance thuộc resource type Rj sẵn sàng
Max: ma trận n x m. Nếu Max [i,j] = k thì process Pi có thể đưa ra
request nhiều nhất là k instance thuộc resource type Rj
Allocation: ma trận n x m. Nếu Allocation[i,j] = k thì Pi đang được
phân bổ k instance thuộc Rj
Need: ma trận n x m. Nếu Need[i,j] = k thì Pi có thể cần thêm k
instance thuộc Rj để hoàn thành
Need [i,j] = Max[i,j] – Allocation [i,j]
Nguyên lý hệ điều hành
7.27
Nguyễn Đức Thịnh - ĐHNNHN
Safety Algorithm
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 = Available
Finish [i] = false với i = 0, 1, …, n- 1
2. Tìm i sao cho:
(a) Finish [i] = false và
(b) Needi Work
Nếu không có i như vậy, chuyển sang bước 4
3. Work = Work + Allocationi
Finish[i] = true
Chuyển tới bước 2
4. Nếu Finish [i] == true với mọi i thì hệ thống ở trong safe state
Nguyên lý hệ điều hành
7.28
Nguyễn Đức Thịnh - ĐHNNHN
Thuật toán Resource-Request cho Process Pi
Requesti = request vector của process Pi. Nếu Requesti [j] = k thì
process Pi cần k instance thuộc resource type Rj
1. If Requesti Needi chuyển sang bước 2. Nếu không thì raise
error condition, vì process vượt quá maximum claim của nó
2. If Requesti Available, chuyến sang step 3. Nếu không Pi phải
chờ, vì resource chưa sẵn sàng
3. Giả sử phân bổ resource cho Pi bằng cách thay đổi state như sau:
Available = Available – Request;
Allocationi = Allocationi + Requesti;
Needi = Needi – Requesti;
Nếu safe resource được phân bổ cho Pi
Nếu unsafe Pi phải chờ, và state phân bổ cũ được lưu lại
Nguyên lý hệ điều hành
7.29
Nguyễn Đức Thịnh - ĐHNNHN
Ví dụ thuật toán Banker
5 process P0 tới P4;
3 resource type:
A (10 instance), B (5 instance) và C (7 instance)
Trạng thái tại thời điểm T0:
Allocation
Nguyên lý hệ điều hành
Max
Available
ABC
ABC
ABC
P0
010
753
332
P1
200
322
P2
302
902
P3
211
222
P4
002
433
7.30
Nguyễn Đức Thịnh - ĐHNNHN
Ví dụ
Ma trận Need được định nghĩa bằng Max – Allocation
Need
ABC
P0
743
P1
122
P2
600
P3
011
P4
431
Hệ thống ở trong safe state vì dãy < P1, P3, P4, P2, P0> thỏa mãn điều
kiện safety
Nguyên lý hệ điều hành
7.31
Nguyễn Đức Thịnh - ĐHNNHN
Ví dụ: P1 Request (1,0,2)
Kiểm tra Request Available (nghĩa là (1,0,2) (3,3,2) true)
Allocation
Need
Available
ABC
ABC
ABC
P0
010
743
230
P1
302
020
P2
301
600
P3
211
011
P4
002
431
Gọi safety algorithm chỉ ra dãy < P1, P3, P4, P0, P2> thỏa mãn yêu cầu
safety
Request (3,3,0) của P4 có được chấp thuận?
Request (0,2,0) của P0 có được chấp thuận?
Nguyên lý hệ điều hành
7.32
Nguyễn Đức Thịnh - ĐHNNHN
Phát hiện Deadlock
Cho phép hệ thống rơi vào deadlock state
Detection algorithm
Recovery scheme
Nguyên lý hệ điều hành
7.33
Nguyễn Đức Thịnh - ĐHNNHN
Một Instance thuộc mỗi Resource Type
Duy trì wait-for graph
Node là các process
Pi Pj nếu Pi đang đợi Pj
Định kì gọi thuật toán tìm kiếm cycle trong graph. Nếu có cycle, tồn
tại deadlock
Nguyên lý hệ điều hành
7.34
Nguyễn Đức Thịnh - ĐHNNHN
Resource-Allocation Graph và
Wait-for Graph
Resource-Allocation Graph
Nguyên lý hệ điều hành
7.35
Wait-for graph tương ứng
Nguyễn Đức Thịnh - ĐHNNHN
Vài Instance thuộc mỗi Resource Type
Available: vector chiều dài m cho biết số lượng resource đang sẵn
sàng của mỗi type.
Allocation: ma trận n x m cho biết số lượng resource của mỗi type
đang được phân bổ cho mỗi process.
Request: ma trận n x m cho biết request hiên tại của mỗi process.
Nếu Request [i,j] = k thì process Pi đang request k instance của
resource type Rj.
Nguyên lý hệ điều hành
7.36
Nguyễn Đức Thịnh - ĐHNNHN
Detection Algorithm
1. Gọi Work vaf Finish là các vector chiều dài m và n, tương ứng. Khởi
tạo:
(a) Work = Available
(b) Với i = 1,2, …, n, nếu Allocationi 0 thì
Finish[i] = false; ngược lại, Finish[i] = true
2. Tìm i sao cho:
(a) Finish[i] == false
(b) Requesti Work
Nếu không có i như vậy, chuyển tới bước 4
Nguyên lý hệ điều hành
7.37
Nguyễn Đức Thịnh - ĐHNNHN
Detection Algorithm
3. Work = Work + Allocationi
Finish[i] = true
Chuyển tới bước 2
4. Nếu tồn tại i, Finish[i] == false, 1 i n, thì hệ thống ở trong deadlock
state. Hơn nữa, nếu Finish[i] == false, thì Pi bị deadlock
Nguyên lý hệ điều hành
7.38
Nguyễn Đức Thịnh - ĐHNNHN
Ví dụ Detection Algorithm
Năm process P0 tới P4; ba resource type
A (7 instance), B (2 instance), và C (6 instance)
Snapshot tại thời điểm T0:
Allocation
ABC
P00 1 0
P1
P2
P3
P4
Request
ABC
000
200
Available
ABC
000
202
303
211
002
000
100
002
Dãy <P0, P2, P3, P1, P4> sẽ cho Finish[i] = với mọi i
Nguyên lý hệ điều hành
7.39
Nguyễn Đức Thịnh - ĐHNNHN
Ví dụ
P2 request thêm một instance của type C
Request
ABC
P0
000
P1
201
P2
001
P3
100
P4
002
Trạng thái của hệ thống?
Có thể lấy lại resource đang giữ bởi process P0, nhưng không đủ
resource cho các process khác
Tồn tại deadlock, bao gồm các process P1, P2, P3, và P4
Nguyên lý hệ điều hành
7.40
Nguyễn Đức Thịnh - ĐHNNHN
Sử dụng Detection-Algorithm
Khi nào gọi phụ thuộc vào:
Deadlock có thường xuyên xuất hiện?
Bao nhiêu process cần phải roll back?
Một cho mỗi cycle
Nếu detection algorithm được gọi tùy ý, có thể có nhiều cycle trong
resource graph và ta không thể chỉ ra process nào trong số các
process bị deadlock gây ra deadlock.
Nguyên lý hệ điều hành
7.41
Nguyễn Đức Thịnh - ĐHNNHN
Phục hồi từ Deadlock:
Kết thúc Process
Abort tất cả các process bị deadlock
Abort một process mỗi lần cho đến khi không còn deadlock cycle
Abort theo thứ tự nào?
Độ ưu tiên của process
Process đã thực thi được bao lâu và cần bao lâu để hoàn tất
Resource mà process đã sử dụng
Resource mà process cần để hoàn tất
Bao nhiêu process cần phải kết thúc
Process là interactive hay batch?
Nguyên lý hệ điều hành
7.42
Nguyễn Đức Thịnh - ĐHNNHN
Phục hồi từ Deadlock:
Resource Preemption
Chọn một victim –cost tối thiểu
Rollback – quay trở lại một safe state, khởi động lại process cho
state đó
Starvation – một process có thể luôn bị chọn làm victim, phải tính
cả số lượng rollback trong cost factor
Nguyên lý hệ điều hành
7.43
Nguyễn Đức Thịnh - ĐHNNHN
Hết chương 7
Nguyên lý hệ điều hành
Nguyễn Đức Thịnh - ĐHNNHN