Tải bản đầy đủ (.doc) (20 trang)

Tiểu luận môn hệ phân tán TÌM HIỂU XỬ LÝ BẾ TẮC CỦA HỆ PHÂN TÁN

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (249.29 KB, 20 trang )

BỘ GIÁO DỤC & ĐÀO TẠO
ĐẠI HỌC ĐÀ NẴNG

BÀI TIỂU LUẬN
HỆ PHÂN TÁN
PGSTS. Lê Văn Sơn
Võ Đức Hoàng


Đà Nẵng, tháng 07 năm 2014


 !"#$$
%&'()*
+,-.  /(0)
&1234$5$)#2*
6)78/92"5:(  73-
:3;03***
<-&19, !&
234%=>*?"85&0
#@1A.A%A--,
'B*
<-,9C"1%"%=>
D%=>2A"-9CEFG
Phần 1: Lý thuyết.
<1%"H&%=>*IC-D%=>*
Phần 2: Bài tập.
<1%"AH=!%,F5-J"#D#,
KL-F-9D%=>*
MA7F"NOP<P*Q#?DP7RH=
9L59C"*


S-C !85)40F"%*
<9C$N<
!" #$ %&$
Trong các hệ thống máy tính có nhiều tài nguyên mà chỉ được sử dụng bởi một tiến
trình tại mỗi thời điểm. Ví dụ như máy vẽ, đầu đọc CD-ROM, đầu ghi CD-ROM, và các
slot trong bảng tiến trình của hệ thống. Có hai tiến trình cùng đồng thời ghi vào máy in.
Hai tiến trình đó cùng sử dụng một slot trong bảng tiến trình. Vì vậy, tất cả các hệ điều
hành đều có thể cho phép một tiến trình truy xuất độc quyền đến các tài nguyên.
Trong nhiều ứng dụng, một tiến trình cần phải độc quyền truy cập không chỉ đến một
mà đến nhiều tài nguyên khác.
Bế tắc có thể xảy ra trong nhiều tình huống yêu cầu truy cập đến các thiết bị Vào/Ra.
Ví dụ, trong hệ cơ sở dữ liệu, một chương trình có thể bị khoá vài bản ghi mà nó đang
dùng, để tránh điều kiện tranh chấp. Nếu tiến trình A khoá bản ghi R1 và tiến trình B
khoá bản ghi R2 và sau đó mỗi tiến trình thử khoá bản ghi của tiến trình khác, thì cũng sẽ
bế tắc. Vì vậy, bế tắc có thể xảy ra trên các tài nguyên phần cứng cũng như các tài
nguyên phần mềm.
'()*
Bế tắc có thể xảy ra khi các tiến trình truy xuất độc quyền đến các thiết bị, file, v.v
Để thảo luận bế tắc, chúng ta sẽ tham chiếu đến các đối tượng như tài nguyên. Một tài
nguyên có thể là một thiết bị phần cứng hay một phần của thông tin. Một máy tính có thể
có nhiều tài nguyên khác nhau có thể được yêu cầu.
Tài nguyên có thể phân thành hai loại: có thể thu hồi (preemptable) và không thể thu
hồi (nonpreemptable).
 Tài nguyên có thể thu hồi: là tài nguyên có thể được lấy ra từ tiến trình sở hữu nó.
Bộ nhớ là một ví dụ của tài nguyên có thể thu hồi.
Ví dụ: một hệ thống với 512 KB bộ nhớ sử dụng, một máy in và hai tiến trình 512 KB
mà mỗi tiến trình đều muốn in cái gì đó. Tiến trình A yêu cầu và chiếm hữu máy in, sau
đó thực hiện tính toán các giá trị để in. Trước khi tiến trình A hoàn thành tính toán, thì đã
vượt quá thời gian quantum dành cho nó và bị chuyển trở ra khỏi bộ nhớ.
Bây giờ tiến trình B chạy thực hiện để yêu cầu máy in nhưng không thành công.

Chúng ta có tình huống bế tắc xảy ra, bởi vì tiến trình A đã có máy in và tiến trình B đã
có bộ nhớ và không một tiến trình nào có thể tiếp tục vì tài nguyên đã bị chiếm giữ bởi
tiến trình khác. Cuối cùng, có thể thu hồi bộ nhớ từ tiến trình B bằng cách chuyển tiến
trình B ra và chuyển tiến trình A vào. Bây giờ tiến trình A có thể chạy thực hiện in và sau
đó giải phóng máy in. Bế tắc không xảy ra.
 Tài nguyên không thể thu hồi được: là tài nguyên mà không thể lấy ra từ
