Tải bản đầy đủ (.ppt) (36 trang)

báo cáo tiểu luận môn lập trình mạng mô phỏng quá trình phát nhận thông điệp trong 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 (559.6 KB, 36 trang )


ĐỀ TÀI

Hãy viết chương trình mô phỏng quá trình phát
và nhận thông điệp trong hệ phân tán

Xây dựng hệ thống 3 server có khả năng phát
nhận thông điệp
GVHD : PGS.TS Lê Văn Sơn
HVTH : Đặng Ngọc Thắng
LỚP : KHMT
KHÓA : K24

GIỚI THIỆU ĐỀ TÀI


- Phần 1: Phần cơ sở lý thuyết những vấn đề chung nhất của
hệ tin học phân tán làm cơ sở cho các phần 2 của đề tài.
- Phần 2: Lập trình phân tán
- Phần 3: Triển khai chương trình
- Phần 4 : Đánh giá kết quả thực hiện được và hướng phát
triển ứng dụng

LÝ THUYẾT

ĐẶT VẤN ĐỀ

Trong môi trường hệ phân tán, việc các tiến trình
muốn truy cập vào các tài nguyên có số lượng hạn
chế hay thông tin dùng chung cùng một lúc là có
thể xảy ra, trường hợp này được gọi là tương


tranh.

Tài nguyên được hệ phân tán chia sẻ cho nhiều
tiến trình mà có nguy cơ xảy ra sự tương tranh gọi
là tài nguyên găng.

ĐẶT VẤN ĐỀ

Tài nguyên găng là tài nguyên mà trong một
khoảng thời gian nhất định thì chỉ phục vụ hợp lý
cho một số hữu hạn các tiến trình.

Đoạn mã trong các tiến trình đồng thời sử dụng tài
nguyên găng gọi là đoạn găng hay gọi là “chỗ
hẹp” trong tiến trình. Tức là đoạn mã để truy cập
đến các tài nguyên được chia sẻ.

ĐẶT VẤN ĐỀ

Việc sắp xếp các thông điệp từ các trạm gởi tới để
truy cập đoạn găng theo thứ tự hợp lý để không
xảy ra sự tương tranh và hợp lực chính là các
chiến lược đồng bộ hóa các tiến trình.

Để hiểu tính cấp thiết của việc đồng bộ hóa các
tiến trình khi xử lý đoạn găng, ta xét ví dụ nhỏ
sau:

VÍ DỤ
P1

Tienrut =
400
TÀI KHOẢN
P2
Tienrut =
500
800
IF (tai khoan – tien rut >=0)
THEN tai khoan = tien khoan – tien rut;
ELSE thong bao loi;
IF (tai khoan – tien rut >=0)
THEN tai khoan = tien khoan – tien rut;
ELSE thong bao loi;
Chi nhánh I
Chi nhánh II


Trong hệ thống tin học tập trung, vấn đề đồng bộ
hóa được giải quyết thông qua cơ chế loại trừ
tương hỗ. Tuy nhiên, trong hệ phân tán, việc đồng
bộ hóa chỉ đặt ra yêu cầu 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ự đó có thể thể hiện được thông qua
việc trao đổi các thông điệp với nhau.

TRẬT TỰ TỪNG PHẦN

Giả sử rằng ta có thể xác định một trật tự giữa
các sự kiện của hệ phân tán nhờ vào quan hệ
được ký hiệu là → và gọi là “có trước” hay “ở

ngay trước”.

Quan hệ này tối thiếu phải thoã mãn được ràng
buộc thể hiện trong bảng sau đây :
C1 : Nếu A và B là hai sự kiện của cùng một trạm và nếu A
được thực hiện trước B thì theo trật tự cục bộ của trạm ta có
A → B.
C2 : Nếu A là phát thông điệp bởi một trạm nào đó và nếu B
là thu của thông điệp này thì ta có A → B.

SẮP XẾP KIỂU ĐÓNG DẤU

Một sự hoạt động gắn bó giữa các chương trình cung cấp
phân tán quản lý 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, ở đây thông điệp được
hiểu là các yêu cầu hay khuyến nghị giải phóng tài nguyên
STT Quy tắc
1
Các bộ cung cấp bắt buộc phải thực hiện cùng một
giải thuật
2
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
3
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

SẮP XẾP KIỂU ĐÓNG DẤU

Đóng dấu là hành vi gán giá trị nguyên cho một

thông điệp nhằm ghi nhận thời điểm truyền trên cơ
sở tham chiếu đồng hồ logic.

Nội dung cơ bản của phương pháp này là trạm
phát được gắn một giá trị gọi là dấu. Giá trị này là
tính chất thời điểm cho trạm phát thông tin và dựa
vào đồng hồ logic cục bộ của chính trạm. Giải
thuật trình bày ở đây là giải thuật Lamport nhằm
cho phép ghi lại các sự kiện của hệ phân tán.

SẮP XẾP KIỂU ĐÓNG DẤU

Giải thuật Lamport nhằm giải quyết vấn đề trình tự (vấn đề mấu
chốt của hệ phân tán) dựa trên giá trị đồng hồ lo gích để sắp xếp
các thông điệp đến.

