ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
TIỂU LUẬN MÔN HỌC
LẬP TRÌNH MẠNG
Đề tài:
LẬP TRÌNH BẰNG CÁC PHƯƠNG PHÁP PHÂN
TÁN ĐỂ ĐIỀU KHIỂN BÃI ĐỖ XE
Giáo viên hướng dẫn: PGS.TS Lê Văn Sơn
Hc viên thc hin:
+ Võ Văn Luận
+ Lê Văn Đông
Lớp: Khoa h5c máy tính - K11
Niên khoá: 2009- 2011
Đà Nng, 3 – 2010
MỤC LỤC
MỤC LỤC i
LỜI NÓI ĐẦU 1
CHƯƠNG 1: KHÁI QUÁT VỀ HỆ TIN HỌC PHÂN TÁN 2
1.1 Định nghĩa 2
1.2 Các thực thể trong hệ phân tán 2
1.3 Đặc điểm của hệ phận tán 2
1.4 Các ưu điểm của tài nguyên dùng chung trong hệ phân tán: 3
1.5 Các thao tác chuẩn của hệ phân tán 3
CHƯƠNG 2: BÀI TOÁN BÃI ĐỖ XE Ô TÔ 4
2.1 Phát biểu bài toán 4
2.1.1 Tình huống thứ 1 4
2.1.2 Tình huống thứ 2 5
2.2 Hướng giải quyết bài toán 5
2.3 Vấn đề cần giải quyết cho bài toán bãi đỗ xe 6
2.3.1 Giải quyết vấn đề 7
Ngày nay, công nghệ mạng máy tính và Internet đã phát triển mạnh, cho
phép chúng ta khai thác các nguồn tài nguyên là những kho tư liệu vô cùng rộng
lớn về các lĩnh vực, và được bố trí ở những nơi rất xa nhau.
Đối với các hệ thông tin lớn, dữ liệu không chỉ được lưu trữ và quản lý bởi
các Server độc lập mà thường được phân tán trên nhiều Server và phân bổ ở các
vị trí địa lý khác nhau. Hệ thống cho phép xử lý đa truy cập đồng thời cho phép
đăng ký từ xa. Một trong những lợi ích của việc phân tán dữ liệu như vậy là
nhằm chia yêu cầu xử lý dữ liệu cho nhiều máy nhằm tăng năng lực xử lý thông
tin của hệ thống.
Môn học Lập Trình Mạng dưới sự giảng dạy của PGS.TS Lê Văn Sơn,
nhóm chúng em đã hiểu thêm được tầm quan trọng, những kiến thức mới của
môn học. Vì vậy nhóm em đã chọn tiểu luận “Lập trình bằng các phương pháp
phân tán để điều khiển bãi đỗ xe” với các nội dung:
• Phân tích bài toán bãi đỗ xe ở mức có thể lập trình được;
• Liên hệ với các đặc điểm của hệ phân tán;
• Hiện lên màn hình dòng xe vào – ra tại mỗi trạm của người bảo vệ;
• Cho phép sử dụng phương án lý tưởng.
Mặc dù nhóm chúng em đã cố gắng tìm hiểu, nghiên cứu nhưng do thời
gian có hạn, khả năng cũng còn hạn chế nên nhóm không tránh khỏi những thiếu
sót. Kính mong thầy xem xét, góp ý để nhóm chúng em hoàn thiện, hiểu rõ hơn
nữa về công nghệ lập trình mới và tiên tiến này.
Xin chân thành cảm ơn !
Võ Văn Luận – Lê Văn Đông 1
Báo cáo môn hc Lâp trình mạng Khoa hc máy tính – Khoá 11
CHƯƠNG 1: KHÁI QUÁT VỀ HỆ TIN HỌC PHÂN
TÁN
1.1 Định nghĩa
Hệ tin học phân tán hay nói ngắn gọn là hệ phân tán (Distributed System)
là hệ thống xử lý thông tin bao gồm nhiều bộ xử lý hoặc bộ vi xử lý nằm tại các
vị trí khác nhau được liên kết với nhau thông qua phương tiện viễn thông dưới
truyền
thông
Hệ
thống
truyền
thông
Hệ
thống
dữ liệu
Hệ
thống
dữ liệu
Báo cáo môn hc Lâp trình mạng Khoa hc máy tính – Khoá 11
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 yê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 yêu cầu thông tin từ xa với lưu lượng thông tin lớn.
1.4 Các ưu điểm của tài nguyên dùng chung trong hệ phân tán:
Việc định nghĩa tài nguyên dùng chung mang đến cho hệ phân tán những
hiệu năng tốt trong khai thác ứng dụng như:
• Tăng tốc độ bình quân trong tính toán xử lý.
• Cải thiện tình trạng luôn sẵn sàng của các loại tài nguyên.
• Tăng độ an toàn cho dữ liệu.
• Đa dạng hóa các loại hình dịch vụ tin học.
• Bảo đảm tính toà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
Nếu ta có bãi để xe với nhiều cổng vào và tại mỗi cổng vào 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 đó dẫn đến tình huống thứ 2. Đó là tình huống có nhiều trung tâm ra
quyết định.
Trên thực tế một người bảo vệ tin rằng không còn chỗ trống nữa, trong khi
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ệ giải quyết các xe vào cùng một vị trí trong bãi do vì nhiều
thiếu thông tin.
Như vậy, các 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 số lượng chỗ còn trống càng ít thì vai trò của hợp lực càng
quan trọng.
2.2 Hướng giải quyết bài toán
Ở đây 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.
Võ Văn Luận – Lê Văn Đông 5
Báo cáo môn hc Lâp trình mạng Khoa hc máy tính – Khoá 11
• 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ẽ.
là: vào bãi (vào), đỗ (do), Ra (ra).
Việc quản lý truy cập bao gồm ghi lại số lượng xe vào E, số lượng xe ra S
và kiểm tra X mỗi khi muốn cho xe vào bãi theo công thức:
X = N – E + S > 0
Trong hệ thống này, người ta sử dụng bộ điều khiển C
i
để có được số lượng
vào chính xác là E
i
, số lượng ra là S
i
. Cho biết M là số lượng bộ điều khiển có
trong hệ. Người ta muốn trang bị cho mỗi C
i
một biến X
i
- số lượng chỗ còn
trống trong bãi nhằm mục đích có thể sử dụng điều kiện cục bộ:
X
i
> 0
Để giải quyết bài toán trên, một người bảo vệ có vai trò như là chương
trình cung cấp chỗ của bãi để xe ô tô. Chỗ để xe được xem như là tài nguyên của
hệ. 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ả đều 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 như sau :
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
Từ kết quả trên, ta thấy rằng nếu trật tự các thông điệp đến với các người
bảo vệ không giống nhau thì số lượng chỗ trống của bãi đỗ xe ở mỗi nguời bảo
vệ ở một thời điểm là không giống nhau. Vì ta xem một người bảo vệ như là một
chương trình cung cấp chỗ để xe của bãi, các chương trình này nằm trên các
trạm khác nhau cách nhau về mặt địa lý. Do đó trật tự các thông điệp đến các
trạm là khác nhau và vì vậy kết quả thể hiện trên các chương trình là không
giống nhau. Điều này thể hiện sự không gắn bó giữa các chương trình. Để cho
các kết quả trên các trạm là giống nhau thì các thông điệp đến các trạm theo một
trật tự giống nhau.
Điều này xảy ra trên các hệ tập trung. Đối với hệ phân tán chúng ta phải
xây dựng thuật toán cung cấp cho hệ tin học 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 quy tắc sau,
ở đây các thông điệp được hiểu là các yêu cầu hay khuyến nghị giải phóng tài
nguyên.
STT
Quy tắc
1
Các bộ cung cấp 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
Võ Văn Luận – Lê Văn Đông 8
Báo cáo môn hc Lâp trình mạng Khoa hc máy tính – Khoá 11
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.
Bảng 2-3: Các quy tắc
Quy tắc sau cùng 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
i
, 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ác biến tiến trình
• C
i
: Đồng hồ cục bộ của Pi, khởi tạo từ 0.
• q
i
: Hàng đợi [0 … n-1] chứa các thông điệp.
d) Thuật toán
Khi một tiến trình tại trạm S
i
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 S
i
.
Mỗi trạm, S
i
, 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ó.
tính cách mạng và khả thi nhất trong việc tạo ra các ứng dụng có khả năng chạy
thống nhất trên nhiều nền tảng mà chỉ cần biên dịch một lần.
Lần đầu tiên xuất hiện vào năm 1992 như là một ngôn ngữ dùng trong nội
bộ tập đoàn Sun Microsystems để xây dựng ứng dụng điều khiển các bộ xử lý
bên trong máy điện thoại cầm tay, lò vi sóng, các thiết bị điện tử dân dụng khác.
Không chỉ là một ngôn ngữ, Java còn là một nền tảng phát triển và triển khai
ứng dụng trong đó máy ảo Java, bộ thông dịch có vai trò trung tâm.
Sun, công ty đã phát minh ra ngôn ngữ Java, chính thức ban hành bản
Java Development Kit 1.0 vào năm 1996 hoàn toàn miễn phí để các nhà phát
triển có thể tải về, học Java, xây dựng các ứng dụng Java và triển khai chúng
trên các hệ điều hành có hỗ trợ Java. Hiện nay, công nghệ Java được chia làm ba
bộ phận:
J2SE Gồm các đặc tả, công cụ, API của nhân Java giúp phát triển các ứng
dụng trên Desktop và định nghĩa các phần thuộc nhân của Java.
J2EE Gồm các đặc tả, công cụ, API mở rộng J2SE để phát triển các ứng
dụng qui mô xí nghiệp, chủ yếu để chạy trên máy chủ (server). Bộ phận hay
Võ Văn Luận – Lê Văn Đông 12
Báo cáo môn hc Lâp trình mạng Khoa hc máy tính – Khoá 11
được nhắc đến nhất của công nghệ này là công nghệ Servlet/JSP: sử dụng Java
để làm các ứng dụng web.
J2ME Gồm các đặc tả, công cụ, API mở rộng để phát triển các ứng dụng
Java chạy trên điện thoại di động, thẻ thông minh, thiết bị điện tử cầm tay, robo
và những ứng dụng điện tử khác
Java đã trải qua 3 bước phát triển quan trọng: Java 1.0 gắn liền với bản
JDK đầu tiên, Java 2 gắn với JDK 1.2 và Java 5 gắn với J2SDK 1.5
Ngày nay, khi nhắc đến Java người ta không còn chỉ nhắc đến Java như là
một ngôn ngữ mà nhắc đến Java như là một công nghệ hay một nền tảng phát
triển. Nó bao gồm các bộ phận:
• Máy ảo Java: JVM
• Bộ công cụ phát triển: J2SDK
stub (lớp móc) - máy khách; skeletion (lớp nối) - máy khách. Ví dụ như A1 gọi
C1 (Trình biên dịch Java sẽ giúp bạn tạo 2 lớp trung gian C1_Skel và C1_Stub,
kết quả trả về sẽ được C1_Skel đóng gói trả ngược lại cho C1_stub. C1_Stub sẽ
chuyển giao kết quả trả về cho A1), tương tự A2 gọi B1.
Võ Văn Luận – Lê Văn Đông 14
Computer A
Computer B
A2
A1
C1_stub
B1_stub
B1_skel
B
1
C1_skel
C
1
Báo cáo môn hc Lâp trình mạng Khoa hc máy tính – Khoá 11
Hình 3-1: Gọi phương thức thông qua lớp trung gian
3.2 Nghiên cứu RMI trong Java
Tiến trình thực hiện các ứng dụng phân tán sử dụng kỹ thuật này nói chung
gồm các bước sau:
3.2.1 Bộ đăng ký (REGISTRY)
Một Client muốn sử dụng các phương thức và gọi được đối tượng từ xa thì
Client đó phải liên lạc với rmiregistry để lấy về tham chiếu đối tượng. Dịch vụ
đăng ký và truy tìm đối tượng được Java quản lý bằng các hàm giao tiếp JNDI
(Java Naming Directory Interface). Các hàm JNDI ở máy khách
(Naming.lookup()) sẽ liên lạc với rmiregistry để nhận về tham chiếu đối tượng.
Trong khi các hàm JNDI ở máy chủ (Naming.bind() hoặc Naming.rebind()) có
nhiệm vụ đăng ký tên đối tượng với rmiregistry.
khả năng tham chiếu đến các đối tượng từ xa. Trước Server gọi ra trình đăng ký
registry để liên kết tên của các đối tượng từ xa. Sau đó
Client tìm kiếm đối tượng từ xa bằng tên của nó đã đăng ký trên Server và
gọi ra các phương thức trên đối tượng đó. Sự minh họa này cũng chỉ ra rằng hệ
thống RMI sử dụng một Web Server đang hoạt động để nạp các lớp mã
bytecode từ Server đến phục vụ cho những yêu cầu của Client và ngược lại cho
các đối tượng khi cần.
Tất cả các hoạt động nói trên có thể được mô tả như hình sau.
Võ Văn Luận – Lê Văn Đông 16
Client
Client
Server
Server
Registr
y
Web
Server
Web
server
RMI
RMI
URL protocol
URL protocol
URL protocol
RMI
Báo cáo môn hc Lâp trình mạng Khoa hc máy tính – Khoá 11
Hình 3-2: Mô hình tổng quan của ứng dụng RMI
3.3 Tiến trình xây dựng chương trình
Trong bước này ta làm các việc sau: Liên kết các tệp *.class với các giao
diện từ xa, các lớp Stub và các lớp khác cần được tải xuống cho các công việc ở
chương trình Client. Tất cả đều được truy cập thông qua một Web Server.
d) Khởi động ứng dụng
Khởi động ứng dụng bao gồm việc chạy chương trình đăng ký đối tượng
RMI từ xa, chương trình Server và Client.
3.3.1 III.3.1. Xây dựng chương trình Server
Chương trình Server RMI chấp nhận các thông tin từ các Client, xử lý
thông tin và trả lại các kết quả cho các Client. Chương trình Server nói chung
bao gồm ít nhất một Interface và một Class. Giao diện (Interface) cung cấp các
định nghĩa cho các phương thức mà từ đó có thể được gọi từ các Client. Về bản
chất thì các giao diện này định nghĩa cách nhìn các đối tượng từ xa của các
chương trình Client. Lớp (Class) cung cấp các thành phần công cụ bổ sung.
Việc thiết kế Server RMI gồm các bước sau :
+ Thiết kế một giao diện từ xa: Phần này sẽ mô tả giao diện chính, nó cung
cấp sự kết nối giữa Client và Server. Mục đích là để thiết đặt một môi trường
trao đổi thông tin giữa Client và Server.
Phần quan trọng nhất của Server RMI là tạo một giao thức để nó cho phép
các Client được đệ trình công việc đến Server RMI, sau đó thực hiện mọi thông
tin nhận được và trả kết quả về cho Client. Giao thức này được biểu diễn trong
các Interface và được cung cấp bởi Server RMI, các đối tượng được phép đệ
trình đến Server RMI có thể được trình bày như mô hình sau:
Võ Văn Luận – Lê Văn Đông 18
Báo cáo môn hc Lâp trình mạng Khoa hc máy tính – Khoá 11
Hình 3-3: Mô hình các đối tượng đệ trình đến Server
Mỗi giao diện chứa một phương thức đơn. Cụ thể giao diện ParkingServer
cho phép các công việc được đệ trình đến Server, định nghĩa làm thế nào Server
RMI thực hiện công việc thu nhận các đệ trình từ chương trình
ParkingClientImpl.
Ngoài ra giao diện của Server RMI còn định nghĩa các thành phần có thể
sau :
• Khai báo các giao diện từ xa thành phần.
• Định nghĩa constructor cho đối tượng từ xa.
• Cung cấp phần bổ sung cho mỗi phương thức trong các giao diện từ xa.
Server cần tạo và cài đặt các đối tượng từ xa. Các thủ tục cài đặt có thể
đóng gói trong một phương thức main trong lớp bổ sung đối tượng từ xa, hoặc
nó có thể kèm theo trong một lớp trọn vẹn khác. Thủ tục cài đặt cần :
• Tạo ra và cài đặt một trình quản lý bảo mật.
• Tạo một hoặc hơn các đối số của đối tượng từ xa
Đăng ký ít nhất một đối tượng từ xa với trình đăng ký đối tượng từ xa RMI
cho mục đích phát triển sau này.
+ Phương thức main của Server:
Hầu hết các phương thức được gọi ra trong thành phần phụ
ServerParkingImpl là phương thức main. Phương thức main được sử dụng để
khởi động ParkingServerImpl vì vậy cần phải xây dựng một trình khởi tạo và
quản lý để chuẩn bị cho Server nhận các cuộc gọi từ các Client. Các phương
thức này không phải là một phương thức từ xa nghĩa là nó không thể được gọi từ
các máy ảo khác vì phương thức main được khai báo static nên nó không thể kết
hợp với một đối tượng nào.
+ Khai báo các giao diện từ xa thành phần:
Các lớp thành phần cho ParkingServerImpl được khai báo như sau:
public class ParkingServerImpl implements ParkingServer{ }
Võ Văn Luận – Lê Văn Đông 20
Báo cáo môn hc Lâp trình mạng Khoa hc máy tính – Khoá 11
Khai báo tình trạng các lớp bổ sung cho giao diện từ xa (định nghĩa một đối
tượng từ xa) và lớp có phần mở rộng là: java.rmi.Server.UnicastRemoteObject.
UnicastRemoteObject là một lớp thuận tiện cho việc định nghĩa các thành
phần API của RMI, nó được sử dụng như là một siêu lớp cho các thành phần bổ
sung cho đối tượng từ xa. Siêu lớp UnicastRemoteObject cung cấp các thành
phần bổ sung cho một số phương thức java.lang.Object (equals, hashCode,
dung trong cấu trúc dữ liệu.
Hệ thống cung cấp một đối tượng từ xa đặc trưng đó là RMI registry dùng
để tìm kiếm các tham chiếu đến các đối tượng từ xa. RMI registry là tên một đối
tượng từ xa nó cho phép các Client tham chiếu đến các đối tượng từ xa thông
qua tên gọi của chúng. Registry đơn thuần được dùng để định vị các đối tượng
từ xa trước khi một Client RMI cần sử dụng đến, từ đối tượng này sẽ dẫn xuất
đến các đối tượng tiếp theo.
Giao diện java.rmi.Naming được sử dụng như một API đầu cuối cho tiến
trình kết nối, đăng ký và truy cứu các đối tượng từ xa trong registry. Một khi đối
tượng từ xa được đăng ký với RMI registry trên host cục bộ thì các trình gọi trên
bất kỳ host nào cũng có thể truy cứu các đối tượng từ xa theo tên và sử dụng các
tham chiếu của chúng. Registry có thể được chia sẻ cho tất cả các Server đang
chạy trên một host hoặc một Server có thể tạo riêng một registry cho mình.
Lớp ParkingServerImpl tạo ra một tên gọi cho đối tượng với câu lệnh :
Naming.rebind("rmi://" + hostName + "/XYZ", cs);
Tên này kèm theo tên máy chủ (127.0.0.1) mà trình đăng ký (và đối tượng
từ xa) đang chạy, tên ParkingServerImpl định rõ đối tượng từ xa đăng ký trong
registry, đối tượng này sẽ được tham chiếu tại chương trình Client. Đoạn mã sử
dụng để đăng ký tên với RMI registry đang chạy trên Server được thực hiện
trong một khối try như sau :
try {
UnicastRemoteObject.exportObject(cs);
Naming.rebind("rmi://127.0.0.1/XYZ", cs);
txttrangthai.append("Server da khoi dong.\n");
Võ Văn Luận – Lê Văn Đông 22