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

tiểu luận lập trình mạng phòng tránh bế tắc trong cung cấp tài nguyê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 (508.88 KB, 25 trang )

ĐẠI HỌC ĐÀ NẴNG
BAN ĐÀO TẠO SAU ĐẠI HỌC



GVHD : PGS. TS. LÊ VĂN SƠN
HỌC VIÊN : ĐẶNG QUÝ LINH
LỚP : CAO HỌC KHMT K24
1
Đà Nẵng, tháng 05/2012
Đề tài:
PHÒNG TRÁNH BẾ TẮC TRONG CUNG CẤP TÀI NGUYÊN
THUỘC HỆ PHÂN TÁN
MỤC LỤC
1
1
MỤC LỤC i
LỜI MỞ ĐẦU iii
CHƯƠNG 1 1
BẾ TẮC VÀ PHƯƠNG PHÁP PHÒNG TRÁNH BẾ TẮC TRONG HỆ TIN
HỌC PHÂN TÁN 1
1. Khái niệm bế tắc 1
2. Phương pháp phòng tránh bế tắc 1
2. Phương pháp phòng tránh bế tắc 1
2.1 Sắp xếp kiểu đóng dấu 1
2.1 Sắp xếp kiểu đóng dấu 1
2.1.1 Đồng hồ logic 2
2.1.2 Minh họa trật tự từng phần 2
2.1.3 Gắn thời gian lôgic với các sự kiện 3
2.2 Giới thiệu giải thuật loại trừ tương hỗ 3
2.2 Giới thiệu giải thuật loại trừ tương hỗ 3


2.3 Kiểm nghiệm giải thuật 5
2.3 Kiểm nghiệm giải thuật 5
CHƯƠNG 2 7
LẬP TRÌNH PHÂN TÁN 7
1. Mô hình Client-Server 7
1. Mô hình Client-Server 7
1.1 Giới thiệu 7
1.1 Giới thiệu 7
1.2. Client 8
1.2. Client 8
1.3. Server 9
1.3. Server 9
2. Mạng máy tính phân tán 9
2. Mạng máy tính phân tán 9
3. Các điểm mạnh trong hệ phân tán 9
3. Các điểm mạnh trong hệ phân tán 9
4. Giới thiệu phương thức triệu gọi đối tượng từ xa RMI (Remote Method
Invocation) 10
4. Giới thiệu phương thức triệu gọi đối tượng từ xa RMI (Remote Method
Invocation) 10
4.1. Triệu gọi phương thức từ xa 10
4.1. Triệu gọi phương thức từ xa 10
4.2. Kiến trúc RMI Java 11
4.2. Kiến trúc RMI Java 11
CHƯƠNG 3 15
XÂY DỰNG CHƯƠNG TRÌNH TRAO ĐỔI THÔNG ĐIỆP VỀ TRẠNG
THÁI CUNG CẤP TÀI NGUYÊN GIỮA 5 SERVER 15
1. Hướng giải quyết 15
1. Hướng giải quyết 15
2. Thuật toán Lamport 15

2. Thuật toán Lamport 15
2.1. Các giả định 15
2.1. Các giả định 15
2.2. Các kiểu thông điệp 15
2.2. Các kiểu thông điệp 15
2.3. Các biến tiến trình 16
2.3. Các biến tiến trình 16
2.4. Thuật toán 16
2.4. Thuật toán 16
2.4. Nhận xét 16
2.4. Nhận xét 16
3. Kết quả Demo chương trình 17
3. Kết quả Demo chương trình 17
1. Đánh giá kết quả đã thực hiện 19
2. Hạn chế 19
3. Hướng phát triển ứng dụng 19
TÀI LIỆU THAM KHẢO 20
LỜI MỞ ĐẦU
Các mô hình tin học phân tán đã và đang là xu hướng chủ đạo trong công nghệ
thông tin trong một thời gian, ít nhất là từ hai thập kỉ gần đây. Tin học phân tán là cơ
sở tạo ra mạng môi trường tin học để đạt được việc sử dụng, thực thi máy tính hữu ích
hơn, và nhờ đó có thể tiến xa hơn nữa. Điều đó có nghĩa là có rất nhiều loại mô-đun
khác nhau của một ứng dụng cần tích hợp với nhau để xem chúng như một ứng dụng
dính liền. Về cơ bản, có hai phần trong mô hình tin học phân tán, một khách (client) và
một chủ (server), chạy trên các máy khác nhau trên mạng.
Cách chạy của một hệ phân tán phần lớn được xác định bởi sự sử dụng những
chính sách nguyên thủy và luồng đồng bộ hóa middleware nằm bên dưới. Trạng thái tự
nhiên song song vốn có của các hệ phân tán có thể gây ra một số vấn đề, như những sự
bế tắc và livelocks.
Đã có nhiều mô hình lập trình phân tán đối tượng ra đời như DCOM

