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

Viết chương trình cài đặt thuật toán sắp xếp theo kiểu đóng dấu (BÁO CÁO TIỂU LUẬN LẬP TRÌNH MẠNG NÂNG CAO)

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 (490.79 KB, 27 trang )

 Tiểu luận Lập trình mạng nâng cao
BỘ GIÁO DỤC VÀ ĐÀO TẠO

ĐẠI HỌC ĐÀ NẴNG


BÁO CÁO TIỂU LUẬN
LẬP TRÌNH MẠNG NÂNG CAO

Đề tài (số 03 - Danh mục đề tài tiểu luận):
ViẾt chương trình cài đặt thuẬt tốn sẮp xẾp theo kiỂu đóng dẤu
1. Nghiên cỨu bẢn chẤt cỦa phương pháp đóng dẤu vào thơng điỆp trước
khi gỬi đi cho tẤt cẢ các server qua hỆ thỐng đường truyỀn
2. Xây dỰng hỆ thỐng đa server
3. 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 các server nhận

HỌC VIÊN
LỚP
NGÀNH
GVHD

:
:
:
:

Đà nẵng, 03/2010

LỜI MỞ ĐẦU
-1-



NGUYỄN THANH BÌNH
CAO HỌC KHĨA 11
KHOA HỌC MÁY TÍNH
PGS TS. LÊ VĂN SƠN


 Tiểu luận Lập trình mạng nâng cao


Trong số những phát minh vĩ đại nhất của thế kỉ trước, thì mạng máy tính
(Computer Network) là một hệ thống đem lại nhiều lợi ích to lớn nhất cho nhân
loại; Điển hình nhất là mạng Internet, hiện nay đang cho phép hàng tỉ máy tính
trên tồn cầu kết nối và làm việc với nhau với tốc độ cao (từ vài chục đến hàng
nghìn kbps).
Điều kỳ diệu trên đang ngày càng phát triển mạnh mẽ, vững chắc là nhờ
các nền tảng cơ sở lí thuyết cho chúng đã được nghiên cứu; Một trong những cơ
sở lý thuyết nền tảng ấy, chính là những lí thuyết nghiên cứu liên quan đến hệ
phân tán. Nhờ có lí thuyết hệ phân tán, mà các bộ vi xử lí đơn lẻ, mà chúng ta
vẫn thường gọi là các hệ thống tập trung (Centralized Systems) đã được kết nối
với nhau, làm việc trên nhiều giao thức, nhiều kiểu kết nối và trên nhiều lãnh thổ
khác nhau.
Hệ tin học phân tán là một hệ thống tin học hiện đại, bao gồm nhiều lĩnh
vực kiến thức tiên tiến nhằm trợ giúp cho cơng tác nghiên cứu, phân tích và thiết
kế các hệ thống tin học Một trong những tư tưởng lớn của các hệ phân tán là
phân tán hóa các q trình xử lý thơng tin và thực hiện các cơng việc đó trên các
trạm xa nhau. Đó là cơ sở để xây dựng các hệ ứng dụng lớn như thương mại
điện tử, giáo dục điện tử, chính phủ điện tử...
Trong giới hạn của một tiểu luận báo cáo kết thúc môn học, nội dung của
bản báo cáo sẽ được trình bày theo yêu cầu Đề tài số 03 “Viết chương trình cài

đặt thuật tốn sắp xếp theo kiểu đóng dấu” trong danh mục “Đề tài tiểu luận
và bài tập mơn Lập trình mạng nâng cao” của PGS TS. Lê Văn Sơn, bao gồm:
Chương 1: Hệ phân tán & các vấn đề về đồng bộ hóa.
Chương 2: Xây dựng hệ thống đa Server & cài đặt thuật toán sắp xếp
theo kiểu đóng dấu.
Được sự giúp đỡ tận tình của Thầy giáo hướng dẫn và các bạn đồng
nghiệp, tơi đã hồn thành được những nhiệm vụ cơ bản đề ra. Tuy nhiên, với
thời gian và kiến thức có hạn, bản báo cáo này chắn chắn cịn nhiều khiếm
khuyết, tơi rất mong nhận được góp ý chân thành của Thầy giáo và các bạn đồng
nghiệp. Nhân dịp này cho phép tôi xin được bày tỏ lòng biết ơn chân thành đối
với PGS TS LÊ VĂN SƠN và các đồng môn, bằng hữu đã giúp đỡ tơi hồn
thành nội dung bản báo cáo này./.
Học viên thực hiện
Nguyễn Thanh Bình.

-2-


 Tiểu luận Lập trình mạng nâng cao

CHƯƠNG 1
HỆ PHÂN TÁN & CÁC VẤN ĐỀ VỀ ĐỒNG BỘ HÓA
1.1. TỔNG QUAN VỀ HỆ TIN HỌC PHÂN TÁN
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.
Đặc điểm cần nhấn mạnh của hệ phân tán là các hệ xử lý thông tin thành
phần:
- Không dùng chung hoặc chia sẻ bộ nhớ;

