Java là một ngôn ngữ lập trình phổ biến hiện nay, ngoài những ứng dụng về lập trình cơ bản, nền tảng của Java còn hướng đến các ứng dụng về mạng máy tính như: giao tiếp trên mạng theo mô
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN
- -BÀI TIỂU LUẬN
NGƯỜI SẢN XUẤT - NGƯỜI TIÊU THỤ
GVHD: PGS TS Lê Văn Sơn HVTH: Trương Thị Minh Hậu LỚP : Khoa học máy tính-K24 (T9/2011)
Trang 2PHỤ LỤC
LỜI MỞ ĐẦU 2
CHƯƠNG I: ĐẶC ĐIỂM CƠ BẢN CỦA HỆ TIN HỌC PHÂN TÁN 3
I.1 KHÁI NIỆM VÀ ĐẶC TRƯNG CỦA HỆ TIN HỌC PHÂN TÁN 3
I.2 CUNG CẤP PHÂN TÁN 3
I.3 HOẠT ĐỘNG TRONG CẤU TRÚC PHÂN TÁN 3
I.3.1 QUẢN LÝ CÁC HOẠT ĐỘNG PHÁT SINH TỪ XA 4
I.3.2 HỢP TÁC VÀ LIÊN LẠC 4
CHƯƠNG II: GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH JAVA VÀ KỸ THUẬT LẬP TRÌNH PHÂN TÁN RMI 7
II.1 GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH JAVA 7
II.2 TÌM HIỂU NGÔN NGỮ LẬP TRÌNH JAVA 7
II.3 KỸ THUẬT LẬP TRÌNH PHÂN TÁN RMI 8
II.3.1 KHÁI NIỆM LẬP TRÌNH PHÂN TÁN RMI (REMOTE METHOD INVOCATION) 8
II.3.2 KỸ THUẬT LẬP TRÌNH PHÂN TÁN RMI 9
CHƯƠNG III: BÀI TOÁN NGƯỜI SẢN XUẤT - NGƯỜI TIÊU THỤ 14
III.1 PHÁT BIỂU BÀI TOÁN 14
III.2 GIẢI BÀI TOÁN 16
CHƯƠNG IV: CHƯƠNG TRÌNH ỨNG DỤNG VÀ DEMO 17
KẾT LUẬN 23
TÀI LIỆU THAM KHẢO 24
Trang 3LỜI MỞ ĐẦU
Ngày nay, với tốc độ phát triển vượt bậc của ngành công nghệ thông tin, việc viết ra một ứng dụng để chạy trên các máy đơn cục bộ không còn được ưa chuộng và thích hợp nữa Các chương trình và ứng dụng hiện đại phải được tích hợp và triệu gọi lẫn nhau trên mạng cục bộ và mạng Internet Ngôn ngữ lập trình Java là một trong những lựa chọn tốt nhất để làm việc này Java là một ngôn ngữ lập trình phổ biến hiện nay, ngoài những ứng dụng về lập trình cơ bản, nền tảng của Java còn hướng đến các ứng dụng về mạng máy tính như: giao tiếp trên mạng theo mô hình khách/chủ (client/sever), lập trình phân tán đối tượng,
Đến với môn học lập trình mạng máy tính nâng cao, để tìm hiểu rõ hơn về vấn đề đồng bộ giữa các tiến trình trong hệ phân tán trên cơ sở trật tự hóa từng phần giữa các sự kiện, Tôi đã làm bài tiểu luận về lập trình bài toán người sản xuất - người tiêu thụ Bài tiểu luận gồm những nội như sau:
[1] Tìm hiểu về các đặc điểm của hệ phân tán.
[2] Tìm hiểu về ngôn ngữ lập trình Java và kỹ thuật lập trình phân tán RMI.
[3] Giải quyết bài toán người sản xuất - người tiêu thụ.
[4] Chương trình ứng dụng và Demo.
Qua đây, Tôi xin chân thành cám ơn thầy giáo PGS.TS Lê Văn Sơn và thầy giáo Th.S
Đặng Hùng Vĩ đã tận tình giảng dạy, hướng dẫn và cung cấp tài liệu để Tôi nắm được kiến thức
và hoàn thành bài tiểu luận này
Đà nẵng, tháng 05/2012 Học viên thực hiện: Trương Thị Minh Hậu
Trang 4CHƯƠNG I: ĐẶC ĐIỂM CƠ BẢN CỦA HỆ TIN HỌC PHÂN TÁN
I.1 KHÁI NIỆM VÀ ĐẶC TRƯNG CỦA 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ồ, khác với xu hướng phântán các tính toán trên nhiều bộ xử lý của hệ thống đa xử lý
Như vậy, 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 thông tin với nhau thông qua hệ thống đường truyền như cáp chuyêndụng, đường điện thoại, cáp quang…
Một tư tưởng lớn của hệ tin học phân tán là phân tán hoá các quá trình xử lý thông tin vàthực hiện công việc đó trên các trạm khác nhau Đó là cơ sở căn bản cho việc xây dựng các ứngdụng lớn như thương mại điện tử, giáo dục điện tử, chính phủ điện tử, thư viện điện tử,…
Hiện nay, đứng trên những phương diện khác nhau, có thể có các định nghĩa khác nhau về hệtin học phân tán, nhưng phổ biến hơn cả là định nghĩa sau:
Hệ tin học phân tán (hệ phân tán) là hệ thống xử lý thông tin bao gồm nhiều bộ xử lý hay vi
xử lý nằm tại các vị trí khác nhau và được liên kết với nhau thông qua phương tiện viễn thôngdưới sự điều khiển thống nhất của một hệ điều hành
I.2 CUNG CẤP PHÂN TÁN
Vì lý do ổn định và hiệu quả, chức năng cung cấp phải được phân tán trên nhiều trạm khácnhau 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ảocho hoạt động cung cấp được hoàn toàn chính xác Một sự gắn bó của các chương trình cung cấpphâ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
- Các bộ cung cấp bắt buộc phải thực hiện cùng một giải thuật
- 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
- Các thông điệp phải được xử lý cùng một trật tự như nhau trong một chương trình cung cấp
I.3 HOẠT ĐỘNG TRONG CẤU TRÚC PHÂN TÁN
Đối với hệ phân tán, các cấu trúc này cần phải:
1 Các hàm nguyên thuỷ liên lạc
2 Một số lượng nào đó hoạt động tiền xác định trên mỗi trạm
a Tiến trình (Process):
Toàn bộ hoạt động tuần tự được cung cấp xử lý Đó chính là chương trình hoặc đoạn
Trang 5b Khái niệm thông điệp
Thông điệp bao gồm tập hợp thông tin gắn bó với nhau theo 1 logic nào đó như bản ghi,tập tin … Hay nói cách khác Thông điệp là thực thể trao đổi trong các liên lạc
Trao đổi Thông tin Truyền một thông điệp từ một trạm phát đến một trạm nhận
I.3.1 QUẢN LÝ CÁC HOẠT ĐỘNG PHÁT SINH TỪ XA
Trên mỗi trạm có ít nhất một tiến trình gọi là tiến trình đánh thức đang chờ các thông điệp.Mỗi thông điệp đòi hỏi có sự ném ra hoạt động cần phải chứa các lai lịch của chương trình
ần thực hiện, các giá trị tham số và tất cả các thông tin cần thiết cho trường hợp sử dụng liên
hệ điều khiển trở về, tiếp tục
I.3.1.1 Tiến trình tạo ra khi yêu cầu:
Khi có yêu cầu từ một trạm, thì tiến trình đánh thức được thành lập từ Server để đáp ứng yêucầu truy vấn
I.3.1.2 Số lượng tiến trình theo kiểu tĩnh:
Để tránh trường hợp phải điều khiển một lượng tiến trình biến thiên thì ta cần phải cố định sốlượng tiến trình theo kiểu tĩnh
I.3.1.3 So sánh hai chiến lược:
Số lượng cố định các tiến trình server có hai đặc điểm sau
-Bộ nhớ có thể quản lý tĩnh vì số lượng bản sao chép của biến cục bộ được biết rất rõ
-Việc nạp vào bộ nhớ bị hạn chế cho số lượng các server kết hợp với mỗi loại hoạt động.Trường hợp tiến trình tạo ra theo kiểu động, các đặc tính này được mô tả như sau:
1.Các thông điệp được tiếp nhận nhanh nhất có thể vì nguyên nhân phân luồng các tiến trìnhtrên các bộ xử lý
Một tiến trình không phải ở lâu trong trình trạng không được sử dụng khi mà các thông điệpđến, khi ta có nhiều bộ xử lý ta có thể thực hiện song song với các hoạt động khác
I.3.2 HỢP TÁC VÀ LIÊN LẠC
1.Việc đồng bộ giữa các thực thể trao đổi
2.Bản chất của các thông điệp
3.Lai lịch của đối phương
4.Các khả năng xử lý lỗi trong khi truyền thông
Trang 6I.3.2.1 Đồng bộ hoá giữa các thực thể trao đổi
Có ít nhất hai hàm nguyên thuỷ cần thiết cho quá trình gởi và nhận một thông điệp Việc gởi
và nhận thông điệp được thể hiện dưới hai dạng sau:
ST
1 Không treo Tiến trình gửi thông điệp tiếp tục thực hiện các công việc của nó
2 Treo Tiến trình gửi thông điệp chờ nhận lời khẳng định phía nhận
đang ở trạng thái sẵn sàng nhận
I.3.2.2 Bản chất của thông điệp
Một thông điệp nào đó sử dụng có hiệu quả trong quá trình xử lý truyền thông được xem nhưmột dãy các ký tự có cấu trúc thống nhất được trạm phát ném ra và trạm nhận cũng có thể hiểuđược
Xét trên giác độ ngôn ngữ lập trình, việc cải tiến các hàm nguyên thuỷ chính là gắn kiểu dữliệu cho mỗi loại thông điệp, nhờ đó mà ta có thể kiểm tra tính tương thích giữa thông điệp gởi vàthông điệp nhận
Nhằm đảm bảo một cuộc trao đổi gắn bó giữa các tiến trình với nhau, bên nhận cần phải cókhả năng phân loại và lựa chọn các thông điệp gởi đến, trong hộp thư của mình, các thông điệpcần được xử lý theo đúng từng chức năng riêng biệt của nó
Ta sẽ thể hiện việc chờ đợi một thông điệp và khả năng lựa chọn này theo dạng sau:
Lựa chọn
Kiểu 1: V1:=cho_thong_diep
Xử lý 1 Hoặc
Kiểu 2: V2:=cho_thong_diep
Xứ lý 2 Hoặc
………
Kiểu n: Vn:=cho_thong_diep
Xử lý nKết thúc chọn lựa
Trang 7Nếu có một thông điệp nào đó được chuyển đến mà nội dung thuộc về kiểu 1 thì việc xử lýđược tiến hành theo Xử lý 1 Tương tự như vậy, ta có kiểu2, kiểu 3…, kiểu n.
I.3.2.3 Lai lịch của đối tác
Các dạng hàm nguyên thuỷ liên lạc và khả năng của chúng sẽ thay đổi dựa vào việc xác địnhlai lịch của đối tác có chính xác hay không
I.3.2.4 Khả năng có lỗi trong quá trình liên lạc
ST
1 Ẩn NSD không hề biết các lỗi phát sinh trong quá trình khai thác Các lỗi
này thường được khắc phục ở mức trong
tường minh
Các lỗi được điều khiển tường minh bởi người lập trình Trong trườngtrường hợp này các tham số của chương trình (hàm nguyên thuỷ) cần phải chỉ ra lỗi, thời hạn cần thiết cho việc khắc phục và tên thủ tục bị lỗi khi gọi
Trang 8CHƯƠNG II: GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH JAVA VÀ KỸ
THUẬT LẬP TRÌNH PHÂN TÁN RMI
II.1 GIỚI THIỆU NGÔN NGỮ LẬP TRÌNH JAVA
Java được hãng Sun Microsystems công bố chính thức vào năm 1995 như là một công cụmạnh mẽ để phát triển các ứng dụng trên Internet Bộ công cụ phát triển Java (Java DevelopmentKit – JDK) là một thư viện chuẩn, trong đó chứa các trình biên dịch, thông dịch, giúp đỡ, soạnthảo Từ phiên bản đầu tiên JDK 1.0, Java được cải tiến liên tục lên các phiên bản 1.1, 1.1.2,1.1.5, 1.1.6, Bộ JDK 1.1.6 là lõi cho việc viết nên các IDE nổi tiếng như JBuilder 2.0, SymantecCafe 3.0, Visual J++ 6.0 Đến năm 1998, JDK 1.2 xuất hiện là một bước ngoặc với tên nền Java thứ
2 (Java 2nd Platform), chứa đựng rất nhiều thay đổi so với JDK 1.1 (khả năng bảo mật cao hơn, tốc
độ thực thi nhanh hơn, kết nối với các CSDL dễ dàng hơn ) Tháng 10/2003 phiên bản JDK 1.3xuất hiện, và các phiên bản mới JDK 1.4, 1.5 tiếp tục ra đời
Các nhà sáng tạo Java đã tóm gọn các đặc điểm của Java trong câu: "Java là một ngôn ngữđơn giản, hướng đối tượng, phân tán, thông dịch, mạnh mẽ, bảo mật, cấu trúc độc lập, khả chuyển,hiệu quả cao và linh động"
Có nhiều IDE mạnh mẽ và tiện lợi cho việc lập trình Java như Java Workshop, JBuider,Visual J ++, trong đó JBuilder là một trình IDE mạnh, dễ dùng nên được chọn làm môi trườngphát triển để xây dựng ứng dụng khai thác các tài liệu patent
II.2 TÌM HIỂU NGÔN NGỮ LẬP TRÌNH JAVA
Java được thiết kế cho mục đích đa nền (viết chương trình không phụ thuộc vào bất kỳ hệđiều hành nào), mã của chương trình Java (tập tin java) sau khi biên dịch là một file nhị phân gọi
là byte-code (tập tin class) và được triệu gọi thực thi trong máy ảo Java (JVM – Java VirtualMachine) Việc dịch chương trình Java sang bytecode có thể làm cho chương trình chạy được trênnhiều môi trường hơn vì chỉ cần có mỗi trình thông dịch JVM cho mỗi môi trường
Trang 9Các tập tin nguồn JavaTrình biên dịchCác tập tin classTrình thông dịchKết quả chương trình
B1_Skel
Máy tính 1: máy khách Máy tính 2: máy chủ
Tập tin nguồn Java là một tập tin văn bản thuần (text file), tuân theo hệ thống cú pháp chặtchẽ của Java, gồm các chú thích, khai báo lớp, biến, phương thức
Java là một ngôn ngữ thiên về lập trình mạng và Internet, tích hợp khả năng đa luồng trongngôn ngữ, và có thể dùng để viết các chương trình ứng dụng không thua gì các ngôn ngữ lập trìnhkhác
II.3 KỸ THUẬT LẬP TRÌNH PHÂN TÁN RMI
II.3.1 KHÁI NIỆM LẬP TRÌNH PHÂN TÁN RMI (REMOTE METHOD INVOCATION)
Lập trình phân tán là kỹ thuật lập trình sử dụng nguồn tài nguyên phân tán trên mạng
Kỹ thuật RMI của Java cho phép cài đặt, sử dụng các đối tượng phân tán trên mạng RMI
là cách thức giao tiếp giữa các đối tượng Java có mã lệnh (phương thức, thuộc tính) nằm trên cácmáy khác nhau có thể triệu gọi lẫn nhau Hệ thống Java RMI cho phép một đối tượng chạy trênmáy ảo Java gọi phương thức của một đối tượng đang chạy trên máy ảo Java khác
Trên máy tính 1, các đối tượng A1, A2 gọi phương thức của nhau, đó là gọi phương thức cục
bộ của lập trình hướng đối tượng Đối tượng A1 gọi phương thức từ xa của đối tượng B1 trong lậptrình phân tán
Trang 10Ứng dụng RMI gồm 2 chương trình phân biệt liên lạc với nhau:
- Chương trình Server tạo các đối tượng từ xa, và đợi Client gọi đến
- Chương trình Client gọi các hàm của đối tượng từ xa đó
Để các đối tượng trên 2 máy khác nhau gọi hàm của nhau thì phải thông qua lớp trung gian ở
II.3.2 KỸ THUẬT LẬP TRÌNH PHÂN TÁN RMI
II.3.2.1 Tạo RMI Server
RMI Server bao gồm giao diện (Interface) đưa ra định nghĩa các phương thức cho phépClient gọi và các lớp hiện thực giao diện cần thiết
Sau đây là ví dụ xây dựng một máy tính là một đối tượng trên Server nhận nhiệm vụ từClient thực hiện tại máy Server và trả lại kết quả Các hàm của đối tượng Calculator chạy trênmáy chủ sẽ được gọi bởi CalculatorClient chạy trên máy khách Calculator có khả năng giao tiếpvới các đối tượng từ xa
a Thiết kế giao diện từ xa (Remote Interface)
Khai báo giao diện Calculator kế thừa giao diện Remote của gói java.rmi, các hàm trongCalculator phải ném ngoại lệ RemoteException
Giao diện Calculator.java
import java.rmi.*;
public interface Calculator extends Remote {
public int addNum(int x, int y) throws RemoteException; }
b Hiện thực Remote Interface
Giao diện Calculator đặc tả các hàm rỗng, từ giao diện Calculator, tạo lớp CalculatorImphiện thực giao diện này:
Trang 11Lớp CalculatorImp.java
import java.rmi.*;
public class CalculatorImp implements Calculator {
public int addNum(int x, int y) throws RemoteException {
System.out.println(“Client yêu cầu tính “);
return x+y;
}}
Sử dụng trình biên dịch rmic.exe trong thư mục JDK\BIN dịch CalculatorImp.class:
rmic CalculatorImp
để tạo 2 lớp trung gian: CalculatorImp_Stub.class
CalculatorImp_Skel.class
II.3.2.2 Tạo ứng dụng Server
Chương trình CalculatorServer để cài đặt đối tượng từ xa Calculator tại Server, và đợiClient gọi đến
CalculatorServer.java
import java.rmi.server.*;
import java.rmi.*;
public class CalculatorServer {
public static void main(String args[]) {try {
//Tạo đối tượng CalculatorCalculatorImp c = new CalculatorImp();
Trang 12} catch (Exception e) {
System.out.println(e.getMessage());
}}
rmiregistry.exe 2003
- Server gọi registry để gắn tên cho một đối tượng từ xa, đặt cho đối tượng có khả năng truycập từ xa c1 tên chuỗi định vị URL, và đăng ký với bộ đăng ký RMI bởi hàm lớp bind() hayrebind() của lớp Naming, sau đó CalculatorServer chờ nhận yêu cầu từ máy khách
Chuỗi định vị URL có dạng:
rmi://hostname:port/ObjectName
trong đó: rmi: tên giao thức để đăng ký đối tượng có thể truy cập từ xa
hostname: tên máy chủ, nơi bộ đăng ký RMI đang chạyport: cổng
ObjectName: tên gợi nhớ bất kỳ
II.3.2.3 Tạo chương trình Client
Chương trình Client có khả năng gọi hàm của đối tượng Calculator trên máy chủ
Trang 13//Tìm đối tượng cần truy xuất theo tênSystem.out.println(“Tìm đối tượng: “);
}
- Liên lạc với các đối tượng từ xa: Client tra tìm đối tượng theo tên của nó trong registry củaServer bởi hàm lớp lookup() của lớp Naming và gọi phương thức của đối tượng từ xa
II.3.2.3 Các bước biên dịch và thực hiện ứng dụng
- Tạo giao diện kế thừa giao diện Remote thuộc gói java.rmi
Trong JBuilder: File/ New/ General, Interface
Interface name: CalculatorBase interface: java.rmi.remote
- Tạo lớp hiện thực giao diện:
Trong Jbuilder:File/ New Class:
Class name: tên lớpBase class: tên giao diện cần hiện thực
Ở cửa sổ Properties của lớp, chọn mục Generate RMI stub/ skeleton để có thể phát sinh Stub/Skeleton khi dịch lớp thành File class
Hay sử dụng trình rmic.exe trong thư mục JDK\BIN tạo stub và skeleton cho lớpCalculatorImp.class: CalculatorImp_Stub.class, CalculatorImp_Skel.class
Trang 14- Thiết lập biến môi trường classpath chỉ đến thư mục chứa class cần cho ứng dụng
set CLASSPATH= C:\calculator\calculator.jarhay set CLASSPATH= C:\calculator
hay thiết lập biến môi trường này trong cửa sổ Properties của My Computer
- Khởi động bộ quản lý RMI:
Vào thư mục JDK\BIN và khởi động rmiregistry.exe
hay chọn Tool/ RMIRestrisry trong JBuilder
- Chạy ứng dụng Server
- Chạy ứng dụng Client
II.3.2.3 Liên hệ các đặc điểm phân tán đối với bài toán người sản xuất -người tiêu thụ:
Các đối tượng sản xuất (P) và đối tượng tiêu thụ (C) được phân tán trên các trạm máy tính
khác nhau Việc quản lý các hoạt động được mô tả bởi 2 tiến trình mà các tiến trình được môphỏng ở đây là người sản xuất và người tiêu thụ
Người sản xuất sản xuất ra sản phẩm gởi người tiêu thụ, ngược lại người tiêu thụ phảinhận sản phẩm sản xuất từ người sản xuất Nếu người sản xuất mà chưa sản xuất thì người tiêuthụ phải chờ Nếu người sản xuất ra nhiều sản phẩm mà người tiêu thụ tiêu thụ chưa hết thì ngườisản xuất phải dừng lại và chờ người tiêu thụ tiêu thụ hết sản phẩm rồi mới thực hiện sản xuất sảnphẩm thứ N+1
Trong bài toán ứng dụng này, người tiêu thụ sẽ lấy hàng trong bộ đệm mà người sản xuất
đã sản xuất ra ở bộ đệm Nếu trong bộ đệm rỗng thì người sản xuất tiếp tục sản xuất ra sản phẩm
để bỏ trong bộ đệm