HỌC VIỆN KỸ THUẬT MẬT Mà KHOA CÔNG NGHỆ THÔNG TIN ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ BÀI TẬP MÔN HỌC NGUYÊN LÝ HỆ ĐIỀU HÀNH VIẾT CHƯƠNG TRÌNH MÔ PHỎNG QUÁ TRÌNH ĐỒNG BỘ TIẾN TRÌNH THEO THEO THUẬT TOÁN 5 TRIẾT GIA ĂN TỐI BẰNG NGÔN NGỮ JAVA Ngành: An toàn thông tin Sinh viên thực hiện: Nguyễn Văn Hiệp Phạm Công Hưởng Nguyễn Anh Tuấn Lớp: AT16C0405 Người hướng dẫn: TS. Nguyễn Đào Trường Khoa Công nghệ thông tin – Học viện Kỹ thuật mật mã Hà Nội, 2022 NHẬN XÉT VÀ CHO ĐIỂM CỦA GIÁO VIÊN ..................................................................................................................................... ..................................................................................................................................... .............................................................. Nếu không có phần mềm, máy tính chỉ là một thiết bị điện tử thông thường. Với sự hỗ trợ của phần mềm, máy tính có thể lưu trữ, xử lý thông tin và người sử dụng có thể gọi lại được thông tin này. Phần mềm máy tính có thể chia thành nhiều loại: chương trình hệ thống, quản lý sự hoạt động của máy tính. Chương trình ứng dụng, giải quyết các vấn đề liên quan đến việc sử dụng và khai thác máy tính của người sử dụng. hệ điều hành thuộc nhóm các chương trình hệ thống và nó là một chương trình hệ thống quan trọng nhất đối với máy tính và cả người sử dụng. Hệ điều hành điều khiển tất cả các tài nguyên của máy tính và cung cấp một môi trường thuận lợi để các chương trình ứng dụng do người sử dụng viết ra có thể chạy được trên máy tính. Một máy tinh hiện đại có thể bao gồm: một hoặc nhiều processor, bộ nhớ, clocks, đĩa, giao diện mạng, và các thiết bị vào/ra khác. Tất cả nó tạo thành một hệ thống phức tạp. Để viết các chương trình để theo dõi tất cả các thành phần của máy tính và sử dụng chúng một cách hiệu quả, người lập trình phải biết processor thực hiện chương trình như thế nào, bộ nhớ lưu trữ thông tin như thế nào, các thiết bị đĩa làm việc (đọc/ghi) như thế nào, lỗi nào có thể xảy ra khi đọc một block đĩa,… đây là những công việc rất khó khăn và quá quá khó đối với người lập trình. Nhưng rất may cho cả người lập trình ứng dụng và người sử dụng là những công việc trên đã được hệ điều hành hỗ trợ nên họ không cần quan tâm đến cái đấy nữa. Chúng ta cần tìm hiểu về hệ điều hành đề có một cái nhìn tổng quát về những gì liên quan đến việc thiết kế cài đặt cũgn như chức năng của hệ điều hành để hệ điều hành đạt được mục tiêu: Giúp người sử dụng khai thác máy tính một cách dễ dàng và chương trình của người sử dụng có thể chạy được trên máy tính. “Bài toán bữa tối của các triết gia” (Dining Philosophers), một bài toán kinh điển về tương tranh và chia sẻ tài nguyên. Việc nghiên cứu bài toán sẽ cho chúng ta hiểu rõ hơn về khia cạnh này của hệ thống. CHƯƠNG 1: CƠ SỞ LÝ THUYẾT I, Tiến trình(processes). 1, Khái niệm: - Tiến trình là một bộ phận của một chương trình thực đang thực hiện, đơn vị thực hiện tiến trình là processer. - Vì tiến trình là một bộ phận của chương trình nên tương tự như chương trình tiến trình cũng sở hữu một con trỏ lệnh, một con trỏ stack, một tập các thanh ghi, một không gian địa chỉ trong bộ nhớ chính và tất cả các thông tin cần thiết khác để tiến trình có thể hoạt động được. 2, Các loại tiến trình: - Các tiến trình trong hệ thống chia làm hai loại: tiến trình tuần tự và tiến trình song song. + Tiến trình tuần tự là các tiến trình mà điểm khởi tạo của nó là điểm kết thúc của tiến trình trước đó. + Tiến trình song song là các tiến trình mà điểm khởi tạo của tiến trình này nằm ở thân của các tiến trình khác, thức là có thể khởi tạo một tiến trình mới khi các tiến trình đó chưa kết thúc. II, Luồng(Thread). Luồng là thành phần của tiến trình sở hữu ngăn xếp và thực thi độc lập ngay trong mã lệnh của tiến trình. Nếu như hệ điều hành có nhiều tiến trình thì trong mỗi tiến trình bạn có thể tạo ra nhiều tuyến hoạt động song song trong hệ điều hành. Ưu điểm của tuyến là chúng hoạt động trong cùng một không gian địa chỉ của tiến trình. Tập hợp một nhóm các tuyến có thể sử dụng chung biến toàn cục, vùng nhớ Heap, bảng mô tả file… của tiến trình, cơ chế liên lạc giữa tuyến đơn giản và hiệu quả hơn cơ chế liên lạc giữa các tiến trình với nhau. Ưu điểm của việc sử dụng luồng trong tiến trìnhh đơn giản hơn lập trình tuần tự. Nhiều thao tác xuất nhập hoặc hiển thị dữ liệu có thể tách rời và phân cho các tuyến chạy độc lập thực thi. III, Giải pháp Semaphore. Semaphore là một dóng góp quan trọng của nhà toán học E. W. Dijktra. Có thể xem Semaphore như là một mở rộng của Mutex locks. Semaphore S là một biến tài nguyên, khởi gán bằng một giá trị không âm, đó là khả năng phục vụ của tài nguyên tương ứng với nó. Ứng với S có một hàng đợi F(s) để lưu các tiến trình đang bị blocked trên S.
HỌC VIỆN KỸ THUẬT MẬT Mà KHOA CÔNG NGHỆ THÔNG TIN ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ BÀI TẬP MÔN HỌC NGUYÊN LÝ HỆ ĐIỀU HÀNH VIẾT CHƯƠNG TRÌNH MƠ PHỎNG Q TRÌNH ĐỒNG BỘ TIẾN TRÌNH THEO THEO THUẬT TỐN TRIẾT GIA ĂN TỐI BẰNG NGƠN NGỮ JAVA Ngành: An tồn thơng tin Sinh viên thực hiện: Nguyễn Văn Hiệp Phạm Công Hưởng Nguyễn Anh Tuấn Lớp: AT16C0405 Người hướng dẫn: TS Nguyễn Đào Trường Khoa Công nghệ thông tin – Học viện Kỹ thuật mật mã Hà Nội, 2022 NHẬN XÉT VÀ CHO ĐIỂM CỦA GIÁO VIÊN LỜI NĨI ĐẦU Nếu khơng có phần mềm, máy tính thiết bị điện tử thông thường Với hỗ trợ phần mềm, máy tính lưu trữ, xử lý thơng tin người sử dụng gọi lại thông tin Phần mềm máy tính chia thành nhiều loại: chương trình hệ thống, quản lý hoạt động máy tính Chương trình ứng dụng, giải vấn đề liên quan đến việc sử dụng khai thác máy tính người sử dụng hệ điều hành thuộc nhóm chương trình hệ thống chương trình hệ thống quan trọng máy tính người sử dụng Hệ điều hành điều khiển tất tài nguyên máy tính cung cấp mơi trường thuận lợi để chương trình ứng dụng người sử dụng viết chạy máy tính Một máy tinh đại bao gồm: nhiều processor, nhớ, clocks, đĩa, giao diện mạng, thiết bị vào/ra khác Tất tạo thành hệ thống phức tạp Để viết chương trình để theo dõi tất thành phần máy tính sử dụng chúng cách hiệu quả, người lập trình phải biết processor thực chương trình nào, nhớ lưu trữ thông tin nào, thiết bị đĩa làm việc (đọc/ghi) nào, lỗi xảy đọc block đĩa,… công việc khó khăn quá khó người lập trình Nhưng may cho người lập trình ứng dụng người sử dụng cơng việc hệ điều hành hỗ trợ nên họ không cần quan tâm đến Chúng ta cần tìm hiểu hệ điều hành đề có nhìn tổng quát liên quan đến việc thiết kế cài đặt cũgn chức hệ điều hành để hệ điều hành đạt mục tiêu: Giúp người sử dụng khai thác máy tính cách dễ dàng chương trình người sử dụng chạy máy tính “Bài tốn bữa tối triết gia” (Dining Philosophers), toán kinh điển tương tranh chia sẻ tài nguyên Việc nghiên cứu toán cho hiểu rõ khia cạnh hệ thống CHƯƠNG 1: CƠ SỞ LÝ THUYẾT I, Tiến trình(processes) 1, Khái niệm: - Tiến trình phận chương trình thực thực hiện, đơn vị thực tiến trình processer - Vì tiến trình phận chương trình nên tương tự chương trình tiến trình sở hữu trỏ lệnh, trỏ stack, tập ghi, khơng gian địa nhớ tất thông tin cần thiết khác để tiến trình hoạt động 2, Các loại tiến trình: - Các tiến trình hệ thống chia làm hai loại: tiến trình tiến trình song song + Tiến trình tiến trình mà điểm khởi tạo điểm kết thúc tiến trình trước + Tiến trình song song tiến trình mà điểm khởi tạo tiến trình nằm thân tiến trình khác, thức khởi tạo tiến trình tiến trình chưa kết thúc II, Luồng(Thread) Luồng thành phần tiến trình sở hữu ngăn xếp thực thi độc lập mã lệnh tiến trình Nếu hệ điều hành có nhiều tiến trình tiến trình bạn tạo nhiều tuyến hoạt động song song hệ điều hành Ưu điểm tuyến chúng hoạt động khơng gian địa tiến trình Tập hợp nhóm tuyến sử dụng chung biến tồn cục, vùng nhớ Heap, bảng mơ tả file… tiến trình, chế liên lạc tuyến đơn giản hiệu chế liên lạc tiến trình với Ưu điểm việc sử dụng luồng tiến trìnhh đơn giản lập trình Nhiều thao tác xuất nhập hiển thị liệu tách rời phân cho tuyến chạy độc lập thực thi III, Giải pháp Semaphore Semaphore dóng góp quan trọng nhà tốn học E W Dijktra Có thể xem Semaphore mở rộng Mutex locks Semaphore S biến tài nguyên, khởi gán giá trị khơng âm, khả phục vụ tài nguyên tương ứng với Ứng với S có hàng đợi F(s) để lưu tiến trình bị blocked S Chỉ có hai thao tác Down Up tác động đến Semaphore S Down giảm S xuống đơn vị, Up tăng S lên đơn vị Ở cần lưu ý rằng: Down Up thủ tục hệ điều hành, nên hệ điều hành cài đặt chế độc quyền cho nó, tức lệnh bên tách rời IV, Deadlock - Deadlock trạng thái mà tập tiến trình bị chặn tiến trình chiếm giữ tài nguyên chờ đợi cấp phát tài nguyên khác giữ tiến trình khác Nói cách khác, tiến trình hệ thống chờ để cấp phát tài nguyên bị chiếm giữ tài ngun khác Nếu tài ngun khơng giải phóng để tiến trình khác sử dụng, tiến trình chờ lấy tài nguyên chờ mãi, chờ dẫn đến khoá chết (Deadlock) - Các điều kiện phát sinh Deadlock: + Loại từ tương hỗ (Mutual Exclusion): thời điểm, tài nguyên chia sẻ cho hệ thống cấp phát cho tiến trình Tiến trình khác khơng thể sử dụng tài nguyên giải phóng + Giữ chờ (hold and wait): Mỗi tiến trình tập hợp tiến trình giữ tài nguyên chờ đợi để cấp phát tài nguyên + Không có quyền ưu tiên (No Preemption): Một tiến trình khơng thể ciếm giữ tài nguyên tài nguyên giải phóng tiến trình sử dụng + Tồn chu kì chờ (Circular Wait): Các tiến trình giữ tài nguyên chờ nhận tài ngun khác tiến trình kahsc Chúng nối tạo thành vịng trịn Chờ vơ tận CHƯƠNG 2: MƠ TẢ BÀI TỐN I, Đề bài: Viết chương trình mơ q trình đồng tiến trình (điều độ) theo thuật tốn triết gia ăn tối ngơn ngữ Java II, Mơ tả tốn: Đây toán cổ điển hệ điều hành Bài toán bữa tối triết gia đưuocj đưa bời nhà tốn học E W.Dijkstra Bài tốn mơ tả sau: Có năm triết gia ngồi ăn quanh bàn trịn, trước mặt người có đĩa đồ ăn, người có đĩa, hai triết gia có đũa Bài tốn phát biểu sau: “ triết gia suy nghĩ, ông ta giao tiếp với triết gia khác Thỉnh thoảng, triết gia cảm thấy đói cố gắng chọn đũa gần nhất( đũa trái đũa phải) Một triết gia lấy đũa thời điểm Chú ý, ơng ta khơng thể lấy đũa mà dùng người bên cạnh Khi triết gia đối có hai đũa lúc, ông ta ăn mà không đặt đũa xuống Khi triết gia ăn xong, ông ta đặt đũa xuống bắt đầu suy nghĩ tiếp” III, Yêu cầu: - Tìm cách để khơng chết đói - Bài tốn đặt vấn đề “đồng tiến trình”, giải vấn đề tắc nghẽn xảy CHƯƠNG 3: CÁCH GIẢI QUYẾT BÀI TỐN I, Mơ tả hướng giải Để giải tốn, phần này, ta sử dụng thuật toán Semaphore Và sử dụng tính chất hoạt động song song đa luồng (Thread) II, Giải thích code kết 1, Class Fork (đũa): - Với class này, áp dụng thuật toán Semaphore để đánh dấu trạng thái đũa toán Những đũa ban đầu có giá trị Ở giá trị này, coi khơng sử dụng - Khi mà đũa sử dụng, với phương thức acquire(), gán cho đũa giá trị – trạng thái sử dụng - Khi mà sử dụng xong (Hết sleep time) phương thức release() trả lại cho đũa giá trị - Ở đây, ta cho thêm phương thức isFree(), phương thức giúp kiểm tra trạng thái đũa 2, Class Philosopher - Với class Philosopher, ta kế thừa class Thread để giúp cho class sử dụng chế đa luồng Thread - Đầu tiên, có thuộc tính, number: số thứ tự nhà triết gia, leftFork rightFork: đũa trái, đũa phải triết gia tương ứng - Tiếp theo, có hàm khởi tạo class - Các triết gia có hành động là: tham gia vào bữa ăn, lấy đũa trái, lấy đũa phải, suy nghĩ ăn 3, Main: - Phương thức Main, phương thức sử dụng hai class mà tạo class Fork class Philosopher để chạy chương trình - Dùng để tạo mảng chứa đối tượng đũa - Dùng để tạo mảng gán đối tượng nhà triết gia khởi động luồng - Với vòng lặp While, vịng lặp có tác dụng kiểm tra q trình Deadlock Tất luồng kiểm tra tài nguyên chiếm giữ Nếu tất luồng bị tải không đủ tài nguyên, dẫn đến giới hạn Deadlock, người dùng nhận cảnh báo tự động dừng chương trình KẾT LUẬN Qua tập này, hiểu rõ cách thức hoạt động luồng hệ điều hành, cách luồng nhận giả lại tài nguyên cho hợp lý hệ điều hành hoạt động tốt Và hiểu thêm thuật tốn Semaphore cách thức hoạt động nó, kết hợp với luồng, để sử dụng trường hợp tương lai Em cảm ơn thầy cho em hội nghiên cứu đề tài giúp em có thêm kiến thức Em xin cảm ơn! ... tận CHƯƠNG 2: MƠ TẢ BÀI TỐN I, Đề bài: Viết chương trình mơ q trình đồng tiến trình (điều độ) theo thuật tốn triết gia ăn tối ngôn ngữ Java II, Mô tả toán: Đây toán cổ điển hệ điều hành Bài toán. .. tiến trình trước + Tiến trình song song tiến trình mà điểm khởi tạo tiến trình nằm thân tiến trình khác, thức khởi tạo tiến trình tiến trình chưa kết thúc II, Luồng(Thread) Luồng thành phần tiến. .. không gian địa nhớ tất thơng tin cần thiết khác để tiến trình hoạt động 2, Các loại tiến trình: - Các tiến trình hệ thống chia làm hai loại: tiến trình tiến trình song song + Tiến trình tiến trình