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

Tiểu luận LẬP TRÌNH MẠNG NÂNG CAO THUẬT TOÁN LOMET SẮP XẾP CÁC GIAO DỊCH 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 (1.01 MB, 33 trang )

Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
ĐẠI HỌC ĐÀ NẴNG
Tiểu luận
LẬP TRÌNH MẠNG NÂNG CAO
Đề tài:
THUẬT TOÁN LOMET SẮP XẾP CÁC GIAO DỊCH TRONG HỆ
PHÂN TÁN
GVHD : PGS.TS Lê Văn Sơn
HVTH : Ninh Văn Anh
Phan Thị Bông
Lớp : Cao học KHMT khóa 11
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 1

Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
LỜI NÓI ĐẦU
Ngày nay, công nghệ mạng máy tính và Internet đã phát triển mạnh, không
những cho chúng ta khai thác Nguồn tài nguyên là những kho tư liệu về các lĩnh
vực mà còn có thể triển khai các hệ thống thông tin giải quyết những công việc đặt
ra trong hoạt động thường ngày.
Đối với các hệ thông tin lớn, CSDL không chỉ được lưu trữ và quản lý bởi các
server độc lập mà thường được phân tán trên nhiều server và phân bổ ở các vị trí địa lý
khác nhau. Hệ thống cho phép xử lý đa truy cập đồng thời cho phép đăng ký từ xa. Một
trong những lợi ích của việc phân tán dữ liệu là nhằm chia yêu cầu xử lý dữ liệu cho
nhiều máy nhằm tăng năng lực xử lý thông tin của hệ thống. Việc lập trình giải quyết
một bài toán trong hệ thống truyền thông của hệ tin học phân tán còn mới mẻ và
không đơn giản. Trong phạm vi tiểu luận môn học lập trình mạng, với đề tài: “Sử
dụng thuật toán Lomet để sắp xếp các giao dịch trong mạng phân tán” nội dung
tiểu luận bao gồm:
- Nghiên cứu thuật toán Lomet nhằm xử lý việc cung cấp tài nguyên của các server
qua hệ thống đường truyền.
- Xây dựng hệ thống đa server.


- Xây dựng chương trình Monitoring quan sát trường dấu trong hàng đợi các thông
điệp tại server nhận.
- Viết chương trình cài đặt thuật toán
- Hiện đồ thị trạng thái cung cấp tài nguyên trên hệ với 3 Servers
Xin chân thành cảm ơn sự hướng dẫn của thầy PGS.TS.Lê Văn Sơn và các bạn học
viên trong lớp đã giúp tôi hoàn thành tiểu luận này.
Nhóm thực hiện
Ninh Văn Anh
Phan Thị Bông
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 2

Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
CHƯƠNG 1: THUẬT TOÁN LOMET
1.1.Các vấn đề cơ bản của hệ tin học phân tán.
1.1.1.Định nghĩa.
Hệ tin học phân tán hay nói ngắn gọn là hệ phân tán (Distributed System) là hệ
thống xử lý thông tin bao gồm nhiều bộ xử lý hoặc bộ vi xử lý nằm tại các vị trí khác
nhau được liên kết với nhau thông qua phương tiện viễn thông dưới sự điều khiển thống
nhất của một hệ điều hành.
1.1.2. Cung cấp phân tán.
Vì lý do ổn định và hiệu quả, chức năng cung cấp phải được phân tán trên nhiều
trạm khác nhau. Sự hoạt động gắn bó với nhau giữa các chương trình cung cấp là rất cần
thiết để đảm bảo cho hoạt động cung cấp được hoàn toàn chính xác. Một sự 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, ở đây các 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.
- 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 một chương trình cung
cấp.

1.1.3. Các yêu cầu cơ bản cần nghiên cứu giải quyết của hệ phân tán.
- Lập trình và thực hiện cho hệ thống đa truy cập, ngẫu nhiên, số lượng lớn.
- Định danh cho các đối tượng qua hệ thống viễn thông.
- Cấu trúc lập trình được cho các truy vấn đa chiều và đáp ứng lại truy vấn.
- Trình tự và đồng bộ các tiến trình hoạt động.
- Gắn bó thông tin (Coherence) và vấn đề nhiều bản sao.
- Cung cấp từ xa các tài nguyên dùng chung (tài nguyên găng).
- Vấn đề xử lý - tính toán đồng thời trong hệ.
- Vấn đề đa Server và hệ điều khiển - giám sát của người quản trị hệ thống.
- Vấn đề tin cậy và hiệu năng hệ thống.
- Tài nguyên truy cập theo kiểu loại trừ chỉ cung cấp cho một giao dịch và tài
nguyên truy cập theo kiểu chia xẻ được cung cấp cho một tập hợp bất kỳ các giao
dịch.
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 3

Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
1.2. Thuật toán dự phòng bế tắc- Thuật toán Lomet
1.2.1. Các định nghĩa:
*Một quan hệ gọi là phụ thuộc thế năng giữa 2 giao dịch T
j
và T
k
, kí hiệu T
j
>T
k
,
nghĩa là tồn tại ít nhất một tài nguyên bị cài then bởi T
j
và là thành phần thuộc thông điệp

