1.1. RMI là gì?RMI là một công nghệ của các hệ thống phân tán cho phép một máy ảo Java(JVM) gọi những phương thức của đối tượng nằm trên máy ảo Java khác ở trong cũng một mạng.RMI tạo ra các ứng dụng phân tán có độ tin cậy một cách rất dễ dàng nhưng chỉ là cơ chế danh riêng cho ngono ngữ Java.1.2. RMI làm việc như thế nào?Các hệ thống sử dụng RMI cho việc truyền thông tiêu biểu được phân thành 2 loại: Client và Server. Server cung cấp dịch vụ RMI và Client gọi các phương thức do Server cung cấp. RMI Server phải đăng ký một dịch vụ tìm kiếm, cho phép các Client tìm thấy thông tin Server cung cấp, hoặc chúng có thể tham chiếu tới dịch vụ khác. Một ứng dụng chạy nền cho RMI có tên là rmiregistry. Ứng dụng này chạy và xử lý độc lập với các chương trình RMI, nó cho phép các đối tượng trên Server đăng ký tên của mình. Mỗi lần một đối tượng được đăng ký xong, nó sẽ đợi sau đó lời gọi từ phía Client.
MỤC LỤC MỤC LỤC PHẦN 1: HỆ ĐIỀU HÀNH CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1 GIỚI THIỆU CÁC TRẠNG THÁI CỦA TIẾN TRÌNH CẤU TRÚC CỦA TIẾN TRÌNH TẠO LẬP TIẾN TRÌNH 5 GIAO TIẾP GIỮA CÁC TIẾN TRÌNH CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ 11 MƠ HÌNH CÀI ĐẶT THUẬT TỐN 11 CHƯƠNG 3: TRIỂN KHAI VÀ DEMO 13 CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 14 NHỮNG KẾT QUẢ ĐẠT ĐƯỢC 14 HƯỚNG PHÁT TRIỂN 14 PHẦN 2: LẬP TRÌNH MẠNG 15 CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 15 TỔNG QUAN VỀ RMI( REMOTE INVOKE METHOD) 15 CƠ CHẾ THỰC THI CỦA MỘT ỨNG DỤNG RMI 19 CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ 21 PHÂN TÍCH KIẾN TRÚC HỆ THỐNG 21 THIẾT KẾ HỆ THỐNG 21 CHƯƠNG 3: TRIỂN KHAI 22 MÔI TRƯỜNG CÀI ĐẶT 22 KẾT QUẢ THỰC HIỆN CÁC CHỨC NĂNG 22 CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 23 NHỮNG KẾT QUẢ ĐẠT ĐƯỢC 23 HƯỚNG PHÁT TRIỂN 23 TÀI LIỆU THAM KHẢO 24 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên PHẦN 1: HỆ ĐIỀU HÀNH TIÊU ĐỀ: TÌM HIỂU CƠ CHẾ GIAO TIẾP GIỮA QUÁ TRÌNH DÙNG MESSAGE QUEUE CHƯƠNG 1: CƠ SỞ LÝ THUYẾT GIỚI THIỆU 1.1 Tiến trình Linux - Một đặc điểm bật Linux khả chạy đồng thời nhiều chương trình Hệ Điều Hành xem đơn thể mã lệnh mà điều khiển tiến trình (process) Một chương trình bao gồm nhiều tiến trình kết hợp với - Đối với Hệ Điều Hành, tiến trình hoạt động chia sẻ tốc độ xử lý CPU, dùng chung vùng nhớ tài nguyên hệ thống khác Các tiến trình điều phối xoay vòng Hệ Điều Hành Một chương trình mở rộng dần ra, có lúc cần phải tách thành nhiều tiến trình để xử lý cơng việc độc lập với Các lệnh Linux thực tế lệnh riêng lẻ có khả kết hợp truyền liệu cho thông qua chế như: hang đợi thông điệp, đường ống pipe, chuyển hướng xuất nhập (redirect), phát sinh tín hiệu (signal), … Chúng gọi chế giao tiếp liên tiến trình (IPC – Inter Process Comunication) Đối với tiến trình, tìm hiểu cách tạo, hủy, tạm dừng tiến trình, đồng hóa tiến trình giao tiếp tiến trình với - Xây dựng ứng dụng mơi trường đa tiến trình Linux cơng việc khó khăn Khơng mơi trường đơn nhiệm, mơi trường đa nhiệm tiến trình có tài ngun hạn hẹp Tiến trình hoạt động phải trạng thái tôn trọng sẵn sàng nhường quyền xử lý CPU cho tiến trình khác thời điểm nào, hệ thống có u cầu Nếu tiến trình xây dựng không tốt, đổ vỡ gây lỗi, làm treo tiến trình khác hệ thống hay chí phá vỡ (crash) Hệ Điều Hành - Định nghĩa tiến trình: thực thể điều khiển đoạn mã lệnh có riêng khơng gian địa chỉ, có ngăn xếp stack riêng rẽ, có bảng chứa thơng số mơ tả file mở tiến trình đặc biệt có định danh PID (Process Identify) toàn hệ thống vào thời điểm tiến trình chạy Như thấy, Trịnh Minh An – 14T2 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên tiến trình khơng phải chương trình (tuy đơi lúc chương trình đơn giản cấn tiến trình để hồn thành tác vụ, trường hợp xem tiến trình chương trình một) Rất nhiều tiến trình thực thi máy với Hệ Điều Hành, người dùng nhiều người dùng đăng nhập khác Ví dụ shell bash tiến trình thực thi lệnh ls hay cp Bản thân ls, cp lại tiến trình hoạt động tách biệt khác - Trong Linux, tiến trình cấp khơng gian địa nhớ phẳng 4GB Dữ liệu tiến trình khơng thể đọc truy xuất tiến trình khác Hai tiến trình khác khơng thể xâm phạm biến Tuy nhiên, muốn chia sẻ liệu hai tiến trình, Linux cung cấp cho vùng không gian địa chung để làm điều 1.2 Các đặc điểm tiến trình Điều phối hoạt động tiến trình vấn đề phức tạp, đòi hỏi hệ điều hành giải phải xem xét nhiều yếu tố khác để đạt mục tiêu đề Một số đặc tính tiến trình cần quan tâm tiêu chuẩn điều phối: - Tính hướng nhập/xuất tiến trình - Tính hướng xử lý tiến trình - Tiến trình tương tác hay xử lý theo lô - Độ ưu tiên tiến trình - Thời gian xử dụng CPU tiến trình - Thời gian lại tiến trình cần để hồn tất CÁC TRẠNG THÁI CỦA TIẾN TRÌNH - Khi chương trình chạy từ dòng lệnh, nhấn phím Ctrl+z để tạm dùng chương trình đưa vào hoạt động phía hậu trường (background) Tiến trình Linux có trạng thái: Đang chạy (running) : lúc tiến trình chiếm quyền xử lý CPU dùng tính tốn hay thực cơng việc Chờ (waiting) : tiến trình bị Hệ Điều Hành tước quyền xử lý CPU, chờ đến lược cấp phát khác Trịnh Minh An – 14T2 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên Tạm dừng (suspend) : Hệ Điều Hành tạm dừng tiến trình Tiến trình đưa vào trạng thái ngủ (sleep) Khi cần thiết có nhu cầu, Hệ Điều Hành đánh thức (wake up) hay nạp lại mã lệnh tiến trình vào nhớ Cấp phát tài nguyên CPU để tiến trình tiếp tục hoạt động - Trên dòng lệnh, thay dùng lệnh Ctrl+z, sử dụng lệnh bg để đưa tiến trình vào hoạt động phía hậu trường Chúng ta u cầu tiến trình chạy cú pháp & Ví dụ: $ls –R & Lệnh fg đem tiến trình trở hoạt động ưu tiên phía trước Thực tế đăng nhập vào hệ thống tương tác dòng lệnh, lúc tiến trình shell bash Khi gọi lệnh có nghĩa yêu cầu bash tạo thêm tiến trình thực thi khác Về mặt lập trình, dùng lệnh fork() để nhân tiến trình từ tiến trình cũ Hoặc dùng lệnh system() để triệu gọi tiến trình Hệ Điều Hành Hàm exec() có khả tạo tiến trình khác CẤU TRÚC CỦA TIẾN TRÌNH - Chúng ta xem Hệ Điều Hành quản lý tiến trình nào? Nếu có hai người dùng: user1 user2 đăng nhập vào chạy chương trình grep đồng thời Thực tế, Hệ Điều Hành quản lý nạp mã chương trình grep vào hai vùng nhớ khác gọi phân vùng tiến trình Hình sau cho thấy cách phân chia chương trình grep thành hai tiến trình cho hai người khác sử dụng Trong hình này, user1 chạy chương trình grep tìm chuỗi abc tập tin file1 “ $grep abc file1 ”, user2 chạy chương trình grep tìm chuỗi cde tập tin file2 “$grep cde file2” Chúng ta cần ta cần nhớ hai người dùng user1 user2 hai máy tính khác đăng nhập vào máy chủ Linux gọi grep chạy đồng thời Hình trạng khơng gian nhớ Hệ Điều Hành Linux chương trình grep phục vụ người dùng - Nếu dùng lệnh ps, hệ thống liệt kê cho thông tin tiến trình mà Hệ Điều Hành kiểm sốt, Ví dụ: $ps –af Mỗi tiến trình gán cho định danh để nhận dạng gọi PID (process identify) PID thường số nguyên dương có giá trị từ 2- Trịnh Minh An – 14T2 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên 32768 Khi tiến trình yêu cầu khởi động, Hệ Điều Hành chọn lấy số (chưa bị tiến trình chạy chiếm giữ) khoảng số nguyên cấp phát cho tiến trình Khi tiến trình chấm dứt, hệ thống thu hồi số PID để cấp phát cho tiến trình khác lần sau PID giá trị giá trị dành cho tiến trình gọi init Tiến trình init chạy khởi động Hệ Điều Hành init tiến trình quản lý tạo tiến trình khác Ở ví dụ trên, thấy lệnh ps –af hiển thị tiến trình grep chạy user1 user2 với số PID 101 102 - Mã lệnh thực thi lệnh grep chứa tập tin chương trình nằm đĩa cứng Hệ Điều Hành nạp vào vùng nhớ Như thấy lược đồ trên, tiến trình Hệ Điều hành phân chia rõ ràng: vùng chứa mã lệnh (code) vùng chứa liệu (data) Mã lệnh thường giống sử dụng chung Linux quản lý cho phép tiến trình chương trình sử dụng chung mã lệnh Thư viện Trừ thư viện đặc thù thư viện chuẩn Hệ Điều Hành cho phép chia sẻ dùng chung tiến trình hệ thống Bằng cách chia sẻ thư viện, kích thước chương trình giảm đáng kể Mã lệnh chương trình chạy hệ thống dạng tiến trình đỡ tốn nhớ - Trừ mã lệnh thư viện chia sẻ, liệu khơng thể chia sẻ tiến trình Mỗi tiến trình sở hữu phân đoạn liệu riêng Ví dụ tiến trình grep user1 nắm giữ lưu giữ biến s có giá trị 'abc', grep user2 nắm giữ lại có biến s với giá trị 'cde' Mỗi tiến trình hệ thống dành riêng cho bảng mô tả file (file description table) Bảng chứa số mô tả áp đặt cho file mở Khi tiến trình khởi động, thường Hệ Điều Hành mở sẳn cho file : stdin (số mô tả 0), stdout (số mô tả 1), stderr (số mô tả 2) Các file tượng trưng cho thiết bị nhập, xuất, thông báo lỗi Chúng ta mở thêm file khác Ví dụ user1 mở file file1, user2 mở file file2 Hệ Điều Hành cấp phát số mô tả file cho tiến trình lưu riêng chúng bảng mơ tả file tiến trình - Ngồi ra, tiến trình có riêng ngăn xếp stack để lưu biến cục giá trị trả sau lời gọi hàm Tiến trình dành cho khoảng không gian riêng để lưu biến môi trường Chúng ta dùng lệnh putenv getenv để đặt riêng biến mơi trường cho tiến trình a) Bảng thơng tin tiến trình: Hệ Điều Hành lưu giữ cấu trúc danh sách bên hệ thống gọi bảng tiến trình (process table) Bảng tiến trình quản lý tất PID hệ thống với thông tin chi tiết tiến trình chạy Ví dụng gọi lệnh ps, Linux thường đọc thông tin bảng tiến trình hiển thị lệnh hay tên tiến trình gọi: thời gian chiếm giữ CPU tiến trình, tên người sử dụng tiến trình, … Trịnh Minh An – 14T2 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên b) Xem thơng tin tiến trình: Lệnh ps Hệ Điều Hành dùng để hiển thị thông tin chi tiết tiến trình Tùy theo tham số, ps cho biết thơng tin tiến trình người dùng, tiến trình hệ thống tất tiến trình chạy Ví dụ ps đưa chi tiết tham số -af Trong thông tin ps trả về, UID tên người dùng gọi tiến trình, PID số định danh mà hệ thống cấp cho tiến trình, PPID số định danh tiến trình cha (parent PID) Ở gặp số tiến trình có định danh PPID 1, định danh tiến trình init, gọi chạy hệ thống khởi động Nếu hủy tiến trình init Hệ Điều Hành chấm dứt phiên làm việc STIME thời điểm tiến trình đưa vào sử dụng TIME thời gian chiếm dụng CPU tiến trình CMD tồn dòng lệnh tiến trình triệu gọi TTY hình terminal ảo nơi gọi thực thi tiến trình Như biết, người dùng đăng nhập vào hệ thống Linux từ nhiều terminal khác để gọi tiến trình Để liệt kê tiến trình hệ thống, sử dụng lệnh: $ps –ax TẠO LẬP TIẾN TRÌNH a) Gọi tiến trình hàm system() Chúng ta gọi tiến trình khác bên chương trình thực thi hàm system() Có nghĩa tạo tiến trình từ tiến trình chạy Hàm system() khai báo sau: #include int system( const char (cmdstr) ) Hàm gọi chuỗi lệnh cmdstr thực thi chờ lệnh chấm dứt quay nơi gọi hàm Nó tương đương với việc bạn gọi shell thực thi lệnh hệ thống: $sh –c cmdstr system() trả mã lỗi 127 không khởi động shell để gọi lệnh cmdstr Mã lỗi -1 gặp lỗi khác Còn lại, mã trả system() mã lỗi cmdstr sau lệnh gọi trả Ví dụ sử dụng hàm system(), system.c #include #include int main() { printf( "Thuc thi lenh ps voi system\n" ); system( "ps –ax" ); system(“mkdir daihoc”); system(“mkdir caodang”); printf( "Thuc hien xong \n" ); exit( ); } Hàm system() sử dụng để gọi lệnh “ps –ax” Hệ Điều Hành Trịnh Minh An – 14T2 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên b) Nhân tiến trình với hàm fork() - Thay tiến trình đơi bất lợi với Đó tiến trình chiếm giữ tồn khơng gian tiến trình cũ khơng có khả kiểm sốt điều khiển tiếp tiến trình hành sau gọi hàm exec Cách đơn giản mà chương trình Linux thường dùng sử dụng hàm fork() để nhân hay tạo tiến trình fork() hàm đặc biệt, thực thi, trả giá trị khác lần thực thi, so với hàm bình thường trả giá trị lần thực thi Khai báo hàm fork() sau: #include #include pid_t fork() Cơ chế phân chia tiến trình fork() - Nếu thành cơng, fork() tách tiến trình hành tiến trình (dĩ nhiên Hệ Điều Hành phải cấp phát thêm không gian nhớ để tiến trình hoạt động) Tiến trình ban đầu gọi tiến trình cha (parent process) tiến trình gọi tiến trình (child process) Tiến trình có số định danh PID riêng biệt ngồi ra, tiến trình mang thêm định danh PPID số định danh PID tiến trình cha - Sau tách tiến trình, mã lệnh thực thi hai tiến trình chép hồn tồn giống Chỉ có dấu hiệu để nhận dạng tiến trình cha tiến trình con, trị trả hàm fork() Bên tiến trình con, hàm fork() trả trị Trong bên tiến trình cha, hàm fork() trả trị số nguyên PID tiến trình vừa tạo Trường hợp khơng tách tiến trình, fork() trả trị -1 Kiểu pid_t khai báo định nghĩa uinstd.h kiểu số nguyên (int) - Đoạn mã điều khiển sử dụng hàm fork() thường có dạng chuẩn sau: Trịnh Minh An – 14T2 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên pid_t new_pid; new_pid = fork(); // tách ti ế n trình switch (new_pid) { case -1: printf( "Khong the tao tien trinh moi" ); break; case 0: printf( "Day la tien trinh con" ); // mã l ệ nh dành cho ti ế n trình đ ặ t break; default: printf( "Day la tien trinh cha" ); // mã l ệ nh dành cho ti ế n trình cha đ ặ t break; } c) Kiểm sốt đợi tiến trình - Khi fork() tách tiến trình thành hai tiến trình cha con, thực tế hai tiến trình cha lẫn tiến trình hoạt động độc lập Đơi lúc tiến trình cha cần phải đợi tiến trình thực xong tác vụ tiếp tục thực thi Ở ví dụ trên, thực thi, thấy tiến trình cha kết thúc mà tiến trình in thơng báo tiến trình cha tiến trình tranh gởi kết hình Chúng ta khơng muốn điều này, muốn tiến trình cha kết thúc tiến trình hồn tất thao tác Hơn nữa, chương trình cần thực xong tác vụ đến chương trình cha Để làm việc này, sử dụng hàm wait(): #include #include pid_t wait(int &stat_loc); Hàm wait() gọi yêu cầu tiến trình cha dừng lại chờ tiến trình kết thúc trước thực tiếp lệnh điều khiển tiến trình cha wait() làm cho liên hệ tiến trình cha tiến trình trở nên Khi tiến trình kết thúc, hàm trả số PID tương ứng tiến trình Nếu truyền thêm đối số stat_loc khác NULL cho hàm wait() trả trạng thái mà tiến trình kết thúc biến stat_loc Chúng ta sử dụng macro khai báo sẵn sys/wait.h sau: WIFEXITED (stat_loc) Trả trị khác tiến trình kết thúc bình thường WEXITSTATUS (stat_loc) Nếu WIFEXITED trả trị khác 0, macro trả mã lỗi tiến trình WIFSIGNALED (stat_loc) Trả trị khác tiến trình kết thúc tín hiệu gửi đến WTERMSIG(stat_loc) Nếu WIFSIGNALED khác 0, macro cho biết số tín hiệu hủy tiến trình Trịnh Minh An – 14T2 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên WIFSTOPPED(stat_loc) Trả trị khác tiến trình dừng WSTOPSIG(stat_loc) Nếu WIFSTOPPED trả trị khác 0, macro trả số hiệu signal GIAO TIẾP GIỮA CÁC TIẾN TRÌNH Linux cung cấp số chế giao tiếp tiến trình gọi IPC (InterProcess Communication): o Trao đổi tín hiệu (signals handling) o Trao đổi chế đường ống (pipe) o Trao đổi thông qua hàng đợi thông điệp (message queue) o Trao đổi phân đoạn nhớ chung (shared memory segment) o Giao tiếp đồng dùng semaphore o Giao tiếp thông qua socket (Inter-Process Communication) Cơ chế cho phép tiến trình giao tiếp với đồng hóa hành động chúng Hệ thống thơng điệp – tiến trình giao tiếp với không cần phải qua biến dùng chung IPC cung cấp hai thao tác bản: o send(message) o receive(message) Nếu tiến trình P Q muốn giao tiếp với nhau, chúng phải: o tạo đường giao tiếp chúng o trao đổi thông điệp thơng qua send/receive Các tiến trình thực thi độc lập hay hợp tác Các tiến trình hợp tác phải có phương tiện giao tiếp với nhau: chia sẻ nhớ, truyền thông điệp Phương pháp chia sẻ nhớ yêu cầu tiến trình giao tiếp chia sẻ số biến Các tiến trình trao đổi thơng tin thơng qua việc sử dụng biến dùng chung a Trao đổi thông qua hàng đợi thông điệp (message queue): Ý tưởng hàng đợi thông điệp hàng đợi đơn giản Hai (hoặc nhiều) tiến trình trao đổi thông tin thông qua truy cập vào hàng đợi thông điệp hệ thống sử dụng chung cho tiến trình Các thơng điệp gửi vào hàng đợi lúc đọc tiến trình khác Mỗi thơng điệp nhận dạng phân loại để tiến trình chọn Trịnh Minh An – 14T2 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Ngun thơng điệp thích hợp Các tiến trình phải chia sẻ khóa chung(key) để có quyền truy cập vào thơng điệp hàng đợi vị trí b Khởi tạo hàng đợi thông điệp: Hàm msgget() khởi tạo hàng đợi tin nhắn mới, #include ; #include ; int msqid = msgget(key_t key, int msgflg); Và trả ID hàng đợi thơng điệp (msqid) hàng đợi tương ứng với đối số khóa(key) Giá trị truyền dạng đối số msgflg phải số nguyên đại diện cài đặt cho quyền cờ điều khiển hàng đợi c Kiểm sốt hang đợi thơng điệp: Hàm msgctl () thay đổi quyền đặc tính khác hàng đợi thông điệp Chủ sở hữu người tạo hàng đợi thay đổi quyền sở hữu quyền cách sử dụng msgctl() Ngồi ra, tiến trình có quyền làm sử dụng msgctl() cho hoạt động kiểm soát Hàm msgctl () nguyên mẫu sau: int msgctl (int msqid, int cmd, struct msqid_ds * buf) Đối số msqid phải ID hàng đợi thông điệp có Đối số cmd số sau: IPC_STAT: Đặt thông tin trạng thái hàng đợi cấu trúc liệu buf Tiến trình phải có quyền đọc để lời gọi hàm thành công IPC_SET: Đặt ID người dùng ID nhóm người dùng chủ sở hữu, quyền kích thước (số byte) hàng đợi tin nhắn Quá trình phải có ID người dùng chủ sở hữu, người tạo hàng đợi siêu người dùng để lời gọi hàm thành cơng IPC_RMID: Xóa hàng đợi tin nhắn định đối số msqid d Gửi nhận thông điệp: Hàm msgsnd() msgrcv() gửi nhận tin nhắn tương ứng: int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); int msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg); Đối số msqid phải ID hàng đợi thơng điệp có Đối số msgp trỏ trỏ đến cấu trúc chứa kiểu tin nhắn văn Đối số msgsz định chiều dài thông điệp theo byte Trịnh Minh An – 14T2 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên Cấu trúc thành viên msgtyp kiểu thông điệp nhận theo quy định trình gửi Đối số msgflg định hành động cần thực nhiều điều sau đúng: Số byte có hàng đợi msg_qbytes Tổng số tin nhắn tất hàng đợi toàn hệ thống với giới hạn hệ thống áp đặt Những hành động sau: Nếu ( msgflg & IPC_NOWAIT ) khác 0, tin nhắn không gửi trình gọi trở lại Nếu ( msgflg & IPC_NOWAIT ) 0, trình gọi tạm ngừng thực điều sau xảy ra: o Điều kiện chịu trách nhiệm cho việc tạm ngưng khơng tồn tại, trường hợp này, tin nhắn gửi o Mã nhận dạng hàng đợi tin nhắn msqid bị xóa khỏi hệ thống; điều xảy ra, errno đặt EIDRM -1 trả o Q trình gọi nhận tín hiệu bị bắt; trường hợp này, tin nhắn không gửi trình gọi lại tiếp tục thực Sau hồn tất thành cơng, hành động sau thực cấu trúc liệu liên kết với msqid: msg_qnum tăng thêm msg_lspid đặt ID tiến trình trình gọi msg_stime đặt thời gian Trịnh Minh An – 14T2 10 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ MƠ HÌNH CÀI ĐẶT THUẬT TỐN 1.1 Ý tưởng Chương trình gồm có: o tiến trình writer reader o file: input(chứa liệu đầu vào) output(chứa liệu đầu ra) Trình từ thực tiến trình Tiến trình 1(writer) Tiến trình 2(reader) Khai báo cấu trúc cho MessageQue Khai báo cấu trúc cho MessageQue giống với tiến trình Đăng ký MessageQueue với khóa thứ để gửi liệu lên Đăng ký MessageQueue với khóa mà tiến trình đăng ký Đọc file input lấy dòng Lấy liệu từ MessageQueue mà tiến liệu(Gồm tốn tử tốn hạng) sau trình gửi lên, sau sử dụng thuật tốn gửi dòng liệu lên MessageQueue ký pháp Ba Lan(Prefix/Postfix) xử lý dòng thơng điệp lấy kết gửi với ID đăng ký lại lên MessageQueue Lấy liệu xử lý từ tiến trình từ MessageQueue sau ghi file output Đóng tiến trình Đóng tiến trình Sau tiến trình 1(writer) đọc liệu từ input gửi lên MessageQueue ta sử dụng hàm fork() để tạo tiến trình Và tiến trình ta gọi thực thi tiến trình 2(reader) để xử lý Sau kết thực tiến trình ta tiếp tục thực cơng việc lại tiến trình 1(writer) 1.2 Thuật toán ký pháp Ba Lan Ký pháp Ba Lan nhà toán học Jan Lukasiewicz đề xuất vào năm 1920 Đây thuật toán biểu diễn biểu thức cách đặt tốn tử lên phía trước (ví dụ a + b thành + a b) Đây gọi Biểu thức tiền tố (Prefix) Khác hẳn với biểu thức thông thường ta học (Biểu thức trung tố – infix), Prefix loại bỏ hoàn toàn dấu ngoặc ( ), giảm bớt độ phiền nhiễu thứ tự phép toán Trịnh Minh An – 14T2 11 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên Trái ngược lại với Prefix Biểu thức hậu tố (Postfix) Nếu Prefix biểu diễn toán tử phía trước tốn hạng, Postfix biểu diễn đằng sau (a + b thành a b +) Postfix nhà khoa học máy tính Charles Hamblin phát minh vào năm 1950, trước sử dụng tên gọi RPN (Reverse Polish Notation) Thuật toán sau: Ta cho vòng lặp chạy hết chuỗi: Nếu số hạng, ta Push vào mảng Output Nếu toán tử: o Thực viện vòng lặp kiểm tra, đỉnh Stack tốn tử, mà có độ ưu tiên lớn tốn tử ta lấy tốn tử (Pop) khỏi mảng Stack Push vào mảng Output o Push toán tử vào mảng Stack Nếu dấu “(“: ta Push vào mảng Stack Nếu dấu “)”: Pop phần tử Stack add vào mảng Output gặp dấu “(” (tất nhiên phải Pop “(”) Hồn tất vòng lặp, phần tử Stack ta Pop phần tử mảng Stack Push vào Output Ví dụ minh họa: Chuyển đổi biểu thức 5.5/2 + 3*(4/8 – 2) sang Postfix Trịnh Minh An – 14T2 12 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên CHƯƠNG 3: TRIỂN KHAI VÀ DEMO File input.txt chứa liệu đầu vào Thực thi tiến trình writer Trịnh Minh An – 14T2 13 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên File output.txt chứa kết sau thực thi tiến trình CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN NHỮNG KẾT QUẢ ĐẠT ĐƯỢC - Hiểu tiến trình Linux - Nắm bắt trạng thái tiến trình, cách xử lý tiến trình hàm System(), giao tiếp tiến trình hàng đợi thơng điệp - Biết cách tạo tiến trình con(đa tiến trình) cách sử dụng hàm fork() - Nắm bắt thuật toán ký pháp Ba Lan HƯỚNG PHÁT TRIỂN - Xây dựng giao diện cho chương trình bắt mắt trực quan Trịnh Minh An – 14T2 14 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên PHẦN 2: LẬP TRÌNH MẠNG TIÊU ĐỀ: TÌM HIỂU VỀ RMI ỨNG DỤNG XÂY DỰNG CHƯƠNG TRÌNH GIÁM SÁT HỆ THỐNG MẠNG LAN CHƯƠNG 1: CƠ SỞ LÝ THUYẾT TỔNG QUAN VỀ RMI( REMOTE INVOKE METHOD) 1.1 RMI gì? RMI cơng nghệ hệ thống phân tán cho phép máy ảo Java(JVM) gọi phương thức đối tượng nằm máy ảo Java khác mạng RMI tạo ứng dụng phân tán có độ tin cậy cách dễ dàng chế danh riêng cho ngono ngữ Java 1.2 RMI làm việc nào? Các hệ thống sử dụng RMI cho việc truyền thông tiêu biểu phân thành loại: Client Server Server cung cấp dịch vụ RMI Client gọi phương thức Server cung cấp RMI Server phải đăng ký dịch vụ tìm kiếm, cho phép Client tìm thấy thơng tin Server cung cấp, chúng tham chiếu tới dịch vụ khác Một ứng dụng chạy cho RMI có tên rmiregistry Ứng dụng chạy xử lý độc lập với chương trình RMI, cho phép đối tượng Server đăng ký tên Mỗi lần đối tượng đăng ký xong, đợi sau lời gọi từ phía Client Nhiều dịch vụ đăng ký với đăng ký Các đối tượng Client gửi thông điệp tới phương thức xa Trước phương thức xa thực thi Client phải có tham chiếu Server Điều thực dịch vụ tìm kiếm đăng ký RMI Đối Trịnh Minh An – 14T2 15 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên tượng Client yêu cầu tên dịch vụ nhận URL Nên nhớ URL cho HTTP, hầu hết giao thức đại diện sử dụng cú pháp URL Định dạng sử dụng RMI để đại diện cho đối tượng tham chiếu từ xa sau: rmi://hostname:port/servicename Đối tượng stub gọi đối tượng skeletion Trong hostname tên Server địa IP Server, port số hiệu cổng cung cấp dịch vụ, servicename chuỗi mô tả dịch vụ Những thông tin chi tiết hoạt động mạng ln suốt với người phát triển ứng dụng làm việc với đối tượng xa, việc trở nên đơn giản làm việc với đối tượng máy cục Điều thực nhơ phép chia thông minh hệ thộng RMI thành thành phần, stub skeleton Tại RMI Server, đối tượng skeleton có nhiệm vụ lắng nghe yêu cầu chuyển yêu cầu tới dịch vụ RMI Sau người phát triển tạo giao diện RMI, người phải định nghĩa cụ thể giao diện Đối tượng định nghĩa gọi đối tượng skeleton 1.3 Kiến trúc chương trình RMI Kiến trúc chương trình theo chế RMI mơ tả hình sau: Kiến trúc chương trình RMI Trịnh Minh An – 14T2 16 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên Trong đó: Server chương trình cung cấp đối tượng gọi từ xa Client chương trình có tham chiếu đến phương thức đối tương xa Server Stub chứa tham chiếu đến phương thức xa Server Skeleton đón nhận tham chiếu từ Stub để kích hoạt phương thức tương ứng Server Remote Reference Layer hệ thống truyền thông RMI Transport tầng giao vận dựa giao thức TCP/IP máy mạng Bằng cách sử dụng kiến trúc phân tầng mà tầng phân cấp thay mà không ảnh hưởng tới tầng lại hệ thống 1.4 Lớp Stub Skeleton truyền tin với RMI Stub: (dùng phía Client) đối tượng ủy quyền, truyền tải yêu cầu đối tượng tới server RMI Người phát triển không cần quan tâm đến tài nguyên RMI nằm đâu, chạy nào, đáp ứng đầy đủ yêu cầu Client RMI gọi phương thức Server dựa đối tượng ủy quyền Skeleton: (Dùng phía Server) Skeleton khơng cung cấp cài đặt dịch vụ RMI Nó đóng vai trò chương trình nhận u cầu, truyền yêu cầu JAVA sử dụng rmic.exe để tạo lớp trung gian Trịnh Minh An – 14T2 17 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên Giao tiếp lớp Stub skeleton RMI 1.5 Các chế liên quan ứng dụng RMI Trong ứng dụng phân tán cần có chế sau: Cơ chế định vị đối tượng xa(Lacate remote object) Cơ chế giao tiếp với đối tượng xa(Communicate with remote object) Tải lớp danh bytecodes cho lớp mà chuyển tải qua lại máy ảo(Load class bytecodes for object that are passed around) Trịnh Minh An – 14T2 18 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên Dịch vụ ánh xạ tên RMI Trong đó: Server đăng ký (bind) cho đối tượng gọi từ xa với dịch vụ ánh xạ tên (Registry Server) Client tìm đối tượng xa thơng qua tên đăng ký Registry Server (lookup) tiếp gọi phương thức xa CƠ CHẾ THỰC THI CỦA MỘT ỨNG DỤNG RMI 2.1 Tiến trình thực thi ứng dụng RMI Bước 0: Server tạo đối tượng cho phép gọi từ xa với Stub Skeleton chúng Bước 1: Server sử dụng lớp Naming để đăng ký tên cho đối tượng từ xa Bước 2: Naming đăng ký Stub đối tượng từ xa với Registry Server Bước 3: Registry Server sẵn sang cung cấp tham chiếu đến đối tượng từ xa có yêu cầu Bước 4: Client yêu cầu Naming định vị đối tượng xa thông qua tên đăng ký(phương thức lookup) với dịch vụ tên Bước 5: Naming tải Stub đối tượng xa từ dịch vụ tên mà đối tượng đăng ký Client Bước 6: Cài đặt đối tượng Stub trả tham chiếu đối tượng xa cho Client Bước 7: Client thực thi lời gọi phương thức xa thông qua đối tượng Stub Trịnh Minh An – 14T2 19 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên Tiến trình thực thi ứng dụng RMI 2.2 Các bước phát triển triển khai ứng dụng RMI 1) Định nghĩa giao diện remote 2) Phát triển đối tượng remote, đối tượng thực thi giao diện remote 3) Phát triển chương trình Client 4) Biên dịch source codes 5) Tạo client stubs server skeletons 6) Khởi động RMI registry 7) Khời động đối tượng server remote 8) Chạy chương trình Client Trịnh Minh An – 14T2 20 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ PHÂN TÍCH KIẾN TRÚC HỆ THỐNG THIẾT KẾ HỆ THỐNG 2.1 Sơ đồ Usecase 2.2 Sơ đồ lớp Sơ đồ lớp 2.3 Thiết kế Database 2.3.1 Khu vực(Zone) Hình 1: Bảng Khu vực(Zone) 2.3.2 Phòng máy(Lab) Hình 2: Bảng Phòng máy(Lab) 2.3.3 Computer Bảng máy tính(Computer) Trịnh Minh An – 14T2 21 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên CHƯƠNG 3: TRIỂN KHAI MƠI TRƯỜNG CÀI ĐẶT 1.1 Ngơn ngữ: Java RMI 1.2 Database: MySQL 1.3 Công cụ hỗ trợ: Eclipse, Netbean KẾT QUẢ THỰC HIỆN CÁC CHỨC NĂNG Khời động Server: Khởi động giao diện Client: Trịnh Minh An – 14T2 22 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN NHỮNG KẾT QUẢ ĐẠT ĐƯỢC - Nắm lập trình phân tán - Phương thức triệu gọi từ xa, vai trò lớp trung gian(Stub Skeleton) - Cài đặt ứng dụng phân tán RMI ứng dụng vào xây dựng chương trình giám sát hệ thống mạng LAN HƯỚNG PHÁT TRIỂN - Xây dựng giao diện cho chương trình bắt mắt trực quan Trịnh Minh An – 14T2 23 Đồ án sở ngành mạng GVHD: Ths Nguyễn Văn Nguyên TÀI LIỆU THAM KHẢO Bài giảng mơn học “Lập Trình Mạng” – Thầy Mai Văn Hà TS Lê Văn Sơn - Hệ tin học phân tán - Nhà xuất Đại học quốc gia Thành phố Hồ Chí Minh - 2002 Nguyễn Bá Hùng, Nguyễn Huy Cơng, Giáo trình lập trình mạng truyền thông Trịnh Minh An – 14T2 24