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

tiểu luận môn lập trình mạng viết chương trình đảm bảo chống trùng vé tàu hỏa khi phân tán chức năng bán vé cho các ga trong hệ thống đường sắt

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 (471.42 KB, 24 trang )

Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
BỘ GIÁO DỤC VÀ ĐÀO TẠO
ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA

ĐỀ TÀI TIỂU LUẬN
Tên đề tài:
VIẾT CHƯƠNG TRÌNH ĐẢM BẢO CHỐNG
TRÙNG VÉ TÀU HỎA KHI PHÂN TÁN CHỨC
NĂNG BÁN VÉ CHO CÁC GA TRONG HỆ
THỐNG ĐƯỜNG SẮT



Giáo viên hướng dẫn: PGS.TS. Lê Văn Sơn
Học viên thực hiện : Phan Văn Lĩnh
Lớp : Khoa học máy tính – K16
Đà Nẵng, 4-2012
Học viên thực hiện: Phan Văn Lĩnh 1
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
PHẦN I: LÝ THUYẾT
ĐỒNG BỘ HÓA CÁC TIẾN TRÌNH
I Đặt vấn đề
Trong tất cả các hệ thống tin học, người ta cần nghiên cứu các công cụ đủ mạnh
và hiệu quả để có thể đồng bộ hóa các tiến trình. Trong hệ phân tán việc đồng bộ
hóa chỉ đặt ra duy nhất vấn đề thiết lập một trật tự giữa các sự kiện. Giữa các trạm
khác nhau, trật tự đó chỉ có thể thực hiện được thông qua việc trao đổi các thông
điệp với nhau. Trong hệ thống tập trung mỗi một loại tài nguyên của hệ thống được
quản lý một chương trình cung cấp duy nhất, sau này ta gọi tắt là bộ cung cấp tài
nguyên. Chương trình này tiếp nhận tất cả các yêu cầu, khuyến nghị giải phóng và
sắp xếp chúng trong một hàng đợi xử lý theo kiểu loại trừ tương hổ và theo một trật


tự nhất định của hàng đợi này. Trên hệ phân tán chương trình cung cấp nằm trên
một trạm và các tiến trình đề nghị lại ở các trạm khác nhau; các yêu cầu và khuyến
nghị giải phóng được truyền cho chương trình cung cấp thông qua hình thức thông
điệp chuyển trên các kênh của hệ thống viễn thông. Chính vì vậy, nhu cầu sắp xếp
các yêu cầu này theo một trật tự nhất định nào đó luôn luôn được đặt ra. Một sự
hoạt động gắn bó của các chương trình cung cấp phân tán quản lý trên cùng một tập
hợp các tài nguyên chỉ đạt được nếu tuân thủ các quy tắc sau:
• Các bộ cung cấp bắt buộc phải thực hiện cùng một giải thuật.
• Các bộ cung cắp đều nhận tất cả các thông điệp phát đi từ các tiến trình.
• Các thông điệp phải được xử lý cùng một trật tự như nhau trong các chương
trình cung cấp.
Quy tắc sau cùng nhấn mạnh đến sự thiết yếu phải có một trật tự duy nhất trên tập
hợp các thông điệp của hệ.
II Đồng bộ tiến trình
Trong hệ tin học phân tán, đồng bộ hóa tiến trình được hiểu như là quá trình tạo
nên sự hoạt động nhịp nhàng, ăn khớp với nhau giữa tất cả các đối tượng tham gia
có yêu cầu chia sẻ tài nguyên dùng chung.
 Điều kiện chủ yếu của việc đồng bộ hóa tiến trình trong hệ phân tán là:
• Các tiến trình của hệ phải được phát triển trong cùng một chu kỳ thực hiện
với các thời gian thực hiện lệnh khác nhau do khả năng xử lý của các bộ xử
lý (hoặc vi xử lý) thành phần khác nhau.
Học viên thực hiện: Phan Văn Lĩnh 2
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
• Các tiến trình phát triển trong các hệ thống thành phần khác nhau, nằm ở các
địa điểm khác nhau và được nối nhau qua đường truyền trong điều kiện có
diễn ra sự cố kỹ thuật.
• Không sử dụng bộ nhớ và đồng hồ chung.
Xuất phát từ yêu cầu và điều kiện kỹ thuật cụ thể nêu trên, rõ ràng người ta cần phải
nghiên cứu các giải pháp đủ mạnh và hiệu quả để có thể đồng bộ hóa các tiến trình như
là đối tượng chủ yếu tham gia tạo nên sự hoạt động của hệ không đồng bộ.