của T
k
.
*Một quan hệ gọi là chặn thế năng giữa 2 giao dịch T
j
và T
k
, kí hiệu T
j<>
T
k
,
nghĩa là tất cả tài nguyên thuộc tập hợp theo yêu cầu của thông điệp T
k
đều bị cài then
bởi T
j
. Hai quan hệ này có thể biểu diễn bằng đồ thị G, biến thiên theo thời gian gọi là đồ
thị các xung đột thế năng. Nếu tồn tại vòng lặp trong đồ thị G này thì sẽ sinh ra bế tắc.
*Sự xung đột giữa hai giao dịch T
j
và T
k
là sự nhận thông điệp yêu cầu cung cấp
tài nguyên của T
j
và T
k
đúng vào cùng một thời điểm. Nếu ta ký hiệu
kJ

TGTGD −=

khoảng cách giữa thời điểm nhận thông điệp thì sự xung đột sẽ xảy ra khi
0
=
D
Ví dụ:
Xét ba giao dịch T
1
, T
2
, T
3
sử dụng ba tài nguyên R
1
, R
2
, R
3
. Giả sử v_chia_se_th() là
phép toán cài then có tính chia sẻ, v_loai_tru_th() yêu cầu cung cấp tài nguyên e, và
a_th() là phép toán thông điệp
Giao dịch T
1
: Giao dịch T
2
: Giao dịch T
3
:


Ta giả sử rằng với các tài nguyên R
1
, R
2
và R
3
được bố trí trên các trạm tương
ứng S
1
, S
2
và S
3
. Nếu trạm S
i
chỉ nhận các thông cáo tương ứng với tài nguyên mà nó
quản lý, thì nó chỉ duy trì đồ thị Gi .
(Gi hình ảnh thu được của G cho các giao dịch đã phát thông cáo).
Giả sử các lệnh thực hiện theo trình tự:
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 4

t
11
: a_th(R
3
, R
1
, R
2
)


t
12
: v_loai_tru_th(R
3
)
v_chia_se_th(R
1
)

t
13
: v_loai_tru_th(R
2
)
t
21
: a_th(R
1
, R
3
)

t
22
: v_chia_se_th(R
1
)

t

23
: v_loai_tru_th(R
3
)
t
31
: a_th(R
2
, R
1
)

t
32
: v_loai_tru_th(R
2
)

t
33
: v_loai_tru_th(R
1
)
Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
t
11
- t
21 -
t
31 -

t
12 -
t
22 -
t
32.
Như vậy, sau khi đã thực hiện t
32
, ta có hình ảnh đồ thị G
1,
G
2,
G
3
tại các trạm tương ứng S
1,
S
2,
S
3
như sau:
Tại trạm S
1
có đồ thị G
1
:
T3 R1
T1
T2
s

s
e
Tại trạm S
2
có đồ thị G
2
:
T3
T1R2
e
e
Tại trạm S
3
có đồ thị G
3
:
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 5

T1
T2
R3
e
e
Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
Rõ ràng, thông qua ba đồ thị trên đây, ta không phát hiện được mạch khép kín có thể
dẫn đến tình trạng bế tắc. Nhưng, nếu ở hệ tập trung hay trạng thái không từng phần, ta có
đồ thị sau:
T3 R1
T1
T2

R2 R3
s
s
e
e e
e
e
Ti Rj
RrTs
Cung tiÕn tr×nh ®ang
n¾m gi÷ tµi nguyªn
Cung tiÕn tr×nh ®ang
®îi tµi nguyªn
s: Truy cËp chia sÎ e:Truy cËp lo¹i trõ
Hình 5: Phát sinh bế tắc
Trong thực tế, mặc dù không có đồ thị nào trong số này cho phép phát hiện một vòng
lặp bế tắc, nhưng trên một trạm cho trước nào đó, ta lại không thể dự phòng bế tắc có kết
quả được.
1.2.2. Nguyên lý
Ta sẽ thay thế vào điều kiện cung cấp trong đồ thị G không vòng một điều kiện khác
mạnh hơn, nhưng được kiểm tra bằng thông tin cục bộ trên từng trạm.
Để làm được điều đó, ta thêm vào cho từng đồ thị G’
i
hình ảnh thu nhỏ cho S
i
của đồ
thị một quan hệ toàn bộ chặt chẽ được xác định trên tập hợp các giao dịch. Quan hệ trật tự
này có thể có được nhờ phương tiện dấu. Điều kiện cung cấp tài nguyên là duy trì tình
trạng không vòng lặp cho các đồ thị G
i

. Căn cứ theo cấu trúc, điều kiện này có thể được
kiểm tra cục bộ trên từng trạm. Ta sẽ chỉ ra G có được tình trạng không vòng lặp như thế
nào. Đầu tiên chúng ta bắt đầu chỉ ra sự tồn tại của vòng lặp trong G kéo theo sự tồn tại
của vòng lặp có trong ít nhất một G’
i
. Kí hiệu T
j
>>T
k
hoặc T
j
<>
T
k
là quan hệ trật tự từng
phần chặt chẽ trên các giao dịch. Lúc này, G’
i
là hình ảnh thu nhỏ của trạm S
i
của đồ thị
quan hệ >> hoặc
<>
xác định bởi:
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 6

Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
hoặc
Giả sử rằng G có vòng lặp bao gồm một tập hợp của n giao dịch được đánh số từ 0
đến n-1 trong trật tự của vòng lặp của trật tự xác định bởi quan hệ >. Giả sử rằng T
p


