CHƯƠNG TRÌNH MÔ PHỎNG QUÁ TRÌNH HOẠT ĐỘNG CỦA 3 LOẠI THÔNG ĐIỆP CƠ BẢN REQ, ACQ VÀ REL TRONG HỆ TIN HỌC PHÂN TÁN - Pdf 24

Báo cáo Lập Trình Mạng Khoa học máy tính – Khóa 11
ĐẠ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:
CHƯƠNG TRÌNH MÔ PHỎNG QUÁ TRÌNH HOẠT
ĐỘNG CỦA 3 LOẠI THÔNG ĐIỆP CƠ BẢN REQ, ACQ
VÀ REL TRONG HỆ TIN HỌC PHÂN TÁN
Giáo viên hướng dẫn: PGS TS Lê Văn Sơn
Hc viên thc hin:
- Đoàn Ngọc Diễm
My
- Trần Thị Bích
Đào
Lớp : Khoa hc máy tính K11
Niên khoá : 2009- 2011
Đoàn Ngọc Diễm My – Trần Thị Bích Đào 1
Báo cáo Lập Trình Mạng Khoa học máy tính – Khóa 11
Đà N'ng, 03/2010
LỜI MỞ ĐẦU
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.

cơ bản REQ, ACQ và REL trong hệ tin học phân tán.
2. Giải thuật Loại trừ tương hỗ:
Loại trừ tương hỗ có thể được thực hiệ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 nhận
các yêu cầu và khuyến nghị giải phóng trên tất cả 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ố 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ể được mô tả như sau:
+ Trạm i của mạng có thể gửi thông điệp cho các trạm khác thông điệp có
dạng (T, H
i
, i), trong đó H
i
là dấu của thông điệp có nghĩa là đồng hồ logic của
nó và T có thể nhận một trong 3 giá trị REQ, REL, 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

, i), thông điệp này thay thế M
i
ngoại trừ M
i
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
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.
+ 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ệ <thời gian, số> của tất cả các thông điệp khác trong hàng
đợi của nó.
3. Giải pháp cho vấn đề đoạn găng:
+ Khái niệm Tài nguyên găng: Những tài nguyên được hệ điều hành chia sẻ
cho nhiều tiến trình hoạt động đồng thời dùng chung, mà có nguy cơ dẫn đến sự
tranh chấp giữa các tiến trình này khi sử dụng chúng được gọi là tài nguyên
găng.
+ Tài nguyên găng có thể là tài nguyên phần cứng hoặc tài nguyên phần
mềm, có thể là tài nguyên phân chia được hoặc không phân chia được, nhưng đa
số thường là tài nguyên phân chia được như là: các biến chung, các file chia sẻ.
+ Ví dụ sau sẽ cho ta thấy rõ hơn việc sử dụng tài nguyên găng:
Giả sử có một chương trình, trong đó có hai tiến trình P1 và P2 hoạt động
đồng thời với nhau. Tiến trình P1 phải tăng biến Count lên 1 đơn vị, tiến trình
P2 phải tăng biến Count lên 1 đơn vị, với mục đích tăng Count lên được 2 đơn
vị.
Chương trình có thể thc hin như sau:
1. Tiến trình P1 ghi nội dung biến toàn cục Count vào biến cục bộ L1
2. Tiến trình P2 ghi nội dung biến toàn cục Count vào biến cục bộ L2
3. Tiến trình P1 thực hiện L1:= L1 + 1 và Count := L1
4. Tiến trình P2 thực hiện L2:= L2 + 1 và Count := L2
Như vậy thoạt nhìn ta thấy rằng chắc chắn Count đã tăng được 2 đơn vị,

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 nó.
Ta kiểm tra các đặc tính sau đây:
+ 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 đi bởi trạm i vẫn tiếp tục tồn tại
trong các hàng đợi cho đến khi nó được thay thế bởi thông điệp REL.
+ 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.
Ví dụ: Xét một mạng gồm 3 trạm, trong số đó trạm 1 và trạm 2 yêu cầu vào
đoạn găng tại thời điểm 2 của đồng hồ Logic của chúng. Tập hợp các thông điệp
được truyền đi giữa chúng với nhau được mô tả theo hình vẽ sau và ta cũng có
thể tìm thấy một số trạng thái của các hàng đợi thông điệp:
Đoàn Ngọc Diễm My – Trần Thị Bích Đào 6
Đoạn găng
của trạm 2
Đoạn
găng
của
trạm 1
ACQ,6,3
REL,10,1
ACQ,9,1
ACQ,6,2
ACQ,4,3
REQ,2,1
REQ,2,2
REQ,2,1 REQ,2,2
1
2
3