Tính cấp thiết của vấn đề đồng bộ hóa tiến trình thể hiện ở hai điểm mấu chốt sau đây:
• Nhìn chung, các tiến trình kể cả các tiến trình xuất phát từ các ứng dụng độc
lập muốn truy cập vào các tài nguyên với số lượng vốn rất hạn chế hay truy
cập vào thông tin dùng chung cùng một lúc làm phát sinh vấn đề truy cập
tương tranh. Truy cập tương tranh là nguyên nhân chính của các xung đột
giữa các tiến trình khi truy cập vào tài nguyên dùng chung.
• Các tiến trình của cùng một hệ hoạt động theo kiểu hợp lực để giải quyết các
chức năng xác định nhằm cho kết quả nhanh và hiệu quả nhất, điều này cho
phép tăng hiệu năng sử dụng thiết bị và hiệu quả hoạt động của chương trình.
Vì vậy, tương tranh và hợp lực là nguyên nhân chính của sự tác động tương hổ
được lập trình giữa các tiến trình nhằm cho phép chúng tham gia vào các hành động
chung. Đây là quá trình phức tạp.
Sự tương tranh và hợp lực giữa các tiến trình đòi hỏi phải có trao đổi thông tin qua
lại với nhau. Trong các hệ thống tập trung, điều đó được thực hiện nhờ thuật toán
loại trừ tương hổ thông qua các biến cùng tác động trong một vùng nhớ hoặc một
biến chung là đủ. Trong hệ phân tán, các thông tin cần trao đổi phải thông qua các
kênh thuộc hệ thống viễn thông dưới dạng các thông điệp.
Trong hệ máy tính đơn thì vùng găng, loại trừ tương hổ, và những vấn đề đồng
bộ hóa thường được giải quyết bằng cách dùng phương pháp cờ hiệu và quan sát.
Nhưng những phương pháp này không thể dùng trong hệ phân tán. Ngay cả một vấn
đề đơn giản là một sự kiện A xảy ra trước hay sau sự kiện B thì cũng là điều cần suy
nghĩ cẫn thận.
III Đồng hồ logic
Chúng ta thì quan tâm đến thời gian tương đối giữa các sự kiện (thứ tự của
chúng), định nghĩa mối quan hệ, xảy ra trước ():
• Trên cùng một máy: ab, nếu time(a)<time(b)
• Nếu H1 gửi m đến H2: send(m)  receive(m)
• Nếu ab và bc thì ac.
Học viên thực hiện: Phan Văn Lĩnh 3
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng

Thuật toán Lamport sử dụng mối quan hệ này để cung cấp một thứ tự sự kiện riêng.
IV Các thuật toán đồng bộ hóa tiến trình giải quyết tương tranh
IV.1 Đồng bộ hóa đồng hồ logic
IV.1.1 Các ký hiệu
• Một chương trình phân tán được tạo thành bởi tập hợp n tiến trình độc lập và không
đồng bộ P1, P2, ,Pn. Các tiến trình này không chia sẻ một đồng hồ chung.
• Mỗi tiến trình có thể xử lý một sự kiện tự động; khi gửi một thông điệp, nó
không phải đợi việc phân phát hoàn thành.
• Việc xử lý của mỗi tiến trình Pi, sản sinh ra một dãy sự kiện e
i
0
, e
i
1
, , e
i
x
, e
i
x+1
,
Tập hợp các sự kiện được sản sinh ra bởi Pi có một tổng thứ tự được xác định bởi
dãy các sự kiện e
i
x
 e
i
x+1
Chúng ta nói rằng e
i

x
xảy ra trước e
i
x+1
Quan hệ xảy ra trước  có tính bắc cầu: e
i
i
 e
i
j
với mọi i<j.
• Các sự kiện xảy ra giữa hai tiến trình đồng thời nói chung không quan hệ,
ngoại trừ hai tiến trình đó có liên quan theo quan hệ như sau:
Đối với mỗi thông điệp m trao đổi giữa hai tiến trình Pi và Pj, chúng ta có e
i
x
=
send(m), e
j
y
= receive(m) và e
i
x
 e
j
y
.
• Các sự kiện trong một sự xử lý phân tán là được sắp xếp riêng biệt.
 Các sự kiện cục bộ là tổng thể được sắp đặt.
 Các sự kiện nguyên nhân là tổng thể được sắp đặt.

 Tất cả các sự kiện khác là không được sắp đặt.
Cho bất kỳ hai sự kiện e
1
và e
2
trong một sự xử lý phân tán, có thể là:
(i) e
1
 e
2
(ii) e
2
 e
1
(iii) e
1
|| e
2
(e
1
và e
2
là đồng thời).
 Ví dụ:
Những sự kiện nào là quan hệ  ?
Những sự kiện nào là đồng thời ?
Học viên thực hiện: Phan Văn Lĩnh 4
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
IV.1.2 Những điều kiện đồng hồ
• Trong một hệ thống các đồng hồ logic, các tiến trình riêng biệt có một đồng

hồ logic mà được áp dụng theo một giao thức.
• Mỗi sự kiện được gán một timestamp (thời gian đánh dấu) trong cách thức
mà thõa mãn điều kiện bền chặt đồng hồ: nếu e
1
 e