- Không sử dụng chung đồng hồ xung nhịp;
- Chúng liên lạc với nhau thông qua mạng truyền thông.
- Mỗi hệ xử lý có bộ xử lý, bộ nhớ và hệ điều hành riêng của nó.
Thành phần của hệ phân tán bao gồm các hệ thống cục bộ trong đó mỗi
một hay nhiều hệ thống phát các u cầu thơng tin cịn các hệ khác trả lời các
yêu cầu có liên quan đến phần dữ liệu của mình. Nói một cách tổng quát là trong
hệ luôn luôn diễn ra việc thực hiện các công việc do các hệ thống yêu cầu. Các
hệ thống truyền thống như hệ rời rạc hay tập trung khơng thể đáp ứng nhanh
chóng và chính xác các u cầu thông tin từ xa với lưu lượng thông tin lớn.
Các thao tác chuẩn của hệ phân tán :
1: Tiếp nhận và ghi yêu cầu chỉ dẫn.
2: Dịch yêu cầu để có các thơng tin cần thiết. Thực hiện một số công
việc của hệ thống cục bộ như kiểm tra quyền truy cập thơng tin, lập hóa
đơn dịch vụ.
3: Gửi kết quả cho hệ thống đã phát yêu cầu.
Hệ tin học phân tán thực hiện hàng loạt các chức năng phức tạp nhưng
chức năng cơ bản nhất là đảm bảo cung cấp cho người sử dụng khả năng truy
cập có kết quả đến các tài nguyên vốn có và rất đa dạng của hệ thống như tài
nguyên dùng chung.
Việc định nghĩa các tài nguyên của hệ như tài nguyên dùng chung sẽ
mang đến cho hệ những hiệu năng tốt trong khai thác ứng dụng.
-3-


 Tiểu luận Lập trình mạng nâng cao

Các ưu điểm của tài nguyên dùng chung trong hệ phân tán :
1: Tăng tốc độ bình qn trong tính tốn xử lý.
2: Cải thiện tình trạng ln sẵn sàng của các loại tài nguyên.
3: Tăng độ an toàn cho dữ liệu.

4: Đa dạng hóa các loại hình dịch vụ tin học.
5: Bảo đảm tính tồn vẹn của thơng tin.
Tuy nhiên nó cũng dẫn đến hàng loạt các vấn đề khó khăn trong việc thiết
lập hệ liên quan việc cấp phát tài nguyên dùng chung cho các tiến trình.
Điều quan trọng là để đảm bảo các chức năng, yêu cầu nêu ra trên, hệ tin
học phân tán cần phải có các cơ chế kỹ thuật đủ mạnh nhằm đồng bộ hóa hoạt
động của các tiến trình và sự trao đổi thơng tin với nhau sao cho hệ thống tránh
được các trường hợp có thể dẫn đến bế tắc.
1.2. VẤN ĐỀ ĐỒNG BỘ HÓA

CHƯƠNG 2 Đặt vấn đề:
Mọi hệ thống tin học, đều cần cung cấp cơ chế đủ mạnh và hiệu quả để
có thể đồng bộ hóa các tiến trình, điều này thể hiện ở hai nguyên do cơ bản sau:
1: 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. Trường hợp này
gọi là truy cập tương tranh. Tương tranh là nguyên nhân chính của các
xung đột của giữa các tiến trình muốn truy cập vào tài nguyên dùng chung.
2: Các tiến trình của cùng một hệ ứng dụng hoạt động theo kiểu hợp lực
để giải quyết các bài toán đặt ra và cho kết quả nhanh chóng 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. 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.
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 điệp 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 tốn loại bỏ tương hỗ thông qua các biến cùng tác động trong một
vùng nhớ chung. Trong hệ tin học phân tán, các thông tin cần trao đổi thông qua
các kênh thuộc hệ thống viễn thông.


-4-


 Tiểu luận Lập trình mạng nâng cao

CHƯƠNG 3 Bài tốn bãi đỗ xe ơ tơ:
Để rút ra các vấn đề đang đặt ra trong hệ phân tán về việc đồng bộ hóa
các tiến trình. Ta hãy nghiên cứu một ví dụ kinh điển, đó là bài tốn bãi đỗ xe ô
tô, với nội dung được nêu ra như sau :
Hình 1.1 mơ phỏng bãi đỗ xe ơ tơ hiện đại. Trong đó:
- BV: người bảo vệ có nhiệm vụ phân phối chỗ cho các xe ô tô.
- VT: vị trí cho từng xe ơtơ cụ thể.
- Các mũi tên hai chiều được sử dụng để mơ tả dịng vào ra của ơ tơ.
BV

VT

BV

VT

VT

BV

VT

VT

VT


VT

VT

VT

VT

VT

VT

VT

VT

VT

VT

VT

VT

BAI
DO XE

VT


VT

VT

VT

VT

BV

VT
VT

VT

VT

VT

VT

BV

VT

BV

Hình 1.1 Mơ phỏng bãi đỗ xe

3.1.1.1. Các tình huống cần quan tâm của bài tốn:

a. Tình huống thứ 1:
Giả sử bãi đỗ xe ơ tơ là loại bãi lớn có một cổng vào dưới sự kiểm soát
của một người bảo vệ (BV) duy nhất. người bảo vệ chỉ biết được một phần trạng
thái của bãi đỗ xe. Trong khi anh ta nghĩ rằng bãi xe đã bị đầy, khi đó lại có
nhiều lái xe đang cho xe chạy ra cổng. Vì suy nghĩ như vậy, trong trường hợp
này, anh ta không giải quyết cho các xe tiếp tục vào bãi nữa, mặc dù lúc này
trong bãi đang có chỗ trống. Như vậy, người bảo vệ khơng nắm được trạng thái
hiện hành của bãi.
b. Tình huống thứ 2:
Nếu ta có bãi đỗ xe với nhiều cổng và tại mỗi cổng có một BV thì mỗi BV
chỉ có thể biết trạng thái với độ trễ nhất định và điều đó dẫn đến tình huống thứ
-5-


 Tiểu luận Lập trình mạng nâng cao