nguyên tố của tập hợp này đến trước tất cả các cái khác theo chiều của quan hệ >> và giả
sử rằng q=p-1 modul n. Ta có:
Nếu S là số của trạm chứa tài nguyên bị cài then bởi T
q
và thuộc quyền sở hữu của
thông cáo T
p
thì G’
i
chứa vòng lặp.
1.2.3. Bế tắc và vấn đề thiếu tài nguyên vĩnh viễn
Bế tắc (hay còn gọi là khoá tương hỗ) là sự kẹt chéo lẫn nhau có tính chất sống còn
của các tiến trình. Bế tắc diễn ra khi hai tiến trình đang sử dụng tài nguyên lại phát yêu
cầu về nhu cầu sử dụng tài nguyên mà tiến trình kia còn đang sử dụng.
Ví dụ xét đồ thị cung cấp tài nguyên như hình vẽ sau đây:
T1
T2
T4
T3
Tr1 Tr2 Tr3
Hình 1: Đồ thị cung cấp tài nguyên bị bế tắc
Theo đồ thị này, ta có bốn tài nguyên T
1
,T
2
, T
3
, T
4

và có ba tiến trình nhu cầu tài
nguyên là Tr
1,
Tr
2,
và Tr
3.
Cả 3 tiến trình này đang ở tình trạng bế tắc. Tiến trình Tr
2
chờ tài
nguyên T
2
do Tr
3
đang chiếm giữ. Tiến trình Tr
3
chờ tài nguyên T
3
được giải phóng bởi
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 7

T
p
>>T
q
hoặc T
j
<>
T
k

vì T
p
đến trước các cái khác
T
j
>T
k
trong vòng lặp của đồ thị G
T
j
<>
T
k


T
j
>T
k
hay T
j
<>
T
k
Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
Tr
1
trạm Tr
3
. Thêm vào đó, tiến trình Tr

1
chờ tiến trình Tr
2
giải phóng T
1
. Ta có hai chu
trình kín trong đồ thị trên là:
Thiếu tài nguyên vĩnh viễn là sự chờ đợi bất tận của một tiến trình mà yêu cầu của nó
trễ đến mức không thể xác định được. Nguyên nhân của hiện tượng vừa nêu có nhiều,
nhưng ta có thể chỉ ra ví dụ thường gặp là do sử dụng luật ưu tiên để cung cấp tài nguyên.
1.2.4. Thuật toán
Thuật toán dự phòng được triển khai như sau:
STT Triển khai
1 Nhận yêu cầu cung cấp tài nguyên từ giao dịch T
i
. Phân biệt thông điệp đã nhận
là yêu cầu cung cấp tài nguyên theo kiểu loại trừ hay chia sẻ (tức là đã phân
nhóm giao dịch).
2 Kiểm tra khoảng cách D giữa hai giao dịch. (Nếu D=0 thì thông báo xung đột).
3 Kiểm tra tài nguyên theo yêu cầu của giao dịch và gởi thông điệp tương thích
cho giao dịch.
4 Việc cung cấp tài nguyên tại trạm S cho giao dịch T
i
được tiến hành, nếu việc
cung cấp đó không tạo ra vòng lặp trong đồ thị G’
i
.
5 Trong trường hợp bị từ chối, tiến trình thực hiện giao dịch trên trạm S được đưa
vào hàng đợi cục bộ tại S
6 Khi tài nguyên được giải phóng, tất cả các tiến trình của hàng đợi được kiểm tra

nếu các yêu cầu của chúng có thể được thoả mãn.
Quá trình vận hành thuật toán được minh hoạ qua ví dụ nêu trên như sau:
Khi T
1
thực hiện t
12
:
v_loai_tru_th(R
3
)
v_chia_se_th(R
1
)
Trong đó:
v_loai_tru_th(R
3
) yêu cầu này vào xung đột với thông cáo a_th(R
3
) thực hiện bởi
T
2
. Như vậy, cung P
2
-R
3
-P
1
được thành lập trong G. Lúc này yêu cầu vẫn được
chấp nhận, vì giao dịch T
1

>>T
2
.
Yêu cầu t
22
: v_chia_se_th(R
1
) được chấp nhận, vì tài nguyên này được T
1
truy cập
theo kiểu chia sẻ nên hoàn toàn cho giao dịch khác truy cập chia sẻ.
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 8

Chu trình 1: Tr
1
-T
1
-Tr
2
-T
2
-Tr
3
-T
3
-Tr
1
Chu trình 2: Tr
3
-T

3
-Tr
2
-T
2
-Tr
3
Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
Yêu cầu t
32
: v_loai_tru_th(R
2
) bị từ chối vì nó tạo ra vòng lặp trên S
2
. (Nhưng cần
lưu ý rằng nếu trật tự giao dịch theo dạng T
1
, T
2
, T
3
thì yêu cầu vừa nên có thể được
chấp nhận).
Thuật toán này đặt ra một nguyên tắc tương tự như các nhóm sắp xếp. Duy chỉ có khác
nhau một điều là nó tránh được sự thiếu thốn vô hạn, bởi vì trật tự tổng quát được triển khai cho
các giao dịch chứ không phải cho các tài nguyên. Một giao dịch trở nên rất cần thiết là giao dịch
có thời gian chờ đợi dài nhất sau một khoảng thời gian nhất định, do vậy nó trở thành giao dịch
được ưu tiên nhất trên tất cả các trạm mà nó đã gửi thông điệp.
1.3. Giao dịch, thông điệp yêu cầu và bộ cung cấp:
Giao dịch là phép toán hợp thành một lôgíc hoàn chỉnh mà việc triển khai nó có thể