tiến trình hiện đang sở hữu nó bất kể gây ra lỗi tính toán. File, các thiết bị Vào /Ra là các
tài nguyên không thể thu hồi được.
Nhìn chung, các bế tắc thường xảy ra đối với các tài nguyên không thể thu hồi được.
<T
<9C$N<
Trình tự của các sự kiện yêu cầu sử dụng tài nguyên là:
- Yêu cầu một tài nguyên.
- Sử dụng tài nguyên.
- Giải phóng tài nguyên.
Nếu tài nguyên không có giá trị khi được yêu cầu thì tiến trình yêu cầu bị chặn để
chờ. Trong một số hệ điều hành, tiến trình tự động bị chặn khi tài nguyên yêu cầu bị lỗi
và đánh thức dậy khi tài nguyên có giá trị.
'+, /
+,C=1%B%=>=J=1-C=1U,85H
V)=1H-C=1)-*
Tất cả các tiến trình đều đang chờ, không một tiến trình nào trong chúng có thể tạo ra
bất kỳ một sự kiện nào để có thể đánh thức tiến trình khác trong tập tiến trình, vì vậy tất
cả các tiến trình tiếp tục chờ mãi mãi.
Trong hầu hết các trường hợp, sự kiện mà tiến trình đang chờ giải phóng vài tài
nguyên hiện mà tiến trình khác trong tập tiến trình bị chặn đang chiếm giữ. Hay nói cách
khác, mỗi thành viên của tập các tiến trình bế tắc đang chờ tài nguyên là sở hữu của một
tiến trình bị chặn khác. Không một tiến trình nào có thể chạy thực hiện, không một tiến
trình nào có thể giải phóng tài nguyên và cũng không một tiến trình nào có thể thức dậy.
'0*1234 /

Cofman, Elphick và Shosani vào năm 1971 đã đưa ra 4 điều kiện cần có thể làm
xuất hiện bế tắc:
T* I)83:"#H$98WX+L28-YG
Mỗi thời điểm, một tài nguyên không thể chia sẻ được hệ thống cấp phát chỉ một tiến
trình, khi tiến trình sử dụng xong tài nguyên này hệ thống mới thu hồi và cấp phát tài
nguyên cho hệ thống khác.
Z* P5=."#F#"#X[\-YG
Tiến trình được phép giữ và yêu cầu thêm một hoặc nhiều tài nguyên và chờ cung cấp
tài nguyên đang bị tiến trình khác chiếm giữ.
]* ^$E !"#_=1.X`-LL-YG
Tài nguyên chỉ tự nguyện giải phóng khi sử dụng xong. Không một tiến trình nào hay
hệ điều hành có thể thu hồi tài nguyên từ tiến trình đang chiếm giữ chúng.
a* <E,HbU-EB"#XIcY
Có ít nhất hai tiến trình chờ đợi lẫn nhau: tiến trình này chờ cấp phát tài nguyên đang
bị tiến trình kia chiếm giữ và ngược lại.
Tất cả 4 điều kiện này cần phải ngăn chặn để bế tắc không xảy ra. Khi có đủ 4 điều
kiện này thì bế tắc xảy ra. Nếu thiếu 1 trong 4 điều kiện này thì không có bế tắc.
<Z
<9C$N<
5'6+7)*
Có thể sử dụng một đồ thị để mô hình hóa viêc cấp phát tài nguyên. Đồ thị này được
gọi là đồ thị định vị tài nguyên (RSG : Resource Allcation Graph):
- 2 loại nút: các tiến trình được biểu diễn bằng hình tròn, và mỗi tài nguyên được
hiển thị bằng hình vuông.
- 2 loại cạnh:
+ Cạnh yêu cầu: từ tiến trình đến tài nguyên. Chỉ rõ tiến trình yêu cầu tài nguyên
và chờ có được tài nguyên đó.
+ Cạnh chỉ định: từ tài nguyên đến tiến trình. Chỉ rõ tiến trình đang chiếm giữ tài
nguyên đó.
Khi một yêu cầu được thực hiện, một cạnh yêu cầu được thêm vào.

Khi một yêu cầu được hoàn thành cạnh yêu cầu được chuyển sang cạnh chỉ định
Khi một tiến trình giải phóng tài nguyên, cạnh chỉ định bị xóa đi
Nếu đồ thị không chứa chu kỳ thì bế tắc không xảy ra
Nếu đồ thị chứa một chu kỳ thì bế tắc xảy ra.
1T*T*6EB"#*
5'(893:;< /
Chủ yếu có 3 phương hướng tiếp cận để xử l• bế tắc:
<]
P
P đang giữ R
R
P
P yêu cầu R
R
R3
P1
R2
P2 Một tình huống không bế tắc P3
R1
R4
R3
P1
R2
P2 Một tình huống bế tắc P3
R1
R4
<9C$N<
- Sử dụng một giao thức (protocol) để hệ thống không bao giờ xảy ra bế tắc.
- Cho phép xảy ra bế tắc và tìm cách sửa chữa bế tắc.
- Hoàn toàn bỏ qua bế tắc, xem như hệ thống không bao giờ xảy ra bế tắc.

