ÁP DỤNG THUẬT TOÁN TẠI TRẠM SẢN XUẤT VÀ TRẠM TIÊU THỤ ĐỂ MÔ PHỎNG QUÁ TRÌNH LÀM VIỆC CỦA HỆ PHÂN TÁN - Pdf 24

Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
ĐẠI HỌC ĐÀ NẴNG
KHOA CÔNG NGHỆ THÔNG TIN

TIỂU LUẬN
TIỂU LUẬN
LẬP TRÌNH MẠNG
LẬP TRÌNH MẠNG
Đề tài:
ÁP DỤNG THUẬT TOÁN TẠI TRẠM SẢN XUẤT VÀ
TRẠM TIÊU THỤ ĐỂ MÔ PHỎNG QUÁ TRÌNH LÀM
VIỆC CỦA HỆ PHÂN TÁN

Giảng viên giảng dạy : PGS.TS. Lê Văn Sơn
Học viên thực hiện : Phạm Văn Lanh
Phạm Quốc Cường
Lớp : CHK11
Niên khoá : 2009 - 2011 Nhóm 10_Lớp KHMT_Khóa 11 Trang 1
ĐÀ NẴNG, 03/2010
Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
LỜI NÓI ĐẦU
Hệ tin học phân tán là hệ thống tin học hiện đại, đa dạng, phức tạp và đang
trên đà phát triển, được nhiều trường đại học, nhiều viện nghiên cứu, nhiều chuyên
gia công nghệ thông tin, quan tâm nghiên cứu với nhiều công trình khoa học có giá
trị về mặt nguyên lý, phương pháp cũng như ứng dụng trong thực tế.
Mục đích của lập trình mạng phân tán là tận dụng các khả năng tính toán và
khai thác dữ liệu của các hệ thống máy tính ở xa để thực hiện những tính toán
nhanh hơn trên cơ sở sử dụng nhiều bộ xử lý, nhiều bộ nhớ đồng thời hoặc nhiều

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.
II Các điểm mạnh trong hệ tin học 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.
Nhóm 10_Lớp KHMT_Khóa 11 Trang 4
Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
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

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.
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 2
- 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
Nhóm 10_Lớp KHMT_Khóa 11 Trang 6
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
Hình 2: Kiến trúc ba tầng của RMI
Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
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: tầng này dịch và quản lý các tham chiếu tới các đối tượng

 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.
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.
IV Thiết lập môi trường triệu gọi từ xa.
Để thực hiện được việc triệu gọi từ xa thì ta phải chạy chương trình ở trên cả hai
máy, máy khách và máy chủ. Những thông tin cần thiết cũng phải được cài đặt tách biệt ở
hai phía, máy khách và máy chủ. Tuy nhiên không nhất thiết phải có hai máy tính riêng
Nhóm 10_Lớp KHMT_Khóa 11 Trang 8

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ệ

Nhóm 10_Lớp KHMT_Khóa 11 Trang 9
Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
đối tượng dịch vụ và các đại diện của chúng từ xa. Lớp UnicastRemoteObject là lớp con
của RemoteServer.

Lớp UnicastRemoteObject tạo ra các đối tượng ở trên máy chủ. Đây là lớp cơ sở
để xây dựng các lớp ứng dụng trao đổi thông tin từ xa trên máy chủ. Ngoài ra, ta có thể
sử dụng lớp cơ sở MulticastRemoteObject để kế thừa, tạo ra những lớp ứng dụng chạy
trên nhiều máy chủ đồng thời.
Lưu ý: Khi sử dụng RMI, vấn đề đặt tên cho các lớp, giao diện là cần phải cẩn
trọng. Để cho phù hợp, ta nên thực hiện theo những qui ước đặt tên như sau:
+ Không có hậu tố, ví dụ: Product
+ Có hậu tố Impl,
ví dụ: ProductImpl
+ Có hậu tố Server,
ví dụ: ProductServer
+ Có hậu tố Client,
ví dụ: ProductClient
+ Có hậu tố _Stub,
ví dụ: ProductImpl_Stub
+ Giao diện từ xa
+ Lớp cài đặt giao diện
+ Chương trình tạo ra các đối tượng
dịch vụ
+ Chương trình khách triệu gọi phương
thức từ xa
+ Lớp đại diện máy khách được tự động
tạo ra bởi chương trình rmic
+ Lớp đại diện máy chủ được tự động
Nhóm 10_Lớp KHMT_Khóa 11 Trang 10