2
thì C(e
1
) < C(e
2
).
Trong đó: C(e
i
) là timestamp (thời gian đánh dấu) được gán cho sự kiện e
i
.
• Nếu giao thức thõa mãn các điều kiện theo sau nữa, thì đồng hồ được nói
rằng bền chặt mạnh: nếu C(e
1
) < C(e
2
) thì e
1
 e
2
.
IV.1.3 Sự cài đặt đồng hồ logic
R1:Tất cả các máy (tiến trình - Pi) sử dụng một bộ đếm (đồng hồ - Ci) với giá trị
khởi tạo là 0.
R2: Trước khi xử lý một sự kiện (gửi, nhận hoặc ngắt), Pi xử lý như sau: tăng

bộ đếm và gán cho mỗi sự kiện, như là timestamp (thời gian đánh dấu) của nó.
Ci = Ci + d (d>0, thường d=1)
R3: Mỗi thông điệp mang giá trị đồng hồ của người gửi nó tại thời điểm gửi.
Khi Pi nhận một thông điệp với timestamp (thời gian đánh dấu) C
msg
, nó xử lý
như sau:
1.Ci = Max(C
i
, C
msg
)
2.Xử lý R2.
3.Phát thông điệp.
Đồng hồ logic tại bất kỳ tiến trình nào là ngày càng tăng đơn giản.
Học viên thực hiện: Phan Văn Lĩnh 5
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
Hình 1.1.Các thời gian đánh dấu Lamport (Lamport timestamps)
Hình 1.2.Ví dụ thời gian logic Lamport
IV.1.4 Cải tiến đồng hồ logic bởi Vectơ thời gian
• Phát triển bởi một số người độc lập
• Với thời gian logic lamport:
e trước f ⇒ timestamp(e) < timestamp(f), nhưng timestamp(e) < timestamp(f)
không thể ⇒ e trước f.
⇒ Vector thời gian logic đảm bảo điều này:
• Mỗi tiến trình Pi của n tiến trình thành phần duy trì một vector (mảng)
nguyên có kích thước n:
 vt
i
[1, ,n], trong đó vt

i
[i] là đồng hồ logic cục bộ của tiến trình Pi, khởi tạo
tất cả bằng 0.
Học viên thực hiện: Phan Văn Lĩnh 6
Trạm 1
Trạm 2
Trạm 3
Trạm 4
0
1
0
0
2
2
3
3
4
5
5
6
7
8
9 10
7
Thời gian vật lý
n
Giá trị đồng hồ.
timestamp
Thông điệp
0

1
2
3
4
6
8
7
Các sự kiện logic đồng thời
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
 vt
i
[j] trình bày sự hiểu biết gần đây nhất của Pi về thời gian cục bộ của Pj.
• Giao thức vector đồng hồ:
Tại tiến trình Pi:
• Trước khi xử lý một sự kiện, Pi cập nhật thời gian cục bộ logic của nó như sau:
vt
i
[i] = vt
i
[i] + d (d>0, thường d=1). Và gán vector với sự kiện.
• Mỗi tiến trình gửi một thông điệp m mang giá trị vector đồng hồ (vector
timestamp) của nó tại thời điểm gửi.
• Trên việc nhận một thông điệp như vậy (m, vt), Pi cập nhật vector đồng hồ
logic của nó như sau:
1.vt
i
[k] = max(vt
i
[k] , vt [k]). Với mọi 1 <= k <=n.
2.vt

i
[i] = vt
i
[i] + d (d > 0, thường d=1)
 Ví dụ:
Hình 1.3.Vector timestamp
Học viên thực hiện: Phan Văn Lĩnh 7
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
Hình 1.4.Vector thời gian logic
• Vector đồng hồ:
Hệ thống với những vector đồng hồ là bền chặt mạnh:
 Mỗi thông điệp được gán một timestamp trong cách như vậy mà thõa mãn
điều kiện bền chặt đồng hồ.
Nếu e
1
 e
2
thì vt(e
1
) < vt(e
2
), sử dụng so sánh vector, trong đó vt(e
i
) là timestamp
gán cho sự kiện e
i
.
• Nếu giao thức thỏa mãn điều kiện sau nữa, thì đồng hồ được nói là gắn bó chặt.
Nếu vt(e
1

) < vt(e
2
) thì e
1
 e
2
, sử dụng sự so sánh vector.
• Trong đó sự so sánh vector thực hiện như sau:
Cho hai vector V
1
và V
2
, cùng kích thước n:
V
1
< V
2
, nếu V
1
[i] <= V
2
[i] với i = 1, 2, , n. Và tồn tại số k, 0 < k < n+1 mà V
1
[k] < V
2
[k].
Học viên thực hiện: Phan Văn Lĩnh 8
Thời gian vật lý
Trạm 1
Trạm 2

Trạm 3
Trạm 4
n,m,p,
q
Vector đồng hồ logic
Thông điệp
Vector timestamp
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
 Ví dụ: V