dẫn đến thực hiện một tiến trình duy nhất hay nhiều tiến trình được định vị trên các trạm
khác nhau. Trường hợp dẫn đến thực hiện nhiều tiến trình trên các trạm ở xa là đối tượng
mà ta cần quan tâm nghiên cứu. Khái niệm giao dịch được sử dụng như là một thực thể sử
dụng (ví dụ như người sử dụng các tài nguyên).
Một tiến trình nào đó cần sử dụng tài nguyên để phát triển công việc của mình phải
yêu cầu cung cấp một cách hợp thức bằng cách gửi thông điệp yêu cầu (ta quy ước gọi
các thông điệp yêu cầu là yêu cầu). Như thế một tiến trình có nhu cầu tài nguyên sẽ bị
treo chừng nào tài nguyên đó còn chưa được giải phóng hay chưa được cung cấp cho nó.
Bộ cung cấp có thể áp dụng nhiều kiểu cung cấp khác nhau như tiến trình duy nhất,
tập hợp các tiến trình, tập hợp các thủ tục,… Các thông điệp yêu cầu sử dụng tài nguyên
cũng có thể có các dạng khác nhau như gọi thủ tục, thông báo, thực hiện các lệnh đặc biệt,

1.4. Truy cập bởi server duy nhất
Một tiến trình duy nhất hay còn gọi là server được giao nhiệm vụ quản lý tài
nguyên. Nó xử lý tất cả các yêu cầu truy cập từ các tiến trình và các khách (Client). Sự
loại trừ truy cập được bảo đảm bởi tính duy nhất của server. Server đồng thời cũng là
chương trình đánh thức. Chương trình như sau:
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 9

Vòng lặp
M:=cho_thong-diep(nil) {treo}
<Chương trình xử lý các yêu cầu và gửi trả kết quả>
Kết thúc vòng lặp
Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
Do vậy, sơ đồ này loại bỏ tất cả các đặc tính song song để truy cập vào tài nguyên.
Tiến trình server có thể được lập trình để triển khai toàn bộ chiến lược liên quan đến loại
trừ tương hỗ của các yêu cầu (độ ưu tiên, quyền truy cập tài nguyên).
Ví dụ: Server quản lý các tập tin hoạt động dựa vào nguyên lý trên trong môi
trường phân tán của Swinchart.
Server

T
Tr1
Tr2
Tr3
Hình 2: Đồ thị truy cập vào tài nguyên bằng server duy
nhất
1.5. Truy cập tương tranh có điều khiển
Trong trường hợp này, tài nguyên được truy cập bởi nhiều server, thông thường có
số lượng không cố định. Các server này thực hiện các truy cập tương ứng với các yêu cầu
dưới dạng gọi thực hiện các thủ tục. Việc thực hiện các thủ tục này được điều khiển bởi
cơ chế đảm bảo tôn trọng các quy tắc truy cập.
Tr2
Trn
Tr1
D
Sn

S2
S1

T
Hình 3: Đồ thị truy cập tài nguyên bằng một chương
trình trực duy nhất
Các quy tắc này được khởi sự bằng hai cách bởi các tiến trình khách. Hình 3 cho
thấy việc truy cập được tiến hành bằng một chương trình trực duy nhất.
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 10

T: Tài nguyên
Tr: Tiến trình (Khách)
Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn

Trong cách thứ hai, việc truy cập được tiến hành trực tiếp với các server và thể
hiện bằng hình 4 sau đây:
S1
Tr1
S2
Tr2
Sn
Trn

T
KiÓm tra truy
cËp
Hình 4: Truy cập trực tiếp vào các server
Trong hình 3, ta thấy một tiến trình đánh thức D duy nhất sau hàng đợi làm nhiệm
vụ phân phối các yêu cầu cho các server cục bộ. Các tiến trình khách không biết server.
Ngược lại trong hình 4, các máy server đều được các tiến trình khách biết trước.
Việc triển khai đặc biệt đối với các server có liên quan đến việc phối hợp chúng
với các điểm của một mô-đun quản lý các tài nguyên như chương trình monitor chẳng
hạn.
1.6. Thuật toán dự phòng bế tắc
Hai thuật toán mà ta sẽ giới thiệu sau đây là một trong những phiên bản của thuật
toán Lomet. Đây là phiên bản sử dụng trạng thái từng phần.
a) Vị trí của vấn đề:
Đây là một ví dụ minh hoạ các khó khăn trong khi ứng dụng vào hệ phân tán.
Ví dụ 2
Trở lại với ví dụ 1 và bổ sung các điểm như sau; ta giả sử rằng các tài nguyên e1,
e2 và e3 được bố trí trên các trạm tương ứng S1, S2 và S3. Nếu trạm Si chỉ nhận thông
cáo tương ứng với tài nguyên mà nó quản lý thì nó chỉ duy trì đồ thị Gi –hình ảnh thu nhỏ
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 11


Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
của G cho các giao dịch đã phát thông báo. Như vậy, sau khi đã thực hiện t32 , ta có các
hình ảnh sau:
Tại trạm S
1
ta có
đồ thị G
1
Hình 2.5. Đồ thị G1 trên trạm S1 sơ đồ tương tự tại trạm S2
Tại trạm S
2
ta có
đồ thị G
2
Hình 2.6. Đồ thị G2 trên trạm S2
còn tại S3 ta có sơ đồ:
Tại trạm S
3
ta có
đồ thị G
3
Hình 2.7. Đồ thị G3 trên trạm S3
Rõ ràng, thông qua ba đồ thị trên đây, ta không phát hiện mạch khép kín dẫn đến
tình trạng bế tắc.Nhưng, nếu ở hệ tập trung hay trạng thái không phải từng phần, ta có đồ
thị sau đây:
Hình 2.8. Phát sinh bế tắc
Trong thực tế, mặc dầu không có đồ thị nào trong số này cho phép phát hiện sự
hình thành một vòng lặp bế tắc, nhưng trên một trạm cho trước nào đó, ta lại không thể dự
phòng bế tắc có kết quả được.
b) Nguyên lý và thuyết minh phương pháp

