Professional Documents
Culture Documents
Buoi8 - Chuong04 - TT - Dieu Khien Truy Xuat Dong Thoi
Buoi8 - Chuong04 - TT - Dieu Khien Truy Xuat Dong Thoi
Buoi8 - Chuong04 - TT - Dieu Khien Truy Xuat Dong Thoi
Chương 4 (tt):
Những vấn đề khác trong
điều khiển đồng thời
IS Ví dụ
T1 T2 A B
S
25 25
Lock(A); Read(A,t)
t:=t+100; Write(A,t) 125
Lock(B); Unlock(A)
Lock(A); Read(A,s)
s:=s*2; Write(A,s) 250
Lock(B)
Read(B,t); t:=t+100 Chờ
Write(B,t); Unlock(B) 125
Lock(B); Ulock(A)
Read(B,t); t:=t*2
Write(B,t); Unlock(B) 250
1
IS Ví dụ (tt)
T1 T2 A B
S
25 25
Lock(A); Read(A,t)
t:=t+100; Write(A,t) 125
Lock(B); Unlock(A)
Lock(A); Read(A,s)
s:=s*2; Write(A,s) 250
Lock(B)
Read(B,t); Chờ
Abort; Unlock(B);
Lock(B); Ulock(A)
Read(B,t); t:=t*2
Write(B,t); Unlock(B) 50
IS Ví dụ (tt)
T1 T2 T3 A B C
S RT=0 RT=0 RT=0
200 150 175 WT=0 WT=0 WT=0
RT=0
Write(B) WT=150
RT=200
Read(B)
WT=150
RT=150
Read(A) WT=0
RT=175
Read(C) WT=0
T1 T2 T3 T4
. . . .
. . . .
. . . .
. .
w(A) . .
. .
. .
. r(A) .
. .
. .
. .
. . r(A)
abort . .
.
abort .
abort
2
IS Lịch khả phục hồi
Ti Tj
. .
. .
. .
.
w(A) .
.
.
. r(A)
.
. commit
.
.
abort
3
IS Lịch khả phục hồi (tt)
10
Nhận xét
– Muốn khôi phục đôi khi cần quay lui dây chuyền
– Nhưng quay lui dây chuyền không thể xảy ra
• Tốn nhiều chi phí
11
Ti Tj
. .
. .
. .
.
w(A) .
.
commit .
.
r(A)
Các giao tác chỉ đọc những giá trị đã được hoàn tất
12
4
IS Lịch không quay lui dây chuyền (tt)
Các lịch ngăn ngừa quay lui dây chuyền đều khả phục hồi
13
14
IS Deadlock
T1 T2 T1 T2
S S
Lock(A) RLock(A)
Read(A) Read(A)
Lock(B) RLock(A)
Read(B) Read(A)
Write(A) WLock(A)
Write(B) WLock(A)
Lock(B) Chờ
Chờ
Lock(A)
Chờ
Chờ
Nâng cấp khóa
15
5
IS Deadlock (tt)
16
Phát hiện
– Cho phép trạng thái deadlock xảy ra và sau đó cố gắng khôi phục lại hệ
thống
• Chọn 1 giao tác để rollback
– Phương pháp
• Đồ thị chờ (wait-for graph)
Ngăn ngừa
– Quản lý các giao tác sao cho không bao giờ có deadlock
– Phương pháp
• Sắp thứ tự tài nguyên (resource ordering)
• Timeout
• Wait-die
• Wound-wait
17
IS Đồ thị chờ
Đồ thị gồm
– Đỉnh là các giao tác đang giữ khóa hoặc đang chờ khóa
– Cung đi từ đỉnh T sang U khi
• U đang giữ khóa trên đơn vị dữ liệu A
• T đang chờ khóa trên A
• T không thể khóa đơn vị dữ liệu A nếu U không giải phóng khóa
18
6
IS Ví dụ
T1 T2 T3 T4
1 L(A); R(A)
2 L(C); R(C)
3 L(B); R(B)
4 L(D); R(D)
5 L(A)
6 L(C)
Chờ
7 L(A)
Chờ
8 L(B)
Chờ
Chờ
T1 T2 T3 T4
19
IS Ví dụ (tt)
Chọn T1 để rollback
1
T1
L(A); R(A)
T2 T3 T4
- T1 giải phóng khóa đang giữ trên A
2 L(C); R(C) - T2 hoặc T4 sẽ được khóa trên A
3
4
L(B); R(B)
L(D); R(D)
- Giả sử T2 xin được khóa trên A, T2 thực hiện xong và kết
5 L(A) thúc, T2 giải phóng khóa trên A và C
- T3 xin được khóa trên C, thực hiện xong và kết thúc
6 L(C)
7 L(A)
8 L(B)
- T4 xin được khóa trên A, thực hiện xong và kết thúc
- T1 sẽ thực hiện lại ở 1 thời điểm nào đó và sẽ nhận được
khóa trên A khi T2,T3,T4 hoàn tất
T1 T2 T3 T4
Chứng minh
– Bài tập về nhà
21
7
IS Ví dụ
22
IS Ví dụ (tt)
23
IS Ví dụ (tt)
T1 T2 T3 T4
1 L(A); R(A)
2 L(A)
3 L(B); R(B)
Chờ
4 L(A)
5 L(C); W(C)
Chờ
6 U(B); U(C)
7 L(B); R(B)
8 U(A); U(B)
9 L(A); L(C)
10 R(A); W(C)
11 U(C); U(A)
12 L(A); L(D)
13 R(D); W(A)
14 U(D); U(A)
24
8
IS Timeout
Giới hạn các giao tác chỉ được thực hiện trong 1 khoảng thời
gian nào đó
Nếu giao tác vượt quá thời gian này
Thì giao tác phải bị rollback
25
IS Wait-die
Mỗi giao tác sẽ được gán một nhãn ghi nhận thứ tự xuất hiện, kí
hiệu: ts(T)
26
IS Ví dụ
T1 T2 T3 T4
1 L(A); R(A)
2 L(A)
3 L(B); R(B)
Dies
4 L(A)
5 L(C); W(C)
Dies
6 U(B); U(C)
7 L(B); R(B)
8 U(A); U(B)
27
9
IS Ví dụ (tt)
28
IS Ví dụ (tt)
29
IS Wound-wait
Mỗi giao tác sẽ được gán một nhãn ghi nhận thứ tự xuất hiện, kí
hiệu: ts(T)
T U
30
10
IS Ví dụ
T1 T2 T3 T4
1 L(A); R(A)
2 L(A)
3 L(B); R(B)
Waits
4 L(A)
5 L(B); R(B)
Waits
6 U(A); U(B) Wound
7 L(A); L(C)
8 R(A); W(C)
9 U(C); U(A)
10 L(A); L(D)
11 R(D); W(A)
12 U(D); U(A)
13 L(B); R(B)
14 L(C); W(C)
15 U(B); U(C)
31
IS Nhận xét
Timeout
– Đơn giản
– Khó chọn được khoảng thời gian timeout thích hợp
– Có hiện tượng starvation
• Giao tác lập đi lập lại quá trình: bắt đầu, deadlock, rollback
Resource ordering
– Không thực tế
– Chờ đợi nhiều tiềm ẩn của deadlock
32
Wait-die và Wound-wait
– Không có starvation
– Wound-wait ít rollback các giao tác hơn wait-die
– Dễ cài đặt hơn wait-for graph
– Có thể rollback những giao tác không gây ra deadlock
Wait-for graph
– Nếu đồ thị quá lớn sẽ tốn nhiều thời gian phân tích
– Rất phức tạp khi CSDL phân tán
– Giảm tối thiểu rollback các giao tác
• Chỉ rollback 1 trong những giao tác gây ra deadlock
33
11
IS
34
12