1
= { 1, 2, 3, 4}; V
2
= {2, 3, 4, 5} thì V
1
< V
2
.
• Bởi vì vector đồng hồ là bền chặt mạnh, chúng ta có thể sử dụng chúng để
quyết định hoặc là hai sự kiện theo quan hệ nguyên nhân bởi việc so sánh
vector timestamp (thời gian đánh dấu) của chúng, sử dụng sự so sánh vector.
IV.2 Thuật toán Lamport tổng quát
(a) Sơ đồ giải thuật Lamport:
(b) Giải thích:
Gọi n là số trạm trong hệ ; REQ(H
m
,i) là một yêu cầu (request) vào đoạn găng tại
trạm i, trong đó m là tên của thông điệp và H
m
là nhãn thời gian của thông điệp (còn
gọi là dấu của thông điệp); ACK(H

k
,j) là một thông điệp trả lời của trạm j cho trạm
i khi j nhận được một REQ(…) của i trong đó H
k
là dấu của thông điệp trả lời;
RELEAS(H
w
,i) nếu yêu cầu ra khỏi đoạn găng tại trạm i trong đó w là tên của
thông điệp yêu cầu và H
w
là dấu thông điệp.
 Tiến trình P
i
muốn vào đoạn găng:
• P
i
gởi thông điệp yêu cầu vào m {REQ(H
m
,i)} cho tất cả các tiến trình khác
trong mạng P
j
(j=1…n-1) số trạm trong hệ.
• P
j
nhận được thông điệp này thì đưa nó vào hàng đợi cục bộ của trạm và trả
lời cho P
i
{ACK(H
k
,j)}

• Tại P
i
khi nhận được thông điệp trả lời thì nó sẽ xem xét yêu cầu của nó và
tuỳ theo sự xem xét đó mà được vào đoạn găng hay không.
 Tiến trình P
i
muốn ra khỏi đoạn găng:
• P
i
gởi thông điệp yêu cầu ra w {RELEASE(H
w
,i)} cho tất cả các tiến trình
khác trong mạng.
Học viên thực hiện: Phan Văn Lĩnh 9
…REQ(H
m
,i) REQ(H
k
,j)
…REQ(H
m
,i) REQ(H
k
,j)
P
j
RELEASE(P
j
)
P

i
P
i
P
j
ACK(H
k
)
REQ(H
m
,i)
P
i
Hình 1.5. Sơ đồ tổng quát của giải thuật Lamport
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
• Xoá yêu cầu của nó trong hàng đợi cục bộ.
IV.3 Thuật toán Ricart & Agrawala
Ricart & Agrawala đưa ra thuật toán loại trừ tương hổ phân tán vào năm 1981.
Thuật toán yêu cầu như sau:
• Trật tự toàn bộ các event trong hệ thống (ví dụ thuật toán Lamport hay các
thuật toán khác)
• Các thông điệp là đáng tin cậy (mỗi thông điệp là ACK)
 Khi một tiến trình muốn vào đoạn găng, nó:
1. Tạo một thông điệp chứa (nhận dạng tiến trình (máy, số tiến
trình), tên của đoạn găng và thời gian hiện thời).
2. Gửi một thông điệp yêu cầu tới tất cả các tiến trình khác trong
nhóm.
3. Đợi tới khi tất cả các tiến trình khác trong nhóm có chấp nhận.
4. Vào đoạn găng.
Khi một tiến trình nhận được thông điệp yêu cầu, nó có thể ở một trong ba trường

hợp sau:
Trường hợp 1: Bên nhận không muốn vào đoạn găng, gửi OK cho bên gửi
Trường hợp 2: Bên nhận đang ở trong đoạn găng; không trả lời và đưa yêu cầu vào
hàng đợi yêu cầu cục bộ.
Trường hợp 3: Bên nhận muốn vào đoạn găng và đã gửi yêu cầu. Trong trường hợp
này, bên nhận so sánh nhãn thời gian (timestamp) trong thông điệp nhận được với
nhãn mà nó đã gửi ra, nhãn sớm hơn sẽ chiếm được. Nếu bên nhận không chiếm
được nó sẽ gửi OK đến bên gửi. Nếu bên nhận có nhãn thời gian sớm hơn, nó sẽ
chiếm được và không trả lời. Thay vào đó, nó sẽ thêm yêu cầu vào hàng đợi của nó.
Khi một tiến trình đã hoạt động với đoạn găng của nó, nó gửi OK đến các tiến trình
khác trong hàng đợi của nó và xóa tiến trình ra khỏi hàng đợi.
 Ví dụ:
Có hai tiến trình 0 và 2 yêu cầu cùng truy cập một tài nguyên (đoạn găng). Tiến trình 0
gửi yêu cầu của nó với nhãn thời gian 8 và tiến trình 2 gửi yêu cầu với nhãn thời gian 12.
1. Vì tiến trình 1 không muốn vào đoạn găng, ngay lập tức nó gửi chấp
nhận cho cả hai tiến trình 0 và 2. Tiến trình 0 muốn vào đoạn găng. Nó thấy
rằng nhãn thời gian của tiến trình 2 là trễ hơn nhãn của nó, vì vậy tiến trình 0
chiếm được. Nó xếp hàng một yêu cầu từ 2.
2. Tiến trình 2 cũng muốn vào đoạn găng. Khi nó so sánh nhãn thời gian
của nó với nhãn nó nhận được từ tiến trình 0, nó thấy rằng nó không chiếm
Học viên thực hiện: Phan Văn Lĩnh 10
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
được đoạn găng vì vậy nó trả lời chấp nhận cho tiến trình 0 và tiếp tục đợi cho
đến khi tất cả các tiến trình chấp nhận cho nó vào đoạn găng.
3. Ngay khi tiến trình 2 gửi chấp nhận đến tiến trình 0, tiến trình 0 nhận
được chấp nhận của toàn bộ nhóm và nó có thể vào đoạn găng. Khi tiến trình 0
thực hiện xong nó kiểm tra hàng đợi các chấp nhận chưa giải quyết của nó và
tìm thấy tiến trình 2 trong hàng đợi này, nó gửi chấp nhận vào đoạn găng cho
tiến trình 2. Bây giờ tiến trình 2 đã nhận được chấp nhận của mọi tiến trình và
có thể vào đoạn găng.

Hình 1.6. Thuật toán Ricart & Agrawala
 Chứng minh tính đúng đắn của thuật toán
Giả sử Pi và P
j
đang thực hiện yêu cầu (CS) tại cùng một thời điểm và timestamp
yêu cầu của P
i
và nhỏ hơn P
j
. Điều này có nghĩa là P
i
đưa ra yêu cầu của nó đầu tiên
và sau đó nhận yêu cầu của P
j
, mặt khác timestamp yêu cầu của P
j
sẽ phải nhỏ hơn.
P
i
và P
j
cùng thực hiện đoạn găng nghĩa là P
i
gửi thông điệp trả lời tới P
j
trước khi
thoát khỏi đoạn găng. Điều này dẫn đến mâu thuẫn một tiến trình không được phép
gửi thông điệp trả lời nếu timestamp yêu cầu của nó nhỏ hơn timestamp của thông
điệp gửi đến. Như vậy P
i

và P
j
không thể cùng vào đoạn găng tại một thời điểm.
Ricart & Agrawala algorithm
timestamp current_time Thời gian Lamport hiện thời
timestamp my_timestamp nhãn thời gian của yêu cầu
integer reply_pending Số của chấp nhận chưa giải quyết
boolean is_requesting Nhận giá trị TRUE đoạn găng đã được sử dụng
boolean reply_defferred[N] Nhận giá trị TRUE cho yêu cầu tiếp theo
Request_CS()
my_timestamp = current_time
is_requesting = TRUE
reply_pending = N – 1
Học viên thực hiện: Phan Văn Lĩnh 11
2
Process 0
releases
resource
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
for every other processor j,
send (j, REMOTE_REQUEST; my_timestamp)
wait until reply_pending = 0
Release_CS()
is_requesting = FALSE
for j = 1 to N
if reply_defferred[j] = TRUE
send(j, REPLY)
reply_defferred[j] = FALSE
CS.Monitor()
Wait until REMOTE_REQUEST or REPLY arrives

REMOTE_REQUEST(sender; request_timestamp):
if (not is_requesting or
my_timestamp > request_timestamp)
send(sender, REPLY)
else
reply_defferred[sender] = TRUE
REPLY (sender)
reply_pending—
IV.3 Thuật toán Token Ring
Đối với thuật toán này, ta giả sử rằng có một nhóm các tiến trình không có trật tự
nhưng có thể áp đặt vào một nhóm.Ví dụ, ta có thể nhận biết mỗi tiến trình bằng địa
chỉ máy của nó và ID của tiến trình để có được trật tự. Sử dụng trật tự áp đặt này, một
vòng logic được xây dựng trong phần mềm. Mỗi tiến trình được ấn định một vị trí
trong vòng và mỗi tiến trình phải biết tiến trình tiếp theo nó trong vòng tròn.
Vòng tròn được khởi tạo bằng cách gửi một token tới tiến trình 0. Token được luân
chuyển vòng (tiến trình n đến tiến trình (n+1)mod kích thước vòng).
Khi một tiến trình chiếm được token, nó kiểm tra xem nếu nó nó có thể vào đoạn
găng hay không. Nếu có thể, nó vào đoạn găng và thực hiện các công việc của nó.
Khi thoát ra nó chuyển token cho tiến trình kế tiếp.
Nếu một tiến trình không muốn vào đoạn găng, đơn giản nó chỉ chuyển token .
Chỉ có một tiến trình có token tại một thời điểm và nó phải có token để vào đoạn
găng, vì vậy loại trừ tương hổ được bảo đảm. Thứ tự cũng được định nghĩa tốt do
đó không có hiện tượng "chết đói" xảy ra. Hạn chế lớn nhất của thuật toán này là
nếu token bị mất, nó sẽ được khởi tạo lại. Việc xác định token bị mất là khó khăn.
Học viên thực hiện: Phan Văn Lĩnh 12
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
(a) Nhóm các tiến trình không có trật tự trong một mạng
(b) Cấu trúc vòng tròn logic trong phần mềm
Hình 1.7. Thuật toán Token Ring
IV.4 Thuật toán loại trừ tương hổ