2. Đó là tình huống có nhiều trung tâm ra quyết định (hợp lực) như trường hợp
minh họa của hình trên.
Trên thực tế, một người bảo vệ nào đó tin rằng khơng cịn chỗ trống nữa,
trong khi một người bảo vệ khác lại vừa mới cho ra khỏi bãi một số xe mà anh ta
chưa kịp báo cho các người bảo vệ khác. Cũng có thể diễn ra trường hợp là cùng
một lúc các NBV giải quyết các xe vào cùng một vị trí trong bãi (tương tranh)
do vì họ thiếu thơng tin.
Tình huống thứ 2, đặt ra ở đây liên quan trực tiếp đến vấn đề cung cấp tài
nguyên của hệ, chức năng cung cấp được phân tán trên nhiều trạm của hệ. Trong
đó một người bảo vệ có vai trị như là chương trình cung cấp của bãi đỗ xe; Ở
đây, chỗ để xe được xem là tài nguyên của hệ, các ơ tơ vào bãi là các tiến trình
của hệ.
Như vậy, các BV phải hợp lực với nhau để phân phối chính xác các chỗ
trống trong bãi, đặc biệt là số lượng chỗ cịn trống càng ít (tài ngun hạn chế)

thì vai trị của hợp lực càng quan trọng.
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 hồn tồn chính xác.
3.1.1.2. Ví dụ về khơng gắn bó:
Để thấy được tầm quan trọng mang tính quyết định của trình tự xử lý
thơng điệp đối với yêu cầu gắn bó của hệ, ta hãy tiếp tục xem xét một trường
hợp về khơng gắn bó của bài toán bãi đỗ xe:
Giả sử rằng ở thời điểm cho trước ta có 4 người bảo vệ và có 100 chỗ cịn
trống. Tất cả các BV để có thơng tin đó, trạng thái của hệ lúc này là gắn bó. Ba
trong số họ phát đi thông tin cho ở Bảng 1.1 và trình tự phát các thơng điệp của
họ được biểu diễn như Hình 1.2:
4
2

1

Bảng 1.1 Thứ tự & nội dung phát thông tin
Stt Ký
Thông tin phát đi
hiệu
1 M1 Thêm 20 chỗ trống
2 M2 có 10 chỗ bị chiếm
3 M3 Dành 10% chỗ trống để quét dọn bãi

Hình 1.2. Sơ đồ trình tự
phát, nhận thơng tin giữa các cổng

-6-

3


100

100

M1

100

100

M3
M2

98

99

100

101


 Tiểu luận Lập trình mạng nâng cao
Trật
tự

Bảo vệ 1
Thơng


giá trị

điệp

Bảo vệ 2
Thông

giá trị

điệp
100

Bảo vệ 3
Thông

giá trị

điệp
100

Bảo vệ 4
Thông

giá trị

điệp
100

100


1

M1

120

M1

120

M3

90

M2

90

2

M3

108

M2

110

M1


110

M3

81

3

M2

98

M3

99

M2

100

M1

101

Bảng 1.2. Kết quả của sự khơng gắn bó giữa 4 người bảo vệ

Bảng 1.2 cho thấy, nếu ta khơng có ràng buộc nào đối với trình tự xử lý
các thơng điệp nhận được của các người bảo vệ thì các BV sẽ có thơng tin về số
lượng chỗ trống khác nhau. Để bảo đảm các bản cập nhật giống nhau thì trình
tự cập nhật nhất thiết phải giống nhau trên tất cả các trạm.

3.1.1.3. Quy tắc cho các thuật toán cung cấp trong hệ phân tán
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 qui tắc sau:
Stt
1
2
3

Qui tắc
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.
Bảng 1.3. Các quy tắc đảm bảo sự gắn bó trong hệ phân tán

Qui tắc cuối, 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ệ. Trật tự này có thể được thực hiện thơng qua
việc hợp lực của các tiến trình cung cấp. Ở phần sau chúng ta nghiên cứu một
số phương pháp sắp xếp nhằm xác lập một trật tự đảm bảo cho yêu cầu đồng bộ
hóa.

-7-


 Tiểu luận Lập trình mạng nâng cao

CHƯƠNG 4 Vấn đề đồng bộ giữa các tiến trình :
Trong các hệ 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ỗ. Cơ chế này cho phép xác lập trật tự hoàn toàn các
sự kiện.

Trong hệ phân tán, việc đồng bộ hóa chủ yếu yêu cầu 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 thông qua
việc trao đổi các thông điệp với nhau.
Một tiến trình nào đó cần sử dụng tài ngun để phát triển cơng việc của
mình, phải u cầu bộ cung cấp một cách hợp thức bằng cách gửi thơng điệp
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ó.
4.1.1.1. Miền găng
Miền găng: đoạn chương trình mà truy cập vào tài nguyên dùng chung.
Vấn đề miền găng: các sự truy cập chồng lên nhau có thể dẫn đến các kết
quả khác với truy cập tuần tự. Do đó làm thế nào bảo đảm rằng các tiến trình thi
hành miền găng một cách tuần tự chứ không phải là đồng thời; hay nói cách
khác là làm thế nào tuân theo giải thuật loại trừ tương hỗ.
4.1.1.2. Phân nhóm các thuật toán truy cập loại trừ tương hỗ
Truy cập vào miền găng dựa trên sự xác nhận (contention based): Mỗi
tiến trình xác nhận u cầu của nó để truy cập vào miền găng. Hay nói cách
khác, các tiến trình cạnh tranh hay tranh giành nhau quyền truy cập vào miền
găng.
Truy cập vào miền găng dựa trên dấu hiệu (Token based): Việc truy cập
vào miền găng được điều khiển bởi một token. Người giữ token có quyền thi
hành đoạn găng của nó.
Tổng quát:
Một trạm bất kỳ trong hệ thống có thể thực thi 1 trong 3 thao tác sau:
1: Yêu cầu miền găng CS (Critical section);
2: Thi hành CS;
3: Không làm gì cả đối với CS (thi hành trong đoạn khơng phải miền
găng.)

-8-



 Tiểu luận Lập trình mạng nâng cao