+ Trạm 1 vào đoạn găng tại H
1
= 7
+ Trạm 2 vào đoạn găng tại H
2
= 11
5. Phản ứng với sự cố:
Sự cố xảy ra với trạm chưa vào được trong đoạn găng không làm rối loạn
hoạt động của giải thuật với điều kiện nó truyền thông điệp vang_mat cho việc
chuyển tải ở mạng giao vận. Do có trang bị như thế, việc vào đoạn găng trở nên
dễ dàng và nhanh chóng cho các trạm khác. Nếu trạm có sự cố đã gửi yêu cầu,
thì nó kết thúc với lý do trở thành trước đối với tất cả các trạm khác.
Khi một trạm lại được đưa vào trong mạng sau khi đã khắc phục sự cố, nó
cần phải kiến tạo lại trạng thái hiện hành của các yêu cầu. Để đảm bảo điều đó,
nó phát đi thông điệp vao_lai và để trả lời, các trạm gửi thời gian cuối cùng của
các yêu cầu cuối cùng của nó REQ không được thoả mãn hoặc một thông điệp
REL. Mạng cần phải bổ khuyết cho các trạm bị sự cố bằng cách gửi thông điệp
vang_mat. Khi nó đã nhận tất cả các trả lời cho thông điệp vao_lai, trạm vừa
đưa vào đó có thể bắt đầu lại bằng các yêu cầu.
6. Kết luận:
Các dấu được cung cấp bởi đồng hồ Logic cho phép đánh dấu các sự kiện
và xác định một tổng quát chặt chẽ. Nhưng tại đây không có quan hệ nào giữa
các sự kiện và các giá trị của dấu.
Trên một trạm cho trước, việc nhận một thông điệp có đóng dấu không
thể cho nó biết còn sự kiện nào trước sự kiện đó đang ở trên đường. Như thế, ta
còn phải nhận thông điệp từ các trạm khác còn lại.
Đoàn Ngọc Diễm My – Trần Thị Bích Đào 7
Báo cáo Lập Trình Mạng Khoa học máy tính – Khóa 11
II. Xây dựng chương trình:
1. Giới thiệu ngôn ngữ Java:

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
• Các đặc tả chi tiết kĩ thuật (Specifications)
• Ngôn ngữ lập trình (Programming language)
Đoàn Ngọc Diễm My – Trần Thị Bích Đào 8
Báo cáo Lập Trình Mạng Khoa học máy tính – Khóa 11
Tính uyển chuyển của ngôn ngữ Java thể hiện qua việc chương trình biên
dịch Java chuyển đổi chương trình nguồn Java thành mã đối tượng, gọi là mã
byte (bytecodes) - tập tin có tên quy ước với phần mở rộng là .class. Sau đó,
máy ảo Java có trên máy điều khiển để thực thi.
Mã máy chỉ thực hiện trên máy tính mà nó được biên dịch, trong khi
bytecode có thể thực hiện trên bất kỳ hệ thống máy tính nào có trình điều khiển
Java. Ngoài ra, tính uyển chuyển làm tăng khả năng tái sử dụng các lớp được tạo
ra; các lớp cho phép thực hiện kỹ thuật kết nối động (Dynamic Binding) khi
chương trình thực thi.
2. Kiến trúc và kỹ thuật RMI:
2.1 Tổng quan về RMI:
Trong một ứng dụng không phân tán của Java, đoạn mã trong một đối
tượng có thể gọi phương thức của một đối tượng khác và máy ảo Java phân giải
địa chỉ và truyền tham số từ đối tượng gọi đến phương thức được gọi, ngoài ra
nó cũng trả về các giá trị cho đối tượng gọi thực thi phương thức.
Trong ứng dụng phân tán, mặc dù đoạn mã lập trình phương thức trông có
vẻ giống như trong trường hợp ứng dụng không phân tán, nhưng là một cơ chế
hoàn toàn khác nhau được dùng để móc những đối tượng này. Khi một đối
tượng muốn gọi một phương thức, nó sẽ gọi một đối tượng bè bạn bên phía máy
khách, đối tượng này sẽ đại diện cho đối tượng gọi phương thức bên phía máy
chủ. Đối tượng này được gọi là Stub.
Stub sẽ gọi kiến trúc RMI bên phía máy khách và di chuyển dữ liệu qua