5'=>? /
Để bế tắc không xảy ra cần đảm bảo tối thiểu một trong 4 điều kiện cần không xảy ra
như sau:
1. $)*1@ABC: gần như không thể tránh được điều kiện này vì bản
chất tài nguyên gần như cố định. Tuy nhiên đối với một tài nguyên về kết xuất, người ta
có thể dùng các cơ chế spooling để biến đổi thành tài nguyên có thể chia sẻ.
D'EF.G)*"*)*: phải đảm bải rằng mỗi khi tiến trình
yêu cầu thêm một tài nguyên thì nó không chiếm giữ các tài nguyên khác. Có thể áp đặt
một trong hai cơ chế truy xuất sau:
- Tiến trình phải yêu cầu tất cả các tài nguyên cần thiết trước khi bắt đầu xử l•:
phương pháp này có khó khăn là tiến trình khó có thể ước lượng chính xác tài nguyên cần
sử dụng vì có thể nhu cầu phụ thuộc vào quá trình xử l•. Ngoài ra nếu tiến trình chiếm
giữ sẵn các tài nguyên chưa cần sử dụng ngay thì việc sử dụng tài nguyên sẽ kém hiệu
quả.
- Khi tiến trình yêu cầu một tài nguyên mới và bị từ chối nó phải giải phóng các tài
nguyên đang chiếm giữ, sau đó lại được cấp phát trở lại cùng lần với tài nguyên mới:
phương pháp này làm phát sinh các khó khăn trong việc bảo vệ tính toàn vẹn dữ liệu của
hệ thống.
H'$*6)*Cho phép hệ thống được thu hồi tài nguyên từ các tiến trình bị
khóa và cấp phát trở lại cho tiến trình khi nó thoát khỏi tình trạng bị khóa. Tuy nhiên với
một số loại tài nguyên, việc thu hồi sẽ rất khó khăn vì vi phạm tính toàn vẹn dữ liệu.
I'$6JK*1Ltránh tạo chu kỳ trong đồ thị cấp phát bằng cách cấp phát tài
nguyên theo thứ tự phân cấp như sau:
Gọi R = { R
1
, R
2
, , R
n
} là tập các loại tài nguyên

Các loại tài nguyên được phân thứ tự từ 1 – N, thứ tự có thể là thứ tự logic mà tài
nguyên thường yêu cầu. K• hiệu F(R
i
)
Các tiến trình khi yêu cầu tài nguyên phải tuẩn thủ quy định: khi tiến trình đang bị
chiếm giữ tài nguyên R
i
thì có thể yêu cầu các tài nguyên R
j
nếu F(R
j
) > F(R
i
).
5'$*M2 /
Khi các tài nguyên được sử dụng bởi giao dịch được xác định theo kiểu động
trong quá trình thi hành giao dịch, các phương pháp dự phòng bế tắc dựa trên nền tảng
các thông điệp không còn phù hợp nữa. Lúc này, ta phải sử dụng các phương pháp phát
hiện và chữa trị.
<a
<9C$N<
Phương pháp được mô tả bởi Menasce sẽ được trình bày. Phương pháp này đặt ra
vấn đề sử dụng một đồ thị các tranh chấp mà việc kiểm tra các tranh chấp đó cho phép
phát hiện bế tắc.
Tương tự như thuật toán vừa nêu, mỗi một trạm quản l• các đối tượng riêng của
mình và việc phát hiện chỉ dựa vào thông tin cục bộ. Các trạm khởi sự các giao dịch bị
treo được đề phòng phát sinh bế tắc (mà bế tắc này có thể phát hiện tại một trạm nào đó)
cần phải đề ra các biện pháp chữa trị cho mình.
' Các định nghĩa
Ta cần xác định trong mọi thời điểm giữa hai giao dịch <

K
và <
H
&
5= như sau:
Quan hệ này được biểu hiện bằng một đồ thị gọi là đồ thị các xung đột hữu hiệu.
Sự tồn tại một vòng lặp trong đồ thị này báo hiệu cho ta biết sẽ có bế tắc diễn ra. Một
giao dịch “không bị chặn” có nghĩa là trong đồ thị biểu hiện bằng một nút mà tại đó
không có cung nào dẫn đến.
Giả sử rằng <
H
là một giao dịch bị chặn. tập hợp tất cả các giao dịch mà có thể
đạt được bằng cách chạy khắp các cung xuất phát từ <
H
, theo chiều ngược lại với
hướng của chúng, và gọi là tập hợp các chặn của <
H
, k• hiệu là dX<
H
Y* Các giao dịch
thuộc vào dX<
H
Y là các giao dịch có nguồn gốc từ sự chặn của <
H
.
Tại một thời điểm cho trước, đồ thị các xung đột hữu hiệu sinh ra các quan hệ
chặn tồn tại giữa các giao dịch của hệ. Ta k• hiệu eX<
H
Y là tập hợp các giao dịch bị
chặn do <