(Microsoft), RMI (Java), CORBA,…Tiểu luận này sẽ trình bày một bài toán về vấn đề
bế tắc và cách giả quyết phòng tránh bế tắc trong cung cấp tài nguyên thuộc hệ phân
tán và xây dựng một chương trình nhỏ bằng ngôn ngữ lập trình Java sử dụng RMI để
demo.

Tiểu luận lập trình mạng
CHƯƠNG 1
BẾ TẮC VÀ PHƯƠNG PHÁP PHÒNG TRÁNH BẾ TẮC
TRONG HỆ TIN HỌC PHÂN TÁN
1. Khái niệm bế tắc
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ụ như hình vẽ sau đây:
T1
T2
T4
T3
Tr1 Tr2 Tr3
Hình 2. Đồ thị cung cấp tài nguyên bị bế tắc
Hình 2 cho phép chúng ta hình dung vấn đề một cách rõ ràng hơn. Theo hình vẽ
này, ta có 4 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,

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
3
do Tr
3
đang chiếm giữ. Tiến trình Tr
3
chờ tài nguyên T
2
được giải phóng bởi 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
.
Lúc này, ta thấy có 2 chu trình kín trong đồ thị là:
2. Phương pháp phòng tránh bế tắc

2.1 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ồ lô gích.
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 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ô
Trang 1
Tr
1
-T
1
-Tr
2
-T
3
-Tr
3
-T
2
-Tr
1
Tr
3
-T
2
-Tr
2
-T
3
-Tr
3

3
.
a
P
(a

c) - bắc cầu -

b
Q

c
2
.
.
a
P
(a

b) - nhân quả -

b
Q

c
Tiểu luận lập trình mạng
gích 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.
2.1.1 Đồ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.
2.1.2 Minh họa 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:
1. Nếu A và B là hai sự kiện của cùng
một trạm và A xảy ra trước B thì ta
có A→B (trật tự cục bộ).
2. Nếu A là phát thông điệp từ một trạm
nào đó và B là nhận thông điệp thì ta
có A→B. (nhân-quả)
3. Nếu A→B và B→C, thì A→C. (bắc
cầu)
Sơ đồ của “ có trước ”:
Trang 2
p2
p1
p3
p4

