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

tiểu luận môn lập trình mạng mô phỏng quá trình phát nhận thông điệp trong hệ phân tán

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (686.19 KB, 29 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
ĐẠI HỌC ĐÀ NẴNG

TIỂU LUẬN
LẬP TRÌNH MẠNG
Đề tài: MÔ PHỎNG QUÁ TRÌNH PHÁT NHẬN THÔNG ĐIỆP TRONG
HỆ PHÂN TÁN
Giáo viên hướng dẫn : PGS.TS LÊ VĂN SƠN
Học viên : ĐẶNG NGỌC THẮNG
Chuyên ngành : Khoa Học Máy Tính
Đà Nẵng - Năm 2012
LỜI MỞ ĐẦU
Thế kỷ 21 được đánh giá là thế kỷ của thời đại Công nghệ thông tin. Các thành
tựu của ngành khoa học trí tuệ này đã góp phần quan trọng vào việc thay đổi bộ mặt
thế giới cả về bề mặt lẫn chiều sâu, nó đưa con người trên khắp thề giới tìm được
tiếng nói chung, đó là tiếng nói của Công nghệ thông tin. Và việc ứng dụng các thành
tựu của nền Công nghệ hiện đại này trở thành vấn đề chủ chốt quyết định sự thành bại
của các thành phần tham gia vào lĩnh vực hoạt động trên thế giới từ kinh tế, văn hoá,
chính trị đến quân sự , đó chính là việc các thành phần này sẽ sử dụng nền Công
nghệ này như thế nào và xử lí chúng ra sao.
Ngày nay vấn đề đặt ra cho các nhà tin học là làm sao có thể khai thác một cách
có hiệu quả nguồn thông tin của nhân loại. Mặc khác, các nguồn thông tin lại nằm rải
rác trên các Server ở khắp nơi và việc liên hệ trao đổi thông điệp được giữa các
server đều thông qua đường truyền.
Trong giới hạn của một báo cáo tiểu luận kết thúc môn học, nội dung của bài báo cáo
“Hãy viết chương trình mô phỏng quá trình phát và nhận thông điệp trong hệ phân tán”, tôi
xin trình bày phần nội dung sau:
Phần lí thuyết: nhằm đưa ra cơ lý thuyết cơ bản về hệ phân tán và lập trình phân
tán trên nền ngôn ngữ Java.
Phần bài tập:
- Xây dựng hệ thống 3 server có khả năng phát nhận thông điệp.


- Sắp xếp trật tự các thông điệp đến và xử lý đoạn găng.
- Hiển thị kết quả lên màn hình.
Trong quá trình thực hiện tiểu luận này, bản thân tôi xin chân thành biết ơn sự
giúp đỡ của PGS.TS Lê Văn Sơn và các anh chị em đồng nghiệp.
Học viên thực hiện
Đặng Ngọc Thắng
MỤC LỤC
LỜI MỞ ĐẦU 2
MỤC LỤC 3
CHƯƠNG I 5
CƠ SỞ LÝ THUYẾT 5
I.Các khái niệm cơ bản 5
.I.1.Hệ thống tin học 5
.I.2.Hệ tin học phân tán 5
.I.3.Tiến trình 5
II.Đồng bộ hóa các tiến trình 6
.II.1.Vấn đề tương tranh và hợp lực 6
.II.2.Vấn đề gắn bó dữ liệu 7
.II.3.Trật tự từng phần 8
.II.4.Giả định các điều kiện chung 10
.II.5.Trật tự tổng quát chặt chẽ 10
II.5.1.Cung cấp tập trung 10
II.5.2.Cung cấp phân tán 11
III.Sắp xếp kiểu đóng dấu 11
.III.1.Đồng hồ logic 11
.III.2.Minh họa trật tự từng phần 11
.III.3.Gắn thời gian lôgic với các sự kiện 12
IV.Đồng bộ hóa theo một trật tự tổng quát chặt chẽ 13
.IV.1.Cấu trúc trật tự tổng quát chặt chẽ 13
.IV.2.Giải thuật đóng dấu thời gian của Lamport 14

V.Giải thuật loại trừ tương hỗ 15
.V.1.Giới thiệu giải thuật 15
.V.2.Kiểm nghiệm giải thuật 16
CHƯƠNG II 17
LẬP TRÌNH PHÂN TÁN 17
I.Mô hình Client-Server 17
.I.1.Giới thiệu 17
.I.2. Client 18
.I.3.Server 18
II.Mạng máy tính phân tán 19
III.Các điểm mạnh trong hệ phân tán 19
IV.Giới thiệu phương thức triệu gọi đối tượng từ xa RMI (Remote Method
Invocation) 20
.IV.1.Triệu gọi phương thức từ xa 20
.IV.2.Kiến trúc RMI Java 21
CHƯƠNG 3 24
TRIỂN KHAI CHƯƠNG TRÌNH 24
I.Bài toán đặt ra 24
II.Hướng giải quyết 24
III.Thuật toán Lamport 24
.III.1.Các giả định 24
.III.2.Các kiểu thông điệp 24
.III.3.Các biến tiến trình 25
.III.4.Thuật toán 25
.III.5.Nhận xét 25
IV.Kết quả Demo chương trình 26
27
CHƯƠNG IV 28
KẾT LUẬN 28
I.Đánh giá kết quả đã thực hiện 28

II.Hạn chế 28
III.Hướng phát triển ứng dụng 28
TÀI LIỆU THAM KHẢO 29
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
CHƯƠNG I
CƠ SỞ LÝ THUYẾT
I. Các khái niệm cơ bản
.I.1. Hệ thống tin học
Hệ thống tin học (Informatics System) là hệ thống bao gồm hai phần cơ bản là
phần cứng (hardware) hay là phần vật lý và phần mềm (software) là phần logic hay là
chương trình gắn bó hữu cơ với nhau và có khả năng xử lý thông tin. Hệ thống tin học
gồm ba thực thể: phần cứng, phần mềm, dữ liệu.
.I.2. Hệ tin học phân tán
Hệ tin học phân tán là hệ thống không chia sẻ bộ nhớ và đồng hồ. Điều đó cho
phép phân biệt với một xu hướng tin học khác về phân tán các tính toán trên nhiều bộ
xử lý hay vi xử lý của hệ thống đa bộ xử lý.
Hệ tin học phân tán đòi hỏi hệ thống phần cứng của mình phải trang bị bộ nhớ
cục bộ. Các bộ xử lý trao đổi với nhau thông qua các hệ thống đường truyền khác nhau
như là cáp quang, điện thoại, cáp chuyên dụng, bus trao đổi,
.I.3. Tiến trình
Tiến trình (Process) là khái niệm khá quen thuộc và là đối tượng nghiên cứu của
hệ điều hành. Trong hệ phân tán ta chỉ xem xét và bổ sung đặc điểm hoạt động và truy
cập của các tiến trình có nhu cầu cung cấp tài nguyên dùng chung.
Các đặc điểm đó là :
o Các tiến trình được hình thành và điều khiển bởi hệ điều khiển duy nhất có
nghĩa là nếu trong các thành phần tham gia hệ phân tán như mạng máy tính, các
hệ tập trung, có thể có các hệ điều hành riêng với các tiến trình riêng của
mình, thì chúng cũng bị phái sinh lại trong nội dung của tiến trình mới, phân
tán.
o Tiến trình là chương trình hay đoạn chương trình đang hoạt động trong hệ phân

tán là đối tượng chủ yếu có nhu cầu tài nguyên phần cứng hay phần mềm để
thực hiện các lệnh của mình. Tiến trình cần tài nguyên để phát triển. Về nguyên
tắc, tất cả các tiến trình và tài nguyên được cung cấp là các đối tượng ở xa.
o Các nguyên lý của hệ tập trung có thể nghiên cứu và áp dụng cho các tiến trình
phân tán như dự phòng và chống bế tắc, chống xung đột,
o Khi tiến trình được cung cấp tài nguyên có thể nó thực hiện ngay, nếu nó là đối
tượng được gửi đến từ trước trên bộ xử lý (máy) cục bộ hoặc phải gửi đối tượng
là tiến trình qua hệ thống đường truyền.
o Việc cung cấp tài nguyên cho các tiến trình có thể thực hiện theo 2 cách trong
hệ phân tán :
 Thông qua hệ thống cung cấp chung cho toàn hệ như
Controllor/Allocator.
 Thông qua Allocator cục bộ trên Server/Workstation bằng cách tham
chiếu vào bảng trạng thái, ảnh của thông tin toàn cục.
HVTH: Đặng Ngọc Thắng Trang 5
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
II. Đồng bộ hóa các tiến trình
Đồng bộ hoá tiến trình được hiểu như là quá trình điều khiển tạo nên sự ăn khớp
với nhau giữa tất cả các tiến trình khác nhau giúp cho hệ phân tán hoạt động nhịp
nhàng, tin cậy và phòng tránh các sự cố kỹ thuật.
.II.1. Vấn đề tương tranh và hợp lực
Trong tất cả các hệ thống tin học, ta cần phải nghiên cứu các công cụ đủ mạnh và
hiệu quả để có thể đồng bộ hóa các tiến trình. Tính cấp thiết về mặt nguyên lý và kỹ
thuật của vấn đề này thể hiện ở hai nguyên do cơ bản sau đây:
1. 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 rất hạn chế hay truy cập vào thông
tin dùng chung cùng một lúc gây nên hiện tượng truy cập tương tranh.
Tương tranh là nguyên nhân chính của các xung đột giữa các tiến trình
muốn truy cập vào các 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 tóan đặ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 tin
qua lại với nhau. Trong các hệ thống tập trung, điều đó được thực hiện nhờ thuật toán
loại trừ tương hỗ thông qua các biến cùng tác động trong một vùng nhớ chung. Trong
hệ tin học phân tán, các thông tin cần trao đổi thông qua các thông điệp bằng các kênh
viễn thông.
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 Qui tắc
1 Các bộ cung cấp bắt buộc phải thực hiện cùng một giải thuật
2 Các bộ cung cấp đều nhận tất cả các thông điệp phát đi từ các tiến trình
3
Các thông điệp phải được xử lý cùng một trật tự như nhau trong các
chương trình cung cấp.
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.
HVTH: Đặng Ngọc Thắng Trang 6
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
.II.2. Vấn đề gắn bó dữ liệu
Gắn bó dữ liệu là quá trình khi thực hiện trao đổi thông tin qua lại với nhau vào
tại một thời điểm t nào đó thì giá trị các tiến trình phải giống nhau. Để hiểu rõ hơn về
gắn bó dữ liệu ta xét bài toán bãi đỗ xe như sau :
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 ra vào.
Trong bài toán này chúng ta nhận thấy :
- Bãi đậu xe chính là tài nguyên
- Xe chính là các tiến trình
- Nếu một cửa là tập trung còn nhiều của sẽ diến ra tranh chấp
 Tình huống thứ 1 :
Ta giả sử rằng 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ệ (NBV) duy nhất. NBV chỉ biết được một phần của trạng thái 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 được cho các xe khác tiếp tục đượ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, NBV không nắm được trạng thái hiện hành của bãi.
 Tình huống thứ 2 :
Nếu ta có bãi để xe có nhiều cổng vào và tại mỗi cổng có một người bảo vệ thì
mỗi người bảo vệ chỉ có thể biết được trạng thái với độ trễ nhất định và điều đó đãn
đến tình huống thứ 2. Đó là tình huống có nhiều trung tâm ra quyết định như trong
hình vẽ 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
người bảo vệ giải quyết các xe vào cùng một vị trí trong bãi do vì họ thiếu thông tin.
HVTH: Đặng Ngọc Thắng Trang 7
VT
VT
VT
VT
VT
VT
VT
VT

VT
VT
VT
VT
VT
VT
VT
VT
VT
VTVT
VT
VT
BV
BV
BV
BV
BV
BV
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
Như vậy các người bảo vệ phải hợp lực với nhau để phân phối chính xác các chổ
trong bãi, đặc biệt là số lượng chổ còn trống càng ít thì vai trò của hợp lực còn quan
trọng. Đây chính là sự không gắn bó dữ liệu ở bãi đậu xe ô tô.
Để hiểu rõ hơn vấn đề đồng bộ hoá ta xét ví dụ cụ thể như sau : 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 người
bảo vệ đều có thông tin đó. Trạng thái lúc này của hệ là gắn bó. Ba trong số họ phát đi
các thông tin sau :
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 NBV 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.

Trật tự
xử lý
Bảo vệ 1 Bảo vệ 2 Bảo vệ 3 Bảo vệ 4
Thông
điệp
Giá
Trị
Thông
điệp
Giá
Trị
Thông
điệp
Giá
Trị
Thông
điệp
Giá
Trị
100 100 100 100
1 M1 120 M2 90 M3 90 M1 120
2 M3 108 M3 81 M1 110 M2 110
3 M2 118 M1 101 M2 100 M3 99
Trong bài toán quản lý bãi đỗ xe việc không gắn bó dữ liệu luôn luôn xảy ra ở
các trạm nếu không có một cơ chế để thực hiện đồng bộ hoá các tiến trình (cho phép
các ô tô vào bãi đậu theo một trình tự). Khi thực hiện phân tán chức năng cung cấp
trên nhiều trạm khác nhau (các bảo vệ) 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 hoàn toàn chính xác.
Trên cơ sở phân tích bài toán ở trên chúng ta nhận thấy vấn đề không gắn bó dữ liệu
trên các hệ phân tán cần phải có cách giải quyết thích hợp.

.II.3. Trật tự từng phần
Cần chú ý rằng, trong các hệ thống tin học tập trung, vấn đề đồng bộ hoá được
giải quyết thông qua cơ chế loại trừ tương hỗ. Cơ chế này cho phép sắp đặt (xác lập
trật tự) hoàn toàn các sự kiện. Trong thực tiễn, nói một cách chính xác, có một hệ
HVTH: Đặng Ngọc Thắng Trang 8
STT Ký hiệu Thông tin phát đi
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 sân bãi
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
thống vấn đề về đồng bộ hoá chỉ đòi hỏi trật tự từng phần. Chính vì vậy trật tự hoá
từng phần giữa các sự kiện mà các tiến trình của nó cần phải đồng bộ là vấn đề cần
phải quan tâm giải quyết.
Trong các hệ thống phân tán, việc đồng bộ hoá chỉ đặt ra duy nhất vấn đề thiết
lập một trật tự giữa các sự kiện. Giữa các trạm khác nhau, trật tự đó chỉ có thể hiện
được thông qua việc trao đổi các thông điệp với nhau.
Giả sử rằng ta có thể xác định một trật tự giữa các sự kiện của hệ phân tán nhờ
vào quan hệ được ký hiệu là → và gọi là “có trước” hay “ở ngay trước”.
Quan hệ này tối thiếu phải thoã mãn được ràng buộc thể hiện trong bảng sau
đây :
Hình vẽ sau đây cho ta một ví dụ về trật tự hoá từng phần của các sự kiện trong
hệ thống.
Theo hình vẽ trên, ta có thể biểu diễn trật tự như sau :
 Trật tự từng phần của các sự kiện
A
1
→ A
2
→ A
3

→ A
4
→ A
5
B
1
→ B
2
→ B
3
→ B
4
 Trao đổi thông tin
A
1
→ B
2
và B
3
→ A
4
 Chuyển qua
A
1
→ A
2
→ B
2
→ B
3

→ B
4
HVTH: Đặng Ngọc Thắng Trang 9
C
1
: Nếu A và B là hai sự kiện của cùng một trạm và nếu A được thực hiện
trước B thì theo trật tự cục bộ của trạm ta có A → B.
C
2
: Nếu A là phát thông điệp bởi một trạm nào đó và nếu B là thu của thông
điệp này thì ta có A → B.
A1
A2
A3
A4
A5
B1
B2
B3
B4
B5
t
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
B
1
→ B
2
→ B
3
→ A

4
→ A
5
A
1
→ A
2
→ B
2
→ B
3
→ A
4
→ A
5
Ví dụ về các sự kiện không so sánh
B
1
và A
1
, A
2
, A
3
A
3
và B
2
, B
3

, B
4
Ràng buộc C1 thể hiện rằng trật tự có thể được bởi quan hệ có trước là tương
thích với các trật tự cục bộ được định nghĩa trong từng trạm.
Ràng buộc C2 nói lên nguyên tắt nhân quả.
Quan hệ có trước xác định một trật tự từng phần trên tập hợp các sự kiện của hệ
và trật tự này có thể hiện trong hình vẽ trên.
.II.4. Giả định các điều kiện chung
Các hệ phân tán được xây dựng trên cơ sở các trạm làm việc được mắc nối với
nhau (nối mạng). Mỗi một trạm có bộ nhớ riêng của mình và tuyệt đối không có bộ
nhớ chung.
Ta áp dụng các ký hiệu trong bảng sau:
STT Ký hiệu Thuyết minh
1 H
1
Một trạm trong các trạm đều có thể liên lạc với các trạm còn lại
trong hệ
2 H
2
Không có lỗi truyền thông tin và không mất thông điệp
3 H
3
Trật tự nhận trên trạm j của dãy các thông điệp cũng giống như
chính tại trạm I là giống với trật tự của nơi phát
4 H
4
Sự cố hay gián đoạn vật lý tại một trạm nào đó được phát hiện sẽ
lập tức thông báo đến tất cả các trạm có ý định liên lạc với nó.
Trước hết, trong đề tài này nghiên cứu sự hoạt động của hệ không có sự cố, rồi
sau đó sẽ chỉ ra hiệu ứng của sự cố hay việc phục hồi lại một trạm. Đó là trường hợp

đã nêu lên trong H4 ở trên. Ngoài ra còn giả sử rằng hiện tượng gây sự cố trên một
trạm chỉ làm cho trạm đó không liên lạc được với mạng mà hoàn toàn không ảnh
hưởng đến sự hoạt động của các trạm còn lại hoặc ít nhất là một nhóm các trạm khác.
.II.5. Trật tự tổng quát chặt chẽ
Trong một số trường hợp cần phải sắp xếp toàn bộ theo kiểu chặt chẽ các sự kiện
của hệ liên quan trực tiếp đến việc cung cấp các tài nguyên. Nguyên lý của vấn đề
đượ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ử dung 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.
II.5.1. Cung cấp tập trung
Hiện tại, 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, goi là bộ cung cấp tài nguyên.
Chương trình này tiếp tục nhận tất cả các yêu cầu, khuyến nghị giải phóng và sắp xếp
HVTH: Đặng Ngọc Thắng Trang 10
3
.
a
P
(a

c) - bắc cầu -

b
Q

c
2
.
.
a

P
(a

b) - nhân quả -

b
Q

c
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
chúng trong một hàng đợi xử lý theo kiểu loại trừ tương hỗ và xử lý chúng theo một
trật tự nhất định của hàng đợi này.
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 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 đượ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ó 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. Đây là trường hợp 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.
II.5.2. Cung cấp phân tán
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.

III. Sắp xếp kiểu đóng dấu
.III.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.
.III.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:
HVTH: Đặng Ngọc Thắng Trang 11
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
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”:
- 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.
.III.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ồ :
HVTH: Đặng Ngọc Thắng Trang 12
∀ sự kiện a,b : nếu a → b thì C(a) < C(b)
p2
p1
p3
p4
q1
q2
q3
q4
q5
q6
r1
r2
r3
r4
P RQ

GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
Để 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.
IV. Đồng bộ hóa theo một trật tự tổng quát chặt chẽ
Trong các hệ thống tập trung, mỗi loại tài nguyên đượ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ừ tương hỗ.
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ị từ 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. 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 được đặt ra.
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.
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, việc sắp xếp chúng phải theo kiểu loại trừ tương hỗ cho
hàng đợi cục bộ của trạm có chứa chương trình cung cấp. Điều đó cũng chi phép có
được một trật tự chắt chẽ.
.IV.1. Cấu trúc trật tự tổng quát chặt chẽ
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”.
o Trật tự nhất quán của các sự kiện phát
o Định dạng thông điệp từ Pi: (m, Tm, i)
o 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 T
m

< T
n
, hoặc Nếu T
m
= T
n
và j < k
Hình sau minh họa cho dạng thông điệp với trật tự chặt chẽ ⇒
HVTH: Đặng Ngọc Thắng Trang 13
P1 P2 P3 P4
0 0 0 0
(a,1,1)
(b,1,4)
3
2
2
3
2
2
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
.IV.2. 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ị nguyên
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
o Khi phát thông điệp thì gán giá trị của đồng hồ logic vào. Trạm e
phát thông điệp m , ghi dấu thời gian cho các thông điệp m gửi đi, Tm = Ce
(a)

o Khi nhận được thông điệp m, trạm nhận r cập nhật đồng hồ Cr
riêng theo (bằng cách lấy giá trị của thông điệp vừa nhận cộng thêm 1) :
Cr = Tm + 1 (điều này đảm bảo tính nhân-quả theo trật tự từng phần)
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 quan hệ sau:
HVTH: Đặng Ngọc Thắng Trang 14

a
C
i
C
i
+1

a
C
i
C
i
+1
(T
m
= C
e
(a) )

P
j
C
r

C
r
= T
m
+ 1
(m, T
m
,s)
a

b nếu
C
i
(a) < C
j
(b)
hoặc
C
i
(a) = C
j
(b) và i < j
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
V. Giải thuật loại trừ tương hỗ
.V.1.Giới thiệu giải thuật
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.
Thuật toán loại trừ tương hỗ được mô tả theo các bước sau:
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.
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 j đã nhận
được 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ỉ 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, H
init
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 đ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.
HVTH: Đặng Ngọc Thắng Trang 15
M
i
= (REL, H
init
, i)
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
4. Trạm i được quyền vào đoạn găng khi thông điệp REQ của nó đến trước theo nghĩa
của quan hệ => tất cả các thông điệp khác trong hàng đợi của nó. 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.
.V.2.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 REQ 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.
HVTH: Đặng Ngọc Thắng Trang 16
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
CHƯƠNG II
LẬP TRÌNH PHÂN TÁN
I. Mô hình Client-Server

.I.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 5. 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ư
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.
HVTH: Đặng Ngọc Thắng Trang 17
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng

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.
.I.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) 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.
.I.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
HVTH: Đặng Ngọc Thắng Trang 18
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
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.
II. 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ặt 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.
III. 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.
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).
HVTH: Đặng Ngọc Thắng Trang 19
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
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.
IV. 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.
.IV.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.
HVTH: Đặng Ngọc Thắng Trang 20

