Trắc nghiệm Hệ điều hành Bài 17: Các giải pháp “Sleep and wakeup”

Làm bài thi

Mục Lục

Trắc nghiệm Hệ điều hành Bài 17: Các giải pháp “Sleep and wakeup” là một trong những đề thi thuộc Chương 2: Quản lý Tiến trình và Đồng bộ hóa trong học phần Hệ điều hành chuyên ngành Công Nghệ Thông Tin cấp độ Đại học. Đây là phần mở đầu quan trọng giúp sinh viên hình thành cái nhìn tổng quan về vai trò, chức năng và tầm quan trọng của hệ điều hành trong một hệ thống máy tính hiện đại.

Trong bài học này, người học cần nắm được các nội dung cốt lõi như: định nghĩa hệ điều hành, chức năng chính của hệ điều hành (quản lý tiến trình, bộ nhớ, thiết bị và hệ thống tệp), phân loại hệ điều hành, cũng như mối quan hệ giữa phần cứng, phần mềm và người dùng thông qua hệ điều hành. Việc hiểu rõ các kiến thức nền tảng này sẽ tạo tiền đề vững chắc cho sinh viên khi tiếp cận các khái niệm chuyên sâu hơn như quản lý tiến trình, xử lý đồng thời, và bảo mật hệ thống.

Hãy cùng Dethitracnghiem.vn tìm hiểu về đề thi này và tham gia làm kiểm tra ngay lập tức!

Trắc nghiệm Hệ điều hành Bài 17: Các giải pháp “Sleep and wakeup”

Câu 1.Mục đích chính của các giải pháp “Sleep” và “Wakeup” trong đồng bộ hóa là gì?
A. Chỉ để tối ưu hóa việc sử dụng CPU.
B. Cho phép các tiến trình chia sẻ bộ nhớ.
C. Tạo ra các tiến trình mới.
D. Cho phép các tiến trình tạm dừng chờ đợi một điều kiện nào đó và được đánh thức khi điều kiện đó được thỏa mãn.

Câu 2.Trong giải pháp “Sleep and Wakeup”, khi một tiến trình gọi “Sleep()”, nó sẽ chuyển sang trạng thái nào?
A. Running.
B. Ready.
C. Terminated.
D. Waiting (Blocked).

Câu 3.Trong giải pháp “Sleep and Wakeup”, khi một tiến trình gọi “Wakeup()” cho một tiến trình khác, tiến trình được đánh thức (nếu đang ngủ) sẽ chuyển sang trạng thái nào?
A. Running.
B. Ready.
C. Waiting.
D. Terminated.

Câu 4.So với “Busy-waiting” (ví dụ như Spinlock), ưu điểm của giải pháp “Sleep and Wakeup” là gì?
A. Đảm bảo Mutual Exclusion tốt hơn.
B. Dễ dàng cài đặt hơn.
C. Tránh được Deadlock.
D. Không lãng phí chu kỳ CPU khi chờ đợi một điều kiện (tiến trình chờ bị chặn thay vì chạy vòng lặp bận).

Câu 5.Nhược điểm chính của việc sử dụng các lời gọi “Sleep” và “Wakeup” đơn giản (không có thêm cơ chế bảo vệ) là gì?
A. Dễ gây ra Deadlock.
B. Dẫn đến Starvation.
C. Có thể xảy ra vấn đề “Lost Wakeup” do Race Condition.
D. Chỉ hoạt động trên hệ thống đơn xử lý.

Câu 6.Vấn đề “Lost Wakeup” (mất tín hiệu đánh thức) xảy ra trong giải pháp “Sleep and Wakeup” khi nào?
A. Khi một tiến trình gọi Sleep nhưng không có tiến trình nào gọi Wakeup.
B. Khi một tiến trình gọi Wakeup nhưng không có tiến trình nào đang Sleep.
C. Khi tiến trình A kiểm tra điều kiện và thấy nó chưa thỏa mãn, nhưng trước khi kịp gọi Sleep, tiến trình B làm cho điều kiện thỏa mãn và gọi Wakeup. Tuy nhiên, do A chưa ngủ, tín hiệu Wakeup bị bỏ lỡ, và A sau đó vẫn gọi Sleep, bị chặn vô thời hạn.
D. Khi nhiều tiến trình cùng gọi Sleep đồng thời.

Câu 7.Để giải quyết vấn đề “Lost Wakeup” trong giải pháp “Sleep and Wakeup”, một phương pháp là sử dụng thêm một biến (flag) để theo dõi trạng thái của điều kiện. Biến này cần được thao tác như thế nào?
A. Chỉ đọc bởi tiến trình chờ.
B. Chỉ ghi bởi tiến trình báo hiệu.
C. Chỉ được truy cập sau khi gọi Sleep.
D. Việc kiểm tra điều kiện, sửa đổi flag và gọi Sleep PHẢI được thực hiện một cách nguyên tố (atomic).