q1
q2
q3
q4
q5
q6
r1
r2
r3
r4
P RQ
Tiểu luận lập trình mạng
- a → b : 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.
o Ví dụ : p1 → r4. (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.
o 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.
2.1.3 Gắn thời gian lôgic 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ồ :
Để 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 toán
đóng dấu thời gian.
2.2 Giới thiệu giải thuật loại trừ tương hỗ
Loại trừ tương hỗ có thể được điều khiển trên một trạm trung tâm có nhiệm vụ
nhận tất cả các thông điệp và khuyến nghị giải phóng. Trạm này duy trì một hàng đợi,
sắp xếp các yêu cầu theo trật tự đến và phục vụ cho từng thông điệp một trong trật tự
này.

Phân tán giải thuật này 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
Trang 3
∀ sự kiện a,b : nếu a → b thì C(a) < C(b)
Tiểu luận lập trình mạng
yêu cầu và các khuyến nghị giải phóng từ tất cả các trạm còn lại. Một trật tự giống nhau
trên tất cả các trạm chỉ đạt được, nếu ta áp dụng dấu trong các thông điệp bởi đồng hồ
lô gích truyền và đánh số các 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 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à còn đang quá cảnh trên đường.
Thuật toán loại trừ tương hỗ có thể mô tả theo sơ đồ sau đây.
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ồ lô gích của nó và T có thể nhận
một trong ba giá trị REQ, REL và ACQ.
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 j cho trạm i, khi trạm j đã
nhận từ trạm i thông điệp REQ.
2. 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. Theo cấu trúc, hàng đợi luôn
luôn chứa một thông điệp và chỉ một thường trực trong mỗi trạm, bao gồm trạm cục bộ.
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, Hinit là thời điểm khởi sự giống nhau cho tất cả các trạm.

3. 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
Trang 4
M
i
= (REL,H
init
,i)
Tiểu luận lập trình mạ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.
4. Trạm i được truyề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ó. Cần nhắc lại
rằng hàng đợi chứa một thông điệp loại này trên một trạm.
2.3 Kiểm nghiệm giải thuật
Các yêu cầu vào đoạn găng được xử lý theo trật tự FIFO và theo quan hệ ⇒. Để
chứng minh điều đó, ta lưu ý rằng khi trạm i quyết định vào đoạn găng, nó không thể
đưa vào trong mạng yêu cầu nào trước bối cảnh sau. Thực tế, khi trạm i vào đoạn găng
có nghĩa là nó đã nhận thông điệp từ tất cả các trạm khác và tất cả các thông điệp đều
sau thông điệp REQ của riêng nó.
Ta kiểm tra các đặc tính sau đây:
1. Trạm i đang ở trong đoạn găng là trạm duy nhất nằm trong đoạn găng ấy.
Thực tế cho thấy thông điệp REQ được phát bởi i vẫn tiếp tục tồn tại trong tất cả các
hàng đợi cho đến khi nó được thay thế bởi thông điệp REL.
2. Trạm đã yêu cầu vào đoạn găng phải đảm bảo thời hạn và phải ra khỏi đoạn
găng sau một khoảng thời gian xác định. Thuật toán thể hiện tính đồng đều và tránh
được tổn thất.
Trang 5

Tiểu luận lập trình mạng
Trang 6
Tiểu luận lập trình mạng
CHƯƠNG 2
LẬP TRÌNH PHÂN TÁN
1. Mô hình Client-Server
1.1 Giới thiệu
Mô hình Client/Server là mô hình tổ chức trao đổi thông tin trong đó mô tả
cách mà các máy tính có thể giao tiếp với nhau theo một phương thức nhất định.
Phương thức này là một chiến lược tổ chức phân cấp mà trong đó có một máy tính
đặc biệt phục vụ các yêu cầu về lưu trữ, xử lý, tính toán tất cả các máy trên mạng.
Kiểu tổ chức tổng quát của mô hình này là một mạng LAN được thiết lập từ nhiều
máy tính khác nhau, trong đó một máy tính gọi là Server. Một chương trình client
chạy từ bất kỳ máy tính nào trong mạng cũng có thể gởi yêu cầu của mình đến
Server, khi server nhận được các yêu cầu này thì nó sẽ thực hiện và gởi kết quả về
cho Client.
Hình. Mô hình Client/Server
Có nhiều mô hình được sử dụng trong các chương trình mạng nhưng mô hình
Client/Server là mô hình chuẩn. Một Server là một quá trình, quá trình này chờ sự liên
hệ từ một Client. Một phiên làm việc điển hình của mô hình này như sau:
- Phía Client gởi một yêu cầu thông qua mạng đến Server để yêu cầu một số dạng
dịch vụ nào đó như lấy tên máy Server, lấy đồng hồ hệ thống, đăng ký cấp bằng

- Phía Server được khởi động trước trên hệ thống máy tính. Sau khi khởi động nó
sẽ chờ Client liên hệ nó để yêu cầu một số dịch vụ. Quá trình của Server thành
chia ra 2 kiểu:
 Khi chỉ có một yêu cầu của Client được Server phục vụ tại một
thời điểm thì gọi đó là Server lặp.
 Khi Server có thể phục vụ đồng thời nhiều yêu cầu từ Client gởi
đến gọi đó là Server đồng thời.

Client/Server là mô hình tổng quát nhất, trên thực tế thì một Server có thể được nối
tới nhiều Server khác nhằm làm việc hiệu quả hơn. Khi nhận được một yêu cầu từ
Client, Server này có thể gửi tiếp yêu cầu vừa nhận được cho Server khác ví dụ như
Trang 7
Tiểu luận lập trình mạng
Database Server vì bản thân nó không thể xử lý yêu cầu này được. Máy Server có thể
thi hành các nhiệm vụ đơn giản hoặc phức tạp.
Ví dụ như một máy chủ trả lời thời gian hiện tại trong ngày, khi một máy Client
yêu cầu lấy thông tin về thời gian nó sẽ phải gửi một yêu cầu theo một tiêu chuẩn do
Server định ra, nếu yêu cầu được chấp nhận thì máy Server sẽ trả về thông tin mà Client
yêu cầu. Có rất nhiều các dịch vụ Server trên mạng nhưng nó đều hoạt động theo
nguyên lý là nhận các yêu cầu từ Client sau đó xử lý và trả kết quả cho client yêu cầu.
Thông thường chương trình Server và Client được thi hành trên hai máy khác nhau.
Cho dù lúc nào Server cũng ở trạng thái sẵn sàng chờ nhận yêu cầu từ Client nhưng trên
thực tế một tiến trình liên tác qua lại (interaction) giữa Client và Server lại bắt đầu ở
phía Client, khi mà Client gửi tín hiệu yêu cầu tới Server. Các chương trình Server
thường đều thi hành ở mức ứng dụng (tầng ứng dụng của mạng).
Sự thuận lợi của phương pháp này là nó có thể làm việc trên bất cứ một mạng máy
tính nào có hỗ trợ giao thức truyền thông chuẩn cụ thể ở đây là giao thức TCP/IP. Với
các giao thức chuẩn này cũng giúp cho các nhà sản xuất có thể tích hợp nhiều sản phẩm
khác nhau của họ lên mạng mà không gặp phải khó khăn gì. Với các chuẩn này thì các
chương trình Server cho một dịch vụ nào đấy có thể thi hành trên một hệ thống chia sẻ
thời gian (timesharing system) với nhiều chương trình và dịch vụ khác hoặc nó có thể
chạy trên chính một máy tính các nhân bình thường. Có thể có nhiều chương Server
cùng làm một dịch vụ, chúng có thể nằm trên nhiều máy tính hoặc một máy tính.
1.2. Client
Trong mô hình Client/Server, người ta còn định nghĩa cụ thể cho một máy Client là
một máy trạm mà chỉ được sử dụng bởi một người dùng với để muốn thể hiện tính độc
lập cho nó. Máy Client có thể sử dụng các hệ điều hành bình thường như Win9x, DOS,
OS/2

Bản thân mỗi một Client cũng đã được tích hợp nhiều chức năng trên hệ điều hành
mà nó chạy, nhưng khi được nối vào một mạng LAN, WAN theo mô hình Client/Server
thì nó còn có thể sử dụng thêm các chức năng do hệ điều hành mạng cung cấp với nhiều
dịch vụ khác nhau (cụ thể là các dịch vụ do các Server trên mạng này cung cấp), ví dụ
như nó có thể yêu cầu lấy dữ liệu từ một Server hay gửi dữ liệu lên Server đó Thực tế
trong các ứng dụng của mô hình Client/Server, các chức năng hoạt động chính là sự kết
hợp giữa Client và Server với sự chia sẻ tài nguyên, dữ liệu trên cả hai máy.
Trong mô hình Client/Server, Client được coi như là người sử dụng các dịch vụ trên
mạng do một hoặc nhiều máy chủ cung cấp và Server được coi như là người cung cấp
dịch vụ để trả lời các yêu cầu của các Clients. Điều quan trọng là phải hiểu được vai trò
hoạt động của nó trong một mô hình cụ thể, một máy Client trong mô hình này lại có
thể là Server trong một mô hình khác. Ví dụ cụ thể như một máy trạm làm việc như một
Client bình thường trong mạng LAN nhưng đồng thời nó có thể đóng vai trò như một
máy in chủ (printer server) cung cấp dịch vụ in ấn từ xa cho nhiều người khác (Clients)
Trang 8
Tiểu luận lập trình mạng
sử dụng. Client được hiểu như là bề nổi của các dịch vụ trên mạng, nếu có thông tin vào
hoặc ra thì chúng sẽ được hiển thị trên máy Client.
1.3. Server
Server còn được định nghĩa như là một máy tính nhiều người sử dụng (multiuser
computer). Vì một Server phải quản lý nhiều yêu cầu từ các Client trên mạng cho nên
nó hoạt động sẽ tốt hơn nếu hệ điều hành của nó là đa nhiệm với các tính năng hoạt
động độc lập song song với nhau như hệ điều hành UNIX, WINDOWS Server cung
cấp và điều khiển các tiến trình truy cập vào tài nguyên của hệ thống.
Các ứng dụng chạy trên Server phải được tách rời nhau để một lỗi của ứng dụng này
không làm hỏng ứng dụng khác. Tính đa nhiệm đảm bảo một tiến trình không sử dụng
toàn bộ tài nguyên hệ thống. Server như là một nhà cung cấp dịch vụ cho các Clients
yêu cầu tới khi cần, các dịch vụ như cơ sở dữ liệu, in ấn, truyền file, hệ thống Các ứng
dụng Server cung cấp các dịch vụ mang tính chức năng để hỗ trợ cho các hoạt động trên
các máy Clients có hiệu quả hơn.

2. Mạng máy tính phân tán
Hệ thống tính toán phân tán đã tạo được bước ngoặc vĩ đại so với các hệ tập trung
và hệ khách chủ (Client/Server). Việc tính toán phân tán về cơ bản cũng giống như việc
tính toán của hệ khách chủ trên phạm vi rộng lớn. Dữ liệu được chứa trên nhiều máy
chủ ở tại nhiều vị trí địa lý khác nhau kết nối nhau thông qua mạng diện rộng WAN
hình thành các nơi làm việc, các phòng ban, các chi nhánh của một cơ quan.
Tính toán phân tán hình thành từ tính toán tập trung và chient/server. Các mạng
được xây dựng dựa trên kỹ thuật Web (ví dụ như: Internet; intranet…) là các mạng phân
tán. Hệ thống cơ sở dữ liệu back-end có thể được nối kết với các server Web để lấy
được các thông tin động. Kỹ thuật Web nầy đã mở ra hướng mới cho hệ phân tán. Các
trình duyệt Web giúp cho khách hàng trên toàn cầu kết nối với hệ thống Web chủ, mà
không bị khống chế bởi bất kỳ hệ điều hành nào đang chạy trong máy của khách hàng
nầy. Một xu hướng mới khi xây dựng các intranet là dữ liệu phải được tập trung hóa tại
một nhóm các máy chủ để có khả năng đáp ứng cùng một lúc cho nhiều người dùng.
Giờ đây các hệ thống mainframe đã thật sự trở lại vì tính năng xử lý mạnh mẽ. Xu
hướng nầy có lẽ trái ngược với việc tính toán phân tán nhưng trong thực tế chúng cùng
tồn tại bên nhau.
3. Các điểm mạnh trong hệ phân tán
Cơ chế tính toán phân tán hỗ trợ truy cập các dữ liệu được lưu ở nhiều nơi.
Nhờ cơ chế nhân bản nên người dùng chỉ cần truy cập cục bộ cũng lấy được các
thông tin từ các trung tâm chính ở rất xa.
Hệ thống nầy khắc phục được các hiểm họa địa phương. Vì nếu chúng ta không
truy cập dữ liệu được tại vị trí nầy, chúng ta có thể thử ở nơi khác.
Trang 9
Tiểu luận lập trình mạng
Dữ liệu phân tán đòi hỏi phải được nhân bản và đồng bộ hóa cao thông qua các mối
liên kết mạng, điều nầy làm cho việc quản trị và giám sát phức tạp hơn. Một số nhà
quản trị cho rằng, ở hệ thống như thế nầy sẽ gây khó khăn trong vấn đề bảo mật và điều
khiển.
Hệ phân tán được xây dựng trên giao thức TCP/IP và các kỹ thuật Web cùng với

các ứng dụng trung gian (middleware) thúc đẩy việc tính toán phân tán. Quả thật đây là
một đổi thay mang tính cách mạng. Nhiệm vụ trước mắt là làm thế nào để chuyển tiếp
sang hệ nầy một cách khoa học.
Cơ chế Client/Server cung cấp kiến trúc phù hợp cho việc dàn trải hệ thống phân
tán. Mô tả nhiều cách truy cập trong các hệ thống phân tán. Các máy mainframe sẽ
dùng để lưu trữ các dữ liệu di sản hoặc đóng vai trò kho dữ liệu (data warehouse). Cơ
chế nầy giúp xây dựng các trung tâm dữ liệu staging (công bố), phục vụ tốt cho việc
truy cập. Người dùng ở xa có thể truy cập dữ liệu trên hệ staging hay tại các máy chủ
cục bộ. Người dùng còn có thể trao đổi thông tin với nhau bằng thư điện tử và hình
thành các nhóm công tác.
4. Giới thiệu phương thức triệu gọi đối tượng từ xa RMI (Remote Method
Invocation)
Ngày nay, cộng đồng những người lập trình bắt đầu nghĩ rằng “đối tượng có ở mọi
nơi”. Những đối tượng này, tất nhiên được hỗ trợ để trao đổi được với nhau theo những
giao thức chuẩn trên mạng. Ví dụ, bạn có một đối tượng ở máy trạm (máy khách -
Client), ở đó người sử dụng cần phải điền dữ liệu vào mẫu báo cáo. Đối tượng này (đối
tượng khách) có thể gửi một thông điệp (thỉnh cầu) cho đối tượng trên máy chủ (đối
tượng phục vụ - Server) trên mạng để yêu cầu cung cấp các thông tin cần thiết. Đối
tượng trên máy chủ truy nhập vào các CSDL để có được những thông tin mà khách yêu
cầu và gửi lại cho đối tượng khách. Đó chính là ý tưởng của Java-RMI, phương thức
lập trình triệu gọi từ xa. Lập trình phân tán đối tượng bằng cách triệu gọi phương thức
từ xa RMI là cách hợp tác giữa các đối tượng Java có những mã lệnh cài đặt (bao gồm
các phương thức và thuộc tính) nằm trên các máy khác nhau (chính xác là nằm trên các
JVM – máy ảo Java khác nhau) và có thể triệu gọi lẫn nhau để trao đổi tin.
Trong mô hình Client/Server truyền thống, các yêu cầu được dịch sang một format
(dạng) trung gian (dạng từng cặp tên gọi / giá trị hoặc các dữ liệu trong XML). Máy chủ
Server phân tích format yêu cầu, xử lý để có được kết quả và gửi trả lời cho máy khách
Client. Máy khách phân tích format trả lời và hiển thị thông tin cho người sử dụng.
4.1. Triệu gọi phương thức từ xa
Cơ chế triệu gọi từ xa có vẻ đơn giản hơn mô hình Client/Server. Nếu ta cần truy

cập tới một đối tượng ở trên một máy khác thì ta chỉ cần triệu gọi phương thức của đối
tượng ở trên máy đó. Tất nhiên, các tham số bằng cách nào đó phải được gửi đến cho
máy kia và đối tượng nhận được phải chắc chắn thực hiện phương thức tương ứng để có
được những thông tin cần thiết gửi trả lại cho đối tượng khách hàng.
Trang 10
Tiểu luận lập trình mạng
Tuy nhiên, việc triệu gọi phương thức của các đối tượng từ xa chắc chắn sẽ phức
tạp hơn nhiều so với lời gọi hàm ở trong cùng một chương trình ứng dụng. Các đối
tượng trên hai máy ảo khác nhau thì hoạt động trên hai tiến trình khác nhau, có hai
không gian địa chỉ khác nhau, và vì thế việc tham chiếu tới các biến, địa chỉ đối tượng
là hoàn toàn khác nhau. Lời gọi các hàm cục bộ thường luôn trả về kết quả sau khi thực
hiện thành công, trong khi lời triệu gọi các phương thức từ xa phải thông qua kết nối
mạng, có thể bị tắc nghẽn, bị ngắt do mạng gặp sự cố, … Đối với lời gọi hàm trên máy
cục bộ, các tham số truyền cho hàm thường đặt vào ngăn xếp, trong khi tham số truyền
cho các phương thức của đối tượng ở xa phải được đóng gói và chuyển qua mạng theo
giao thức chuẩn để đến được đích với phương thức thực sự thông qua các đại diện trung
gian.
4.2. Kiến trúc RMI Java
Mục đích của kiến trúc RMI là tạo ra một mô hình đối tượng phân tán và được tích
hợp với ngôn ngữ lập trình Java. Kiến trúc này đã thành công trong việc tạo ra một hệ
thống an toàn và kế thừa được sức mạnh của Java trong xử lý phân tán và đa luồng.
Về cơ bản, RMI được xây dựng dựa trên kiến trúc ba tầng như hình sau:
Trang 11

:Máy
khách
:Máy chủ
Gửi yêu cầu về dữ liệu
Trả lại thông tin yêu cầu
Sự trao đổi giữa đối tượng khách và phục vụ

(máy chủ)
Tiểu luận lập trình mạng
- Đầu tiên là tầng bao gồm hai lớp trung gian Stub và Skeleton, chúng được
hệ thống tạo ra theo yêu cầu. Các lớp này chặn các lời gọi phương thức của
chương trình khách (Client) tới các biến tham chiếu và gửi tới dịch vụ triệu
gọi từ xa. Lớp Skeleton liên lạc với Stub thông qua liên kết RMI. Nó đọc
các tham số của lời triệu gọi từ xa từ một liên kết nào đó, thực hiện lời gọi tới
đối tượng thực thi dịch vụ từ xa và sau đó gửi các giá trị trả lại cho Stub. Trong
Java 2 SDK, các giao diện mới được xây dựng đã làm cho Skeleton lỗi thời.
RMI sử dụng phép ánh xạ để thực hiện việc kết nối tới các đối tượng dịch vụ từ
xa thay cho Skeleton.
- Tầng tham chiếu từ xa là tầng tiếp theo. Tầng này dịch và quản lý các tham
chiếu tới các đối tượng dịch vụ từ xa. Ở JDK1.1, tầng này thực hiện két nối theo
cơ chế điểm – tới - điểm. Đến Java 2 SDK, tầng này được cải tiến để nâng cao
việc hỗ trợ để kích hoạt các đối tượng dịch vu từ xa đang chờ thực hiện thông
qua ROA, đó là cách kết nối Client/Server.
- Tầng giao vận dựa trên kết nối TCP/IP giữa các máy tính trong mạng. Ngay cả
khi hai chương trình chạy trên hai JVM trong cùng một máy, chúng cũng thực
hiện kết nối thông qua TCP/IP của chính máy đó. Tầng giao vận RMI được thiết
kế để thiết lập một kết nối giữa máy Client với máy Server.
Giả sử, ta có đối tượng C1 được cài đặt chạy trên máy phục vụ C. RMI của Java
giúp ta tạo ra hai lớp trung gian C1_Skel (không cần thiết đối với Java 2 SDK) và
C1_Stub. Lớp C1_Stub sẽ được nạp về máy khách B. Khi đối tượng B1 trên máy B
triệu gọi C1, máy ảo Java sẽ chuyển lời gọi đến lớp C1_Stub. C1_Stub sẽ chịu trách
nhiệm đóng gói các tham số và chuyển chúng qua mạng đến cho máy C. Tại máy C, lớp
C1_Skel (C1_Stub được nạp về và thay thế ở Java 2 SDK) sẽ nhận tham số để chuyển
vào không gian địa chỉ tương thích với đối tượng C1 sau đó gọi phương thức tương ứng
để thực hiện. Kết quả nếu có do phương thức của đối tượng C1 trả về sẽ được lớp
C1_Skel (C1_Stub thay thế ở Java 2 SDK) đóng gói trả ngược cho C1_Stub. C1_Stub
chuyển giao kết quả cuối cùng cho B1. Theo cơ chế này, có thể hình dung như B1 đang

Stub &
Skeleton
Tham chiếu từ
xa
Stub &
Skeleton
Tham chiếu từ
xa
Tầng giao vận
Chương
trình khách
Chương
trình chủ
Hệ
thống
RMI
Kiến trúc ba tầng của RMI
Trang 12
Tiểu luận lập trình mạng
trao đổi trực tiếp với đối tượng C1 ngay trên cùng một máy. Ngoài ra, với sự trợ giúp
của lớp trung gian C1_Stub, khi kết nối mạng gặp sự cố, lớp trung gian Stub sẽ luôn
biết cách thông báo lỗi đến đối tượng B1.
Thực tế có một câu hỏi là: Làm thế nào để B1 tham chiếu được đến C1 khi không có
lớp C1 nào được cài đặt ở máy B? C1_Stub trên máy B chỉ làm lớp trung gian chuyển
đổi tham số và thực hiện các giao thức mạng, nó không phải là hình ảnh của đối tượng
C1. Để làm được điều đó, lớp của đối tượng C1 cần cung cấp một giao diện tương ứng,
được gọi là giao diện từ xa với các phương thức cho phép đối tượng B1 gọi nó trên máy
B.
Stub thường trực trên máy khách, không ở trên máy chủ. Nó có vai trò đóng gói các
thông tin bao gồm:

- Định danh đối tượng từ xa cần sử dụng.
- Mô tả về phương thức cần triệu gọi.
- Mã hoá các tham số và truyền cho Skel.
Stub sẽ chuyển những thông tin trên cho máy chủ. Ở phía máy chủ, đối tượng Skel
nhận thực hiện những công việc sau để gọi phương thức từ xa:
- Giải mã các tham số.
- Xác định đối tượng để thực hiện lời gọi hàm tương ứng.
- Thực hiện lời gọi phương thức theo yêu cầu.
- Tập hợp kết quả để trả lời hoặc thông báo các lỗi ngoại lệ.
- Gửi trả lời gói các dữ liệu kết quả cho Stub ở trên máy khách.
Trang 13

c: Client
Gọi hàm
cục bộ ở
Stub
:Stub
:SKel
s: Server
Trả lại giá
trị hoặc
ngoại lệ
Gọi hàm
cục bộ ở
Server
Chuyển các
gói các tham
số
Gửi trả lại kết
quả hoặc ngoại

lệ
Sự trao đổi giữa đối tượng khách và phục vụ thông qua
đối tượng trung gian
Tiểu luận lập trình mạng
Hình trên mô tả quá trình tổ chức gói các tham số, các dữ liệu trả lời và sự trao đổi
giữa các đối tượng trung gian trong kỹ thuật triệu gọi từ xa.
Trang 14
Tiểu luận lập trình mạng
CHƯƠNG 3
XÂY DỰNG CHƯƠNG TRÌNH TRAO ĐỔI THÔNG ĐIỆP VỀ TRẠNG
THÁI CUNG CẤP TÀI NGUYÊN GIỮA 5 SERVER
1. Hướng giải quyết
Sử dụng thuật toán loại trừ tương hỗ để giải quyết yêu cầu của bài toán. Nguyên lý
của phương pháp này được khái quát như sau:
- Một tiến trình nào đó gửi thông điệp để yêu cầu sử dụng tài nguyên, một tiến
trình sử dụng xong tài nguyên nào đó truyền một thông tin giải phóng khi nó
ngừng chiếm dụng.
- Trong các 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 ở trên các trạm khác, các yêu cầu và khuyến nghị giải phóng
được truyền cho các 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. 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.
- Nếu chỉ có một thông điệp đến chương trình cung cấp thì trật tự đến thể hiện một
trật tự chặt chẽ. Ngược lại nếu có nhiều thông điệp đến cùng một lúc thì việc sắp
xếp chúng phải theo kiểu loại trừ tương hỗ trong hàng đợi cục bộ của trạm có
chứa chương trình cung cấp. Điều đó cũng cho phép ta có được một trật tự chặt
chẽ.
- Trật tự có được tại trạm cung cấp có thể không giống như trật tự phát, nếu thời
gian truyền không được cố định. Trường hợp này khá phổ biến trong mạng máy
tính. Nhưng nếu ta muốn xử lý các thông điệp theo trình tự không tính tới thời

gian truyền, thì cần phải tính đến một trật tự tổng quát của các lần truyền thông
điệp từ các trạm khác nhau.
2. Thuật toán Lamport
Thuật toá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.
2.1. Các giả định
- Chúng ta giả định mô hình mạng kết nối hoàn toà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.
2.2. Các kiểu thông điệp
Trang 15
Tiểu luận lập trình mạng
- (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 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.
- (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.
2.3. 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.
2.4. Thuật toá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.
- 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 yê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 hoà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.
2.4. Nhận xét
- Cách thức 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.
Trang 16
Tiểu luận lập trình mạng
- 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.
3. Kết quả Demo chương trình
- Server 1:
- Server 2:
Trang 17
Tiểu luận lập trình mạng
- Server 3:
- Server 4:
- Server 5:
Trang 18

Tiểu luận lập trình mạng
KẾT LUẬN
1. Đánh giá kết quả đã thực hiện
- Nắm được phần lý thuyết cơ bản về hệ phân tán.
- Hiểu được vấn đề bế tắc trong hệ tin học phân tán và các phương pháp phòng
tránh bế tắc trong hệ phân tán
- Ứng dụng xây dựng chương trình trao đổi thông điệp về trạng thái cung cấp tài
nguyên giữa các server.
- Thực hiện chạy giả lập các server.
2. Hạn chế
- Tuy đã hoàn thành và đáp ứng yêu cầu của đề tài đề ra, song chương trình mới
mô phỏng quá trình trao đổi thông điệp, chưa ứng dụng các thuật toán đồng bộ
tiến trình một cách tối ưu.
3. Hướng phát triển ứng dụng
- Khắc phục hạn chế trên.
- Nghiên cứu thêm các thuật toán tối ưu để đồng bộ hóa các tiến trình.
Trang 19
Tiểu luận lập trình mạng
TÀI LIỆU THAM KHẢO
[1] TS. Lê Văn Sơn - Hệ tin học phân tán - Nhà xuất bản Đại học quốc gia Thành phố
Hồ Chí Minh - 2002.
[2] TS. Lê Văn Sơn – Giáo trình kỹ thuật mạng máy tính – Trường Đại học Bách khoa
– Đại học Đà Nẵng - 1994.
[3] Randy Chow, Theodore Johnson - Distributed Operating Systems and Algorithms -
Addison Wesley – 1997.
[4] Nguyễn Thúc Hải - Mạng máy tính và các hệ thông mở - Nhà xuất bản Giáo dục Hà
Nội - 1997.
Trang 20

×