Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 19 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
19
Dung lượng
1,36 MB
Nội dung
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 (ĐIỀU ĐỘ) THUẬT TỐN ĐIỀU PHỐI HÀNH KHÁCH XE BUS BẰNG NGƠN NGỮ JAVA Ngành: Cơng nghệ thơng tin Sinh viên thực hiện: Hà Huy Hoàng - AT160226 Đào Văn Anh - AT160103 Lớp: AT16 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 Mục lục LỜI NÓI ĐẦU Chương Mt s khi nim semaphore 1.1 Đng b ho tin trnh 1.1.1 Khi niệm đng ho tin trnh 1.1.2 Ti phi đng ho tin trnh 1.2 Min Găng 1.2.1 Khi Niệm 1.2.2 Bốn điều kiện toán miền găng : 1.3 Cc Gii php 1.3.1 Semaphore 1.3.1.1 khái niệm Semaphore 1.3.1.2 Cách dùng Semaphore 1.3.1.2 Hn ch Semaphore 1.3.1.2 Ứng dụng Semaphore Chương Bài ton xe bus vi semaphore 2.1 Vấn đ toán 2.1.1 Đề 2.1.2 Vấn đề thực t 2.2 Gii quyt toán 2.2.1 Ý tường ngôn ngữ tự nhiên 2.2.2 Ý tưởng ngôn ngữ java sử dụng semaphore 10 2.3 Chương trnh java 10 2.3.1 Class BusCoordinate 10 2.3.1 Class WhellPassenger 11 2.3.1 Class Main 12 Phụ lục 13 LỜI NÓI ĐẦU Ngày tình trng giao thơng nơi phức tp, hay xy cc điểm ùn ứ, tắc nghẽn, gii php đưa cho tnh trng sử dụng hướng người dân đn với giao thơng cơng cộng điều người dân có suy nghĩ xe bus thay v phương tiện c nhân, xy ách tắc Đời sống ti, ngày vào cao điểm người phi chen lấn vất v để lên xe bus cho kịp làm , học Nhìn thấy rõ vấn đề vậy, chương trnh mô qu trnh đng tin trnh (điều độ) thuật ton điều phối hành khch xe bus điều cần thit Để làm điều cần hiểu kin thức bn nâng cao hệ điều hành, nắm bắt nguyên tắc hot động Nguyên lý hệ điều hành học phần quan trọng bắt buộc tất c sinh viên chuyên ngành an tồn thơng tin Ngun lý hệ điều hành cung cấp cho sinh viên kin thức bn hệ điều hành máy tính Trong tài liệu tm hiểu đng tin trình , gii pháp “Sleep & Wakeup” hiểu ch hot động Semaphore.Tài liệu cung cấp mã ngun đẩy đủ để mơ t thuật tốn Trong q trình làm báo cáo cịn thiu nhiều kinh nghiệm nên trình bày khơng tránh khỏi sai sót Kính mong thầy thơng cm đóng góp ý kin để báo cáo nhóm em hồn thiện Nhóm em xin chân thành cm ơn! CHƯƠNG MT S KHI NIỆM SEMAPHORE 1.1 Đng b ho tin trnh 1.1.1 Khi nim đng b ho tin trnh Đng hóa tin trnh đng hóa lung bên tin trình, bit cch điều khiển lung cho chúng ăn nhập với có trước có sau để đm bo tính qn tính tồn vẹn tài ngun dùng chung, đm bo theo yêu cầu người dùng 1.1.2 Ti phi đng b ho tin trnh • Yêu cầu độc quyền truy xuất (mutual exclusion) : thời điểm, có tiến trình quyền truy xuất tài ngun khơng thể chia sẻ • Yêu cầu phối hợp (synchronization) : tiến trình cần hợp tác với để hồn thành cơng việc Ví dụ chương trình in xuất kí tự vào buffer, chương trình điều khiển máy in (printer driver) lấy kí tự buffer để in Hai tiến trình phải phối hợp với để chương trình in khơng xuất kí tự vào buffer buffer đầy mà phải chờ printer driver lấy bớt liệu buffer 1.2 Min Găng 1.2.1 Khi Nim Miền găng (critical section) đoạn mã tiến trình có khả xảy lỗi truy xuất tài nguyên dùng chung (ví dụ biến, tập tin) 1.2.2 Bốn điều kin tốn miền găng : • Tại thời điểm khơng có hai tiến trình miền găng • Khơng có giả thiết tốc độ tiến trình, số lượng xử lý • Một tiến trình bên ngồi miền găng khơng ngăn cản tiến trình khác vào miền găng • Khơng có tiến trình phải chơ vô hạn để vào miền găng 1.3 Cc Gii php o Busy waiting o Sleep and wakeup SLEEP lời gọi hệ thống có tác dụng tạm dừng hoạt động tiến trình (blocked) gọi chờ đến tiến trình khác « đánh thức » Lời gọi hệ thống WAKEUP nhận tham số : tiến trình tái kích hoạt (đặt trạng thái ready) Ý tưởng sử dụng SLEEP WAKEUP sau : tiến trình chưa đủ điều kiện vào miền găng, gọi SLEEP để tự khóa đến có tiến trình khác gọi WAKEUP để giải phóng cho Một tiến trình gọi WAKEUP khỏi miền găng để đánh thức tiến trình chờ, tạo hội cho tiến trình vào miền găng : int busy; // miền găng bị chiếm, không int blocked; // đếm số lượng tiến trình bị khóa while (TRUE) { if (busy){ blocked = blocked + 1; sleep();}else busy = 1; critical-section ();busy = 0;if(blocked){ wakeup(process); blocked = blocked - 1;} Noncritical-section (); } o Semaphore o Monitor o Message 1.3.1 Semaphore 1.3.1.1 khái nim Semaphore Semaphore chế giúp quản lý nguồn chia sẻ đảm bảo access không bị tắc nghẽn.Có hai loại semaphore: binary semaphore counting semaphore Một semaphore S biến số nguyên (integer) truy xuất thông qua hai thao tác nguyên tử: wait signal Các thao tác đặt tên P (cho wait - chờ để kiểm tra) V (cho signal- báo hiệu để tăng) Recommandé pour toi 119 Advanced english for translation-pdf Tiếng Anh Suite du document ci-dessous 100% (5) Writing Tiếng Anh 100% (1) .Định nghĩa wait mã giả là: wait(S){ while (S≤0) ;//no-op S ; } Định nghĩa signal mã giả signal(S){ S++; } 1.3.1.2 Cách dùng Semaphore Chúng ta sử dụng semaphores để giải vấn đề miền tương trục với n trình N trình chia sẻ biến semaphore, mutex (viết tắt từ mutual exclusion) khởi tạo Mỗi trình Pi tổ chức hiển thị hình Chúng ta sử dụng semaphores để giải vấn đề đồng khác Thí dụ, để xem xét hai q trình thực thi đồng hành: P1 với câu lệnh S1 P2 với câu lệnh S2 Giả sử yêu cầu S2 thực thi sau S1 hoàn thành Chúng ta hồn thành chế cách dễ dàng cách P1 P2 chia sẻ semaphore chung synch, khởi tạo cách chèn câu lệnh: S1; signal(sync); vào trình P1 câu lệnh wait(synch); S2; vào trình P2 Vì synch khởi tạo P2 thực thi S2 sau P1 nạp signal(synch) mà sau S1; 1.3.1.2 Hn ch Semaphore • Mặc dù semaphore cho ta chế đồng hóa tiện lợi song sử dụng semaphore khơng cách dẫn đến bế tắc lỗi trình tự thực tiến trình • Trong số trường hợp: khó phát bế tắc lỗi trình tự thực sử dụng semaphore khơng cách • Sử dụng khơng cách gây lỗi lập trình người lập trình khơng cộng tác 1.3.1.2 Ứng dụng Semaphore Semaphore cịn sử dụng phổ biến ngôn ngữ lập trình – ngơn ngữ mà chất khơng hỗ trợ dạng khác đồng hóa Chúng sử dụng kĩ thuật đồng ban đầu hệ điều hành Xu hướng phát triển ngơn ngữ lập trình, dường hướng vào dạng cấu trúc đồng hóa, giống đồng hóa kênh Cộng thêm không đầy đủ cách phân chia với deadlock, semaphore khơng bảo vệ người lập trình khỏi lỗi đơn giản việc lấy semaphore – mà ln ln thay đổi tiến trình đồng thời, quên giải phóng semaphore sau lấy CHƯƠNG BÀI TON XE BUS VI SEMAPHORE 2.1 Vấn đ toán 2.1.1 Đề Hãy tưởng tượng bạn chịu trách nhiệm kiểm soát hành khách lên xe bus trạm dừng Mỗi xe bus có đủ chỗ cho 10 hành khách Trong chỗ dành cho khách ngồi xe lăn, chỗ cịn lại dành cho khách bình thường Cơng việc bạn cho khách lên xe theo qui định chỗ, xe đầy khách khởi hành Có thể có nhiều xe nhiều hành khách vào bến lúc, nguyên tắc điều phối xếp khách vào đầy xe, cho xe khởi hành điều phối cho xe khác Giả sử hoạt động điều phối khách bạn cho xe bus mơ tả qua tiến trình GetPassengers(); hoạt động hành khách tùy loại mô tả tiến trình WheelPassenger() NonWheelPassenger() sau , sửa chữa đoạn code, sử dụng chế semaphore để thực nguyên tắc đồng hoá cần thiết 2.1.2 Vấn đề thực tế bến xe buýt có nhiều hành khách đến bến đứng chờ, có hành khách khuyết tật ngồi xe lăn hành khách bình thường, mà xe bus lại có số chỗ định, khơng thể đáp ứng đủ số khách chờ, tốn đặt hành khách khuyết tật ngồi xe lăn hành khách bình thường phải lên xe bus đạt đủ số chỗ ngồi xe bus đóng cửa rời bến 2.2 Gii quyt tốn 2.2.1 Ý tường ngôn ngữ tự nhiên Ta to danh sách chờ cho hành khách, xe bus tới bn bắt đầu dùng danh sch Khi hành khch xe lăn đn bn, họ thêm vào danh sách chờ, người danh sách Khi hành khch xe lăn đn bn, họ thêm vào danh sách chờ, người danh sách Xe bus đn bn, ta bắt đầu lấy danh sch hành khch xe lăn chờ họ lên xe, sau lấy danh sch hành khch bnh thường chờ họ lên xe, sau đóng cửa rời bn Những người đn sau li tip tục thêm vào danh sách chờ phía sau 2.2.2 Ý tưởng ngơn ngữ java sử dụng semaphore Ta to semaphore xe bus, hành khách khuyt tật ngi xe lăn, hành khch bnh thường với permit 1,4,6 Khi xe bus bn, ta gọi hàm semaphore.acquire() để thể xe bus vào bn, availablePermits () bus lúc Tương tự với hành khách ngi xe lăn hành khch bnh thường , hành khch đn bn ta gọi whell.acquire() nonWhell.acquire() để gim dần số lượng ticket semaphore tương ứng xuống, c 0, xe bus đóng cửa rời bn 2.3 Chương trnh java 2.3.1 Class BusCoordinate 10