Ta sẽ thay thế vào điều kiện cung cấp trong đồ thị G không vòng lặp một điều kiện
khác mạnh hơn, nhưng được kiểm tra bằng các thông tin cục bộ trên từng trạm.
Để làm được điều đó, ta thêm vào cho từng đồ thị G

i
hình ảnh thu nhỏ cho Si của
đồ thị của một quan hệ trật tự toàn bộ chặt chẽ được xác định trên các tập hợp giao dịch.
Quan hệ trật tự này có thể được nhờ phương tiện dấu. Điều kiện cung cấp tài nguyên là
duy trì tình trạng không vòng lặp cho các đồ thị G
i
. Căn cứ theo cấu trúc, điều kiện này
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 12

T1 T3
e1
T2 T1
e2
T3 T2
e3
e2
e3
e1
T1
T3
T2
Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
có thể được kiểm tra cục bộ trên từng trạm. Ta sẽ chỉ ra G có được tình trạng không vòng
lặp như thế nào. Để làm việc đó, ta bắt đầu chỉ ra sự tồn tại của vòng trong G kéo theo sự
tồn tại của vòng trong ít nhất một G


i
.
Ta ký hiệu T
j
>>T
k
là quan hệ trật tự toàn phần chặt chẽ trên các giao dịch. Lúc này, G

i

hình ảnh thu nhỏ của trạm S
i
của đồ thị của quan hệ >> xác định bởi:
T
j
>>T
k
⇔ T
j
>T
k
hay T
j
>>T
k

Giả sử rằng G có vòng lặp bao gồm một tập hợp của n giao dịch được đánh số từ 0 đến n-1
trong trật tự của vòng lặp của trật tự xác định bởi quan hệ >. Giả sử rằng T
p
là nguyên tố

của tập hợp này đến trước tất cả các cái khác theo chiều của quan hệ >> và giả sử rằng q =
p-1 modulo n. Ta có :
T
p
>>T
q
vì T
p
đến trước các cái khác
T
j
>T
k
trong vòng lặp của đồ thị G
Nếu S là số của trạm chứa tài nguyên bị cài then bởi T
q
và thuộc quyền sở hữu của
thông cáo của T
p
thì G

i
chứa vòng lặp.
c) Thuật toán:
Như vậy, thuật toán dự phòng được triển khai như sau:
STT Triển khai
1 Việc cung cấp tài nguyên tại trạm S cho giao dịch T
i
được


tiến hành,
nếu việc cung cấp đó không tạo ra vòng lặp trong đồ thị G

i
2 Trong trường hợp bị từ chối, tiến hành được giao dịch trên trạm S được
đưa vào hàng đợi cục bộ tại S
3 Khi tài nguyên được giải phóng, tất cả các tiến trình của hàng đợi được
kiểm tra nếu các yêu cầu của chúng có thể được thoả mãn
Qui trình vận hành thuật toán được minh hoạ bởi ví dụ kề liền sau đây:
Ví dụ 3: Ta hãy lấy lại ví dụ 1. Khi T
1
thực hiện t
12
: v-loai-tru-th(e1), yêu cầu này
vào xung đột với thông cáo a-loai-tru-th(e1) thực hiện bởi T
3
. Như thế, cung T
1
-T
3
được
thành lập trong G. Lúc này, yêu cầu vẫn được chấp nhận vì T
1
>>T
3.
Sau khi diễn ra việc cung cấp này, các đồ thị G

i
trên ba trạm sẽ như sau:
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 13


T1
T3
T1
T2
T2
T3
Tram S1 Tram S2 Tram S3
Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
Hình 2.9. Trạng thái cung cấp tài nguyên trên 3 trạm
Yêu cầu t
22
:v-loai-tru-th(e2) kéo theo trên trạm S
2
sự tạo nên cung T
2
-T
1
bị loại bỏ;
bởi vì nó sinh ra vòng lặp trên S
2
. Tương tự như vậy, yêu cầu t
32
: v-loai-tru-th(e3) bị từ
chối bởi vì nó tạo ra vòng lặp trên S
3
. Nhưng ta cần lưu ý là nếu trật tự theo dạng T
1
,T
2

