tailieunhanh - Bài giảng Hệ điều hành: Chương: 5.3 - ThS. Trần Thị Như Nguyệt
Bài giảng "Hệ điều hành - Chương 5: Đồng bộ" phần 3 giúp người học có thể biết được các giải pháp đồng bộ tiến trình theo kiểu “Sleep & Wake up”; áp dụng các giải pháp này vào các bài toán đồng bộ kinh điển. nội dung chi tiết. | Bài giảng Hệ điều hành: Chương: - ThS. Trần Thị Như Nguyệt Chương 5: Đồng bộ - 3 01/2015 Mục tiêu Biết được các giải pháp đồng bộ tiến trình theo kiểu “Sleep & Wake up” bao gồm: Semaphore Critical Region Monitor Áp dụng các giải pháp này vào các bài toán đồng bộ kinh điển 2 Đồng bộ Nội dung Các giải pháp “Sleep & Wake up” Semaphore Các bài toán đồng bộ kinh điển Monitor 3 Đồng bộ Các giải pháp “Sleep & Wake up” int busy; // =1 nếu CS đang bị chiếm int blocked; // số P đang bị khóa do{ if (busy){ blocked = blocked +1; sleep(); } else busy =1; CS; busy = 0; if (blocked !=0){ wakeup (process); blocked = blocked -1; } RS; } while (1); 4 Đồng bộ Semaphore Một trong những công cụ đảm bảo sự đồng bộ của các process mà hệ điều hành cung cấp là Semaphore. Ý tưởng của Semaphore: Semaphore S là một biến số nguyên. Ngoài thao tác khởi động biến thì Semaphore chỉ có thể được truy xuất qua hai hàm có tính đơn nguyên (atomic) là wait và signal Hàm wait() và signal() còn có tên gọi khác lần lượt là P() và V() 5 Đồng bộ Semaphore Đầu tiên, hàm wait và signal được hiện thực như sau: Tuy nhiên, với cách hiện thực này, vòng lặp “while (S Semaphore Hàm wait và signal của Semaphore cải tiến, không busy waiting như sau: Định nghĩa semaphore là một record typedef struct { int value; struct process *L; /* process queue */ } semaphore; Mỗi Semaphore có một giá trị nguyên của nó và một danh sách các process. Khi các process chưa sẵn sàng để thực thi thì sẽ được đưa vào danh sách này. Danh sách này còn gọi là hàng đợi semaphore. Lưu ý: Các process
đang nạp các trang xem trước