H
, có nghĩa là các giao dịch có thể đạt được bằng cách chạy khắp các xuất
phát từ <
H
.
Ví dụ : Cho đồ thị các xung đột hữu hiệu như sau:


Các giao dịch không chặn là <
]
<
a
<
f
Ta có:
E(T
1
) = { T
2
, T
3
, T
4
T
5
}
B(T
5
) = { T
1

, T
2
}
<f
<
K
> <
H
Tồn tại ít nhất một tài nguyên bị cài then bởi <
K

yêu cầu bởi <
H
nhưng không được đáp ứng.
T
1
T
2
T
5
T
3
T
4
<9C$N<
Đồ thị các xung đột hữu hiệu chứa vòng lặp nếu và chỉ nếu tồn tại giao dịch <
H
C!0),-B%B%/<
H
G


k: B(T
k
)

E(T
k
)

{Tồn tại vòng lặp}
Nếu ta không muốn duy trì trên mỗi trạm một bản sao của đồ thị tổng quát thì
cần phải xây dựng một ảnh cục bộ cho phép đánh giá các điều kiện vừa nêu trên. Đó
là điều mà ta thực hiện trong giải thuật sau đây.
D. Thuật toán
Ta k• hiệu PX<
H
Y là trạm nguồn của giao dịch <
H
. để cho mỗi giao dịch <
H
, trạm
S(T
k
) duy trì các tập hợp eX<
H
Y và dX<
H
Y* Việc cập nhật dX<
H
Y cần phải được biểu hiện

trên tất cả các trạm nguồn của các giao dịch thuộc eX<
H
Y* Thực tế, giao dịch chặn <
H

phần tử của toàn bộ tập hợp chặn cảu các giao dịch thuộc eX<
H
Y*
Giả sử rằng <
H
đã yêu cầu một tài nguyên L của trạm P

nào đó. Trên trạm này, ta
thực hiện các phép toán sau đây:
E$$ !N
1
Nếu L là có sẵn để dùng, yêu cầu được thoả mãn và ta ghi nhận là <
H
đang có tài nguyên.
2
Nếu L đã được cung cấp cho giao dịch <
K
thì thông điệp “T
j
chặn T
k

được truyền cho trạm PX<
K
Y và PX<

H
Y* Sau này XKHY chỉ một thông điệp
như vậy.
Khi nhận một thông điệp (j,k) trên một trạm P nào đó, ta thực hiện các tác động
sau đây:
1. Trên trạm PX<
K
Y nguồn của giao dịch chặn <
k
, ta thêm <
H
vào tập hợp eX<
K
Y và
kiểm tra rằng ta không làm phát sinh bế tắc, có nghĩa là:
B(T
j
)

E(T
j
) =
Ta gửi tiếp tục thông điệp (l,k) về phía các trạm nguồn của các giao dịch <

chặn
<
K
nhằm cho phép các trạm PX<

Y cập nhật các tập hợp eX<


Y của các giao dịch bị chặn
bởi <

. Song song với tác động trên, các thông điệp (l,k) được gửi về trạm nguồn của
các giao dịch <
H
để cập nhật tập hợp dX<
H
Y của các giao dịch chặn <
H
.
2. Trên trạm PX<
H
Y nguồn của giao dịch bị chặn <
H
, ta thêm <
K
cho tập hợp dX<
H
Y
và kiểm tra không có bế tắc, có nghĩa là:
B(T
J
)

E(T
k
) =
Ta gửi tiếp tục thông điệp (j,m) về phía các trạm nguồn của các giao dịch <


bị
chặn bởi <
H
nhằm cho phép các trạm PX<

Y cập nhật các tập hợp dX<

Y của các giao
dịch chặn <

.
Các khuyến nghị giải phóng dẫn đến thuật toán đối xứng mà ta không có điều
kiện giới thiệu ở đây.
<g
<9C$N<
Ví dụ 2: Hãy xét 3 trạm S
1
, S
2
và S
3
. Mỗi trạm P

chứa đối tượng L

và là nguồn
của giao dịch <

:

$

$
D
$
H
v_loai_tru_th(e1)



v_loai_tru_th(e2)
v_loai_tru_th(e2)



v_loai_tru_th(e
3
)
v_loai_tru_th(e
3
)



v_loai_tru_th(e1)
Ta hãy tưởng tượng rằng tại thời điểm mà tất cả các giao dịch đã được thực hiện
có kết quả phép toán đầu tiên của then cài. Khi đó chuyển sang thời điểm của phép
toán thứ hai, các giao dịch đều bị chặn. Điều đó kéo theo các sự kiện sau đây:
$


trên S
2
đề nghị cung cấp e
2
có trên T
2
;
S
2
gửi (2,1) cho S
1
và S
2
, từ đó ta có:
E(T
1
) = {T
2
} B(T
1
) =
B(T
2
) = {T
1
} E(T
2
) =
$
D