: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ủ)
GVHD: PGS.TS Lê Văn sơn 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.
.IV.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:
 Đầ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.
HVTH: Đặng Ngọc Thắng Trang 21
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
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
 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 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.
HVTH: Đặng Ngọc Thắng Trang 22
GVHD: PGS.TS Lê Văn sơn 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.
HVTH: Đặng Ngọc Thắng Trang 23
Computer A

A1
A2
B1_stub
C1_
stub
Computer B
B1_skel
B1
Computer C
C1
C1_
skel
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
CHƯƠNG 3
TRIỂN KHAI CHƯƠNG TRÌNH
I. Bài toán đặt ra
Xây dựng chương trình sắp xếp các thông điệp đến và xử lý đoạn găng với đa
Server có khả năng phát và nhận thông điệp.
II. 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:

o 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.
o 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.
o 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ừ trươ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ẽ.
o 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.
III. 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.
.III.1. Các giả định
o 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.
o Các giả định được thực thi một cách dễ dàng ở tầng giao vận.
.III.2. Các kiểu thông điệp
o (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.

HVTH: Đặng Ngọc Thắng Trang 24
GVHD: PGS.TS Lê Văn sơn Tiểu luận Lập trình mạng
o (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.
o (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.
.III.3. Các biến tiến trình
o Ci : Đồng hồ cục bộ của Pi, khởi tạo từ 0.
o qi : Hàng đợi [0 … n-1] chứa các thông điệp.
.III.4. Thuật toán
o 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.
o 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.
o 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.
o Ý 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.
o 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ó.
o 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.

.III.5. Nhận xét
o 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.
o Độ 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.
o 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.
HVTH: Đặng Ngọc Thắng Trang 25

×