1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Viết chương trình mô phỏng quá trình đồng bộ tiến trình (điều độ) thuật toán điều phối hành khách xe bus bằng ngôn ngữ java

19 1 0

Đ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 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 Mt s khi nim semaphore 1.1 Đng b ho tin trnh 1.1.1 Khi niệm đng ho tin trnh 1.1.2 Ti phi đng ho tin trnh 1.2 Min Găng 1.2.1 Khi Niệm 1.2.2 Bốn điều kiện toán miền găng : 1.3 Cc Gii php 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 Hn ch Semaphore 1.3.1.2 Ứng dụng Semaphore Chương Bài ton xe bus vi semaphore 2.1 Vấn đ toán 2.1.1 Đề 2.1.2 Vấn đề thực t 2.2 Gii quyt 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 trnh 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 trng giao thơng nơi phức tp, hay xy cc điểm ùn ứ, tắc nghẽn, gii php đưa cho tnh trng 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, xy ách tắc Đời sống ti, ngày vào cao điểm người phi 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 trnh mô qu trnh đng tin trnh (điều độ) thuật ton điều phối hành khch xe bus điều cần thit Để làm điều cần hiểu kin thức bn nâng cao hệ điều hành, nắm bắt nguyên tắc hot độ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 kin thức bn hệ điều hành máy tính Trong tài liệu tm hiểu đng tin trình , gii pháp “Sleep & Wakeup” hiểu ch hot động Semaphore.Tài liệu cung cấp mã ngun đẩy đủ để mơ t thuật tốn Trong q trình làm báo cáo cịn thiu 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 cm đóng góp ý kin để báo cáo nhóm em hồn thiện Nhóm em xin chân thành cm ơn! CHƯƠNG MT S KHI NIỆM SEMAPHORE 1.1 Đng b ho tin trnh 1.1.1 Khi nim đng b ho tin trnh Đng hóa tin trnh đng hóa lung bên tin trình, bit cch điều khiển lung cho chúng ăn nhập với có trước có sau để đm bo tính qn tính tồn vẹn tài ngun dùng chung, đm bo theo yêu cầu người dùng 1.1.2 Ti phi đng b ho tin trnh • 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 Min Găng 1.2.1 Khi Nim 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 kin 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 Cc Gii php 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 nim 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 Hn 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 TON XE BUS VI 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 Gii quyt tốn 2.2.1 Ý tường ngôn ngữ tự nhiên Ta to danh sách chờ cho hành khách, xe bus tới bn bắt đầu dùng danh sch Khi hành khch xe lăn đn bn, họ thêm vào danh sách chờ, người danh sách Khi hành khch xe lăn đn bn, họ thêm vào danh sách chờ, người danh sách Xe bus đn bn, ta bắt đầu lấy danh sch hành khch xe lăn chờ họ lên xe, sau lấy danh sch hành khch bnh thường chờ họ lên xe, sau đóng cửa rời bn Những người đn sau li tip 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 to semaphore xe bus, hành khách khuyt tật ngi xe lăn, hành khch bnh thường với permit 1,4,6 Khi xe bus bn, ta gọi hàm semaphore.acquire() để thể xe bus vào bn, availablePermits () bus lúc Tương tự với hành khách ngi xe lăn hành khch bnh thường , hành khch đn bn ta gọi whell.acquire() nonWhell.acquire() để gim dần số lượng ticket semaphore tương ứng xuống, c 0, xe bus đóng cửa rời bn 2.3 Chương trnh java 2.3.1 Class BusCoordinate 10

Ngày đăng: 26/05/2023, 09:38

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w