thông qua bộ phận đăng ký này, máy ảo Java đóng vai trò Server sẽ liên kết với
đối tượng ở xa (Remote object).
RMI cung cấp khả năng triệu gọi các phương thức của một đối tượng từ
xa thông qua giao thức JRMP. Bằng cách này có thể liên lạc và thực thi các ứng
dụng xuyên qua nhiều hệ thống trên một mạng. RMI-JRMP – Remote Method
Invocation (RMI), một chuẩn dùng để gọi hàm từ xa dựa trên Java Remote
Message Protocol (JRMP)
Client tìm đến đối tượng ở xa thông qua tên đã đăng ký với bộ phận đăng
ký Server này. Bộ phận đăng ký dịch vụ được thiết lập mặc định ở cổng 1099
thông qua RMIREGISTRY, có trong bộ công cụ phát triển Java (J2SDK).
Đoàn Ngọc Diễm My – Trần Thị Bích Đào 10
Báo cáo Lập Trình Mạng Khoa học máy tính – Khóa 11
Vị trí của hệ thống RMI trong ứng dụng phân tán được mô tả như hình
dưới. Trong đó các chương trình Client và Server trao đổi với nhau qua cầu nối
của hệ thống RMI.
Kiến trúc của hệ thống RMI bao gồm các tầng như sau:
+ Tầng ứng dụng: Bao gồm ứng dụng Server và Client.
Server:
• Hiện thực giao diện Remote mà Client dùng
• Xuất (Exports) đối tượng mà các phương thức của nó được
triệu gọi từ xa (bằng cách tạo lớp là UnicastRemoteObject)
• Đăng ký chính nó với độ đăng ký RMI.
Client:
• Nhận tham chiếu đến đối tượng
• Chuyển các tham chiếu như những giao diện từ xa.
Đoàn Ngọc Diễm My – Trần Thị Bích Đào 11
RMI Registry
RMI Client
RMI Server
Báo cáo Lập Trình Mạng Khoa học máy tính – Khóa 11

+ Chương trình client dùng hàm Naming.Lookup() để yêu cầu bộ đăng
ký cho biết tham chiếu đến đối tượng.
+ Bộ đăng ký Rmiregistry trả về tham chiếu đối tượng tồn tại trên máy
Server.
+ Trên cơ sở tham chiếu của đối tượng do hàm Lookup() trả về, chương
trình Client sử dụng để triệu gọi hành vi của đối tượng trên máy Server.
Đoàn Ngọc Diễm My – Trần Thị Bích Đào 12
Báo cáo Lập Trình Mạng Khoa học máy tính – Khóa 11
Các gói thông dụng thường được sử dụng:
+ Java.lang: Chứa các lớp quan trọng nhất của ngôn ngữ Java. Chúng
bao gồm các kiểu dữ liệu cơ bản như ký tự, số nguyên, Chúng cũng chứa các
lớp làm nhiệm vụ xử lý lỗi và các lớp vào ra chuẩn. Một vài lớp quan trọng khác
như String hay StringBuffer.
+ Java.applet: Đây là package nhỏ nhất chứa một mình lớp Applet. Các
Applet nhúng trong trang Web hay chạy trong Appletviewer đều thừa kế từ lớp
này.
+ Java.awt: Package này đươợc gọi là Abstract Window Toolkit (AWT).
Chúng chứa các lớp dùng để tạo giao diện đồ họa. Một số lớp bên trong là:
Button, GridBagLayout, Graphics.
+ Java.io: Cung cấp thư viện vào ra chuẩn. Chúng cho phép tạo và quản
lý dòng dữ liệu theo nhiều cách.
+ Java.util: Package này cung cấp một số công cụ hữu ích. Một vài lớp
của package này là: Date, Hashtable, Stack, Vector và StringTokenizer.
+ Java.net: Cung cấp khả năng giao tiếp với máy từ xa. Cho phép tạo và
kết nối tới Socket hoặc URL.
+ Java.awt.event: Chứa các lớp, giao diện dùng để xử lý các sự kiện
trong chương trình như chuột, bàn phím.
+ Java.rmi: Công cụ để gọi hàm từ xa. Chúng cho phép tạo đối tượng
trên máy khác và sử dụng các đối tượng đó trên máy cục bộ.
Đoàn Ngọc Diễm My – Trần Thị Bích Đào 13