trên S
3
đề nghị cung cấp e
3
có trên T
3
;
S
3
gửi (3,2) cho S
2
và S
3
, từ đó ta có :
B(T
3
) = {T
2
} E(T
3
) =
E(T
2
) = {T
3
} B(T
2
) = {T
1
}

S
2
gửi (3,1) cho S
1
và từ đó sinh ra:
E(T
1
) = {T
2
, T
3
} B(T
1
) =
$
H
trên S
3
đề nghị cung cấp e
1
có trên T
1
;
S
1
sinh ra T
3
trong B(T
1
) và ta ghi nhận là:

E(T
1
)

B(T
1
) = {T
3
}
Như vậy, bế tắc được phát hiện trên S
1
.
5'.;*M
Hai thuật toán vừa được giới thiệu ở trên xuất phát từ cơ sở cùng một nguyên l•
tương tự. Đó là sự thiếu chắc chắn trạng thái các trạm xa phát sinh vấn đề lưu trữ một
"giới hạn an toàn" nhất định. Điều đó lại ngăn cản các phép toán không kéo theo bế
tắc.
Nhưng bản thân hai thuật toán này, khi triển khai lại cho phép sử dụng các kỹ
thuật khác nhau. Trong thuật toán dự phòng ta kiểm tra trên trạng thái từng phần một
điều kiện mạnh hơn điều kiện tối thiểu. Trong thuật toán phát hiện ta có trong một
trạm trạng thái của các trạm khác. Thông thường, mỗi trạm đều nhận các thông tin dư
thừa.
<h
<9C$N<
!"D OP$Q!
Theo phương pháp Le Lann, người ta phối hợp một bộ tuần tự cho một tài
nguyên găng, ví dụ P, P%, P, Người ta nhóm các bộ tuần tự trên một jeton duy
nhất.
Bạn hãy chứng minh rằng để triển khai một chiến lược cung cấp không có
rủi ro về bế tắc, người ta chỉ cần rút một số cho một tài nguyên cần thiết khi jeton

chạy qua.
'OK*"F
Bộ tuần tự là đối tượng đồng bộ cung cấp cho mỗi yêu cầu một số nhằm xác lập
trật tự.
Để cho 2 yêu cầu kế tiếp nhau thì 2 số liên tục nhau được cung cấp. Giá trị 0
được cấp cho yêu cầu đầu tiên.
Một tiến trình muốn nhận giá trị từ bộ tuần tự S thì nó phải gọi thủ tục (hoặc
hàm) có tên NLXPY. Mỗi giá trị chỉ phục vụ cho một và chỉ một sự kiện mà thôi.
Giả sử rằng tất cả các sự kiện được đánh số bởi bộ tuần tự duy nhất S. Khi một
tiến trình cung cấp cho sự kiện  một số thông qua NLX8Y,ta có thể khẳng định như
sau:
- Các sự kiện  bao hàm các giá trị nhỏ hơn  đã được diễn ra
- Số thứ tự liền kề sau  phải là iT
Một bộ tuần tự mang 2 đặc tính sau :
- Nếu a và b là 2 sự kiện được thực hiện trên cùng hàm NLXPY, thì ta có
a→b hay b→a.
- Nếu a thực hiện phép jNLXPY thì giá trị gán cho t là số lượng các
phép NLXPY đã được thực hiện trước a.
Đặc tính thứ nhất thể hiện việc loại trừ tương hỗ trên các phép toán NLXPY,
còn đặc tính thứ hai thể hiện tính liên tục trong khi đánh số có nghĩa là không để lại
khoảng trống khi đánh số.
Việc triển khai bộ tuần tự trong hệ thống một bộ xử l• hay nhiều bộ xử l• với bộ
nhớ chung được tiến hành bằng cách triển khai cơ chế sơ đẳng loại trừ tương hỗ là đủ.
Trong các hệ thống phân tán, việc vận dụng nó không hề đơn giản bởi vì có sự hiện
diện của các kênh viễn thông sử dụng theo kiểu loại trừ tương hỗ và đặc biệt tồn tại
vòng tròn duy nhất hay một kênh lan truyền duy nhất.
Việc vận dụng tương đối tổng quát bộ tuần tự S trong hệ phân tán là sự chuyển
động giữa các trạm của một đối tượng duy nhất gọi là - chứa giá trị hiện hành
của bộ tuần tự. Khi một trạm có -, nó có thể thực hiện hàm NLXPY.
<k

