Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 17 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
17
Dung lượng
460,67 KB
Nội dung
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG -o0o - Báo cáo môn học: Nguyên lý hệ điều hành Chủ đề : Tìm hiểu số tốn đồng tiến trình qua đoạn găng GVHD: Phạm Đăng Hải SVTH: Nguyễn Hoàng Thành 20194378 Vũ Duy Hiệp 20194279 Đào Xuân An 20190076 TP HÀ NỘI, THÁNG 12 NĂM 2021 Mục lục Đường Ray Andes (Railways in the Andes) Vấn đề người hút thuốc lá(Cigarette Smoker’s Problem) Ơng già Noel (Bài tốn Santa claus) The dining savages problem Bài tốn “tìm kiếm – chèn – xóa” 11 Bài tốn “phịng tắm Unisex” 12 Bài toán quán ăn Sushi 13 Bài toán chăm sóc trẻ 15 Đường Ray Andes (Railways in the Andes) Vấn đề thực tiễn Một dãy núi cao Andes, có tuyến đường sắt tròn Một đường Peru, khác Bolivia Họ dùng chung , phần đường ray, nơi mà đường băng qua đèo núi nằm biên giới quốc tế(Gần hồ Titicaca) Thật không may mắn, đoàn tàu Peru Bolivian va chạm đồng thời vào phần chung đường ray (đèo núi) Vấn đề người lái xe hai tàu bị mù điếc, họ khơng thể nhìn thấy hay nghe thấy Hai người lái tàu thống phương pháp ngăn ngừa va chạm sau Họ đặt bát lớn lối vào đèo Trước vượt qua, người lái xe phải dừng tàu, qua bát, chạm vào để thấy có chứa tảng đá hay không Nếu bát trống, người lái xe phải tìm hịn đá bỏ vào bát, cho biết chuyến tàu qua; Một đồn tàu ơng vượt qua được, ơng phải trở lại bát loại bỏ đá ơng, để báo hiệu chỗ dùng chung khơng có sử dụng Cuối cùng, quay trở lại tàu tiếp tục lái xe Nếu người lái xe lái xe đến đèo tìm thấy bát có hịn đá người phải rời chỗ chung đường ray để tránh va chạm Do phải cho đoàn tài nghỉ ngơi kiểm tra lại tô thấy trống rỗng Sau bỏ hịn đá vào tô cho tàu vào đèo Một sinh viên thông minh đến từ đại học LaPaz (Bolivia) cho cách làm cho chặn đường tàu mãi Nhưng người lái xe Bolivia cười nói điều khơng thể khơng xảy Thật không may, vào ngày đàu đâm vào Sau vụ tai nạn Sinh viên gọi đến để tư vấn để đảm bảo không xảy tai nạn Anh nói bát sử dụng sai cách Người lái xe Bolivia phải đợi lối vào đèo bát trống, lái xe qua đèo trở lại để đặt tảng đá vào bát Người lái xe người Peru phải chờ đến bát có chứa đá, lái xe qua đèo để lấy tảng đá khỏi bát Chắc chắn, phương pháp ông ngăn ngừa tai nạn Trước xếp này, tàu Peru chạy hai lần ngày tàu Bolivian chạy ngày lần Người Peru khơng hài lịng với cách xếp Do đó, sinh viên kêu gọi trở lại yêu cầu tìm giải pháp khác để ngăn ngừa tai nạn tránh vấn đề phương pháp trước Sau thời gian suy nghĩ, sinh viên đề nghị nên sử dụng bát, cho người lái tàu, cách thức hoạt động sau: Khi lái xe đến chỗ vào thả hịn đá vào tơ sau kiểm tra tơ khác để xem có hịn đá khơng Nếu trống lái xe thơng qua đường chuyền Sau dừng lại trở lại để loại bỏ hịn đá Nhưng tìm thấy hịn đá bát khác trở lại bát lấy đá ra.Tiếp theo, nghỉ ngơi đợi lúc cho bát trống rỗng bỏ đá vào tơ Phương pháp hoạt động tốt cuối tháng 5, hai chuyến tàu đồng thời bị chặn cửa Phân tích vấn đề: Sau tìm hiểu thuật tốn tốn cho hiệu Thực để ý kĩ bạn thấy tốn có dạng producerconsumer Nhưng làm với signals waits BINARYSEMAPHONE mutex=1 COUNTINSEMAPHORE empty = n; full=0; Giải pháp: Ta xem mutex đèn báo, ta quy tốn producer – consumer Do ta có thuật tốn sau đây: Procedure: Customer: Vấn đề người hút thuốc lá(Cigarette Smoker’s Problem) Vấn đề thực tiễn: Vấn đề SS Patil vào năm 1971 Giả sử điếu thuốc cần có ba thành phần thuốc lá, giấy diêm Có ba người hút thuốc dây chuyền Mỗi người số họ có thành phần với nguồn cung cấp vơ hạn Có đại lý có nguồn cung cấp vô hạn ba thành phần Để tạo điếu thuốc, người hút thuốc ( tương ứng , giấy diêm) phải có hai thành phần cịn lại giấy diêm ( tương ứng., thuốc diêm, thuốc giấy) Người đại diện người hút thuốc chung bàn Tác nhân tạo ngẫu nhiên hai thành phần thông báo cho người hút cần hai thành phần Sau thành phần lấy khỏi bàn, đại lý cung cấp hai nguyên liệu khác Mặt khác, người hút thuốc chờ thông báo đại lý Sau thông báo, người hút chọn nguyên liệu, châm thuốc, hút lúc quay lại bàn chờ nguyên liệu Viết chương trình mơ hệ thống này, với ba người hút thuốc tác nhân mơ luồng Ví dụ: Người A có giấy, người B có thuốc lá, người C có diêm Nếu người đại lý đưa giấy thuốc(tobacco) người A B khơng tạo thuốc thiếu diêm Giải pháp (Solution): Sau giải pháp dễ dàng Cả người làm điếu thuốc hút Nếu người khơng làm điếu thuốc ngồi nghỉ chỗ (Sleep) Khi người đại lý đặt hai vật lên bàn, kêu (Wake up) người tương ứng tạo thuốc để hút, sau ngồi nghỉ tiếp Sau thuật toán giải vấn đề Thuật toán cho người đại lý: Thuật toán người hút thuốc: Người hút thuốc ngủ, người đại lý đưa vật lên bàn, sau đại lý đánh thức người hút thuốc tương ứng Người hút thuốc sau lấy đồ vật đánh thức đại lý Trong người hút thuốc hút, người đại lý đaẹt hai vật lên bàn đánh thức người khác (Nếu vật người có khơng giống với đồ vật bàn) Người đại lý ngủ sau đặt vật Giải thuật giống với vấn đề Producer-Consumer Ngoại trừ Producer sản xuất mặt hàng (Mặc dù lựa chọn mặt hàng) lúc Ông già Noel (Bài toán Santa claus) Đây vấn đề lấy từ sách Hệ điều hành William Nhưng cho ông John Trono, trường đại học Michael Vermont Vấn đề thực tiễn: Vấn đề William Stallings’s Operating Systems [11], ơng quy cho John Trono Đại học St Michael’s College Vermont Santa Claus ngủ cửa hàng ông Bắc Cực, ông đánh thức bởi: Cả tuần lộc trở từ kì nghỉ hè Thái Bình Dương số lùn gặp khó khăn việc làm đồ chơi đến nhờ ông già Noel giúp Một số lưu ý toán này: o Khi lùn nhờ ơng già Noel giúp, lùn đến gặp ông già Noel phải đợi lùn trở o Nếu ông già Noel thức dậy nhìn thấy lùn ngồi cửa với tuần lộc cuối trở từ vùng nhiệt đới lùn phải đợi đến sau giáng sinh, việc quan trọng lúc chuẩn bị xe trượt tuyết o Giả thiết Tuần Lộc không muốn rời khỏi vùng nhiệt đới, muốn lại đến giây phút cuối o Con Tuần Lộc cuối đến nơi phải đón ơng già Noel khác chờ đợi túp lều nóng lên trước đưa vào xe trượt tuyết Phân tích: • Sau tuần lộc thứ đến, ông già noel phải chuẩn bị xe trượt tuyết (prepareSleigh) , sau tuần lộc phải buộc dây thừng (getHitched) • Nếu trường hợp ơng gìa Noel thức giấc có lùn, ơng già Noel phải giúp đỡ lùn (helpElves), điều có nghĩa lùn giúp đỡ (getHelp) • Tất lùn phải giúp đỡ trước lùn khác bổ sung Giải pháp cho tốn: Khởi tạo Ơng già Noel (Santa Claus) Reindeer Elves The dining savages problem Vấn đề thực tiễn: Vấn đề từ Concurrent Programming Andrews Vấn đề man rợ ăn uống Hệ điều hành với việc triển khai hình: Vấn đề man rợ ăn uống (ám đến triết gia ăn uống cổ điển) dựa tương tự vô vị cho số thành viên văn hóa nguyên thủy, sau gọi "sự man rợ", chia sẻ bữa ăn từ nồi Những yếu tố trừu tượng thân người man rợ, đầu bếp nồi Nồi chứa số lượng định loại thực phẩm ngon lành (bản chất chúng để bạn tưởng tượng) Mỗi người số người ăn chay tự lấy phần ăn khỏi nồi miễn nồi khơng bị rỗng Vì vậy, trước lấy phần ăn, người dã man phải kiểm tra để đảm bảo nồi không bị rỗng Trong trường hợp nồi bị cạn, người dã chiến phải đánh thức người nấu để đổ lại nồi, sau tiếp tục đãi tiệc Những kẻ man rợ, sau đó, ăn nồi chưa rỗng người nấu đổ đầy nồi nồi cạn Phân tích giải pháp Tất thành viên tộc sử dụng hàm lấy thức ăn: Một tiến trình nấu ăn chạy lệnh: Điều kiện ràng buộc tiến trình là: • Người khơng thể lấy thức ăn (chạy hàm getDervingFromPot()) nồi rỗng • Đầu bếp bỏ thêm thức ăn (chạy hàm putServingInPot())khi nồi rỗng Chúng ta sử dụng biến đếm servings để đếm số lượng thức ăn lại nồi Nếu servings =0 đầu bếp chạy hàm putServingInPot() Đèn bào emptyPot để nồi rỗng fullPot để nồi đầy Người nấu ăn: Khí có tín hiệu báo nồi rỗng cook thực hàm putServingsInPot() để đưa thêm thức ăn vào nồi Khi nồi đầy chạy tiến trình fullPot.signal().// Savage (người tộc) Mỗi thành viên tộc phải đợi đèn hiệu mutex để lấy thức ăn Nếu nhận thấy nồi rỗng đợi tín hiệu nồi đầy (fullPot) từ tiến trình Cook để thiết lập biến số lượng thức ăn nồi servings = M chạy tiếp chương trình Mỗi tiến trình lấy phần ăn từ nồi giảm biến đếm đơn vị Sau lấy xong tiến trình trả lại mutex cho tiến trình đợi khác thực hàm eat() 10 Bài toán “tìm kiếm – chèn – xóa” Nguồn gốc : Vấn đề đề cập đến Concurrent Programming : Principle and Practice Gregory R.Andrew Mô tả : Người tìm kiếm, người chèn , người xóa chia sẻ quyền truy cập vào danh sách liên kết đơn Người tìm kiếm kiểm tra nội danh sách, chúng thực thi đồng thời với Người chèn thêm nút vào cuối danh sách, nút chèn cần phải loại trừ lẫn để ngăn cản hai người chèn thêm vào hai nút vào thời điểm Tuy nhiên, nút kiểm tra song song số lượng người tìm kiếm Cuối cùng, người xóa xóa nút vị trí danh sách Q trình xóa diễn thời điểm Sự xóa, tìm kiếm chèn cần phải loại trừ lẫn Người lập trình viết code để giải vấn đề loại trừ lẫn mang tính phân loại ba chiều người tìm kiếm, người chén người xóa Cách xử lý : + Cài đặt: Các biến sử dụng : insertMutex = Semaphore (1) noSearcher = Semaphore (1) noInserter = Semaphore (1) searchSwitch = Lightswitch () insertSwitch = Lightswitch () insertMutex đảm bảo có người truy cập thời gian truy cập cho phép người noSearcher noInserter đảm bảo khơng có xuất ngẫu nhiên người tìm kiếm người chèn thời gian truy cập cho phép, giống chìa khóa vào cửa vậy, người xóa muốn truy cập phải có hai chìa khóa searchSwitch insertSwitch cơng cụ để người tìm kiếm người chèn kết thúc phiên làm việc người xóa +Xử lý người tìm kiếm : searchSwitch wait ( noSearcher ) # critical section 11 searchSwitch signal ( noSearcher ) Người tìm kiếm lo lắng người xóa Người tìm kiếm truy cập lấy noSearcher, người cuối đăng xuất giải phóng +Xử lý người chèn : insertSwitch wait ( noInserter ) insertMutex wait () # critical section insertMutex signal () insertSwitch signal ( noInserter ) Tương tự với người tìm kiếm, người chèn truy cập lấy noInserter, người cuối đăng xuất giải phóng Người chèn người tìm kiếm gặp vấn đề cạnh tranh đồng thời Tuy nhiên, insertMutex đảm bảo người chèn truy cập khoảng thời gian định +Xử lý người xóa : noSearcher wait () noInserter wait () # critical section noInserter signal () noSearcher signal () Người xóa giữ noInserter noSearcher , điều đảm bảo người xóa khơng gặp cạnh tranh với người tìm kiếm người chèn Bài tốn “phịng tắm Unisex” Nguồn gốc mơ tả : Một người phụ nữ làm việc tầng hầm tòa nhà phòng tắm gần dành cho phụ nữ cách cô hai tầng, cô đề nghị Uberboss chuyển phòng tắm dành cho nam tầng thành phòng tắm chung nam nữ Uberboss đồng ý, nhiên ông ta đưa điều kiện đồng hóa sau: +Khơng có nam nữ vào phịng tắm lúc 12 +Khơng có nhiều nhân viên công ty tắm lúc Cách xử lý : +Cài đặt: Các biến sử dụng: empty = Semaphore (1) maleSwitch = Lightswitch () femaleSwitch = Lightswitch () maleMultiplex = Semaphore (3) femaleMultiplex = Semaphore (3) empty mang giá trị phòng tắm trống ngược lại maleSwitch cho phép nam giới yêu cầu nữ giới khỏi phịng Khi người đàn ơng vào phịng tắm, lightSwitch khóa biến empty, làm người phụ nữ khơng vào phịng Khi người đàn ơng cuối bước ra, biến empty giải phóng, cho phép người phụ nữ vào phịng femaleSwitch có chức tương tự phụ nữ maleMultiplex femaleMultiplex đảm bảo khơng có nhiều người tắm lúc +Xử lý nữ giới: femaleSwitch lock ( empty ) femaleMultiplex wait () femaleMultiplex signal () female Switch unlock ( empty ) +Xử lý nam giới: maleSwitch lock ( empty ) maleMultiplex wait () maleMultiplex signal () male Switch unlock ( empty ) Bài toán quán ăn Sushi 13 Nguồn gốc : Bài toán phát triển dựa vấn đề Kenneth Reek đưa Mô tả : Giả sử có quán ăn Sushi với chỗ ngồi Nếu bạn đến quán có chỗ ngồi trống, bạn ngồi Tuy nhiên, khơng cịn chỗ ngồi trống nào, bạn cần phải chờ đến có người rời Cách xử lý : +Cài đặt: Các biến sử dụng : eating = waiting = mutex = Semaphore (1) block = Semaphore (0) must_wait = False eating waiting cho khách thấy số người ăn số người hàng đợi mutex bảo vệ biến khỏi việc bị đá khỏi hàng đợi must_wait cho khách biết quán ăn đầy chỗ ngồi vị khách đến quán hàng đợi đầy bị block biến block +Xử lý vấn đề : mutex wait () if must_wait : waiting += mutex signal () block wait () else : eating += must_wait = ( eating == 5) mutex signal () mutex wait () eating -= if eating == 0: 14 n = (5 , waiting ) waiting -= n eating += n must_wait = ( eating == 5) block signal (n) mutex signal () Khi khách hàng cuối rời đi, giải phóng biến mutex, biến eating cập nhật, khách hàng đến thấy trạng thái phù hợp block cần thiết Một hạn chế phương pháp việc cập nhật trạng thái phức tạp chút Bài tốn chăm sóc trẻ Nguồn gốc : Vấn đề đề cập sách Operating Systems and Middleware: Supporting Controlled Interaction tác giả Max Hailperin Mô tả : Tại trung tâm giữ trẻ, tiểu bang quy định đứa trẻ phải người lớn chăm sóc.Số lượng người lớn rời ngăn chặn số lượng trẻ bước vào Người lập trình viết code thực thi ràng buộc section Cách xử lý : +Cài đặt : Các biến sử dụng : children = adults = waiting = leaving = mutex = Semaphore (1) childQueue = Semaphore (0) adultQueue = Semaphore (0) children, adults, waiting leaving đếm số lượng trẻ em, người lớn tại, số lượng trẻ em bước vào số lượng người lớn rời Mutex bảo vệ biến Trẻ em chờ childQueue để bước vào cần thiết Người lớn chờ adultQueue để rời +Xử lý trẻ em: mutex wait () if children < * adults : children ++ 15 mutex signal () else : waiting ++ mutex signal () childQueue wait () # critical section mutex wait () children – if leaving and children