Những vấn đề khác trongđiều kiển đồng thời Chương 2 Những vấn đề khác trong điều khiển đồng thời 2 z Quay lui dây chuyền cascading rollback z Lịch khả phục hồi recoverable schedule z De
Trang 1Những vấn đề khác trong
điều kiển đồng thời
Chương 2
Những vấn đề khác trong điều khiển đồng thời 2
z Quay lui dây chuyền (cascading rollback)
z Lịch khả phục hồi (recoverable schedule)
z Deadlock
z Phát hiện (detection)
Nội dung chi tiết
Ví dụ
T2
T1
S
Write(B,t); Unlock(B)
Read(B,t); t:=t+100
t:=t+100; Write(A,t)
Lock(A); Read(A,t)
Lock(B); Unlock(A)
Lock(B); Ulock(A)
Read(B,t); t:=t*2
Write(B,t); Unlock(B)
s:=s*2; Write(A,s)
Lock(A); Read(A,s)
Lock(B)
Chờ
125
250
125
250
Trang 2Những vấn đề khác trong điều khiển đồng thời 4
Ví dụ (tt)
T2
T1
S
Abort; Unlock(B);
Read(B,t);
t:=t+100; Write(A,t)
Lock(A); Read(A,t)
Lock(B); Unlock(A)
Lock(B); Ulock(A)
Read(B,t); t:=t*2
Write(B,t); Unlock(B)
s:=s*2; Write(A,s)
Lock(A); Read(A,s)
Lock(B)
Chờ
125
250
50
Tính nhất quán bị vi phạm
Những vấn đề khác trong điều khiển đồng thời 5
Ví dụ (tt)
T2
RT=0 WT=0 RT=0 WT=0 RT=0 WT=0
S
Write(B)
Read(B)
Read(A)
Read(C)
Write(C)
WT=150
RT=150
RT=0
WT=150 RT=200
WT=0
RT=175 WT=0
Abort
Write(A) WT=175RT=150
WT=0
giá trị của B
Quay lui dây chuyền
.
r(A)
.
.
abort
.
abort
.
.
w(A)
.
.
.
.
.
abort
.
Trang 3Những vấn đề khác trong điều khiển đồng thời 7
Lịch khả phục hồi
.
w(A)
.
commit
abort
z Xét mỗi cặp Tivà Tjsao cho
z Tjđọc dữ liệu sau khi Tighi
z Tiphải được hoàn tất (commit) trước khi Tjhoàn tất
z Ký hiệu ci: giao tác thứ i hoàn tất
Những vấn đề khác trong điều khiển đồng thời 8
Lịch khả phục hồi (tt)
S 1 : w 1 (A); w 1 (B); w 2 (A); r 2 (B); c 1 ; c 2 ;
T2đọc B sau
T1ghi B
T1hoàn tất trước T2
Lịch khả phục hồi (tt)
S 2 : w 2 (A); w 1 (B); w 1 (A); r 2 (B); c 1 ; c 2 ;
T1ghi B trước
T2đọc B sau
T1hoàn tất trước T2
Trang 4Những vấn đề khác trong điều khiển đồng thời 10
Lịch khả phục hồi (tt)
T1ghi B trước
T2đọc B sau
T2hoàn tất trước T1
S 3 : w 1 (A); w 1 (B); w 2 (A); r 2 (B); c 2 ; c 1 ;
Những vấn đề khác trong điều khiển đồng thời 11
Lịch khả phục hồi (tt)
z Nhận xét
z Muốn khôi phục đôi khi cần quay lui dây chuyền
z Nhưng quay lui dây chuyền không thể xãy ra
z Tốn nhiều chi phí
→ Lịch không quay lui dây chuyền (cascadeless schedule)
Lịch không quay lui dây chuyền
.
w(A)
r(A)
commit
Các giao tác chỉ đọc những giá trị đã được hoàn tất
Trang 5Những vấn đề khác trong điều khiển đồng thời 13
Lịch không quay lui dây chuyền (tt)
S 1 : w 1 (A); w 1 (B); w 2 (A); r 2 (B); c 1 ; c 2 ;
S 1 : w 1 (A); w 1 (B); w 2 (A); c 1 ; r 2 (B); c 2 ;
z Khả phục hồi
z Ngăn ngừa quay lui dây chuyền
z → Các lịch ngăn ngừa quay lui dây chuyền đều khả
phục hồi
Những vấn đề khác trong điều khiển đồng thời 14
z Quay lui dây chuyền (cascading rollback)
z Lịch khả phục hồi (recoverable schedule)
z Deadlock
z Phát hiện (detection)
Nội dung chi tiết
z Nhắc lại 2 tình huống
Deadlock
T2
T1
S
Lock(B)
Lock(A)
Read(A)
Lock(B)
Write(A)
Write(B)
↓
Chờ
Lock(A)
Read(B)
↓ Chờ Qui tắc khóa 2PL
T2
T1
S
RLock(A)
WLock(A)
Read(A)
WLock(A)
↓ Chờ
RLock(A)
Read(A)
↓ Chờ
Nâng cấp khóa
Trang 6Những vấn đề khác trong điều khiển đồng thời 16
z Hệ thống rơi vào trạng thái deadlock khi
z Các giao tác phải chờ đợi lẫn nhau để được thao tác lên
các đơn vị dữ liệu bị khóa bởi chúng
z Và không một giao tác nào có thể thực hiện tiếp công việc
của mình
Deadlock (tt)
Những vấn đề khác trong điều khiển đồng thời 17
z Phát hiện
khôi phục lại hệ thống
z Chọn 1 giao tác để rollback
z Đồ thị chờ (wait-for graph)
z Ngăn ngừa
z Quản lý các giao tác sao cho không bao giờ có deadlock
z Sắp thứ tự tài nguyên (resource ordering)
z Timeout
z Wait-die
z Wound-wait
Giải quyết Deadlock
z Đồ thị gồm
z Đỉnh là các giao tác đang giữ khóa hoặc đang chờ khóa
z Cung đi từ đỉnh T sang U khi
z U đang giữ khóa trên đơn vị dữ liệu A
z T đang chờ khóa trên A
z T không thể khóa đơn vị dữ liệu A nếu U không giải phóng khóa
z Nếu đồ thị chờ không có chu trình
z Các giao tác có thể hoàn tất
z Ngược lại
z Không một giao tác nào trong chu trình có thể tiếp tục thực
hiện→ deadlock
Đồ thị chờ
Trang 7Những vấn đề khác trong điều khiển đồng thời 19
Ví dụ
L(A); R(A)
L(C); R(C) 1
L(B); R(B) L(D); R(D)
2
3
4
5
6
7
8
L(A) L(C) L(A)
Chờ
↓ Chờ
↓ Chờ
↓
Chờ
T2
Những vấn đề khác trong điều khiển đồng thời 20
Ví dụ (tt)
T2
L(A); R(A)
L(C); R(C) 1
L(B); R(B) L(D); R(D)
2
3
4
5
6
7
8
L(A) L(C) L(A) L(B)
z Áp đặt một thứ tự nào đó lên các đơn vị dữ liệu
z Nếu các giao tác thực hiện khóa những đơn vị dữ liệu
theo thứ tự này
z Thì không có deadlock xãy ra trong khi chờ đợi
z Chứng minh
z Bài tập về nhà
Sắp thứ tự tài nguyên
Trang 8Những vấn đề khác trong điều khiển đồng thời 22
z Giả sử các đơn vị dữ liệu được sắp thứ tự theo
alphabet
Ví dụ
Những vấn đề khác trong điều khiển đồng thời 23
Ví dụ (tt)
Ví dụ (tt)
L(A); R(A)
L(A) 1
L(B); R(B)
L(A)
2
3
4
5
6
7
8
↓ Chờ
↓ Chờ L(C); W(C) U(B); U(C)
9
10
11
12
13
14
L(B); R(B)
U(A); U(B)
L(A); L(C) R(A); W(C) U(C); U(A)
L(A); L(D) R(D); W(A) U(D); U(A)
Trang 9Những vấn đề khác trong điều khiển đồng thời 25
z Giới hạn các giao tác chỉ được thực hiện trong 1
khoảng thời gian nào đó
z Nếu giao tác vượt quá thời gian này
z Thì giao tác phải bị rollback
Timeout
Những vấn đề khác trong điều khiển đồng thời 26
z 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)
z Xét 2 giao tác T và U
z U đang giữ khóa trên đơn vị dữ liệu A
z T muốn khóa đơn vị dữ liệu A
z T sẽ chờ-wait U khi ts(T) < ts(U)
z Ngược lại T sẽ bị hủy-die
và bắt đầu làm lại ở 1 thời
điểm khác
Wait-die
U T
U T
Ví dụ
L(A); R(A)
L(A) 1
L(B); R(B)
L(A)
2
3
4
5
6
7
8
↓
Dies
↓
Dies
L(C); W(C) U(B); U(C) L(B); R(B)
U(A); U(B)
Trang 10Những vấn đề khác trong điều khiển đồng thời 28
Ví dụ (tt)
z T2bắt đầu trước T4
L(A); R(A)
L(A) 1
L(B); R(B)
L(A)
2
3
4
5
6
7
8
↓
Dies
↓
Dies
L(C); W(C) U(B); U(C) L(B); R(B)
U(A); U(B)
9
10
11
12
13
14
L(A); L(C) R(A); W(C) U(C); U(A)
L(A)
R(D); W(A) U(D); U(A) L(A); L(D)
↓
Dies
15
Những vấn đề khác trong điều khiển đồng thời 29
Ví dụ (tt)
z T4bắt đầu trước T2
L(A); R(A)
L(A) 1
L(B); R(B)
L(A)
2
3
4
5
6
7
8
↓
Dies
↓
Dies
L(C); W(C) U(B); U(C) L(B); R(B)
U(A); U(B)
9
10
11
12
13
14
L(A); L(C) R(A); W(C) U(C); U(A)
L(A); L(D) R(D); W(A) U(D); U(A)
↓
Waits
15
L(A)
z 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)
z Xét 2 giao tác T và U
z U đang giữ khóa trên đơn vị dữ liệu A
z T muốn khóa đơn vị dữ liệu A
z T buộc U rollback và trao khóa
lại cho T-wound khi ts(T) < ts(U)
z Ngoại lệ: nếu U đã kết thúc và giải
phóng khóa, U sẽ không rollback
z Ngược lại T sẽ chờ-wait U
Wound-wait
U T U T
Trang 11Những vấn đề khác trong điều khiển đồng thời 31
Ví dụ
L(A); R(A)
L(A) 1
L(B); R(B)
L(A)
2
3
4
5
6
7
8
↓
Waits
↓
Waits
9
10
11
12
13
14
15
L(B); R(B)
U(A); U(B)
↓
Wound
L(A); L(C) R(A); W(C) U(C); U(A)
L(A); L(D) R(D); W(A) U(D); U(A) L(B); R(B) L(C); W(C) U(B); U(C)
Những vấn đề khác trong điều khiển đồng thời 32
z Timeout
z Khó chọn được khoảng thời gian timeout thích hợp
z Có hiện tượng starvation
z Giao tác lập đi lập lại quá trình: bắt đầu, deadlock, rollback
z Resource ordering
z Không thực tế
z Chờ đợi nhiều→ tiềm ẩn của deadlock
Nhận xét
z Wait-die và Wound-wait
z Không có starvation
z Wound-wait ít rollback các giao tác hơn wait-die
z Dễ cài đặt hơn wait-for graph
z Có thể rollback những giao tác không gây ra deadlock
z Wait-for graph
z Nếu đồ thị quá lớn sẽ tốn nhiều thời gian phân tích
z Giảm tối thiểu rollback các giao tác
z Chỉ rollback 1 trong những giao tác gây ra deadlock
Nhận xét (tt)