Câu 8.Tại sao việc kiểm tra điều kiện và gọi “Sleep()” cần phải là một thao tác nguyên tố?
A. Để tăng tốc độ thực thi.
B. Để giảm số lượng tiến trình chờ.
C. Để tránh việc điều kiện thay đổi giữa lúc kiểm tra và lúc ngủ, dẫn đến Lost Wakeup.
D. Để tiết kiệm bộ nhớ.

Câu 9.Semaphore giải quyết vấn đề “Lost Wakeup” như thế nào?
A. Bằng cách sử dụng busy-waiting.
B. Bằng cách cho phép nhiều tiến trình vào miền găng.
C. Bằng cách có một biến đếm bên trong. Lời gọi `signal()` sẽ làm tăng biến đếm. Nếu `wait()` được gọi sau khi `signal()` đã được thực hiện khi không có ai chờ, biến đếm dương sẽ ngăn `wait()` bị chặn.
D. Bằng cách chỉ cho phép một tiến trình gọi `wait()` tại một thời điểm.

Câu 10.Trong ngữ cảnh của Monitor, “Condition Variable” (Biến điều kiện) kết hợp với các thao tác `wait()` và `signal()` (hoặc `notify()`) cung cấp giải pháp “Sleep and Wakeup” ở mức cao hơn. Khi một tiến trình gọi `wait()` trên một biến điều kiện, nó làm gì?
A. Tiếp tục thực thi bên trong Monitor.
B. Rời khỏi Monitor và tiếp tục chạy bên ngoài.
C. Bị chặn và giữ khóa Monitor.
D. Bị chặn và NHẢ khóa Monitor, chờ được đánh thức.

Câu 11.Trong ngữ cảnh của Monitor, khi một tiến trình gọi `signal()` trên một biến điều kiện, nó làm gì?
A. Đánh thức tất cả các tiến trình chờ.
B. Nhả khóa Monitor.
C. Đánh thức MỘT tiến trình (nếu có) đang chờ trên biến điều kiện đó. Tiến trình gọi vẫn giữ khóa Monitor.
D. Bị chặn cho đến khi tiến trình được đánh thức rời Monitor.

Câu 12.Sự khác biệt giữa `signal()` và `broadcast()` (hoặc `notifyAll()`) trên Condition Variable là gì?
A. `signal()` đánh thức tất cả, `broadcast()` đánh thức một.
B. `signal()` nhả khóa, `broadcast()` không nhả khóa.
C. `signal()` dành cho User-Level Threads, `broadcast()` dành cho Kernel-Level Threads.
D. `signal()` đánh thức MỘT tiến trình đang chờ, `broadcast()` đánh thức TẤT CẢ các tiến trình đang chờ.

Câu 13.Trong bài toán Nhà sản xuất-Người tiêu dùng, giải pháp sử dụng “Sleep and Wakeup” cần đồng bộ hóa những điều kiện nào?
A. Khi bộ đệm đầy (nhà sản xuất cần Sleep).
B. Khi bộ đệm rỗng (người tiêu dùng cần Sleep).
C. Truy cập vào biến đếm số lượng mục trong bộ đệm.
D. Tất cả các điều trên (nhà sản xuất chờ khi đầy, người tiêu dùng chờ khi rỗng, và cần Mutual Exclusion khi truy cập bộ đệm và biến đếm).

Câu 14.Nếu trong giải pháp Nhà sản xuất-Người tiêu dùng sử dụng “Sleep and Wakeup” đơn giản, Nhà sản xuất kiểm tra bộ đệm đầy và chuẩn bị ngủ. Cùng lúc đó, Người tiêu dùng lấy một mục và gọi Wakeup cho Nhà sản xuất. Vấn đề gì có thể xảy ra?
A. Deadlock.
B. Starvation.
C. Lost Wakeup (Nhà sản xuất ngủ sau khi tín hiệu Wakeup đã được gửi và bỏ lỡ).
D. Buffer Overflow.

Câu 15.Để giải quyết vấn đề “Lost Wakeup” trong bài toán Nhà sản xuất-Người tiêu dùng với “Sleep and Wakeup”, cần sử dụng thêm cơ chế nào?
A. Chỉ Mutex cho truy cập bộ đệm.
B. Chỉ Semaphore cho đếm mục.
C. Mutex để bảo vệ thao tác kiểm tra điều kiện và gọi Sleep/Wakeup, hoặc sử dụng các cơ chế đồng bộ hóa mạnh mẽ hơn như Semaphore hoặc Monitor.
D. Chỉ sử dụng busy-waiting.

Câu 16.Trong hệ điều hành, các lời gọi hệ thống liên quan đến “Sleep” và “Wakeup” thường được hiện thực như thế nào?
A. Chỉ là các vòng lặp bận trong không gian người dùng.
B. Kernel quản lý hàng đợi các tiến trình đang ngủ và đánh thức chúng khi nhận được tín hiệu Wakeup tương ứng.
C. Sử dụng các tệp tạm thời để lưu trạng thái ngủ.
D. Chỉ hoạt động trên các thiết bị I/O.