IV.4.1 Mô tả thuật toán
• Trạng thái ban đầu tại mỗi trạm là bình thường, chưa có thao tác (released).
• Khi có yêu cầu xảy ra tại cổng vào ra (có thể là yêu cầu chỗ trống để cho xe
vào hay cho một xe ra khỏi bãi), tại đây sẽ ghi nhận thời gian theo đồng hồ
logic và chuyển trạng thái sang yêu cầu truy cập thông tin (wanted) và gửi
thông báo đến các trạm còn lại và chờ cho đến khi nhận được N-1 yêu cầu từ
các trạm còn lại gửi về. Sau khi đã nhận đủ N-1 yêu cầu sẽ chuyển sang
trạng thái đã hoạt động (held), tức là tiến trình đã vào miền găng và đã có
quyền truy cập vào các thông tin chung như đã được mô tả như trên.
• Sau khi thực hiện xong việc giải quyết vào ra cho một xe tại cổng của mình và
ghi lại thông tin về hiện trạng của bãi đậu xe, sẽ chuyển sang trạng thái ban
đầu (released) và thông báo cho tất cả các trạm còn lại việc ra khỏi miền găng.
• Khi một trạm nhận được thông điệp từ trạm khác mà nó đang ở trong miền
găng (held) hoặc đang trong trạng thái chờ (wanted) và yêu cầu trước trạm
phát thông điệp thì nó sẽ đưa thông điệp vừa nhận được vào hàng đợi và
không trả lời. ngược lại với 02 trường hợp này (tức là đang ở trạng thái
released) thì nó sẽ lập tức trả lời để tạo điều kiện cho trạm gửi có cơ hội vào
miền găng.
• Một trạm trước khi ra khỏi miền găng để trở về trạng thái ban đầu (released)
cũng phải trả lời các thông điệp trong hàng đợi để tạo cơ hội cho trạm khác
vào miền găng.
IV.4.2 Thuật toán thô
Khởi tạo trạng thái ban đầu
Học viên thực hiện: Phan Văn Lĩnh 13
Toke
n
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
state := RELEASED;
Để một tiến trình chuẩn bị vào được đoạn găng
state := WANTED;

Gởi thông điệp yêu cầu vào đoạn găng cho N-1 trạm còn lại
H := request’s timestamp; {Thời gian dấu của yêu cầu}
Wait until ( Số lượng các thông điệp trả lời cho nó = (N - 1));
state := HELD;
Để một tiến trình ra khỏi đoạn găng
state := RELEASED;
Gởi thông điệp cho mọi tiến trình khác trong hệ
Khi nhận một yêu cầu <T,H,I,D>:
Cập nhật đồng hồ Logic của trạm theo công thức clock_logic=Max(clock_logic,H)
+1
Nếu T=”REQ” thì bỏ thông điệp vào hàng đợi của trạm. Ở đây là chèn thông
điệp vào hàng đợi theo hai giá trị của H và I.
Nếu T= “ACK” thì:
• Tham chiếu vào hàng đợi của mình để xem các thông điệp có giá trị
T=”REQ”, I
REQ
=I
ACK
ở đầu hàng đợi
• Các thông điệp có giá trị T=”ACK” đã nhận đầy đủ từ các trạm khác trong
hệ để trả lời cho nó
• Nếu đã hội đủ hai vấn đề trên thì cho vào đoạn găng
Ngược lại thì bỏ thông điệp vào hành đợi
Nếu T= “REL”
Xoá thông điệp có T=”REQ” tương đương với nó ra khỏi hàng đợi
Học viên thực hiện: Phan Văn Lĩnh 14
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
IV.4.3 Sơ đồ thuật toán loại trừ tương hổ
Học viên thực hiện: Phan Văn Lĩnh 15
S

