Bài giảng Hệ điều hành: Chapter 5.3 - ThS. Trần Thị Như Nguyệt
Số trang: 43
Loại file: pdf
Dung lượng: 1.80 MB
Lượt xem: 14
Lượt tải: 0
Xem trước 5 trang đầu tiên của tài liệu này:
Thông tin tài liệu:
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. Mời các bạn cùng tham khảo nội dung chi tiết.
Nội dung trích xuất từ tài liệu:
Bài giảng Hệ điều hành: Chapter 5.3 - ThS. Trần Thị Như Nguyệt Chương 5: Đồng bộ - 3 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com 2 https://fb.com/tailieudientucntt Đồ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 CuuDuongThanCong.com 3 https://fb.com/tailieudientucntt Đồ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); CuuDuongThanCong.com 4 https://fb.com/tailieudientucntt Đồ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() CuuDuongThanCong.com 5 https://fb.com/tailieudientucntt Đồ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 khi ra khỏi hàng đợi semaphore sẽ vào hàng đợi Ready để chờ lấy CPU thực thi. Đồng bộ CuuDuongThanCong.com 7 https://fb.com/tailieudientucntt Semaphore Hàm wait và signal của Semaphore cải tiến, không busy waiting như sau: Hàm wait() và signal() được hiện thực như sau: void wait(semaphore *S) { S.value--; Lập trình thực tế, tùy if (S.value < 0) { từng ngôn ngữ, có thể là: add this process to S.L; S.value hoặc block(); Svalue } } void signal(semaphore *S) { S.value++; if (S.value Semaphore Hàm wait và signal của Semaphore cải tiến, không busy waiting như sau: Khi hàm wait() được gọi, ngay lập tức giá trị value của Semaphore S bị giảm đi 1. Và nếu giá trị Semaphore S âm, process này sẽ bị đưa vào danh sách L (đưa vào hàng đợi Semaphore) và bị khóa (block) lại. Khi hàm signal() được gọi, ngay lập tức giá trị value của Semaphore S tăng lên 1. Và nếu giá trị Semaphore lớn hơn hoặc bằng 0, một process sẽ được chọn lựa trong danh sách L, tức trong hàng đợi Semaphore và bị đánh thức dậy (wakeup) để ra hàng đợi ready và chờ CPU để thực hiện. Lưu ý: Trong hiện thực, các PCB của các process bị block sẽ được đưa vào danh sách L. Danh sách L có thể dùng hàng đợi FIFO hoặc cấu trúc khác tùy thuộc vào yêu cầu hệ thống. CuuDuongThanCong.com 9 https://fb.com/tailieudientucntt Đồng bộ Semaphore Hàm wait và signal của Semaphore cải tiến, không busy waiting như sau: Block() và Wakeup() là hai system calls của hệ điều hành. block(): Process này đang thực thi lệnh này sẽ bị khóa lại. Process chuyển từ Running sang Waiting wakeup(P): hồi phục quá trình thực thi của process P đang bị blocked Process P chuyển thừ Waiting sang Ready CuuDuongThanCong.com 10 https://fb.com/tailieudientucntt Đồng bộ Ví dụ sử dụng semaphore (1) Ví dụ 1: Shared data: Dùng semaphore giải quyết semaphore mutex; n process truy xuất vào CS. (Khởi tạo mutex.value = 1) Có hai trường hợp: Process Pi: Chỉ duy nhất một process do { được vào CS (mutual wait(mutex); exclusion) critical section Khởi tạo S.value = 1 signal(mutex); remainder section } while (1); Cho phép k process vào CS Khởi tạo S.value = k CuuDuongThanCong.com 11 ...
Nội dung trích xuất từ tài liệu:
Bài giảng Hệ điều hành: Chapter 5.3 - ThS. Trần Thị Như Nguyệt Chương 5: Đồng bộ - 3 CuuDuongThanCong.com https://fb.com/tailieudientucntt 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 CuuDuongThanCong.com 2 https://fb.com/tailieudientucntt Đồ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 CuuDuongThanCong.com 3 https://fb.com/tailieudientucntt Đồ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); CuuDuongThanCong.com 4 https://fb.com/tailieudientucntt Đồ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() CuuDuongThanCong.com 5 https://fb.com/tailieudientucntt Đồ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 khi ra khỏi hàng đợi semaphore sẽ vào hàng đợi Ready để chờ lấy CPU thực thi. Đồng bộ CuuDuongThanCong.com 7 https://fb.com/tailieudientucntt Semaphore Hàm wait và signal của Semaphore cải tiến, không busy waiting như sau: Hàm wait() và signal() được hiện thực như sau: void wait(semaphore *S) { S.value--; Lập trình thực tế, tùy if (S.value < 0) { từng ngôn ngữ, có thể là: add this process to S.L; S.value hoặc block(); Svalue } } void signal(semaphore *S) { S.value++; if (S.value Semaphore Hàm wait và signal của Semaphore cải tiến, không busy waiting như sau: Khi hàm wait() được gọi, ngay lập tức giá trị value của Semaphore S bị giảm đi 1. Và nếu giá trị Semaphore S âm, process này sẽ bị đưa vào danh sách L (đưa vào hàng đợi Semaphore) và bị khóa (block) lại. Khi hàm signal() được gọi, ngay lập tức giá trị value của Semaphore S tăng lên 1. Và nếu giá trị Semaphore lớn hơn hoặc bằng 0, một process sẽ được chọn lựa trong danh sách L, tức trong hàng đợi Semaphore và bị đánh thức dậy (wakeup) để ra hàng đợi ready và chờ CPU để thực hiện. Lưu ý: Trong hiện thực, các PCB của các process bị block sẽ được đưa vào danh sách L. Danh sách L có thể dùng hàng đợi FIFO hoặc cấu trúc khác tùy thuộc vào yêu cầu hệ thống. CuuDuongThanCong.com 9 https://fb.com/tailieudientucntt Đồng bộ Semaphore Hàm wait và signal của Semaphore cải tiến, không busy waiting như sau: Block() và Wakeup() là hai system calls của hệ điều hành. block(): Process này đang thực thi lệnh này sẽ bị khóa lại. Process chuyển từ Running sang Waiting wakeup(P): hồi phục quá trình thực thi của process P đang bị blocked Process P chuyển thừ Waiting sang Ready CuuDuongThanCong.com 10 https://fb.com/tailieudientucntt Đồng bộ Ví dụ sử dụng semaphore (1) Ví dụ 1: Shared data: Dùng semaphore giải quyết semaphore mutex; n process truy xuất vào CS. (Khởi tạo mutex.value = 1) Có hai trường hợp: Process Pi: Chỉ duy nhất một process do { được vào CS (mutual wait(mutex); exclusion) critical section Khởi tạo S.value = 1 signal(mutex); remainder section } while (1); Cho phép k process vào CS Khởi tạo S.value = k CuuDuongThanCong.com 11 ...
Tìm kiếm theo từ khóa liên quan:
Bài giảng Hệ điều hành Hệ điều hành Đồng bộ Giải pháp Sleep & Wake up Bài toán đồng bộ kinh điển Giải pháp đồng bộGợi ý tài liệu liên quan:
-
Giáo trình Lý thuyết hệ điều hành: Phần 1 - Nguyễn Kim Tuấn
110 trang 441 0 0 -
Lecture Operating systems: Lesson 24 - Dr. Syed Mansoor Sarwar
29 trang 371 0 0 -
Lecture Operating systems: Lesson 21 - Dr. Syed Mansoor Sarwar
22 trang 318 0 0 -
Giáo trình Nguyên lý các hệ điều hành: Phần 2
88 trang 263 0 0 -
175 trang 261 0 0
-
Lecture Operating systems: Lesson 13 - Dr. Syed Mansoor Sarwar
31 trang 260 0 0 -
173 trang 260 2 0
-
Giáo trình Nguyên lý hệ điều hành (In lần thứ ba): Phần 1 - PGS.TS. Hà Quang Thụy
98 trang 236 0 0 -
Đề tài nguyên lý hệ điều hành: Nghiên cứu tìm hiểu về bộ nhớ ngoài trong hệ điều hành Linux
19 trang 236 0 0 -
Lecture Operating systems: Lesson 12 - Dr. Syed Mansoor Sarwar
24 trang 220 0 0