Trắc nghiệm Hệ điều hành Bài 16: Các giải pháp đồng bộ hóa 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 16: Các giải pháp đồng bộ hóa
Câu 1.Giải pháp đồng bộ hóa nào dựa trên việc cho phép hoặc ngăn chặn các ngắt (Interrupt) để đảm bảo tính nguyên tố của các thao tác?
A. Semaphore.
B. Mutex.
C. Tắt/Bật ngắt (Disabling/Enabling Interrupts).
D. Spinlock.
Câu 2.Nhược điểm chính của việc tắt/bật ngắt để đồng bộ hóa trong hệ thống đa xử lý là gì?
A. Dễ gây ra Starvation.
B. Không thể giải quyết Race Condition.
C. Chỉ hoạt động cho 2 tiến trình.
D. Tắt ngắt trên một CPU không ngăn chặn các CPU khác truy cập tài nguyên dùng chung. Có thể gây mất các ngắt quan trọng.
Câu 3.Lệnh phần cứng đặc biệt nào (ví dụ: TestAndSet, Swap) được thiết kế để thực hiện thao tác đọc và ghi (hoặc trao đổi) một cách nguyên tố (atomic)?
A. Load/Store.
B. Add/Subtract.
C. Jump/Call.
D. TestAndSet() hoặc Swap().
Câu 4.Khi sử dụng lệnh `TestAndSet()`, giá trị trả về và giá trị mới của biến thường là gì?
A. Trả về giá trị mới, đặt giá trị cũ.
B. Trả về true, đặt giá trị false.
C. Trả về giá trị gốc (trước khi thay đổi), đặt giá trị mới (thường là true).
D. Trả về false, đặt giá trị true.
Câu 5.Giải pháp đồng bộ hóa nào là một biến nguyên (integer variable) được truy cập chỉ thông qua hai thao tác nguyên tố wait() và signal()?
A. Mutex.
B. Monitor.
C. Message Queue.
D. Semaphore.
Câu 6.Thao tác `wait()` trên Semaphore `S` hoạt động như thế nào?
A. Tăng S lên 1.
B. Cho phép tiến trình vào miền găng.
C. Giảm S đi 1. Nếu kết quả âm, tiến trình bị chặn.
D. Kiểm tra S, nếu S > 0 thì tiếp tục, ngược lại chờ.
Câu 7.Thao tác `signal()` trên Semaphore `S` hoạt động như thế nào?
A. Giảm S đi 1.
B. Chặn tiến trình gọi.
C. Tăng S lên 1. Nếu có tiến trình đang bị chặn trên Semaphore này, đánh thức một tiến trình.
D. Cho phép tất cả các tiến trình bị chặn chạy.
Câu 8.Semaphore tổng quát (Counting Semaphore) với giá trị ban đầu là N có thể được sử dụng để làm gì?
A. Đảm bảo loại trừ lẫn nhau cho miền găng.
B. Giao tiếp giữa các tiến trình.
C. Quản lý quyền truy cập vào N tài nguyên giống hệt nhau.
D. Đồng bộ hóa giữa nhà sản xuất và người tiêu dùng với buffer không giới hạn.
Câu 9.Semaphore nhị phân (Binary Semaphore) có giá trị chỉ có thể là 0 hoặc 1. Nó thường được sử dụng để làm gì?
A. Quản lý hàng đợi tin nhắn.
B. Kiểm soát tài nguyên số lượng lớn.
C. Đảm bảo loại trừ lẫn nhau (Mutual Exclusion), hoạt động tương tự Mutex.
D. Báo hiệu sự kiện giữa các tiến trình.
Câu 10.Mutex (Mutual Exclusion Lock) là một công cụ đồng bộ hóa đơn giản hơn Semaphore, thường được dùng để làm gì?
A. Trao đổi dữ liệu giữa các tiến trình.
B. Đồng bộ hóa các tác vụ trong hệ thống phân tán.
C. Kiểm soát truy cập vào nhiều tài nguyên giống hệt nhau.
D. Bảo vệ miền găng (đảm bảo chỉ một tiến trình/tiểu trình được vào miền găng).
Câu 11.Sự khác biệt giữa Mutex và Binary Semaphore là gì?
A. Mutex chỉ có 2 trạng thái, Semaphore có nhiều.
B. Mutex phức tạp hơn Semaphore.
C. Mutex được sử dụng cho giao tiếp, Semaphore cho đồng bộ hóa.
D. Mutex có khái niệm “sở hữu” (owner) – tiến trình/tiểu trình nào khóa mutex thì chỉ tiến trình/tiểu trình đó mới được mở khóa. Binary Semaphore không có khái niệm này.
Câu 12.Monitor là một công cụ đồng bộ hóa mức cao hơn, được tích hợp trong các ngôn ngữ lập trình (ví dụ: Java, C#). Ưu điểm của Monitor là gì?
A. Sử dụng ít bộ nhớ hơn Semaphore.
B. Dễ dàng gây ra Deadlock.
C. Đơn giản hóa việc viết code đồng bộ hóa bằng cách nhóm dữ liệu dùng chung và các hàm thao tác trên dữ liệu đó, đảm bảo Mutual Exclusion tự động.
D. Chỉ hoạt động trong kernel.
Câu 13.Bên trong một Monitor, chỉ có tối đa bao nhiêu tiến trình/tiểu trình được phép hoạt động tại một thời điểm?
A. Không giới hạn.
B. Tùy thuộc vào số lượng CPU.
C. Tùy thuộc vào số lượng điều kiện (Condition Variables).
D. 1.
Câu 14.Condition Variable (Biến điều kiện) bên trong Monitor được sử dụng để làm gì?
A. Lưu trữ dữ liệu chia sẻ.
B. Đảm bảo loại trừ lẫn nhau.
C. Báo hiệu lỗi.
D. Cho phép một tiến trình/tiểu trình tạm dừng (wait) bên trong Monitor khi nó không thể tiếp tục vì một điều kiện nào đó chưa được thỏa mãn, và được đánh thức (signal/broadcast) khi điều kiện đó có thể đã được thỏa mãn bởi tiến trình khác.
Câu 15.Thao tác `wait()` trên Condition Variable `c` trong Monitor hoạt động như thế nào?
A. Tiến trình tiếp tục chạy.
B. Tiến trình rời khỏi Monitor và tiếp tục ở ngoài.
C. Tiến trình bị chặn và giữ khóa Monitor.
D. Tiến trình bị chặn, NHẢ khóa Monitor, và chờ cho đến khi một tiến trình khác gọi `signal()` hoặc `broadcast()` trên cùng biến điều kiện.
Câu 16.Thao tác `signal()` trên Condition Variable `c` trong Monitor hoạt động như thế nào?
A. Đánh thức tất cả các tiến trình đang chờ trên `c`.
B. Khóa Monitor.
C. Tiến trình gọi bị chặn.
D. Đánh thức MỘT tiến trình (nếu có) đang chờ trên `c`. Nếu không có tiến trình nào chờ, thao tác không có tác dụng. Tiến trình gọi vẫn giữ khóa Monitor.
Câu 17.Thao tác `broadcast()` trên Condition Variable `c` trong Monitor hoạt động như thế nào?
A. Đánh thức MỘT tiến trình đang chờ trên `c`.
B. Chỉ báo hiệu cho kernel.
C. Khóa Monitor.
D. Đánh thức TẤT CẢ các tiến trình đang chờ trên `c`.
Câu 18.Đâu là nhược điểm chính của việc sử dụng Monitor so với Semaphore?
A. Khó cài đặt.
B. Dễ gây ra Race Condition.
C. Gây lãng phí CPU.
D. Thường chỉ được hỗ trợ ở mức ngôn ngữ lập trình, không phải là công cụ độc lập của Hệ điều hành (như Semaphore).
Câu 19.Peterson’s Solution là một giải pháp phần mềm cổ điển cho bài toán Miền găng cho bao nhiêu tiến trình?
A. Bất kỳ số lượng tiến trình nào.
B. Chỉ các tiến trình không liên quan.
C. Hai tiến trình.
D. Ba tiến trình trở lên.
Câu 20.Peterson’s Solution đảm bảo các yêu cầu nào của giải pháp Miền găng?
A. Chỉ Mutual Exclusion.
B. Chỉ Progress.
C. Chỉ Bounded Waiting.
D. Cả Mutual Exclusion, Progress và Bounded Waiting.
Câu 21.Việc sử dụng `atomic variables` (biến nguyên tố) trong lập trình đồng hành nhằm mục đích gì?
A. Lưu trữ dữ liệu lớn.
B. Tạo ra các tiến trình mới.
C. Thiết lập kênh truyền thông.
D. Đảm bảo các thao tác đọc, ghi hoặc sửa đổi cơ bản trên biến đó được thực hiện một cách nguyên tố, không bị ngắt giữa chừng.
Câu 22.Tác vụ nào sau đây KHÔNG đòi hỏi cơ chế đồng bộ hóa khi thực hiện bởi nhiều tiến trình/tiểu trình?
A. Tăng giá trị của một biến toàn cục.
B. Thêm một phần tử vào danh sách liên kết dùng chung.
C. Cập nhật một bản ghi trong cơ sở dữ liệu chia sẻ.
D. Đọc giá trị từ một biến chỉ được ghi bởi một tiến trình duy nhất.
Câu 23.Mô hình nào cung cấp một mức độ trừu tượng cao hơn Semaphore và Mutex, thường được coi là an toàn hơn khi sử dụng?
A. Spinlock.
B. Lệnh phần cứng nguyên tố.
C. Monitor.
D. Tắt/Bật ngắt.
Câu 24.Trong các hệ điều hành hiện đại, cơ chế đồng bộ hóa nào thường được cung cấp ở mức kernel để lập trình viên sử dụng?
A. Peterson’s Solution.
B. Tắt/Bật ngắt.
C. Semaphore, Mutex, và các API tương ứng (ví dụ: pthreads mutex, sem_t).
D. Monitor (trừ khi ngôn ngữ lập trình hỗ trợ).
Câu 25.Khi thiết kế giải pháp đồng bộ hóa cho một bài toán cụ thể, điều quan trọng là phải cân nhắc giữa các yếu tố nào?
A. Chỉ tốc độ và bộ nhớ.
B. Chỉ tính đơn giản và giá thành.
C. Chỉ khả năng tương thích ngược.
D. Tính đúng đắn (đảm bảo Mutual Exclusion, Progress, Bounded Waiting), hiệu năng (chi phí overhead), và tính đơn giản trong việc sử dụng.