rmic với tên của gói đó.
Nhóm 10_Lớp KHMT_Khóa 11 Trang 11
Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
1.4. Xác định các đối tượng dịch vụ.
Để truy cập được đối tượng từ xa trên máy phục vụ, khách hàng cần có được đối
tượng đại diện tại nơi đó. Khách yêu cầu đối tượng đó như thế nào? Phương thức chung
là gọi phương thức từ xa của một đối tượng phục vụ và tạo ra một đối tượng đại diện để
nhận kết quả trả lời.
Hệ thống RMI cung cấp một bộ đăng ký (RMI registry) đối tượng từ xa để ta kết hợp
với tên được thiết lập theo URL dạng “//host/objectname” giúp ta xác định được đối
tượng phục vụ. Tên gọi là dãy các ký tự (xâu) xác định duy nhất.
 static Remote lookup(String url)
Tìm đến đối tượng từ xa theo địa chỉ url. Nếu chưa có đối tượng được đăng ký thì
phát sinh ngoại lệ NotBoundException.
 static void bind(String name, Remote obj)
Ghép (đóng gói) name với đối tượng từ xa obj. Nếu đối tượng đó đã có trong gói
thì phát sinh ngoại lệ AlreadyBoundException.
 static void unbind(String name)
Mở để lấy name ra khỏi gói. Nếu name không có trong gói thì phát sinh ngoại lệ
NotBoundException.
 static void rebind(String name)
Ghép (đóng gói) name với đối tượng từ xa obj. Cho phép thay thế những name đã
được đóng gói.
 static String[] list(String url)