, T
3
thì yêu cầu vừa nêu có thể được chấp nhận.
Thuật toán này đặt ra một nguyên tắc tương tự như các nhóm sắp xếp. Duy chỉ
khác nhau có một điều là nó tránh được sự thiếu thốn vô hạn, bởi vì trật tự tổng quát được
triển khai cho các giao dịch chứ không phải cho các tài nguyên. Một giao dịch trở nên rất
cần thiết là giao dịch có thời gian chờ đợi dài nhất sau một khoảng thời gian xác định, nó
đã trở thành giao dịch được ưu tiên nhất trên tất cả các trạm mà nó đã gởi thông điệp.
1.7. Sắp xếp các giao dịch theo Phương pháp Lomet
Xác định cho trạm i thuật toán cập nhật đồ thị cục bộ khi nhận thông điệp mới có
đóng dấu H(AN
j
) đến từ trạm j.
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ị khi phát
đi gọi là dấu. Giá trị này có 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. Các đồng hồ này được lấy lại thông qua hội thoại giữa
các trạm.
Trên mỗi trạm trong hệ đều có một công tơ cục bộ với các giá trị nguyên gọi là Hs.
Đây chính là đồng hồ logic 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
i
. Khi nhận thông điệp, trạm r cập nhật
đồng hồ riêng của mình và đảm bảo rằng việc nhận thông điệp là sau thời gian nó phát đi.
Nếu trạm i nhận thông điệp có đóng dấu đến từ trạm j yêu cầu sử dụng tài nguyên,
trước hết thông điệp này phải được đưa vào hàng đợi thông điệp và sắp xếp theo dấu. Nếu
hai thông điệp cùng đến từ một trạm j do các giao dịch khác nhau yêu cầu thì chúng được
sắp xếp dựa theo đồng hồ cục bộ của j thông qua thông tin trên dấu kèm trong thông điệp
gửi đến. Nếu thông điệp đến từ hai trạm khác nhau thì nó được sắp xếp dựa trên đồng hồ
cục bộ của các trạm và đồng hồ cục bộ của trạm nhận và việc lấy thông tin đồng hồ cục
bộ này thông qua sự hội thoại. Việc sắp xếp phải cần đến hai thông tin là để đảm bảo trật

HVTH: Ninh Văn Anh – Phan Thị Bông Trang 14

Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
tự yêu cầu của thông điệp phải đảm bảo trật tự gửi ở các trạm chứ không phải ở trật tự
nhận tại trạm i.
Sau khi các thông điệp đến được sắp xếp theo dấu, trạm i sẽ cung cấp tài nguyên.
Việc cung cấp tài nguyên tại trạm i cho giao dịch đến từ j hoặc các trạm khác sẽ được tiến
hành nếu nó không tạo ra vòng lặp trong đồ thị cục bộ G
i
. Sau khi một tài nguyên được
giải phóng, tất cả các tiến trình trong hàng đợi sẽ được kiểm tra lại để được cấp phát tài
nguyên nếu yêu cầu của nó được thoả mãn. Trong quá trình cung cấp tài nguyên cho các
tiến trình trên các trạm khác hay chính trạm i thực thi, trạm i vẫn tiếp tục nhận thông điệp
đến từ các trạm khác. Việc cập nhật đồ thị được thực thi mỗi khi việc cung cấp tài nguyên
được thực hiện và được giải phóng.
Trong các hệ thống tập trung, mỗi một loại tài nguyên của hệ được quản lý bởi một
chương trình cung cấp duy nhất, 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ừ và xử lý
chúng theo một trật tự nhất định của hàng đợi đó. Còn trong hệ phân tán, chương trình
cung cấp được nằm trên một trạm và các tiến trình đề nghị lại ở trên các trạm khác, các
yêu cầu 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 theo các kênh của hệ thống viễn thông. Hơn nữa, vì lý do ổn định
và hiệu quả mà ta phải phân tán chức năng cung cấp trên nhiều trạm khác nhau. Sự hoạt
động gắn bó với nhau giữa các chương trình cung cấp là rất cần thiết để đảm bảo cho hoạt
động cung cấp được hoàn toàn chính xác.
Vấn đề cung cấp tài nguyên được đánh giá như là một trong những lĩnh vực tri
thức rất quan trọng vì nó vận dụng thường xuyên trong quá trình triển khai nghiên cứu,
khảo sát, phân tích, thiết kế và xây dựng các hệ điều hành nói chung, hệ tin học phân tán
nói riêng. Trong chương này sẽ tập trung nghiên cứu vấn đề về tài nguyên và các chiến
lược cung cấp tài nguyên cho hệ phân tán.