<9C$N<
'RS*")
Để triển khai một - có hiệu quả, đầu tiên ta phải xác định hành trình của
nó trong mạng máy tính như thế nào. Phương pháp đơn giản nhất là lắp đặt các trạm
nằm trên một vòng theo một chiều xác định. Mỗi trạm chỉ được liên hệ với 2 trạm gần
nhất.
Ta hãy xem xét một mạng được hoàn toàn nối với nhau có nghĩa là một tập hợp
gồm N trạm, trong đó một trạm có thể liên lạc với các trạm khác một cách dễ dàng.
Một số duy nhất bao gồm từ 0 đến N-1 được phân phối một lần cho toàn bộ trên từng
trạm. Trạm i đều có trạm hàng xóm phải hay còn gọi trạm kế tiếp sau mà số trạm của
nó là 8lm và hàng xóm bên trái hay còn gọi là trạm liền kề trước mà số của nó là
Llm. Sự mô tả này cho ta hình dung một vòng tròn ảo. Khi hoạt động bình thường,
N trạm được thể hiện đầy đủ trên vòng tròn, lúc này ta có:
suc[i]=i+1 modulo N
pred[i]=i-1 modulo N
Ấn phong được cụ thể hoá trên một vài cấu hình của các biến trạng thái và quay
trên vòng tròn ảo luôn luôn theo một chiều xác định. Để vòng tròn hoạt động tốt thì
cần thiết phải xây dựng lại vòng tròn khi một trạm nào đó có sự cố.
Trong thuật toán Le Lann, ấn phong được cụ thể hoá bằng một thông điệp đặc
biệt và gọi là Jeton tuần hoàn trên vòng tròn. Như thế việc sự cố trên mạng có thể dẫn
đến mất jeton. Các biến trạng thái được duy trì trên mỗi trạm cho phép tái sinh jeton
trong trường hợp bị mất.
Thuật toán triển khai • tưởng này là:
- Jeton mang giá trị là . Mỗi một trạm K có một biến trạng thái PlKm. Trước
khi phát lại Jeton vào mạng, các tác động như sau được thực hiện:
S[j]:=v cho j ≠ 0
v:=v+1 mod K; S[j]:=v cho j=0
- Mỗi một lần chuyển jeton trên trạm K, một đồng hồ bảo vệ được trang bị.
Nếu nó được phát động trước khi jeton đến thì K tham chiếu đến biến trạng thái Plm
của trạm liền kề trước jLXKY trên vòng tròn.

Nếu một trong hai điều kiện sau được kiểm tra:
j>i và S[j] ≠ S[i]
hay j<i và S[j] = S[i]
thì jeton được xem như đã bị mất. Trong trường hợp đó, trạm K cần phải tái sinh
lại nó và cho giá trị chính xác Plm và tái trang bị đồng hồ bảo vệ.
Trong thuật toán Le Lann, ví dụ ta áp cho jeton một công tơ với các giá trị
nguyên mà duy nhất chỉ có trạm có jeton mới có thể tăng và tham chiếu. Các giá trị
xuất phát từ tham chiếu đó được xem như là kết quả của phép toán NL trên trạm.
<n
<9C$N<
'(*7)*'57T0 /
Tiến trình p đưa ra yêu cầu cung cấp tài nguyên e để thực hiện phép toán cài
then có thính loại trừ o-ooXLY. Ngoại trừ một số trường hợp đặc biệt, tất cả
các tài nguyên đều được truy cập theo kiểu loại trừ. Nếu việc cung cấp hoàn toàn hợp
thức thì tài nguyên này được trao cho p sử dụng. Ta nói tài nguyên này đã được p cài
then, nếu không thì p bị treo và p không cài then được tài nguyên này.
Trong hệ phân tán, ta sẽ tập trung xem xét các giao dịch <

có thể sử dụng các tài
nguyên được định vị trên các trạm. Mỗi một giao dịch được triển khai nhờ một tập
hợp các tiến trình thể hiện là các đại diện của chúng trên các trạm khác nhau. Hai tiến
trình của cùng một giao dịch được định vị trên các trạm khác nhau có thể được thực
hiện song song. Nhằm thu hồi lại tài nguyên e trên trạm P
K
, giao dịch <

cho thực hiện
phép toán o-ooXLY thông qua đại diện 
K
của mình trên trạm này.