Đ
Bắt đầu
State:=Wanted
Gởi thông điệp vào đoạn găng cho trạm j (j=1…n)
Gởi thông điệp trả lời từ các trạm đã gởi yêu cầu
Nếu số thông điệp
nhận được để trả
lời nó bằng N-1
State:=Held
Kết thúc
Hình 1.8. Giải thuật để một tiến trình i vào đoạn găng
S
Đ
Bắt đầu
State:=Released
Gởi thông điệp yêu cầu ra khỏi đoạn găng cho trạm j tiếp theo(j=1…n)
Trạm j nhận thông điệp đó và xóa thông điệp yêu
cầu vào của nó trong hàng đợi cục bộ của trạm j
Nếu trạm j là trạm
cuối cùng trong hệ
để gởi thông điệp
Cập nhật dữ liệu trong cơ sở dữ liệu của các trạm
Kết thúc
Hình 1.9. Giải thuật để một tiến trình i ra khỏi đoạn găng
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
Học viên thực hiện: Phan Văn Lĩnh 16
Đ
Đ
S
S

S
Bắt đầu
Nhận thông điệp M có dạng: M={T,H,Z,I,D}
Cập nhật đồng hồ logic của trạm
Xem xét giá trị của T
Nếu T=”REQ”
Kết thúc
Hình 1.10. Giải thuật xử lý khi nhận thông điệp vào đoạn găng
Nếu T=”REL”
Nếu T=”ACK”
(1)
Đ
Chèn thông điệp
vào hàng đợi cục
bộ của trạm nhận
phụ thuộc H và i
Gởi thông
điệp trả lời
Xóa thông điệp yêu
cầu trong hàng đợi
Ra khỏi đoạn găng
+ cập nhật thông tin
trong CSDL
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
Học viên thực hiện: Phan Văn Lĩnh 17
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
Học viên thực hiện: Phan Văn Lĩnh 18
Đ
S
Đ

S
Chèn thông điệp nhận được vào hàng đợi
Đếm số các trạm đang hoạt
động, giả sử là so_connec
Nếu thông điệp yêu cầu
vào đoạn găng tương
ứng thông điệp trả lời
cho nó là đang ở đầu
hàng đợi
Hình 1.11. Giải thuật xử lý khi nhận thông điệp có T=”ACK”
(1)
Kiểm tra lượng thông điệp
từ các trạm khác gởi về trạm
yêu cầu tương ứng, giả sử là
so_ACK_Return
Nếu so_Connec=so_ACK_Return+1
Xóa tất cả các thông điệp trả lời tương ứng
Tiến trình vào đoạn găng, cập nhật lại CSDL cho các trạm
Đưa thông điệp yêu
cầu vào lại hàng đợi
Kết thúc
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
PHẦN II: ỨNG DỤNG
ỨNG DỤNG VÀO QUẢN LÝ BÁN VÉ TÀU
I. Phát biểu bài toán
Giả sử có N ga tàu ở tại N thành phố khác nhau, có một chiếc tàu SE1 đi lần
lượt từ ga đầu tiên đến ga cuối cùng và tại mỗi ga đều bán vé cho chiếc tàu đó. Quy
định ga đầu tiên có thể bán vé tự do, kể từ ga thứ hai trở đi chỉ bán 5% của số vé
trống còn lại và sau 30 phút có thể bán tự do số vé trống đó, Như vậy, xảy ra trường
hợp là các ga tiếp theo không biết vị trí nào có người và vị trí nào không có người,

ngoài ra còn trường hợp tại thời điểm t trước đó một vị trí số 3 có người nhưng tại
thời điểm t’ thì vị trí đó không có người vì đến ga đó khách đã rời tàu, …. Vậy, vấn
đề đặt ra là phải tạo ra một cơ chế đồng bộ hóa dữ liệu để cho các nhân viên biết
mới có thể bán vé tàu được một cách chính xác và hiệu quả.
II. Mô hình bài toán
Ta có thể xem nhân viên bán vé tàu như là chương trình cung cấp (trạm), còn
vị trí ngồi trên tàu là tài nguyên và khách hàng là các tiến trình của hệ. Khi một
khách hàng mua vé nghĩa là tiến trình yêu cầu sử dụng tài nguyên dùng chung.
Ngược lại khi một khách hàng rời khỏi tàu nghĩa là tiến trình giải phóng tài nguyên
dùng chung.
Sự tương quan giữa các đối tượng trên tàu và các đối tượng trong hệ phân tán có thể
mô tả như sau:
TT Tàu Hệ phân tán Thuyết minh
1 Khách hàng Tiến trình Ở đây, tiến trình được xem như đồng
nhất(cùng 1 loại). Trong hệ phân tán các tiến
trình đa dạng
2 Nhân viên
bán vé
Chương trình
điều khiển
Chương trình hoàn toán giống nhau trên các
trạm
3 Nơi mua vé Trạm Mỗi ga đặt 1 máy và nối chúng với nhau
thông qua đường truyền
4 Vị trí ngồi Tài nguyên Tài nguyên đồng nhất. Trong thực tế hệ phân
tán, tài nguyên có nhiều loại và có các đặc
điểm rất khác xa nhau
5 Ma trận vị
trí trên tàu
Hệ CSDL phân