Mỗi trạm s đều có trang bị công tơ với các giá trị nguyên gọi là
H
s
. Đó chính là đồng hồ lô gích tăng lên giữa hai sự kiện kế tiếp.
Trạm e phát thông điệp ghi dấu E của mình dựa trên giá trị hiện
hành của H
e
. Khi nhận được thông điệp, trạm r cập nhật đồng hồ
H
r
riêng của mình bằng giải thuật sau đây :
Nếu H
r,
thì

H
r
:= H
e
+1
Chấm dứt nếu

SẮP XẾP KIỂU ĐÓNG DẤU

Một sự kiện a sinh ra trong trạm i và được đánh
dấu bởi đồng hồ cục bộ gọi là Hi(a). Nếu a và b
đều là hai sự kiện trên hai trạm i và j, ta luôn luôn
có quan hệ xác định như sau :

Đó là trật tự không chặt chẽ do vì hai sự kiện trên
hai trạm khác nhau có thể đến cùng một thời điểm
giống nhau.
a → b ⇔ H
i
(a) < H
i
(b)

SẮP XẾP KIỂU ĐÓNG DẤU

Ta có thể mở rộng quan hệ → thành quan hệ trật
tự chặt chẽ ⇒ bằng cách kết hợp một số khác cố
định cho mỗi trạm và bằng cách đánh dấu thời
gian cho mỗi sự kiện a của trạm i bằng cặp
(Hi(a),i).


Theo định nghĩa, ta có :
a ⇒ b ⇒ (H
i
(a) < H
i
(b)) hay (H
i
(a) = H
i
(b) và i<j)

SẮP XẾP KIỂU ĐÓNG DẤU
Giả thiết
Giả thiết

Trạm i của mạng có thể gửi cho các trạm khác
thông điệp có dạng (T Hi, i), trong đó Hi là dấu
của thông điệp có nghĩa là đồng hồ lô gích của nó
và T có thể nhận một trong ba giá trị REQ, REL,
và ACQ.

SẮP XẾP KIỂU ĐÓNG DẤU

Ba giá trị này xác định bản chất của ba loại thông
điệp khác nhau
STT
Thông
điệp
Giải thích

1 REQ
Thông điệp REQ được phát đi cho tất cả các trạm,
khi trạm i muốn vào trong đoạn găng
2 REL
Thông điệp REL được phát đi cho tất cả các trạm,
khi trạm i đã rời khỏi đoạn găng
3 ACQ
Thông điệp ACQ được gửi bởi trạm i cho trạm j đã
nhận được từ trạm i thông điệp REQ.

SẮP XẾP KIỂU ĐÓNG DẤU

Khi có một thông điệp được gởi đi bởi trạm i đồng thời
nó cũng được ghi trong hàng đợi của trạm này.

Giả sử rằng mỗi hàng đợi ban đầu chứa các thông điệp :

Trong đó, i, H
init
là thời điểm khởi sự giống nhau cho tất
cả các trạm.
M
i
= (REL, H
init
, i)

SẮP XẾP KIỂU ĐÓNG DẤU

Tiêu chí để sắp xếp dựa vào Hi


Mỗi trạm quản lý một hàng đợi các thông điệp
được sắp xếp hoàn toàn bởi quan hệ ⇒ theo cặp
<thời gian, số> của từng thông điệp.

Thuật toán được mô tả theo sơ đồ sau :

Khởi tạo hàng đợi, mỗi máy tự phát thông điệp
M
i
= (REL, C
init
, i)

SẮP XẾP KIỂU ĐÓNG DẤU

Trên mỗi trạm, khi nhận được một thông điệp dạng (REQ,Hi,i) hay
(REL,Hi,i) thông điệp này thay thế thông điệp Mi bất chấp nó là gì.
Khi nhận thông điệp loại (ACQ, Hi,i), thông điệp này thay thế Mi
ngoại trừ nếu Mi là một yêu cầu mà trong trường hợp đó ACQ bị bỏ
qua. Do vậy, ta có thể tiết kiệm việc gởi đi thông điệp ACQ cho
trạm i khi trạm này đã gởi một thông điệp REQ và không còn thông
điệp REL.

Trạm i được quyền vào đoạn găng khi thông điệp REQ của nó đến
trước theo nghĩa của quan hệ => tất cả các thông điệp khác trong
hàng đợi của nó.

ĐỒNG HỒ LOGIC LAMPORT
Cài đặt đồng hồ Lamport


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.

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)

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) Cmsg, nó xử lý như sau:

Ci = Max(Ci, Cmsg)

Xử lý R2.

Phát thông điệp.
Các thời gian đánh dấu Lamport (Lamport timestamps)

ĐỒNG HỒ LOGIC LAMPORT
Ví dụ thời gian logic Lamport
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

THUẬT TOÁN LARMPORT
TỔNG QUÁT
(a) cả hai tiến trình 0 và 2 yêu cầu vào đoạn găng
(b) tiến trình 0 vào đoạn găng vì nó có yêu cầu đầu tiên
(c) tiến trình 0 rời đoạn găng, tiến trình 2 vào đoạn găng.


THUẬT TOÁN RICART &
AGRAWALA
2
Process 0
releases
resource

Khi một tiến trình muốn vào đoạn găng

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

Đợi tới khi tất cả các tiến trình khác trong nhóm có chấp nhận

Vào đoạn găng

THUẬT TOÁN TOKEN RING
(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

THUẬT TOÁN LOẠI TRỪ
TUƠNG HỖ
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ệ

×