Các thuật tốn nên thỏa mãn các yêu cầu: Không bế tắc, Không đói,
cơng bằng (các u cầu được thi hành theo thứ tự chúng được tạo), dung
thứ lỗi (có thể vẫn hoạt động khi có sự cố tại một hoặc nhiều trạm)
Một số thông số:
- Số thông điệp/yêu cầu miền găng
- sd (trễ đồng bộ): thời gian giữa thời điểm kết thúc một miền găng và bắt
đầu miền găng tiếp theo.
- Thời gian đáp ứng, được đo từ khi thông điệp yêu cầu miền găng được
gửi đi cho đến khi miền găng được thi hành.
- Thông lượng hệ thống: tỷ lệ mà hệ thống thi hành các miền găng.
- Thông lượng = 1/(sd + thời gian thi hành trung bình E của một miền
găng).
Hoạt động với tải:
- Với tải thấp, một số miền găng được thi hành. Khi một tiến trình muốn
đi vào miền găng, nó thường sẽ được cấp quyền ngay lập tức sau khi thi
hành thuật toán loại trừ tương hỗ. Đối với trường hợp hợp tải cao hoặc
nặng, luôn ln có các u cầu miền găng phải chờ đợi. Ngay khi một trạm
kết thúc miền găng của mình, nó sẽ có thể cố gắng khởi tạo miền găng
khác.
Nếu gọi E là thời gian trung bình thi hành một miền găng, và T là độ trễ
thơng điệp trung bình, thì trong hầu hết các thuật toán, thời gian cho trường
hợp tốt nhất có cận trên là (2T + E). Điều này cho phép trao đổi thơng điệp
vịng trịn cộng với sự thi hành miền găng. Thời gian cho trường hợp xấu
nhất là rất nhiều.
4.1.1.3. Sắp xếp kiểu đóng dấu
a. Khái niệm đồng hồ Logic:
Đối với nhiều ứng dụng, các sự kiện không cần lập lịch hay đồng bộ đối

với thời gian thực. Nó chỉ là thứ tự sự kiện hoạt động liên quan. Trong trường
hợp như vậy, đồng hồ logic có thể được dùng để biểu thị thứ tự thơng tin cho
các sự kiện, đặc biệt trong hệ phân tán, nó khó giữ được đồng hồ vật lý chung
giữa tất cả các tiến trình đang sắp xếp. Đồng hồ logic Lamport là khái niệm cơ
bản để sắp xếp các tiến trình và các sự kiện trong hệ phân tán.

-9-


 Tiểu luận Lập trình mạng nâng cao

b. Trật tự từng phần:
Trong thực tế một số hệ thống khi đồng bộ hóa chỉ địi hỏi trật tự từng
phần. Chính vì vậy, trật tự hóa từng phần giữa các sự kiện mà tiến trình của nó
cần phải đồng bộ là vấn đề cần phải quan tâm.
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ó trước” (→) hay “ở ngay trước”:
Trật tự các sự kiện được xác định dựa trên các nguyên tắc sau:
i. Nếu a và b là hai sự kiện của cùng một trạm P và a xảy ra trước b thì ta
có a→b (trật tự cục bộ).
a
b
P
Hình 1.3. ( a→ b): trật tự cục bộ
ii. Nếu a là phát thông điệp từ một trạm P đến trạm Q nào đó và b là nhận
thơng điệp thì ta có a→b (nhân-quả)
P

a
b


Q

c

Hình 1.4. ( a→ b): trật tự Nhân - Quả

iii. Nếu a→b và b→c, thì a→c. (bắc cầu)
P
P

Q

a
Q

b

c

R

Hình 1.5. ( a→ c): trật tự bắc cầu
p1

q1

r1

q2

r2

p2
q3
p3

q4

r3

q5
r4

p4
-q6 10


 Tiểu luận Lập trình mạng nâng cao

Hình 1.6 Sơ đồ của quan hệ “có trước”:

a → b có nghĩa: chúng ta có thể đi từ a đến b theo sơ đồ bằng cách di
chuyển về phía trước theo thời gian dọc theo các đường tiến trình và thơng điệp,
ví dụ p1 → r4
Chúng ta nói rằng a tác động nhân quả đến b
Hai sự kiện là hợp lực nếu chúng có tác động nhân quả với nhau, ví dụ p3
và q3 là hợp lực.
Cho dù q3 xảy ra tại thời điểm vật lý sớm hơn p3, tiến trình P khơng biết
tiến trình Q đã làm gì tại thời điểm q3 cho đến khi nó nhận được thơng điệp tại
thời điểm p4.

c. Gắn thời gian Logic với các sự kiện:
Các đồng hồ lôgic: gán một số cho mỗi sự kiện cục bộ.
Hệ thống các đồng hồ lơgic phải chính xác:
Điều kiện đồng hồ
∀ sự kiện a,b: nếu a → b thì C(a) < C(b)
Để thực thi các đồng hồ thỏa mãn Điều kiện Đồng hồ, ta có thể áp dụng
thuật tốn đóng dấu thời gian.
4.1.1.4. Đồng hồ theo trật tự tổng quát chặt chẽ (Lamport)
Trật tự từng phần chỉ có thể áp dụng cho một số hệ thống, điều này có
nghĩa là một số hệ thống có thể gắn bó được thông qua việc sắp xếp các sự kiện
theo trật tự bằng quan hệ “có trước”. Tuy nhiên có rất nhiều hệ phân tán các sự
kiện không thể sắp được bằng trật tự từng phần, do vậy phải cần đến trật tự
chặt chẽ (=>) của các sự kiện.

- 11 -


 Tiểu luận Lập trình mạng nâng cao

a. Cấu trúc trật tự tổng quát chặt chẽ (Lamport)
Lamport định nghĩa trật tự chặt chẽ dựa trên quan hệ “có trước”, nó gán
cho mỗi trạm một số duy nhất và sau đó sử dụng số này để lập trật tự cho các sự
kiện không sắp xếp được thứ tự bằng quan hệ “có trước”.
Trật tự nhất quán của các sự kiện phát:
Định dạng thơng điệp từ Pi: (m, Tm, i)
Tại tiến trình Pi, một sự kiện phát (m, Tm, j) từ Pj được gọi là có trước sự
kiện phát (n, Tn, k) từ Pk nếu:
Nếu Tm < Tn, hoặc
Nếu Tm = Tn và j < k
Hình 1.7 minh họa cho dạng thơng điệp với trật tự chặt chẽ như sau:


P1
0

P2

P3
0

0

P4
0

(a,1,1)
(b,1,4)

2
3

2
2

2

3
Hình 1.7 Minh họa cho dạng thông điệp theo trật tự chặt chẽ

b. Giải thuật đóng dấu thời gian của Lamport
Đồng hồ lơgic cho phép đóng dấu thời gian, nhằm xác lập trật tự cho từng

sự kiện trong hệ phân tán để với mỗi cặp sự kiện A và B ta có: nếu A có trước B
(A → B) thì đồng hồ lơgic của A nhỏ hơn đồng hồ lôgic của B.
Nguyên tắc thiết lập: Mỗi trạm S đều có trang bị cơng tơ với các giá trị
ngun Cs đó chính là đồng hồ logic, hoạt động theo các qui tắc sau:
- Gia tăng Ci thêm một trị số giữa hai sự kiện kế tiếp
Ci
Ci+1
a



- 12 -


 Tiểu luận Lập trình mạng nâng cao

- Trạm e phát thông điệp m, ghi dấu dấu thời gian cho các thơng điệp m
gửi đi,
Tm = Ce (a)
Ci

a

Ci+1



(Tm = Ce (a))

- Khi nhận được thông điệp m, trạm nhận r cập nhật đồng hồ Cr riêng

theo:
Cr = Tm + 1 (điều này đảm bảo tính nhân-quả theo trật tự từng phần)
(m, Tm,s)
Pj

Cr

Cr = T m + 1



- Trật tự sự kiện toàn bộ: Một sự kiện a sinh ra trên trạm i được đánh dấu
bởi đồng hồ cục bộ Ci, nếu a và b là hai sự kiện trên hai trạm i và j ta có
quan hệ sau:
Ci (a) < Cj (b)
a ⇒ b nếu
hoặc
Ci (a) = Cj (b) và i < j

4.1.1.5. Các giải thuật loại trừ tương hỗ trên cơ sở đóng dấu
a. Thuật tốn Lamport
Thuật tốn này được Lamport (1978) đưa ra, nó sử dụng cơ chế đóng dấu
thời gian cho việc đồng bộ các đồng hồ lơgic.
Các giả định:
Chúng ra giả định mơ hình mạng kết nối hồn tồn trong đó các tiến
trình liên lạc thơng qua các kênh FIFO tin cậy. Tức là, các thông điệp
không thể sắp xếp lại theo trật tự khác.
Các giả định được thực thi một cách dễ dàng ở tầng giao vận.
Các kiểu thông điệp:
(REQ, Ci, i): Một yêu cầu cho việc truy cập vào miền găng CS của tiến

trình Pi. Yêu cầu này được phát đi cho tất các các tiến trình khác.
(REP, Ci, i): Hồi âm từ tiến trình Pi cho tiến trình Pj khi Pi nhận được
yêu cầu từ Pj.
- 13 -


 Tiểu luận Lập trình mạng nâng cao

(REL, Ci, i): Thơng điệp giải phóng từ Pi thơng báo cho biết nó đã rời
khỏi CS. Thơng điệp này được gửi cho tất cả các tiến trình khác.
Các biến tiến trình:
Ci: Đồng hồ cục bộ của Pi, khởi tạo từ 0.
qi: Hàng đợi [0 … n-1] chứa các thơng điệp.
Thuật tốn:
Khi một tiến trình tại trạm Si muốn thi hành đoạn găng, nó sẽ gửi thơng
điệp REQ có đánh dấu thời gian cho tất cả các trạm trong hệ thống kể có
trạm Si.
Mỗi trạm, Si, duy trì một hàng đợi chứa các thông điệp yêu cầu được sắp
xếp theo trật tự các dấu thời gian; các đồng hồ logic và quan hệ trật tự toàn
bộ được sử dụng để gắn các dấu thời gian.
Khi một trạm nhận được yêu cầu, nó sẽ đưa thơng điệp đó vào hàng đợi
u cầu của nó theo thứ tự dấu thời gian và gửi một thông điệp trả lời REP.
Nếu cần, quan hệ trật tự toàn bộ được sử dụng để phá vỡ các sự ràng buộc.
Ý tưởng chung là một tiến trình khơng thể thi hành đoạn găng của nó
cho đến khi nó nhận được trả lời từ tất cả các trạm khác.
Tóm lại, một trạm thi hành miền găng của nó khi:
 Nhận được thơng điệp trả lời từ tất cả các trạm cịn lại và
 Yêu cầu REQ của nó là ở trên đỉnh của hàng đợi cục bộ của nó.
Khi một trạm hồn thành miền găng của nó, nó sẽ gửi khuyến nghị giải
phóng REL đến tất cả các trạm. Yêu cầu của nó được loại khỏi tất cả các

hàng đợi tại thời điểm này. Nếu các trạm khác đang chờ để thi hành miền
găng của chúng, một trong các trạm đó bây giờ có thể bắt đầu thực hiện
miền găng của mình.
Nhận thấy:
- Hoạt động: 3(N-1) thơng điệp cần thiết cho mỗi miền găng được thi
hành. (N-1) thông điệp REQ, (N-1) thông điệp REP và (N-1) thông điệp
REL.
- Độ trễ đồng bộ: T (trong đó T thời gian trung bình truyền thơng điệp).
Khi nhận được thơng điệp giải phóng, tiến trình tiếp theo có thể bắt đầu thi
hành.

- 14 -


 Tiểu luận Lập trình mạng nâng cao