Ngoại trừ một số trường hợp đặc biệt, việc cung cấp diễn ra không có thu hồi.
Một tài nguyên bị khoá bởi một tiến trình không thể rút nó về được. Như thế, nó cần
phải được giải phóng bởi tiến trình này một cách tường minh nhờ vào phép toán mở
then cài -oLXLY.
Như vậy có thể xảy ra rủi ro do bế tắc, khi các tiến trình truy cập loại trừ được
phân phối mà không có khả năng thu hồi và các tiến trình cần phải sử dụng đồng thời
tài nguyên.
0*1234 /
Một tiến trình thường sử dụng tài nguyên theo các bước tuần tự sau:
+ Xin phép sử dụng
+ Sử dụng tài nguyên
+ Giải phóng tài nguyên sau khi sử dụng.
Bế tắc xảy ra nếu 4 điều kiện sau xuất hiện đồng thời:
+ C1: Loại trừ lẫn nhau
+ C2: Giữ và chờ
+ C3: Không có đặc quyền
+ C4: Chờ vòng
C1 - Loại trừ lẫn nhau: Một tài nguyên bị chiếm giữ bởi một tiến trình và không
có tiến trình nào khác có thể sử dụng tài nguyên này.
C2 - Giữ và chờ: Mỗi tiến trình giữ ít nhất một tài nguyên và chờ các tài nguyên
khác để sử dụng. Các tài nguyên này đang bị tiến trình khác chiếm giữ.
C3 - Không có đặc quyền: Tài nguyên bị chiếm giữ chỉ có thể rỗi khi tiến trình
tự nguyện giải phóng tài nguyên sau khi đã sử dụng xong.
<Tp
<9C$N<
C4 - Chờ vòng: Một tập các tiến trình {P
1
, P
2
, … P

n
} có xuất hiện điều kiện chờ
vòng nếu P
1
chờ tài nguyên do P
2
chiếm giữ, P
2
chờ tài nguyên do P
3
chiếm giữ,… và
P
n
chờ tài nguyên do P
1
chiếm giữ.
5'(U
Theo phương pháp Le Lann, người ta phối hợp một bộ tuần tự cho một tài
nguyên găng. Người ta nhóm các bộ tuần tự trên một jeton duy nhất.
Theo giả thiết ta có : Một Jeton tuần hoàn trên mạng chứa các thông tin
- Các bộ tuần tự S
i
tương ứng cho tài nguyên găng R
i
, trong đó i ∈ [1 n], n là số
lượng tài nguyên.
- Mỗi bộ tuần tự S
i
bao gồm :
+ Các tiến trình truy cập tài nguyên này là P

j
, trong đó j ∈ [1 k]
+ Tình trạng tài nguyên : TinhTrang(R
i
) bao gồm 2 giá trị là (True, P
j
) và
(False,0)
• Đang sử dụng (True, P
j
) : Giá trị True là đang bị sử dụng và P
j
là tiến trình
đang sử dụng tài nguyên S
i
• Đang giải phóng (False,0) : Không có tiến trình nào sử dụng
Ta cần chứng minh khi Jeton chạy qua tài nguyên R
i
chỉ cần rút ra một số thì sẽ
được chiến lược cung cấp không có rủi ro về bế tắc.
Như đã trình bày, để chiến lược cung cấp tài nguyên không có xảy ra bế tắc, hệ
thống phải đảm bảo không đồng thời xảy ra các điều kiện C1, C2, C3, C4.
<TT
R
1
R
2
R
i
T

1
T
2
T
3
S
1
S
2
S
i
Jeton
<9C$N<
Thật vậy, khi Jeton tuần hoàn trên mạng đến tài nguyên R
i
thuật toán được thể
hiện như sau :
- Kiểm tra tình trạng tài nguyên R
i
+ Nếu TinhTrang(R
i
) = (True, P
j
) : bỏ qua tài nguyên R
i
+ Nếu TinhTrang(R
i
) = (False, 0) : chiếm giữ và sử dụng tài nguyên R
i
Trong đó thủ tục Ktra( R

i
) được thực hiện như sau:
Với thuật toán trên chỉ cần khi Jeton chạy qua tài nguyên R
i
và rút ra giá trị
phiếu của tiến trình cần sử dụng tài nguyên R
i
. Vì khi có được quyền (ấn phong) mới
có thể yêu cầu và sử dụng tài nguyên, và số rút được là duy nhất nên không xảy ra sự
chồng chéo về việc sử dụng tài nguyên; ngoài ra việc sử dụng tài nguyên được đảm
bảo giải phóng sau thời gian xác định nên việc trao quyền và rút số được đảm bảo tại
các trạm. Như vậy sẽ không có rủi ro về bế tắc.
5'5VW
Ta có ba tài nguyên R
1
, R
2
, R
3
và năm tiến trình đòi hỏi tài nguyên là P
1
, P
2
, P
3
,
P
4
, P
5

. Nhu cầu tài nguyên được bố trí nghư bảng sau :
<TZ
Bắt đầu
Nếu Ktra( R
i
) = True bỏ qua không chiếm giữ tài nguyên R
i
nếu không
ChiemGiu( R
i
)
TinhTrang(R
i
)= (True, P
j
)
Kết thúc
Ktra( R
i
) = False
Vòng lặp
Nếu TinhTrang(R
i
) = (True, P
j
) thì Ktra(R
i
) = True
j : = j + 1 nếu j < k
Kết thúc vòng lặp

<9C$N<
!

!
D
!
H
!
I
!
X
Y

X X X
Y
D
X X X
Y
H
X X X
Jeton tuần hoàn trên mạng chứa các bộ tuần tự của tài nguyên :
- S
1
: (P
1
, P
2
, P
4
) và tình trạng (False,0)