Dùng phương pháp sắp xếp các giao dịch của Lomet hãy xác định cho trạm i thuật
toán cập nhật đồ thị cục bộ khi nhận thông điệp mới có đóng dấu H(ANj) đến từ trạm j.
Ta cần phải đảm bảo rằng một thông điệp AN
k
nào đó như H(AN
j
)>H(AN
k
) được
xếp trước AN
j
ngay cả khi nó chỉ đến trạm i sau AN
j
. Ngoài ra, ta còn giả sử rằng mỗi
trạm j có thể gửi cho chính trạm i nhiều thông điệp AN'
j
, AN''
j
, AN'''
j
, liên quan đến các
giao dịch khác nhau.
Để giải quyết vấn đề theo đề bài đã cho, ta cần phải giải quyết các vấn đề sau:
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 15

Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
1. Trước khi có thông điệp gửi tới từ trạm j, tại trạm i lúc này duy trì đồ thị cục bộ
với nhiệm hình thành trật tự cho các giao dịch. Các giao dịch trên trạm i tại thời điểm
trước khi có thông điệp H(ANj) được sắp xếp trong hàng đợi, tiêu chí sắp xếp là dấu của
các thông điệp. Trạm phát được gắn một giá trị gọi là dấu. Giá trị này có tính chất thời

điểm cho trạm phát thông tin và dựa vào đồng hồ lôgíc cục bộ của chính trạm đó. Các
đồng hồ được lấy thông qua họi thoại giữa các trạm. 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,H
i
,i) trong đó H
i
là dấu của thông điệp tức là đồng hồ
lôgic của nó và T có thể nhận một trong ba giá trị REQ, REL và ACQ.
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
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
ACQ: được gửi bởi trạm j cho trạm i khi trạm j đã nhận được từ trạm i thông điệp
REQ
Giả sử rằng, tại thời điểm thông cáo của trạm j gửi tới, đồng hồ thời gian lôgic của
trạm i sẽ thực hiện phép toán:
Nếu Hi thì
H
i
:= H
j
+1;
Kết thúc nếu
và thông điệp H(AN
j
) được xếp vào hàng đợi.
2. Tại trạm i có tài nguyên e
i
, phương pháp Lomet nhằm sắp xếp trật tự các giao
dịch để chống xung đột xảy ra chứ không áp dụng cho các tài nguyên. Điều kiện cung cấp
tài nguyên là duy trì tình trạng không vòng lặp cho các đồ thị G
i

. Căn cứ theo cấu trúc,
điều kiện này có thể được kiểm tra cục bộ trên từng trạm. Ta sẽ chỉ ra G có được tình
trạng không vòng lặp như thế nào. Để làm việc đó, ta bắt đầu chỉ ra sự tồn tại của vòng
trong G kéo theo sự tồn tại của vòng trong ít nhất một G’
i
.
Trên trạm i có tài nguyên e
i
, giao dịch T
i
và ký hiệu trạm là S
i
.
Trạm j có tài nguyên e
j
, giao dịch T
j
và kỹ hiệu trạm là S
j
. Giữa giao dịch T
i
và T
j
hình thành quan hệ:
Xét xem có vòng lặp trong G không:
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 16

T
i
T

j
e
i
Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
T
i1
: phát thông cáo a_loaitru_th(e
i
, e
j
)

T
i2
: v_loaitru_th(e
j
)
T
j1
: a_loaitru_th(e
j
, e
i
)

T
j2
: v_loaitru_th(e
i
)

Vậy giữa giao dịch T
i1
và T
j2
hình thành một cung trong G, sau khi xảy ra việc này
ta phân giải đồ thị G’
i
trên trạm i như sau:
T
i
T
j
Nếu đã hình thành cung T
i
-> T
j
thì các yêu cầu khác tạo nên các cung giữa các cặp
giao dịch khác như :
T
i
+1

T
j
+1
………
T
i
+n


T
j
+m
sẽ bị từ chối.
3. Để đảm bảo rằng một thông điệp AN
k
nào đó như H(AN
j
)>H(AN
k
) được xếp
trước AN
j
ngay cả khi nó chỉ đến trạm i sau AN
j
. Ngoài ra, ta còn giả sử rằng mỗi trạm j
có thể gửi cho chính trạm i nhiều thông điệp AN'
j
, AN''
j
, AN'''
j
, liên quan đến các giao
dịch khác nhau:
Do sử dụng đồng hồ logic và mỗi Gi là hình ảnh thu nhỏ của G nên mặc dù thông
điệp AN
k
đã phát đi và được đóng dấu H(AN
k
), nhưng còn lang thang trên đường và đến

trạm i sau thì trạm i vẫn có hình ảnh về thông điệp của AN
k
. Vì vậy trạm i vẫn sắp xếp
AN
k
vào hàng đợi dựa trên dấu H(AN
k
).
Để đảm bảo được như vậy thì phải đảm tính gắn bó dữ liệu mạnh. Tại mọi lúc mọi
nơi thì hình ảnh thu nhỏ của G trên i là tức thời, nêu không đảm bảo được tinh gắn bó
mạnh thì thông điệp AN
k
sẽ đến sau AN
j
hoặc mất thông điệp mặc dù AN
k
phát thông
điệp trước.
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 17

Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn

CHƯƠNG 2: CHƯƠNG TRÌNH CÀI ĐẶT THUẬT TOÁN LOMET
2.1. Các modules thực hiện
2.1.1. Tạo các Server
- Mô tả giao diện
- Khai báo hàng đợi
- In các thông điệp trong hàng đợi
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 18