tán
Đòi hỏi phải hoàn toàn giống nhau ở mọi
thời điểm truy cập (Gắn bó dữ liệu)
Học viên thực hiện: Phan Văn Lĩnh 19
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
Bài toán bán vé tàu có rất nhiều ga khác nhau, ở đây ta giả sử là có 4 ga, và số vị trí
ngồi trên mỗi tàu cũng khác nhau có thể 500,1000,2000,… mỗi ga tương ứng với
một trạm trong mạng. Mỗi trạm này có một địa chỉ IP duy nhất cho phép xác định
chính xác trạm trong mạng và một địa chỉ cổng Port để xác định chính xác chương
trình cung cấp trên trạm đó. Các địa chỉ IP và địa chỉ cổng Port được cập nhật vào
một table thuộc database nằm trên trạm đó.
Hình 1.12. Mô hình hệ thống thông tin giữa các trạm
Nói cách khác, ta có thể xem hệ thống bán vé tàu này là một hệ thống đa Server bao
gồm server1 (ga 1), server2 (ga 2), server3 (ga 3), server (ga 4), … thông qua giao
thức mạng TCP/IP. Mỗi server đều có một Database riêng rẽ để chứa dữ liệu. Tại
mỗi thời điểm thì số lượng khách hàng vào ra là không xác định.
Các trạm phải tuân thủ các nguyên tắc sau:
• Mỗi trạm sử dụng bộ nhớ tức thời hoặc đĩa cứng của mình trong quá trình xử
lý thông tin và cập nhật cơ sở dữ liệu dùng chung cho chính trạm đó.
• Việc trao đổi dữ liệu của hệ thống được tiến hành thông qua sự trao đổi
thông điệp giữa các trạm với nhau.
• Mỗi khi có sự cố trên một trạm thì các trạm trong hệ đều phải biết.
Mỗi trạm cài đặt một chương trình gồm hai tiến trình trong đó một tiến trình có
nhiệm vụ phát đi các thông điệp yêu cầu cung cấp hoặc kiến nghị vị trị có khách
hàng, tiến trình còn lại nhận các thông điệp từ các tiến trình phát. Trên mỗi trạm đều
có xây dựng một hàng đợi, dùng để lưu trữ các thông điệp từ các tiến trình phát
Học viên thực hiện: Phan Văn Lĩnh 20
S
3
S

1
S
4
S
2
Mạng
TCP/IP
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
Như vậy, tại mỗi trạm nào đó, nếu có một khách hàng muốn mua một vé tàu thì tiến
trình phát tại trạm này sẽ gởi thông điệp đến các trạm khác và ngay cả chính nó.
Những thông điệp này sẽ được tiến trình nhận và đưa vào hàng đợi cục bộ tại trạm.
Sau đó tùy theo giải thuật xử lý mà ta biết được là nó có thể mua được hay không?
III. Demo:
Chạy file "SERVER.bat"
Chạy file "StatePark.bat"
Sau đó chạy các file "s1.bat","s2.bat","s3.bat","s4.bat","s5.bat"
OK
Học viên thực hiện: Phan Văn Lĩnh 21
Queue của Trạm
Ghi
Nhận
Tiến trình
yêu cầu
mua vé
S
Thông báo đã mua vé được
Cập nhật dữ liệu tại trạm
Ra khỏi hàng đợi
Tiến
trình

nhận
*
T
Ch

*: Xử lý theo giải thuật
Hình 1.13. Mô hình tại trạm với yêu cầu mua vé
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
Học viên thực hiện: Phan Văn Lĩnh 22
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
Học viên thực hiện: Phan Văn Lĩnh 23
Tiểu luận Môn học: Kỹ Thuật Lập Trình Mạng
MỤC LỤC
PHẦN I: LÝ THUYẾT 2
ĐỒNG BỘ HÓA CÁC TIẾN TRÌNH 2
I Đặt vấn đề 2
II Đồng bộ tiến trình 2
III Đồng hồ logic 3
IV Các thuật toán đồng bộ hóa tiến trình giải quyết tương tranh 4
IV.1 Đồng bộ hóa đồng hồ logic 4
IV.1.1 Các ký hiệu 4
IV.1.2 Những điều kiện đồng hồ 5
IV.1.3 Sự cài đặt đồng hồ logic 5
IV.1.4 Cải tiến đồng hồ logic bởi Vectơ thời gian 6
IV.2 Thuật toán Lamport tổng quát 9
IV.3 Thuật toán Ricart & Agrawala 10
IV.3 Thuật toán Token Ring 12
IV.4 Thuật toán loại trừ tương hổ 13
IV.4.1 Mô tả thuật toán 13
IV.4.2 Thuật toán thô 13

IV.4.3 Sơ đồ thuật toán loại trừ tương hổ 15
PHẦN II: ỨNG DỤNG 19
ỨNG DỤNG VÀO QUẢN LÝ BÁN VÉ TÀU 19
I. Phát biểu bài toán 19
II. Mô hình bài toán 19
III. Demo: 21
Học viên thực hiện: Phan Văn Lĩnh 24

×