Lấy ra một danh sách các tên đối tượng (xâu) đã được đăng ký ở địa chỉ url.
Chương trình khách truy cập đến đối tượng phục vụ bằng cách chỉ ra tên của dịch
vụ và tên đối tượng, sau đó ép về kiểu của giao diện từ xa như sau:
// Client
Product p = (Product)Naming.lookup(“rmi://yourserver.com/teaster”);
Nhóm 10_Lớp KHMT_Khóa 11 Trang 12

Nhóm 10_Lớp KHMT_Khóa 11 Trang 13
Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
Một vấn đề khác đáng quan tâm ở đây nữa là RMI registry không cho phép đăng
ký hai đối tượng cùng tên. Muốn chỉnh sửa lại hệ thống chương trình triệu gọi phương
thức từ xa, ta phải, hoặc là khởi động lại chương trình RMI Registry, hoặc là ngay từ đầu
khi thiết kế chương trình Server của đối tượng, ta sử dụng phương thức rebind() thay vì
phương thức bind() để đăng ký với RMI registry của máy phục vụ.
1.6 Chi tiết về RMI registry và các cách tự đăng ký đối tượng.
RMI registry đã được đề cập trên đây như một dịch vụ tìm kiếm đối tượng. Các
đối tượng phục vụ muốn chương trình khách truy cập được từ xa thì phải đăng ký với
RMI registry. Bộ đăng ký này là một chương trình dịch vụ chạy ở hậu trường, lắng nghe
ở một cổng có số hiệu đã xác định. Hiện tại Java yêu cầu một máy ảo JVM chạy RMI
registry và một máy JVM chạy chương trình Server (trên cùng một máy chủ).
Một dịch vụ RMI registry có thể tiếp nhận và quản lý cùng lúc nhiều đối tượng
dịch vụ khác nhau. Java cho phép liên lạc với bộ đăng ký RMI registry để lấy về danh
sách các đối tượng chủ mà nó đang quản lý thông qua phương thức list() của đối tượng
đã đăng ký.
Java cho phép nhà lập trình tự tạo bộ đăng ký cho riêng mình mà không cần dùng
đến rmiregistry.exe. Để tạo bộ đăng ký và tự đăng ký đối tượng, ta sử dụng phương thức
tĩnh createRegistry() của lớp LocateRegistry.
2. Trên máy khách (Client).
Viết chương trình ở trên máy khách (chương trình khách) để yêu cầu chương trình
phục vụ cung cấp những thông tin về các sản phẩm từ các đối tượng đã đăng ký.
Với Java, tất cả các thao tác kết nối và sao chép các tệp tin từ một máy tính về
máy khách đều phải thông qua lớp bảo vệ gọi là RMISecurityManager.
Ví dụ: để chương trình khách ProductClient có thể nạp tự động
ProductImpl_Stub.class từ Webserver, ta phải thiết lập lại cơ chế bảo vệ an ninh ở máy
khách.
System.setSecurityManager(new RMISecurityManager());
Nhóm 10_Lớp KHMT_Khóa 11 Trang 14

Nhóm 10_Lớp KHMT_Khóa 11 Trang 15
Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
ra / vào của đường kết nối trao đổi dữ liệu của mạng nội hạt (mạng cục bộ) với bên ngoài
(Internet). Mục đích là tránh sự đột nhập, sự tấn công hay ăn cắp thông tin của những
người không được phép truy cập, của các tay hacker. Nó cũng được sử dụng để kiểm soát
sự truy xuất ra bên ngoài mạng Internet.
Vấn đề phát sinh chính là việc sử dụng các cổng kết nối. Hầu như tất cả bức tường
lửa chỉ cho sử dụng một số hạn chế các cổng. Cổng kết nối giao thức http: 80 là cổng phổ
dụng cho việc kết nối với Web Server. Một số cổng khác mà ta có thể được phép sử dụng
như: cổng 21 cho ftp, 23 cho telnet và 110 cho POP3 Mail. Như vậy, ta sẽ gặp khó khăn
khi sử dụng mô hình khách chủ và gặp phải bức tường lửa.
Ứng dụng phân tán triệu gọi đối tượng từ xa có thể giải quyết vấn đề đối với tường
lửa như sau:
- Yêu cầu người quản trị bức tường lửa cung cấp một số cổng để kết nối.
- Sử dụng cơ chế trung gian thông qua cổng 80, cổng phổ thông của dịch vụ Web
Server. Cơ chế này còn được goi là cơ chế “đường hầm”.
Như vậy, COM và RMI, về hiệu quả, cách thức hoạt động có nhiều nét tương đồng nhưng so
với COM, RMI linh động hơn do sử dụng công nghệ Java, và do đó có thể được áp dụng cho
nhiều hệ nền khác nhau (COM chỉ được áp dụng trên các hệ nền Windows). Cả hai đều có chung
nhược điểm là đều phải thực hiện việc kết nối giữa các đối tượng qua các cổng chỉ định đã được
mở từ trước. Web Services, là công nghệ mới phát triển gần đây sử dụng SOAP cho phép trình
chủ và trình khách giao tiếp với nhau qua giao thức http, hay là qua cổng 80 – đây là cổng luôn
được mở để phục vụ trên một http webserver, nên nhà phát triển dịch vụ này sẽ không lo lắng về
vấn đề cổng giao tiếp nữa. Điểm thuận tiện khác, Web Services được xây dựng dựa trên nền tảng
là XML – độc lập với các hệ nền và nó có thể nói là tựu trung tất cả các ưu điểm của các phương
thức lập trình phân tán trước đó. SOAP cho phép dữ liệu chuyển đi bằng HTTP và định dạng
theo chuẩn XML. Các công nghệ mới hiện nay, .NET Framework, Java đều đưa khả năng làm
việc với Web Services vào như là một thành phần quan trọng. Nó cho phép triệu gọi lẫn nhau,
bất chấp các đối tượng đó được viết bằng Java của Sun hay .NET của Microsoft.
Nhóm 10_Lớp KHMT_Khóa 11 Trang 16

Nhóm 10_Lớp KHMT_Khóa 11 Trang 17
Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
NC: số lượng sản phẩm đã tiêu thụ bởi trạm CS
NC’: công tơ sự kiện tiêu thụ đặt trên trạm sản xuất PS
NP’: công tơ sự kiện sản xuất đặt trên trạm tiêu thụ CS
Ta gọi P
i
là sản xuất thứ i và C
i
là tiêu thụ thứ i.
Ta thấy rằng:
P
i
→ P
i+1
→ P
i+N
: tuân theo trật tự cục bộ của trạm sản xuất PS.
P
i
→ C
i
: tuân theo mối quan hệ nhân quả.
Vấn đề của bài toán đến đây là cần phải chứng minh: C
i
→ P
i+N
Trạm sản xuất PS chỉ sản xuất thêm sản phẩm nếu hiện tại số lượng còn lại (tức là lượng
sản phẩm đã sản xuất nhưng chưa tiêu thụ được) nhỏ hơn N, tức là:
NP – NC’ < N

Kết thúc vòng lặp
 Thuật toán tại trạm tiêu thụ CS:
Vòng lặp
Nếu receive(PS)
tang(NP’)
cho(NP’,NP + 1)
tieu_thu()
send(PS)
NC = NC + 1
Kết thúc vòng lặp
II Chương trình và kết quả demo.
1. Nội dung chương trình.
// Server1.java (chua cac lenh sau)
// Server1 dong vai tro la Tram San Xuat
// khai bao interface cho Server1
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Server1 extends java.rmi.Remote {
public abstract int sanxuatso()
throws java.rmi.RemoteException;
// Set thong tin den tram San xuat
public abstract void setmessSX(java.lang.String message)
throws java.rmi.RemoteException;
public abstract java.lang.String getmessSX()
Nhóm 10_Lớp KHMT_Khóa 11 Trang 19
Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
throws java.rmi.RemoteException;
public abstract void setcongtosukienSX(int ctsk)
throws java.rmi.RemoteException;
public abstract int getcongtosukienSX()

Random rd=new Random();
i=rd.nextInt(30);
System.out.println("So random cua Tram San Xuat gui la:= "+ i);
}
catch(java.lang.Exception exception) {
java.lang.System.out.println(exception.getMessage());
java.lang.System.exit(0);
}
return i;
}
//*******************
public synchronized void setmessSX(java.lang.String message) {
mesinSX.setmess(message);
}
public synchronized java.lang.String getmessSX() {
return mesinSX.getmess();
}
// voi bien congtosukien
public synchronized void setcongtosukienSX(int ctsk) {
mesinSX.setcongtosukien(ctsk);
}
public synchronized int getcongtosukienSX() {
return mesinSX.getcongtosukien();
}
// voi bien num
public synchronized void setnumSX(int number) {
mesinSX.setnum(number);
}
public synchronized int getnumSX() {
return mesinSX.getnum();

ctsk o tram SX
tramtt.setcongtosukienTT(congtosukienSX); // set lai cho bien
ctsk o tram TT
mesinSX.setmess("tieuthu"); //de yeu cau tram tieu thu tieu thu
int tong= tramtt.gettongTT();
System.out.println("^^^ Gia tri tong o tram TT tra ve la: "+tong);
Nhóm 10_Lớp KHMT_Khóa 11 Trang 22
Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
}
else tramtt.setmessTT("sanxuat");
}
Util.mySleep(2000);
System.out.println("Tram San Xuat dang doi thong diep de xu ly");
System.out.println( mesinSX.getmess());
System.out.println( tramtt.getmessTT());
if (mesinSX.getmess().compareToIgnoreCase("quit")==0) thr.stop();
}
thr.stop();
}
catch(java.lang.Exception exception){
java.lang.System.out.println(exception.getMessage());
java.lang.System.exit(0);
}
}
public static void main(java.lang.String args[]) {
java.lang.System.out.println("Creating Registry Server1 ");
try {
// ***** Khoi tao va Start Server o tram SX ****
//Server1 tao ra dtuong server1impl va dang ky no de san sàng cho viec goi tu xa
java.rmi.registry.LocateRegistry.createRegistry(1999);

throws java.rmi.RemoteException;
// Set thong tin den tram Tieu Thu
public abstract void setmessTT(java.lang.String message)
throws java.rmi.RemoteException;
public abstract java.lang.String getmessTT()
throws java.rmi.RemoteException;
public abstract void setcongtosukienTT(int ctsk)
throws java.rmi.RemoteException;
public abstract int getcongtosukienTT()
throws java.rmi.RemoteException;
public abstract void setnumTT(int number)
throws java.rmi.RemoteException;
public abstract int getnumTT()
Nhóm 10_Lớp KHMT_Khóa 11 Trang 24
Tiểu luận môn học Lập trình mạng GVHD: PGS.TS Lê Văn Sơn
throws java.rmi.RemoteException;
public abstract int gettongTT()
throws java.rmi.RemoteException;
}
// Server2Impl.java (chua cac lenh sau)
// Server2 dong vai tro la Tram Tieu Thu
import java.io.*;
import java.rmi.*;
import java.util.*;
public class Server2Impl extends java.rmi.server.UnicastRemoteObject implements
Runnable, Server2 {
public Server2Impl()
throws java.rmi.RemoteException {
java.lang.System.out.println("Starting Server2 ");
}


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