public interface Server1 extends java.rmi.Remote
{
public abstract void printQueue()
throws java.rmi.RemoteException;

public abstract void sendMess()
throws java.rmi.RemoteException;

public abstract void receiveMess(String R, int H, int I)
throws java.rmi.RemoteException;
public abstract void setStart(boolean start)
throws java.rmi.RemoteException;
}
public class Queue
{
private boolean start;
int max=0;
private String Q[];
public boolean change=false;
private boolean ready=true;
public Queue()
{
start = false;
max=40;
Q=new String [max];
for (int i=0;i<max;i++) Q[i]="";
}
……
public void printQueue()
{

if (!change) return;
int i=0;
System.out.println(" Queue ");
while (i<max-4 && Q[i] !="")
{
System.out.println(Q[i] + " ~ " + Q[i+1]
+ " ~ " + Q[i+2]);
i=i+4;
}
System.out.println(" ");
change=false;
}
Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
- Thêm vào hàng đợi
- Kiểm tra quyền vào đoạn găng
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 19

public void setQueue(String R, int H, int I)
{
deleteQueue(R, I);
int i=0;
while (i<max-4 && Q[i].compareToIgnoreCase("")!=0 &&
H>Integer.parseInt(Q[i+1])) i+=4;
if (i<max-4)
{
for(int j=max-1; j>=i+4; j ) Q[j]=Q[j-4];
Q[i]=R;
Q[i+1]=H +"";
Q[i+2]=I +"";
Q[i+3]=0 +"";

change=true;
}
}
public int checkAccess(int idx)
{
try
{
int i=0;
while (i<max-4 && Q[i] !="")
{
if (Q[i].compareToIgnoreCase("REQ")==0)
{
if (Q[i+2].compareToIgnoreCase(idx +"")==0)
{
System.out.println("==============================");
System.out.println("==============================");
System.out.println("======= ACCESSING =======");
System.out.println("==============================");
System.out.println("==============================");
Thread.sleep(5000);
return 5;
}
else
{
return 0;
}
}
i=i+4;
}
return 0;

}
catch(java.lang.Exception exception)
{
System.out.println(exception.getMessage());
System.exit(0);
return 0;
}
}
Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 20

Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
- Xử lý tại Server
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 21

while (true)
{ S3=(Server3)java.rmi.Naming.lookup("rmi://localhost:2003/Server3"
);
S2=(Server2)java.rmi.Naming.lookup("rmi://localhost:2002/Server2");
String Q[]=queue.getQueue();
int i=0;
int max=queue.getMax();
while (i<max-4 && Q[i].compareToIgnoreCase("") !=0)
{
if (Q[i].compareToIgnoreCase("REQ")==0 &&
Q[i+3].compareToIgnoreCase("0")==0)
{
if (Q[i+2].compareToIgnoreCase("1")==0)
{
Thread.sleep( delay_host_2 * 1000);

S2.receiveMess("REQ",time_logic,1);
time_logic++;
Thread.sleep( (delay_host_3 - delay_host_2) * 1000);
S3.receiveMess("REQ",time_logic,1);
time_logic++;
}
else
{
if (Q[i+2].compareToIgnoreCase("2")==0)
if (!queue.existREQ(1)){
Thread.sleep( delay_host_2 * 1000);
S2.receiveMess("ACQ",time_logic,1);
time_logic++;
}
else
if (Q[i+2].compareToIgnoreCase("3")==0)
if (!queue.existREQ(1)){
Thread.sleep( delay_host_3 * 1000);
S3.receiveMess("ACQ",time_logic ,1);
time_logic++;
}
}
queue.printQueue();
}
else
if (Q[i].compareToIgnoreCase("ACQ")==0)
{
queue.printQueue();
int sl=queue.checkAccess(1);
if (sl>0)

{
receiveMess("REL",time_logic,1);
time_logic++;
queue.deleteACQ();
S2.receiveMess("REL",time_logic,1);
time_logic++;
S3.receiveMess("REL",time_logic,1);
time_logic++;
}
queue.printQueue();
}
else
if (Q[i].compareToIgnoreCase("")!=0)
queue.updateSend(Q[i],Integer.parseInt(Q[i+1]),
Integer.parseInt(Q[i+2]) );
i=i+4; queue.printQueue();
}
Thread.sleep(1000); time_logic++;
Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
2.1.2. Đăng ký Server
2.1.3. Khởi động các Server
2.1.4. Thực hiện gửi nhận thông điệp
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 22

CLS
@ECHO OFF
ECHO =============================================
ECHO RMI COMPILER
ECHO =============================================
SET CLASSPATH=C:\Server

cd C:\Program Files\Java\jdk1.6.0_10\bin
rmic Server1_Ipl -d C:\Server
rmic Server2_Ipl -d C:\Server
rmic Server3_Ipl -d C:\Server
ECHO RMI Compiled OK!
PAUSE
java.rmi.registry.LocateRegistry.createRegistry(2001);
Server1_Ipl server1_ipl = new Server1_Ipl();
java.rmi.Naming.rebind("rmi://localhost:2001/Server1",
server1_ipl);

thr = new Thread(server1_ipl);
queue=new Queue();
while (true){
if (queue.get_start())
{
thr.start();
break;
}
Thread.sleep(200);
}
String str=inname.readLine();
if (str.compareToIgnoreCase("start") ==0)
{
S1.setStart (true);
S2.setStart (true);
S3.setStart(true);
}
if (str.compareToIgnoreCase("REQ1") ==0)
{

S1.sendMess();
}
if (str.compareToIgnoreCase("REQ2") ==0)
{
S2.sendMess();
}
if (str.compareToIgnoreCase("REQ3") ==0)
{
S3.sendMess();
}
Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
2.2 Chương trình demo
- Khởi động các Server
- Server 1 gửi thông điệp REQ:
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 23

Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
Server 2, Server 3 nhận thông điệp và phản hồi ACQ, Server 1 bắt đầu vào đoạn găng:
Server 1 sau khi rời đoạn găng sẽ gửi thông điệp REL đến các Server khác:
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 24

Tiểu luận Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
 Trường hợp Server 1 và Server 2 cùng gửi REQ:
HVTH: Ninh Văn Anh – Phan Thị Bông Trang 25

×