start = false;
max=40;
Q=new String [max];
for (int i=0;i<max;i++) Q[i]="";
}

Báo cáo Lập Trình Mạng Khoa học máy tính – Khóa 11
- In các thông điệp trong hàng đợi:
- Thêm vào hàng đợi:
Đoàn Ngọc Diễm My – Trần Thị Bích Đào 15
public void printQueue()
{
if (!change) return;
int i=0;
System.out.println(" Queue ");
while (i<max-4 && Q[i] !=""){
System.out.println(Q[i] + " ~ " + Q[i+1] + " ~ " +
Q[i+2]);
i=i+4; }
System.out.println(" ");
change=false;
}
public void setQueue(String R, int H, int I)
{
deleteQueue(R, I);
int i=0;
while (i<max-4 &&
Q[i].compareToIgnoreCase("")!=0 &&
H>Integer.parseInt(Q[i+1])) i+=4;
if (i<max-4)

}
i=i+4;
}
return 0;
}
catch(java.lang.Exception exception)
{
System.out.println(exception.getMessage());
System.exit(0);
return 0;
}
Báo cáo Lập Trình Mạng Khoa học máy tính – Khóa 11
- Xử lý tại Server:
Đoàn Ngọc Diễm My – Trần Thị Bích Đào 17
while (true)
{
S3=(Server3)java.rmi.Naming.lookup("rmi://localhost:2011/Server3");
S2=(Server2)java.rmi.Naming.lookup("rmi://localhost:2010/Server2");
String Q[] = queue.getQueue();
int i=0; int max=queue.getMax();
while (i<max-4 && Q[i].compareToIgnoreCase("") !=0)
{
if (Q[i].compareToIgnoreCase("REQ")==0 &&
Q[i+3].compareToIgnoreCase("0")==0)
{ if (Q[i+2].compareToIgnoreCase("1")==0)
{
Thread.sleep( delay_host_2 * 1000);
S2.receiveMess("REQ",time_logic,1);
time_logic++;
Thread.sleep( (delay_host_3 - delay_host_2) * 1000);

queue.deleteACQ();
S2.receiveMess("REL",time_logic,1);
time_logic++;
S3.receiveMess("REL",time_logic,1);
time_logic++;
}
queue.printQueue();
}
else
if (Q[i].compareToIgnoreCase("")!=0)
queue.updateSend(Q[i],Integer.parseInt(Q[i+1]),
Integer.parseInt(Q[i+2]) );
i=i+4;queue.printQueue();
}
Thread.sleep(1000); time_logic++;
}
public static void main(String[] args) throws IOException {
ServerSocket server = null;
try {
server = new ServerSocket(11111);
}
catch (IOException ioe) {
ioe.printStackTrace();
System.exit(1);}
Socket client = null;
try {
while ((client = server.accept()) != null) {
ControllerServer controller = new ControllerServer(client);
Thread thread = new Thread(controller);
thread.start();

Cd C:\SERVER
Java ControllerServer
Pause
String str = inname.readLine();
if (str.compareToIgnoreCase("start") ==0)
{ S1.setStart (true); S2.setStart (true);
S3.setStart(true);
}
if (str.compareToIgnoreCase("REQ1") ==0)
{
S1.sendMess();
}
if (str.compareToIgnoreCase("REQ2") ==0)
{
S2.sendMess();
}
if (str.compareToIgnoreCase("REQ3") ==0)
{
S3.sendMess();
}
Báo cáo Lập Trình Mạng Khoa học máy tính – Khóa 11
4. Chương trình chạy thử:
- Khởi động các Server:
- Trạng thái của các SERVER hiển thị trên JSP:
Đoàn Ngọc Diễm My – Trần Thị Bích Đào 20
Báo cáo Lập Trình Mạng Khoa học máy tính – Khóa 11
- Khởi động Server điều khiển thông đip:
- Khởi động Server kết nối JSP:
- Các Port được mở và trạng thái từ chương trình:
LISTENING: Trạng thái của PORT đang lắng nghe.


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status