1. Trang chủ
  2. » Luận Văn - Báo Cáo

tiểu luận môn lập trình mạng nâng cao lập trình bài toán người sản xuất - người tiêu thụ

26 666 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 26
Dung lượng 119,11 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

TRƯỜ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 2

PHỤ 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 3

LỜ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 4

CHƯƠ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 5

b 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 6

I.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 7

Nế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 8

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

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 9

Cá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 11

Lớ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

Ngày đăng: 31/01/2015, 22:53

HÌNH ẢNH LIÊN QUAN

Hình 3.1 Sơ đồ hoạt động của các trình Java - tiểu luận môn lập trình mạng nâng cao lập trình bài toán người sản xuất - người tiêu thụ
Hình 3.1 Sơ đồ hoạt động của các trình Java (Trang 9)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w