- Loại trừ tương hỗ là đạt được: Các dấu thời gian là duy nhất, vì vậy tất
cả các hàng đợi sẽ giữ các yêu cầu trong cùng một thứ tự. Chỉ một tiến trình
duy nhất sẽ nằm ở đỉnh của các hàng đợi.
- Khơng đói: Các u cầu được cấp quyền dựa trên cơ sở của trật tự dấu
thời gian và các tiến trình gửi các thơng điệp REL.
b. Thuật tốn Ricart và Agrawala:
Mục tiêu là để giảm việc chuyển thông điệp bằng cách kết hợp các thông
điệp REL và REP.Nếu một trạm đang thi hành miền găng khi một yêu cầu REQ
đến, hoặc nếu u cầu đang chờ của chính nó có dấu thời gian sớm hơn, nó
khơng đáp ứng u cầu đó ngay lập tức. Thay vào đó, nó chờ cho đến khi nó ra
khỏi miền găng của nó. Tại thời điểm đó, nó có thể gửi một thơng điệp hồi
âm/giải phóng đến tất cả các yêu cầu đang chờ.
Một trạm sẽ phải chờ cho đến khi nó nhận được trả lời từ tất cả các trạm
còn lại trước khi đi vào miền găng của nó, và yêu cầu của nó vẫn phải cịn nằm

ở đỉnh của hàng đợi.
Thuật tốn này yêu cầu 2(N-1) thông điệp: một nửa cho các u cầu, nửa
cịn lại để trả lời.
Các thời gian lơgic được tạo ra như trong thuật toán Lamport (Hàng đợi
phân tán).
Phần yêu cầu của Pi:
- Gửi đi thông điệp REQ cho tất cả các tiến trình như trong thuật tốn
Lamport.
- Truy cập vào CSi sau khi Pi nhận được thông điệp ACK từ tất cả các
tiến trình khác.
Phần thu của Pi khi nhận được thông điệp REQ từ Pj:
a. Nếu Pi không muốn truy cập vào miền găng CSi của nó (nó chưa gửi
đi thơng điệp REQ), thì Pi trả lời với thông điệp ACK.
b. Nếu Pi đang ở trong miền găng CSi thì Pi hỗn lại việc hồi âmcho
đến khi nó rời khỏi miền găng CSi.
c. Nếu Pi muốn truy cập vào miền găng CSi (nó đã gửi cho tất cả các
tiến trình khác thơng điệp REQ), thì Pi so sánh thời gian lôgic ti của thông
điệp yêu cầu của chính nó với thời gian lơgic tj của u cầu từ Pj:
Nếu ti > tj thì Pi trả lời với thông điệp ACK.

- 15 -


 Tiểu luận Lập trình mạng nâng cao

Nếu ti < tj thì Pi hỗn lại việc hồi âm (cho đến sau khi Pi kết thúc CS tiếp
theo).
Các xung đột được giải quyết nhờ vào yêu cầu “sớm hơn”, được xác định
bởi các thời gian lơgic.
Sự chính xác:

- Loại trừ tương hỗ: Giả sử rằng Pi và Pj đang ở trong CSi và CSj tại
cùng một thời điểm. Đồng thời, giả sử là thời gian lôgic ti của yêu cầu mới
nhất của Pi nhỏ hơn tj, thời gian lôgic của yêu cầu mới nhất của Pj.
- Khơng đói: Thỏa mãn.
c. Một số Thuật tốn khác
Thuật tốn tập trung (Assertion Based):
- Có một trạm là trạm điều khiển đảm nhiệm việc cung cấp tài nguyên.
- Các trạm khác khi yêu cầu miền găng sẽ gửi các thông điệp đến trạm
điều khiển.
- Trạm điều khiển duy trì một hàng đợi chứa các yêu cầu và cấp cho mỗi
trạm quyền truy cập vào miền găng theo lần lượt.
- Yêu cầu: 3 thông điệp trên miền găng CS: Request, Grant, Release
- Sd (trễ đồng bộ) = 2T: Release, Grant permission
- Thông lượng: 1/(2T + E)
Thuật toán Token Based:
Một thuật toán dựa trên token sử dụng một token (thơng điệp) duy nhất để
xác định tiến trình nào là ở trong miền găng của nó. Chỉ một tiến trình duy nhất
có thể giữ token này, và trạm đó được phép thi hành miền găng.
Thuật tốn token đơn giản nhất sắp xếp tất cả các trong một vòng tròn
logic (logical circle), dựa trên địa chỉ mạng hoặc một số sơ đồ trật tự khác.
Một thông điệp đặc biệt hay token luân chuyển từ trạm này đến trạm kế
tiếp theo dạng điểm-nối-điểm.
Khi một trạm nhận được token này, nó xác định hiện tại nó có cố gắng
vào miền găng hay khơng. Nếu có thì nó sẽ giữ token và thi hành miền găng;
ngược lại, nó chuyển token đến trạm kế tiếp trong vòng tròn. Khi một trạm ra
khỏi miền găng, nó cũng sẽ chuyển token đến trạm kế tiếp.
Ưu điểm:
- 16 -



 Tiểu luận Lập trình mạng nâng cao

- Khơng bế tắc
- Khơng đói
- Khơng lưu thơng thơng điệp ngoại trừ việc chuyển token (Khơng có
các thơng điệp Request, Reply, Release)
Nhược điểm:
- Mất token; một điều kiện mà nó có thể khó chấp nhận; Token có mất
hay khơng, hay chỉ mất một thời gian dài để nhận được token do các tiến
trình khác đang thi hành các miền găng khá lâu?
- Một trạm bị sự cố có thể phá vỡ vịng trịn ln chuyển, nhưng có thể
cần đến một sự thừa nhận. Nếu thơng điệp khơng đến, xem như trạm đó
chết và có thể đi vịng qua nó.
- Lưu lượng mạng thêm vào do sự lưu thông của token; khoảng thời gian
để nhận token nếu mạng là lớn.