Câu 17.Tại sao giải pháp “Sleep and Wakeup” đơn giản (không có thêm bảo vệ) KHÔNG đủ để giải quyết an toàn bài toán Miền găng chỉ bằng cách kiểm tra biến cờ và ngủ/đánh thức?
A. Vì nó gây ra Starvation.
B. Vì nó chỉ hoạt động cho 2 tiến trình.
C. Vì nó không đảm bảo Progress.
D. Vì việc kiểm tra biến cờ và gọi Sleep không phải là nguyên tố, dẫn đến Race Condition và Lost Wakeup, làm mất Mutual Exclusion hoặc gây Deadlock.

Câu 18.Trong bối cảnh của Hệ điều hành, “Sleep” thường được gọi khi một tiến trình đang chờ đợi điều gì?
A. Hết hạn time slice.
B. Được tạo ra.
C. Kết thúc thực thi.
D. Một sự kiện cụ thể xảy ra (ví dụ: hoàn thành I/O, tài nguyên sẵn sàng, tin nhắn đến).

Câu 19.”Wakeup” thường được gọi bởi ai?
A. Chính tiến trình đang ngủ.
B. Người dùng cuối.
C. Một tiến trình hoặc bộ phận khác của hệ thống (ví dụ: trình xử lý ngắt I/O) khi sự kiện mà tiến trình đang ngủ chờ đợi xảy ra.
D. CPU.

Câu 20.So với Semaphore hoặc Monitor, giải pháp “Sleep and Wakeup” đơn giản có mức độ trừu tượng cao hay thấp?
A. Cao hơn nhiều.
B. Tương đương.
C. Thấp hơn, là cơ chế cơ bản hơn, dễ mắc lỗi logic đồng bộ hóa nếu không được sử dụng cẩn thận.
D. Không thể so sánh.

Câu 21.Nếu một tiến trình gọi `Sleep()` và điều kiện nó chờ đợi đã được thỏa mãn ngay trước khi nó gọi `Sleep()`, trong giải pháp đơn giản, điều gì xảy ra?
A. Tiến trình sẽ chạy ngay lập tức.
B. Tiến trình sẽ bị đánh thức ngay lập tức sau khi ngủ.
C. Tiến trình sẽ bị chặn (ngủ) vô thời hạn nếu không có tín hiệu Wakeup nào khác được gửi sau đó (Lost Wakeup).
D. Hệ điều hành sẽ báo lỗi.

Câu 22.Trong các ngôn ngữ lập trình hỗ trợ đa luồng và cung cấp các primitive đồng bộ hóa mức cao (ví dụ: Monitor-like structures), khái niệm Sleep/Wakeup thường được hiện thực bên dưới các cấu trúc nào?
A. Pipes và Sockets.
B. Signal Handlers.
C. Condition Variables (biến điều kiện) kết hợp với Mutexes.
D. Shared Memory.

Câu 23.Ưu điểm của việc sử dụng các cơ chế đồng bộ hóa mức cao (như Monitor) so với “Sleep and Wakeup” đơn giản là gì?
A. Hiệu năng nhanh hơn.
B. Sử dụng ít bộ nhớ hơn.
C. Cho phép Race Condition xảy ra một cách có kiểm soát.
D. Cung cấp cấu trúc an toàn hơn và dễ sử dụng hơn để giải quyết các vấn đề đồng bộ hóa phức tạp, giảm thiểu khả năng mắc lỗi “Lost Wakeup” và các vấn đề khác.

Câu 24.Khi một tiến trình gọi “Sleep” và bị chặn, trạng thái của nó được lưu trữ ở đâu?
A. Trong hàng đợi Ready.
B. Trong PCB của tiến trình khác.
C. Chỉ trên đĩa cứng.
D. Thường trong một hàng đợi chờ liên kết với sự kiện hoặc tài nguyên mà nó đang chờ, được quản lý bởi kernel.

Câu 25.Trong bối cảnh Hệ điều hành, việc đánh thức một tiến trình từ trạng thái ngủ có thể được kích hoạt bởi điều gì?
A. Chỉ khi hết thời gian time slice.
B. Chỉ khi người dùng nhấn một phím.
C. Chỉ khi một tiến trình khác kết thúc.
D. Hoàn thành một thao tác I/O, giải phóng một tài nguyên đang bị chờ, nhận được một tín hiệu, hoặc một điều kiện nào đó được thỏa mãn.

×

Bạn ơi!!! Để xem được kết quả
bạn vui lòng làm nhiệm vụ nhỏ xíu này nha

LƯU Ý: Không sử dụng VPN hoặc 1.1.1.1 khi vượt link

Bước 1: Mở tab mới, truy cập Google.com

Bước 2: Tìm kiếm từ khóa: Từ khóa

Bước 3: Trong kết quả tìm kiếm Google, hãy tìm website giống dưới hình:

(Nếu trang 1 không có hãy tìm ở trang 2, 3, 4... nhé )

Bước 4: Cuộn xuống cuối bài viết rồi bấm vào nút GIỐNG HÌNH DƯỚI và chờ 1 lát để lấy mã: