HĐH - Ôn Tập Cuối Kỳ - Part 2 (Lý Thuyết) | Facebook
Có thể bạn quan tâm
FacebookTham gia hoặc đăng nhập Facebook Email hoặc điện thoạiMật khẩuBạn quên tài khoản ư?Đăng nhậpBạn có muốn tham gia Facebook không?Đăng kýĐăng kýHĐH - Ôn tập cuối kỳ - Part 2 (Lý thuyết)Lưu Biêu Nghị·Thứ Tư, 19 tháng 6, 2019·Nhóm công khai#StudyWithMe #HĐHNay mình sẽ thêm vài câu lý thuyết ở chương 5, 6 và giải quyết chương 7 và 8 nhé ^^ !Chương 5 :Câu 6 : Monitor là gì ? Nêu cách hoạt động của monitor và ứng dụng vào một bài toán đồng bộ ?Monitor là một công cụ đồng bộ, có chức năng tương tự như semaphore nhưng dễ điều khiển hơn.Monitor, là một kiểu dữ liệu trừu tượng, lưu lại các biến chia sẻ và các phương thức dùng để thao tác lên các biến chia sẻ đó. Các biến chia sẻ trong monitor chỉ có thể được truy cập bởi các phương thức được định nghĩa trong monitor.Một monitor chỉ có 1 process hoạt động, tại một thời điểm bất kỳ đang xét.Bằng cách này, monitor sẽ đảm bảo mutual exclusion và dữ liệu chia sẻ của bạn sẽ được an toàn.Cấu trúc của một monitor :Cách thức hoạt động :Các process sẽ “vào” monitor bằng cách gọi đến các phương thức (method) được định nghĩa trong monitor.Khi gọi phương thức, nếu không có process nào đang active trong monitor thì process đó được thực hiện phương thức nêu trên trong monitor. Ngược lại, nếu có một process nào đó đang thực thi trong monitor, thì process sẽ vào hàng đợi entry queue. Và sau khi process đã thoát khỏi monitor, thì nó sẽ đánh thức process kế tiếp trong entry queue.Ngoài ra, trong monitor còn chứa một (hoặc nhiều) biến condition. Biến condition được định nghĩa bằng code như sau :Biến condition được dùng khi có một process A đang thực thi câu lệnh gì đó trong monitor, nhưng bỗng dưng lại cần yêu cầu một resource chưa được thả. Khi đó, process đó sẽ gọi x.wait() (hoặc y.wait(), tuỳ cách cài đặt của bạn). Khi đó, process B khác sẽ được phép vào monitor mà không phải chờ process A ra khỏi monitor.Khi process B giải phóng tài nguyên yêu cầu bởi process A, process B sẽ gọi x.signal (hoặc y.signal() tuỳ vào cách cài đặt của bạn). Lệnh trên sẽ chuyển một process từ conditional queue vào monitor. Khi đó, để đảm bảo mutual exclusion cho monitor, process gọi signal sẽ bị blocked và bị đưa vào 1 queue khác gọi là urgent queue.Ứng dụng : Một ứng dụng nổi bật của monitor đó là “Ứng dụng monitor để giải quyết bài toán Dining Philosophers”.Trước khi ăn, mỗi triết gia phải gọi hàm pickup(), ăn xong rồi thì phải gọi hàm putdown() như sau :Pickup và Putdown là 2 phương thức được định nghĩa trong monitor dp như sau :Câu 7 : Phân biệt semaphore với monitor ? Nêu ứng dụng của từng giải pháp ?Bảng dưới đây thể hiện sự khác biệt giữa semaphore và monitor :Cả semaphore và monitor đều được dùng như là một công cụ để đồng bộ hoá. Cả 2 đều có thể thực hiện công việc như nhau và thay thế được cho nhau dễ dàng.Điểm khác biệt có thể thấy rõ nhất, như đã nói ở bảng trên, đó là monitor dễ sử dụng hơn semaphore. Semaphore giống như con trỏ trong C++, mạnh mẽ và low-level nhưng lại yêu cầu sự cẩn thận, chu đáo từ người sử dụng nó. Nếu bạn wait() mà quên release() trên semaphore, bạn sẽ rất có thể gặp phải trường hợp deadlock, hoặc những bug khó phát hiện. Monitor, ngược lại, đã giúp bạn giải quyết vấn đề trên bằng cách gọi hàm thay vì phải tự kiểm soát signal() và wait().Câu 8 : Áp dụng semaphore vào bài toán reader-writer, giải thích rõ hoạt động ?Code hoàn chỉnh :Chương 6 : Câu 6 : Làm gì để tránh deadlock (Deadlock avoidance) ?Việc ngăn deadlock ngăn cản việc deadlock xảy ra bằng cách giới hạn số lượng yêu cầu tài nguyên của process. Tuy nhiên, việc thiết lập giới hạn như vậy sẽ dẫn đến một hệ luỵ đó là hiệu suất sử dụng thiết bị thấp.Có một cách khác để quản lý deadlock, đó chính là việc xét xem các tài nguyên sẽ được yêu cầu như thế nào bởi process. Ví dụ, trong một hệ thống có một process P1 và P2. Hệ thống cần biết process P1 sẽ yêu cầu tài nguyên A và sau đó là tài nguyên B, sau đó sẽ giữ chúng và chỉ thả ra sau khi đã thực hiện xong công việc của mình. Trong khi đó P2 sẽ yêu cầu tài nguyên B và sau đó là tài nguyên A. Với việc biết trước yêu cầu tài nguyên của 2 process như vậy, hệ thống sẽ có thể quyết định là có cấp phát tài nguyên ngay cho process khi yêu cầu không, hay là sẽ bắt process đó đợi. Đối với từng request tài nguyên của process, để ra quyết định, hệ thống sẽ cần biết số lượng resources còn trống, số lượng resources đã cấp cho từng process và các request trong tương lai, cũng như việc nhả các resource của process. Các thuật toán khác nhau sẽ yêu cầu các thông tin khác nhau.Nghe có vẻ phức tạp nhỉ ? Tuy nhiên, trong phạm vi bài học, chúng ta chỉ xét đến mẫu đơn giản nhất và hiệu quả nhất là việc các process phải cung cấp số lượng tối đa (maximum number) các resources mà nó cần.Vậy, để tránh deadlock, giải thuật của chúng ta xây dựng sẽ :
- Yêu cầu mỗi tiến trình khai báo số lượng tài nguyên tối đa cần để thực hiện công việc.
- Kiểm tra trạng thái cấp phát tài nguyên để đảm bảo hệ thống không rơi vào deadlock (thông qua việc tìm chuỗi an toàn – bằng giải thuật banker hay cách khác).
- Định nghĩa trạng thái cấp phát tài nguyên (cấp hoặc không cấp) dựa trên số tài nguyên còn lại (available resources), số tài nguyên đã được cấp phát (allocated resources) và yêu cầu tối đa về tài nguyên của các tiến trình (maximum number).
- Một trạng thái của hệ thống được gọi là an toàn (safe) khi tồn tại một chuỗi an toàn.
- Một chuỗi quá trình <P1,P2,…,Pn> là một chuỗi an toàn nếu :
- Với mọi I = 1,…n yêu cầu tối đa về tài nguyên của Pi có thể được thoả bởi :
- Tài nguyên mà hệ thống đang có sẵn sàng.
- Cùng với tài nguyên mà tất cả các Pj (j<i) đang giữ.
- Với mọi I = 1,…n yêu cầu tối đa về tài nguyên của Pi có thể được thoả bởi :
- Một trạng thái của hệ thống được gọi là không an toàn (unsafe) nếu không tồn tại một chuỗi an toàn.
- VD : Hệ thống có 12 tap drive và 3 tiến trình P0,P1,P2 :
- Tại thời điểm t0 :
- Nếu sau khi cấp tài nguyên, xét thấy hệ thống an toàn -> Có thể cấp tài nguyên -> Cấp tài nguyên.
- Nếu sau khi cấp tài nguyên, xét thấy hệ thống không an toàn -> Không cấp -> Rút lại.
- Hiệu quả hơn.
- Kiểm soát ở việc cấp tài nguyên.
- Đảm bảo hiệu suất sử dụng tài nguyên tối đa đến mức có thể.
- Mảng Available có m phần tử : Từng phần tử Available[j] chứa một con số tương ứng với số thể hiện của loại tài nguyên j đó.
- Mảng Max[i,j] = k : Tiến trình Pi yêu cầu tối đa k thực thể của loại tài nguyên Rj.
- Allocation[i,j] = k : Pi đã được cấp phát k thực thể của Rj.
- Need[i,j] = k : Pi cần thêm k thực thể của Rj.
- Need[i,j] = Max[i,j] – Allocation[i,j].
- Available = Available – Request(i).
- Allocation(i) = Allocation(i) + Request(i).
- Need(i) = Need(i) – Request(i).
- Nếu hệ thống giả định trên an toàn thì tiến hành cấp phát thực.
- Nếu trạng thái là không an toàn thì Pi phải đợi và phục hồi trạng thái :
- Available = Available + Request(i).
- Allocation(i) = Allocation(i) – Request(i).
- Need(i) = Need(i) + Request(i).
- Available : Một vector có độ dài m chỉ số lượng resources của từng loại.
- Allocation : Một ma trận n x m xác định số resources từng loại đang được cấp cho từng process (có tổng cộng n process).
- Request : Một ma trận n x m xác định số lượng resources mà từng process yêu cầu thêm ở từng loại resources.
- Với mọi i = 1,2,…,n, nếu Allocation(i) khác 0 thì Finish[i] = false (tức là còn đang giữ resource thì chưa hoàn thành), ngược lại không giữ resource thì Finish[i] = true.
- Finish[i] = false.
- Request(i) <= Work.
- Huỷ bỏ một trong các process đang tham gia vào deadlock để phá Circular Wait.
- Trưng dụng (Preempt) một vài tài nguyên đang bị nắm giữ bởi process này cho process kia dùng trước.
- Độ ưu tiên của tiến trình.
- Thời gian đã thực thi của tiến trình và thời gian còn lại.
- Loại tài nguyên mà tiến trình đã sử dụng.
- Tài nguyên mà tiến trình cần thêm để hoàn tất công việc.
- Số lượng tiến trình cần được chấm dứt.
- Tiến trình là Interactive hay Batch (xem lại định nghĩa ở các chương trước).
- Huỷ bỏ tất cả các process đang tham gia vào deadlock (Deadlocked Process) : Phương thức này rõ ràng sẽ đưa hệ thống ra khỏi deadlock. Nhưng chi phí thực hiện phương pháp này khá cao. Các process đang bị deadlock có thể đang thực hiện công việc giữa chừng, và việc huỷ tất cả sẽ khiến chúng ta phải thực hiện lại những công việc trên từ đầu.
- Huỷ bỏ từng process một cho đến khi hệ thống thoát deadlock : Phương pháp này sẽ có một overhead không nhỏ, vì sau mỗi lần huỷ một process, chúng ta sẽ phải chạy lại thuật toán để xác định xem hệ thống còn deadlock không.
- Nếu còn partition trống => Process mới sẽ được nạp vào partition đó.
- Nếu không còn partition trống, nhưng trong đó có process đang bị blocked => Swap process đó ra bộ nhớ phụ, nhường chỗ cho process mới.
- Gán mỗi process vào partition nhỏ nhất phù hợp với nó.
- Có hàng đợi cho mỗi partition.
- Giảm thiểu phân mảnh nội.
- Vấn đề ở đây là : Sẽ có một số hàng đợi trống không (vì không có process với kích thước tương ứng), trong khi đó lại có partition với hàng đợi dày đặc.
- Dùng chung 1 hàng đợi cho tất cả các partition.
- Khi cần nạp một process vào bộ nhớ chính => Chọn partition nhỏ nhất còn trống.
- Mục tiêu : Giảm chi phí compaction. (chi phí vận chuyển các partition).
- Các chiến lượng placement :
- Best-Fit : Chọn khối nhớ trống nhỏ nhất đủ cho process.
- First-Fit : Chọn khối nhớ trống phù hợp đầu tiên kể từ đầu bộ nhớ.
- Next-Fit : Chọn khối nhớ trống phù hợp đầu tiên kể từ vị trí cấp phát cuối cùng (nếu chưa có khối nhớ nào được cấp phát thì khối nhớ đầu tiên của bộ nhớ sẽ được chọn).
- Worst-Fit : Chọn khối nhớ trống lớn nhất.
- Thanh ghi page-table length (PTLR) biểu thị kích thước của bảng phân trang (có thể được dùng trong cơ chế bảo vệ bộ nhớ).
- Ngoài ra còn có thanh ghi translation look-aside buffers (TLBs) dùng để truy cập nhanh.
- Chia cắt một process lớn với nhiều dữ liệu ra thành nhiều phần.
- Giải quyết vấn đề phân mảnh nội.
- Segment-Table base register (STBR) : Trỏ đến vị trí bảng phân đoạn trong bộ nhớ.
- Segment-Table length register (STLR) : Số lượng segment của chương trình.
- Compile time : Nếu biết trước địa chỉ bộ nhớ của chương trình thì có thể kết gắn địa chỉ tuyệt đối lúc biên dịch.
- Ví dụ : Chương trình .COM của Microsoft.
- Khuyết điểm : Phải biên dịch lại nếu thay đổi địa chỉ nạp chương trình.
- Load time : Vào thời điểm loading, loader phải chuyển đổi địa chỉ khả tái định vị thành địa chỉ thực dựa trên một địa chỉ nền.
- Địa chỉ thực được tính toán vào thời điểm nạp chương trình -> Phải tiến hành reload nếu địa chỉ nền thay đổi.
- Execution time : Khi trong quá trình thực thi, process có thể được di chuyển từ segment này sang segment khác trong bộ nhớ thì quá trình chuyển đổi địa chỉ được trì hoãn đến thời điểm thực thi.
- Dùng các phiên bản khác nhau của external module mà không cần biên dịch lại.
- Chia sẻ mã : Một external module chỉ cần nạp vào bộ nhớ một lần và có thể dùng chung giữa các process.
- RR (Round Robin) : Swap in-out theo quantum time.
- Roll out, roll in : Process có độ ưu tiên thấp sẽ bị swap out, nhường chỗ cho process có độ ưu tiên cao.
- Phân chia cố định (fixed partitioning).
- Phân chia động (dynamic partitioning).
- Phân trang đơn giản (simple paging).
- Phân đoạn đơn giản (simple segmentation).
- Thực thi một chương trình có kích thước lớn hơn nhiều so với bộ nhớ chính.
- Lượng process trong bộ nhớ cũng nhiều hơn.
- Trừu tượng hoá bộ nhớ chính thành một mảng array lớn. Người dùng chỉ thấy được bộ nhớ thông qua bộ nhớ luận lý (logical memory). Từ đó giúp người lập trình viên đỡ cơ cực hơn.
- Bộ nhớ ảo cũng giúp cho các tiến trình chia sẻ dữ liệu với nhau dễ dàng, ngoài ra còn hỗ trợ trong việc cài đặt shared memory (bộ nhớ dùng chung).
- Phân trang theo yêu cầu (Demand Paging) : Các trang dữ liệu sẽ không được sao chép vào bộ nhớ chính cho đến khi nó được cần tới.
- Phân đoạn theo yêu cầu (Segmentation Paging) : Các segment của chương trình sẽ không được chép vào bộ nhớ chính cho đến khi nó được cần tới.
- Phần cứng memory management phải hỗ trợ paging, segmentation.
- OS phải quản lý swap giữa bộ nhớ chính và bộ nhớ thứ cấp.
- Phân trang theo yêu cầu :
- Các trang của quá trình chỉ được nạp vào bộ nhớ chính khi được yêu cầu.
- Khi có một tham chiếu đến một trang mà không có trong bộ nhớ chính (valid bit) thì phần cứng sẽ gây ra một ngắt (gọi là pagefault – các bạn hay gặp từ này khi làm bài tập về các giải thuật phân trang), kích khởi pagefault service routine (PFSR) của hệ điều hành.
- PFSR :
- Chuyển process về trạng thái blocked.
- Phát ra một yêu cầu đọc đĩa để nạp trang được tham chiếu vào một frame trống, trong khi đợi I/O, một process khác được cấp CPU để thực thi.
- Sau khi I/O hoàn tất, đĩa gây ra một ngắt đến hệ điều hành, PFSR cập nhập page-table và chuyển process về trạng thái ready.
- Xác định vị trí trên đĩa của trang đang cần.
- Tìm một frame trống.
- Nếu có frame trống thì dùng thôi chờ gì nữa.
- Nếu không có frame trống thì dùng một giải thuật thay trang để chọn một trang hi sinh (victim page).
- Ghi victim page lên đĩa, cập nhật page table và frame table tương ứng.
- Đọc trang đang cần vào frame trống (đã có được từ bước 2), cập nhật page table và frame table tương ứng.
- Tiếng Việt
- English (UK)
- 中文(台灣)
- 한국어
- 日本語
- Français (France)
- ภาษาไทย
- Español
- Português (Brasil)
- Deutsch
- Italiano
- Đăng ký
- Đăng nhập
- Messenger
- Facebook Lite
- Video
- Địa điểm
- Trò chơi
- Marketplace
- Meta Pay
- Cửa hàng trên Meta
- Meta Quest
- Ray-Ban Meta
- Meta AI
- Threads
- Chiến dịch gây quỹ
- Dịch vụ
- Trung tâm thông tin bỏ phiếu
- Chính sách quyền riêng tư
- Trung tâm quyền riêng tư
- Nhóm
- Giới thiệu
- Tạo quảng cáo
- Tạo Trang
- Nhà phát triển
- Tuyển dụng
- Cookie
- Lựa chọn quảng cáo
- Điều khoản
- Trợ giúp
- Tải thông tin liên hệ lên & đối tượng không phải người dùng
- Cài đặt
- Nhật ký hoạt động
Từ khóa » Hệ Thống Rơi Vào Trạng Thái Deadlock Khi
-
Deadlock – Wikipedia Tiếng Việt
-
Hệ điều Hành: Deadlock - .vn
-
Bai 5 Trac Nghiem Deadlock - PDFCOFFEE.COM
-
Deadlock Trong Hệ điều Hành? Kiến Thức Cơ Bản - W3seo
-
Bài Giảng Hệ điều Hành Chương 6 Deadlock (khóa Chết) - Tài Liệu Text
-
Chương 7 Tắt Nghẽn - Tài Liệu Text - 123doc
-
Vấn đề Deadlock Trong Hệ Thống - Tài Liệu, Ebook
-
Deadlock Là Gì? Cách Phát Hiện Và Phương Pháp Xử Lý Tốt Nhất
-
[PDF] Hệ điều Hành,trần Thị Như Nguyệt,dhcntt
-
Nguyên Lý Hệ điều Hành - Bế Tắc (Deadlock)
-
Trắc Nghiệm Hệ Điều Hành - Bài 29
-
HĐH - Ôn Tập Cuối Kỳ - Part 1 (Lý Thuyết) | Facebook
-
Chương 6 - Deadlock - Nguyên Lý Hệ điều Hành
-
Nguyên Lí Hệ điều Hành -Chương 6 ( J White ) Quiz - Quizizz