NỘI DUNG TRÌNH BÀYBài toán Người sản xuất - Người tiêu thụ 1 Liên hệ bài toán với các đặc điểm 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 Dem
Trang 1ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN
BÀI TIỂU LUẬN
Đề tài:
Lập trình bài toán Người sản xuất - Người tiêu thụ
• Giáo viên hướng dẫn: PGS.TS LÊ VĂN SƠN
• Học viên thực hiện : TRƯƠNG THỊ MINH HẬU
• Lớp : KHMT K24 (T9/2011)
ĐÀ NẴNG, THÁNG 05/2012
Trang 2NỘI DUNG TRÌNH BÀY
Bài toán Người sản xuất - Người tiêu thụ
1
Liên hệ bài toán với các đặc điểm 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
Demo chương trình
4
1
Trang 3BÀI TOÁN NGƯỜI SẢN XUẤT - NGƯỜI TIÊU THỤ
Phát biểu bài toán:
- Trong mô hình người sản xuất - người tiêu thụ, số lượng hàng hoá sản xuất ra hạn chế bởi khả năng tiêu thụ, không
vượt quá số lượng tiêu thụ một giá trị N
- Người sản xuất P và người tiêu thụ C là hai người nằm trên hai trạm cách xa nhau
- Giả sử NP: thể hiện số lượng sản xuất ra và NC : số lượng tiêu thụ tại thời điểm khởi tạo
- C chỉ tiêu thụ sản phẩm, nếu sản phẩm sản xuất diễn ra khi
NP-NC>0
- Tương tự, P chỉ sản xuất sản phẩm, khi NP-NC<N
Trang 4Trong hệ thống tin học phân tán, có thể vận dụng hợp lực theo kiểu sau:
Trên trạm P:
ảnh của NC mà P gia tăng mỗi lần nhận thông điệp từ C báo tiêu thụ mới đã diễn ra.
(nghĩa NC’ là số lượng tiêu thụ mà sản xuất đã biết)
Trên trạm C:
Đưa biến NC : thể hiện số lượng chính xác tiêu thụ đã có và biến
NP’ ảnh của NP mà C gia tăng mỗi lần nhận thông điệp từ P báo sản xuất mới đã diễn ra.
(nghĩa NP’ là số lượng sản xuất mà tiêu thụ đã biết)
Vậy trên trạm C, điều kiện để tiêu thụ xảy ra là: NP’-NC >0
Vậy trên trạm P, điều kiện để sản xuất xảy ra là: NP-NC’<N
BÀI TOÁN NGƯỜI SẢN XUẤT - NGƯỜI TIÊU THỤ
Trang 5Thực tế, có thể biểu diễn
NP=NP’+np, với np >=0, np là lượng sản phẩm đã sản xuất
bởi P mà C không biết
NC=NC’+nc, với nc >=0, nc là lượng sản phẩm đã tiêu thụ bởi
C mà P không biết
Ta có thể khái quát phương pháp này theo kiểu đồng bộ hoá bằng công thức:
i
i
i X K
i
Trong đó Ci và K là các hằng số
Tức là đã sử dụng các biến trạng thái nguyên không lùi cho phép sử dụng các bản sao gần đúng của các biến loại này
Cơ chế đồng bộ gọi là các công tơ sự kiện thích hợp của các
vấn đề đặt ra
BÀI TOÁN NGƯỜI SẢN XUẤT - NGƯỜI TIÊU THỤ
Trang 6Mỗi công tơ sự kiện được kết hợp với một nhóm đặc biệt các sự kiện E, xác định ba hàm nguyên thuỷ sau:
sự kiện nhóm E đến
Truy_van(E): Cung cấp giá trị hiện hành của công tơ phối hợp với E
Cho(E,n): treo tiến trình gọi chừng nào giá trị công tơ còn nhỏ hơn n
Với bài toán người sản xuất - người tiêu thụ, cần định nghĩa:
Hai công tơ sự kiện NP’ và NC’, được khởi tạo = 0
Biến nguyên i, khởi sự là 0, là cục bộ đối với tiến trình người sản xuất P và người tiêu thụ C
BÀI TOÁN NGƯỜI SẢN XUẤT - NGƯỜI TIÊU THỤ
Trang 7SƠ ĐỒ THUẬT TOÁN
True
Server
NC’ < (NP-N+1)
NP=0 NC’=0
Start
san_xuat
tang(NP’)
Stop
Client
NP’ < NC+1)
NC=0 NP’=0
Start
Tieu_thu
tang(NC’)
Stop
False
True
False
Trang 8LIÊN HỆ CÁC ĐẶC ĐIỂM PHÂN TÁN
ĐỐI VỚI BÀI TOÁN
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ải nhậ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êu thụ phải chờ Nếu người sản
xuất sản xuất ra nhiều sản phẩm mà người tiêu thụ
chưa tiêu thụ chưa hết sản phẩm thì người sả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ản phẩm thứ N+1
Trang 9LIÊN HỆ CÁC ĐẶC ĐIỂM PHÂN TÁN
ĐỐI VỚI BÀI TOÁN
Trong bài toán ứng dụng này, người tiêu thụ
sẽ lấy hàng trong bộ nhớ đệ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.
Trang 10TÌM HIỂU VỀ NGÔN NGỮ LẬP TRÌNH
Java được thiết kế cho mục đích đa nền, 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 Virtual Machine) Việc dịch
chương trình Java sang bytecode có thể làm cho chương trình chạy được trên nhiề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 11TÌM HIỂU VỀ NGÔN NGỮ LẬP TRÌNH
Hình 3.1: Sơ đồ hoạt động của các trình Java
Trình soạn
thảo Các tập tin
Trình
dị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ặt chẽ 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 trong ngô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ình khác.
Trang 12KHÁI NIỆM LẬP TRÌNH PHÂN TÁN
A1
B1
B1-Stub
B1-Skel Máy tính 1: Máy khách Máy tính 2: Máy chủ
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ác má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ên má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
Trang 13- 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ập trình phân tán
- Ứng dụng RMI gồm hai 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 ở 2 phía khách và chủ
- Ở máy khách: Lớp trung gian gọi là Stub(lớp móc), có nhiệm
vụ đóng gói tham đối, chuyển tham đối qua mạng đến máy chủ -Ở máy chủ: Lớp trung gian gọi là Skeletion (lớp nối), nhận
tham đối và gọi hàm tương ứng Kết quả hàm trả về nếu có,
được Skeletion trả về Stub
KHÁI NIỆM LẬP TRÌNH PHÂN TÁN
Trang 14KỸ THUẬT LẬP TRÌNH PHÂN TÁN RMI
I Xây dựng chương trình nguồn (code)
Đối với Server:
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ép Client gọi và các lớp thực hiện giao diện cần thiết
2 Tạo chương trình ứng dụng Server
Đối với Client:
Tạo chương trình ứng dụng Client
Trang 15
II Dịch chương trình (dùng lệnh Javac)
- Dịch Interface
- Dịch Server
- Tạo File.jar có chứa File.class cần cho ứng dụng
- Sử dụng trình rmic.exe trong thư mục Jdk\Bin để tạo 2
lớp
trung gian Stub.class và Skel.class
- 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
III Chạy chương trình
1 Khởi động bộ quản lý RMI
2 Chạy ứng dụng Server
3 Chạy ứng dụng Client
KỸ THUẬT LẬP TRÌNH PHÂN TÁN RMI
Trang 16DEMO CHƯƠNG TRÌNH
Kết quả của bbProcducer
Kết quả của bbconsumer
Trang 17Chân thành cảm ơn!