- S
2
: (P
3
, P
4
, P
5
) và tình trạng (False,0)
- S
3
: (P
1
, P
4
, P
5
) và tình trạng (False,0)
* Vòng 1:
- Tại R
1
:
TinhTrang(R
1
) = (False,0)
TinhTrang(R
2
) = (False,0)
TinhTrang(R
3

) = (False,0)
- Tại R
2
:
TinhTrang(R
1
) = (True, P
1
)
TinhTrang(R
2
) = (False,0)
TinhTrang(R
3
) = (False,0)
- Tại R
3
:
TinhTrang(R
1
) = (True, P
1
)
TinhTrang(R
2
) = (True, P
3
)
TinhTrang(R
3

) = (False,0) → TinhTrang(R
3
) = (True, P
1
)
<T]
Do không có tiến trình nào đang thực
hiện và tranh chấp tài nguyên R
1
của P
1
nên cho phép P
1
sử dụng tài nguyên
Do không có tiến trình nào đang thực hiện
và tranh chấp tài nguyên R
2
của P
3
nên cho
phép P
3
sử dụng tài nguyên
Do không có tiến trình nào đang thực
hiện và tranh chấp tài nguyên R
3
của P
1
nên cho phép P
1

sử dụng tài nguyên
<9C$N<
* Vòng 2: Giả sử P
1
và P
3
vẫn chưa giải phóng tài nguyên và tại vòng 3 P
3
và P
1
đã giải phóng tài nguyên.
* Vòng 3:
- Tại R
1
:
TinhTrang(R
1
) = (False,0)
TinhTrang(R
2
) = (False,0)
TinhTrang(R
3
) = (False,0)
- Tại R
2
:
TinhTrang(R
1
) = (True, P

2
)
TinhTrang(R
2
) = (False,0)
TinhTrang(R
3
) = (False,0)
- Tại R
3
:
TinhTrang(R
1
) = (True, P
2
)
TinhTrang(R
2
) = (True, P
4
)
TinhTrang(R
3
) = (False,0) → TinhTrang(R
3
) = (True, P
4
)
* Vòng 4: Giả sử tài nguyên được sử dụng vòng trên đã được thu hồi. Khi Jeton
tuần hoàn vòng 4 ta có các giá trị như sau :

- Tại R
1
:
TinhTrang(R
1
) = (False,0)
TinhTrang(R
2
) = (False,0)
<Ta
Do không có tiến trình nào đang thực
hiện và tranh chấp tài nguyên R
1
của P
2
nên cho phép P
2
sử dụng tài nguyên
Do không có tiến trình nào đang thực
hiện và tranh chấp tài nguyên R
2
của P
4
nên cho phép P
4
sử dụng tài nguyên
Do không có tiến trình nào đang thực
hiện và tranh chấp tài nguyên R
3
của P

4

nên cho phép P
4
sử dụng tài nguyên
<9C$N<
TinhTrang(R
3
) = (False,0)
- Tại R
2
:
TinhTrang(R
1
) = (True, P
4
)
TinhTrang(R
2
) = (False,0)
TinhTrang(R
3
) = (False,0)
- Tại R
3
:
TinhTrang(R
1
) = (True, P
4

)
TinhTrang(R
2
) = (True, P
5
)
TinhTrang(R
3
) = (False,0) → TinhTrang(R
3
) = (True, P
5
)
` C"8,8qF-0rL-A=1N
T
N
Z
N
]
N
a

N
f
R !"#H$%B%=>*
<Tf
Do không có tiến trình nào đang thực
hiện và tranh chấp tài nguyên R
1
của P

4
nên cho phép P
4
sử dụng tài nguyên
Do không có tiến trình nào đang thực hiện
và tranh chấp tài nguyên R
2
của P
5
nên cho
phép P
5
sử dụng tài nguyên
Do không có tiến trình nào đang thực
hiện và tranh chấp tài nguyên R
3
của P
5
nên cho phép P
5
sử dụng tài nguyên
$PZ $[\]
1. Lê Văn Sơn, “Hệ Tin học Phân tán”, Nhà xuất bản Đại học Quốc gia TP.Hồ Chí Minh.
^(^(
!"#$ %&$''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
I. Các tài nguyên 1
II. Định nghĩa bế tắc: 2
III. Điều kiện xảy ra bế tắc 2
IV. Đồ thị cấp phát tài nguyên 3
V. Các phương pháp xử l• bế tắc 3

VI. Ngăn chặn bế tắc 4
VII. Thuật toán phát hiện bế tắc 4
VIII. Kết luận 7
!"DOP$Q!'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''_
I. Bộ tuần tự 8
II. Jeton tuần hoàn 9
III. Cung cấp tài nguyên. Vấn đề bế tắc 10
IV. Chứng minh 11
V. Ví dụ 12

×