- 17 -


 Tiểu luận Lập trình mạng nâng cao

CHƯƠNG 5
XÂY DỰNG HỆ THỐNG ĐA SERVER & CHƯƠNG TRÌNH
CÀI ĐẶT THUẬT TỐN SẮP XẾP THEO KIỂU ĐĨNG DẤU
5.1. THUẬT TỐN LAMPORT DỰA TRÊN ĐỒNG HỒ LOGIC:

CHƯƠNG 6 Đồng hồ Logic:
Đồng hồ logic Lamport dựa trên hai vấn đề sau:
1. Các sự kiện xảy ra trong cùng một bộ xử lý thì chúng ln ở trong
trạng thái trật tự gắn bó bằng cách sử dụng đồng hồ hệ thống (thời gian

thực) vì giá trị của đồng hồ hệ thống luôn được tăng đều.
2. Các sự kiện xảy ra trong các bộ xử lý khác nhau thì sẽ gây ra tình
trạng khơng gắn bó trong thời gian truyền thông điệp, nhưng không lâu sau
chúng cũng gắn bó vì nếu bộ xử lý P j gửi thông điệp cho bộ xử lý P k vào
thời gian T thì Pk khơng thể nhận thơng điệp đó vào thời gian T hoặc trước
đó.
Tuy nhiên, vấn đề là thời gian thực trên mỗi hệ thống không đồng bộ,
đặc biệt trong hệ phân tán, nó khó giữ được đồng hồ hệ thống chung giữa tất cả
các tiến trình đang sắp xếp. Trong trường hợp như vậy, đồng hồ logic có thể
được dùng để biểu thị thứ tự thơng tin cho các sự kiện, đồng hồ logic Lamport là
khái niệm cơ bản để sắp xếp các tiến trình và các sự kiện trong hệ phân tán.

CHƯƠNG 7 Thuật toán Lamport
Đặt T là giá trị đồng hồ thực và Cj(T) là giá trị của đồng hồ logic trong bộ
xử lý J tại thời gian T, đồng hồ logic hoạt động theo nguyên tắc sau:
1. Đánh dấu mỗi sự kiện bằng giá trị đồng hồ logic của bộ xử lý đó. (với
Cj: Đồng hồ logic của Pj, được khởi tạo từ 0).
2. Nếu có một sự kiện cục bộ xảy ra, thì tăng giá trị đồng hồ logic lên 1.
3. Khi một thông điệp được gửi bởi bộ xử lý K, đánh dấu nó bởi Ck(T).
4. Khi bộ xử lý K nhận một thơng điệp có dấu thời gian là C’ thì ta đặt
lại đồng hồ logic của bộ xử lý K là: max(C’, Ck(T)) + 1.
Trong phần này, ta chỉ quan tâm đến việc truyền và nhận các thông điệp,
nên nếu nhận các thơng điệp cùng một thời gian thì căn cứ vào giá trị đồng hồ
logic của các thông điệp để thực hiện:
- 18 -


 Tiểu luận Lập trình mạng nâng cao

Như vậy trong thông điệp ta phải truyền thêm ID của bộ xử lý (nếu là sắp

xếp trong các tiến trình ta phải dùng thêm ID của tiến trình). Tổng qt cấu trúc
thơng điệp như sau:
(METHOD, PARAs, Ci, i)
Với:
o METHOD: là phương thức muốn gọi.
o PARAs: là các tham số cần truyền cho phương thức.
o Ci: giá trị đồng hồ logic của bộ xử lý i.
o i: là ID của bộ xử lý (như Server1, Server2…).

CHƯƠNG 8 Xây dựng cấu trúc của thông điệp giữa các Server:
Phân tán thuật toán Lamport kéo theo việc phân tán các chức năng cung
cấp mà cần phải điều khiển hàng đợi trên trạm. Do vậy, một trạm chuyên cho
việc tiếp nhận các yêu cầu và các khuyến nghị giải phóng từ các trạm cịn lại.
Một trật tự giống nhau trên các trạm chỉ đạt được, nếu ta áp dụng dấu trong
các thông điệp bởi các đồng hồ logic truyền và đánh số trạm. Quan hệ trật tự
toàn bộ được định nghĩa. Thêm vào đó, để cho một trạm có thể ra quyết định
bằng việc tham chiếu duy nhất vào hàng đợi của mình, nó cịn cần phải được
nhận một thông điệp của từng trạm khẳng định rằng khơng có thơng điệp nào
trước các thơng điệp khác mà đang quá cảnh trên đường.
Giả sử :
1. 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ồ logic
của nó và T có thể nhận một trong ba giá trị REQ, REL, và ACQ.
STT
1
2
3

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

Giải thích
Thơng điệp REQ được phát đi cho tất cả các trạm,
REQ
khi trạm i muốn vào trong đoạn găng
Thông điệp REL được phát đi cho tất cả các trạm,
REL
khi trạm i đã rời khỏi đoạn găng
ACQ
Thông điệp ACQ được gửi bởi trạm j cho trạm j đã
- 19 -


 Tiểu luận Lập trình mạng nâng cao

nhận được từ trạm i thơng điệp REQ.
2. 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 :
Mi = (REL, Hinit , i)
Trong đó, i, Hinit là thời điểm khởi sự giống nhau cho tất cả các trạm.
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. dùng biến
trạng thái State để sắp xếp (State =muon : đang yêu cầu tài nguyên,
state=namgiu : đang sử dụng tài nguyên, State=ranh : rãnh)

CHƯƠNG 9 Thuật tốn sắp xếp các thơng điệp đến căn cứ vào giá trị
của đồng hồ logic Lamport:
Thuật tố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
Mi = (REL, Hinit , i)

+ Khi trạm đang yêu cầu tài nguyên:
- Để truy cập vào tài nguyên một trạm nào đó sẽ phát một thông điệp yêu
cầu Mi (T,Hi,i) đến tất cả các trạm khác và đưa yêu cầu vào hàng đợi yêu
cầu của trạm này.
- Khi trạm j nhận thông điệp yêu cầu từ i, nó sẽ gởi ngược lại thơng điệp
(có chứa đồng hồ logic Hj) cho Sj và đưa yêu cầu này vào trong hàng đợi
yêu cầu của nó.
If state =muon then
Begin
Send M(T,Hj,j) đến trạm i
INSERT(Mi,hàngđợi)
End
+ Khi trạm đang vào đoạn găng: Trạm i nhận một thông điệp với đồng hồ
logic lớn hơn đồng hồ ở thời điểm hiện tại của trạm i và yêu cầu của trạm i đang
ở vị trí của hàng đợi u cầu của nó.
If (H>Hi ) and (Vị trí M ở đầu của hàng đợi) then state=namgiu
+ Khi trạm khơng thực hiện gì cả

- 20 -


 Tiểu luận Lập trình mạng nâng cao

Xố u cầu và gởi thơng điệp giải phóng những trạm khác sẽ loại bỏ
yêu cầu tương ứng
If state=ranh then xử lý(các thông điệp hàng đợi) ‘sau đó xố
Send thơng điệp giải phóng đến các trạm
Những trạm khác cũng sẽ xoá yêu cầu của nó trong hàng đợi của mình.
9.1. CÀI ĐẶT THUẬT TOÁN


CHƯƠNG 10

Giả lập 03 Server và 01 Client:

Giả lập 03 Server trên một máy đơn giống như 03 Server độc lập đang
chạy trên môi trường mạng thực sự. Các Server này có chức năng:
Khi nhận thơng điệp:
- Server sẽ cập nhật giá trị đồng hồ logic của mình.
- Lưu thơng điệp vào hàng đợi của mình.
- Sắp xếp lại các thông điệp trong hàng đợi.
- Lấy thông điệp ở đầu hàng đợi ra khỏi hàng đợi và thực hiện nó.
- Sau khi thực hiện 1 thông điệp, Server sẽ tự động trả về kết quả.
Để mô phỏng cho cách làm việc trên mạng của Server ta sẽ mở đồng thời
03 cửa sổ chương trình, mỗi cửa sổ được dùng làm một Server.
Giả lập Client trên một cửa sổ khác:
- Kết nối với 3 Server
- Gửi thông điệp bất kỳ (Cấu trúc của thông điệp sẽ thay đổi tùy theo yêu
cầu của bài tốn cụ thể).
- Nhận thơng điệp trả về từ các Server cho biết thông điệp đã được tiếp
nhận và xử lý.
Trên màn hình của Client và các Server sẽ hiển thị giá trị của đồng hồ
Logic trên mỗi trạm.

CHƯƠNG 11

Một số Class chính của chương trình:

11.1.1.1. Lamport.java
Module chứa thông tin và các phương thức của đồng hồ logic.
import java.net.*;

import java.io.*;
public class Lamport implements Serializable{
private int c;
public Lamport() {
c = 0;
- 21 -


 Tiểu luận Lập trình mạng nâng cao
}
public int getValue() {
return c;
}
public void tick() {
c = c + 1;
}
public void sendAction() {
c = c + 1;
}
public void receiveAction(int sentValue) {
if(sentValue > c)
c = sentValue + 1;
else
c = c + 1;
}
}

11.1.1.2. Message.java
Module chứa thông tin và các phương thức của các thông điệp trao đổi
giữa các Server.

import java.net.*;
import java.io.*;
public class Message implements Serializable{
// Method of message
private String method = "";
// Parameter of message
private String param = "";
// ID of computer
private String ID = "";
// Computer's Port
private int port = 0;
// Message's Lamport clock
private Lamport lamport = null;
public String getMethod(){
return method;
- 22 -


 Tiểu luận Lập trình mạng nâng cao

}
public void setMethod(String method){
this.method = method;
}
public String getParam(){
return param;
}
public void setParam(String param){
this.param = param;
}

public String getID(){
return ID;
}
public void setID(String ID){
this.ID = ID;
}
public int getPort(){
return port;
}
public void setPort(int port){
this.port = port;
}
public Lamport getLamport(){
return lamport;
}
public void setLamport(Lamport lamport){
this.lamport = lamport;
}
}

11.1.1.3. Sắp xếp thông điệp trong hàng đợi
// Sap xep cac message trong hang doi dua theo dong ho Lamport
private void sort(Vector queue){
Message tmp = new Message();
- 23 -


 Tiểu luận Lập trình mạng nâng cao
for(int i=0; i < queue.size() -1; i++)
for(int j=i+1; j < queue.size(); j++)

if(((Message)queue.get(j)).getLamport().getValue() >
((Message)queue.get(i)).getLamport().getValue())
{
tmp = (Message)queue.get(j);
queue.setElementAt(queue.get(i), j);
queue.setElementAt(tmp,i);
}
}

CHƯƠNG 12

Hướng dẫn demo chương trình

12.1.1.1. Yêu cầu hệ thống:
- Máy tính cài đặt Java version 1.5 hoặc mới hơn
- Các file *.java được đặt chung một thư mục; Bao gồm các file kèm theo:
Lamport.java; Message.java; Client.java; Server.java.
- Các file *.bat để compile và chạy chương trình; Bao gồm:
Compiler.bat: dịch các file *.java ra các file *.class tương ứng.
Server.bat: Chạy chương trình giả lập các Server (Chạy 03 lần để giả lập
03 server).
Client.bat: Chạy chương trình giả lập Client phát thông điệp đến các
Server.
* Lần lượt thực thi các file *.bat theo thứ tự nêu trên.
12.1.1.2. Màn hình Demo

Server 1

Server 2


- 24 -

Server 3


 Tiểu luận Lập trình mạng nâng cao

Client

- 25 -


×