Bài giảng Hệ điều hành: Chương 3 - Đồng bộ quá trình
lượt xem 8
download
Bài giảng Hệ điều hành: Chương 3 - Đồng bộ quá trình bao gồm những nội dung về khái niệm cơ bản; Critical section, các giải pháp dùng lệnh máy thông thường; các giải pháp dùng lệnh cấm ngắt hoặc lệnh máy đặc biệt; Semaphore; Semaphore và các bài toán đồng bộ; Monitor.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Hệ điều hành: Chương 3 - Đồng bộ quá trình
- Chương 3 Đồng Bộ Quá Trình -1.1-
- Nội dung Khái niệm cơ bản Critical section Các giải pháp dùng lệnh máy thông thường ● Giải thuật Peterson, và giải thuật bakery Các giải pháp dùng lệnh cấm ngắt hoặc lệnh máy đặc biệt Semaphore Semaphore và các bài toán đồng bộ Monitor 2
- Bài toán đồng bộ (1/2) • Khảo sát các process/thread thực thi đồng thời và chia sẻ dữ liệu (ghi shared memory) trong hệ thống ● uniprocessor, hoặc ● shared memory multiprocessor Nếu không có sự kiểm soát khi truy cập các dữ liệu chia sẻ thì chúng có thể trỡ nên không nhất quán. Để duy trì sự nhất quán dữ liệu, hệ thống cần có cơ chế bảo đảm sự thực thi có trật tự của các process đồng thời. 3
- Bài toán đồng bộ (2/2) Hai lớp bài toán đồng bộ: ● Hợp tác Bài toán producerconsumer: bounded buffer ● Cấp phát tài nguyên Bài toán loại trừ tương hỗ: đồâng bộ nhiều quá trình sử dụng một tài nguyên không chia sẻ đồâng thời được Bài toán Dining Philosophers 4
- Đồng thời song song Trên uniprocessor hay trên shared memory multiprocessor, các quá trình chạy đồng thời Trên shared memory multiprocessor, các quá trình có thể chạy song song quá trình 1 quá trình 2 Shared memory Biến chia sẻ Quá trinh 1 và 2 code và private data 5
- Bài toán Producerconsumer (1/3) Ví dụ Bounded buffer, thêm biến đếm count #define BUFFER_SIZE 8 /* 8 buffers */ typedef struct { . . . } item; item buffer[BUFFER_SIZE]; int in = 0, out = 0, count = 0; 6
- Bài toán Producerconsumer (2/3) Quá trình Producer item nextProduced; while(1) { while (count == BUFFER_SIZE); buffer[in] = nextProduced; count++; in = (in + 1) % BUFFER_SIZE; } Quá trình Consumer item nextConsumed; while(1) { while (count == 0); nextConsumed = buffer[out]; biến count được chia sẻ count; giữa producer và consumer out = (out + 1) % BUFFER_SIZE;} 7
- Bài toán Producerconsumer (3/3) Các lệnh tăng/giảm biến count tương đương trong ngôn ngữ máy là: • Producer count++: • register1 = count • register1 = register1 + 1 • count = register1 • Consumer count: • register2 = count • register2 = register2 1 • count = register2 • Trong đó, registeri là thanh ghi của CPU. 8
- Đồng bộ và lệnh đơn nguyên • Mã máy của các lệnh tăng và giảm biến count có thể thực thi xen kẽ Giả sử count đang bằng 5. Chuỗi thực thi sau có thể xảy ra: 1: producer register1 := count {register1 = 5} producer register1 := register1 + 1 {register1 = 6} 2: consumer register2 := count {register2 = 5} consumer register2 := register2 1 {register2 = 4} 3: producer count := register1 {count = 6} 4: consumer count := register2 {count = 4} Cả hai process thao tác đồng thời lên biến chung count. Trị của biến chung này không nhất quán dưới các thao tác của hai process. Giải pháp: các lệnh count++, count phải là đơn nguyên (atomic), nghĩa là thực hiện như một lệnh đơn, không thực thi đan xen nhau. 9
- Race condition Race condition: nhiều process truy xuất và thao tác đồng thời lên dữ liệu chia sẻ (như biến count); kết quả cuối cùng của việc truy xuất đồng thời này phụ thuộc thứ tự thực thi của các lệnh thao tác dữ liệu. Để dữ liệu chia sẻ được nhất quán, cần bảo đảm sao cho các process lần lượt thao tác lên dữ liệu chia sẻ. Do đó, cần có cơ chế đồng bộ hoạt động của các process này. 10
- Khái niệm Critical Section Giả sử có n process đồng thời truy xuất dữ liệu chia sẻ. Giải quyết vấn đề race condition cho những đoạn code có chứa các thao tác lên dữ liệu chia sẻ. Đoạn code này được gọi là vùng tranh chấp (critical section, CS). Bài toán loại trừ tương hỗ: phải bảo đảm sự loại trừ tương hỗ (mutual exclusion, mutex), tức là khi một process P đang thực thi trong CS của P, không có process Q nào khác đồng thời thực thi các lệnh trong CS của Q. 11
- Cấu trúc tổng quát của quá trình trong bài toán loại trừ tương hỗ Giả sử mỗi process thực thi bình Một số giả định thường (i.e., nonzero speed) và không Có thể có nhiều CPU nhưng phần có sự tương quan giữa tốc độ thực cứng không cho phép nhiều tác vụ thi của các process truy cập một vị trí trong bộ nhớ Cấu trúc tổng quát của một process: cùng lúc Không ràng buộc về thứ tự thực thi của các process do { Các process có thể chia sẻ một số entry section biến chung nhằm đồng bộ hoạt động của chúng critical section exit section Vấn đề remainder section Thiết kế entry section và exit section } while(1); 12
- Định nghĩa lời giải của bài toán loại trừ tươnghỗ • Lời giải phải thỏa ba tính chất 1. Mutual exclusion 2. Progress ● (Progress cho entry section) Nếu ít nhất một process đang trong entry section và không có process nào đang trong critical section, thì một process vào critical section tại một thời điểm sau đó. ● (Progress cho exit section) Nếu ít nhất một process đang trong exit section, thì một process vào remainder section tại một thời điểm sau đó. • 3. Starvation freedom (lockoutfreedom) ● (cho entry section) quá trình vào entry section sẽ vào CS ● (cho exit section) quá trình vào exit section sẽ vào remainder section. 13
- Phân loại giải pháp cho bài toán loại trừ tương hỗ Giải pháp dùng lệnh máy thông thường Giải pháp dùng lệnh cấm ngắt hay lệnh máy đặc biệt ● Lệnh Disable interrupt ● Lệnh máy đặc biệt như TestAndSet 14
- Giải pháp dùng lệnh máy thông thường Giải pháp cho 2 process đồng thời ● Giải thuật 1 và 2 ● Giải thuật Peterson cho 2 process Giải pháp cho n process ● Giải thuật bakery 15
- Giải thuật 1 (1/2) Biến chia sẻ • int turn; /* khởi đầu turn = 0 */ • nếu turn = i thì Pi được phép vào critical section, với i = 0 hay 1 Process Pi do { while (turn != i); critical section turn = j; remainder section } while (1); Giải thuật thoả mãn mutual exclusion (1), nhưng không thoả mãn tính chất progress (2) vì tính chất strict alternation của giải thuật 16
- Giải thuật 1 (2/2) (viết lại) Process P0 Process P1 do { do { while (turn != 0); while (turn != 1); critical section critical section turn := 1; turn := 0; remainder section remainder section } while (1); } while (1); Giải thuật không thỏa mãn tính chất Progress (Progress cho entry section): Nếu turn = 0, P0 được vào CS và sau đó gán turn = 1 và vào remainder section (RS); giả sử P0 “ở lâu” trong đó. Lúc đó P1 vào CS và sau đó gán turn = 0, kế đó P1 vào và xong RS, vào entry section, đợi vào CS một lần nữa; nhưng vì turn = 0 nên P1 phải chờ P0. 17
- Giải thuật 2 Biến chia sẻ • boolean flag[ 2 ]; /* khởi đầu flag[ 0 ] = flag[ 1 ] = false */ • Nếu flag[ i ] = true thì Pi “sẵn sàng” vào critical section. Process Pi do { flag[ i ] = true; while ( flag[ j ] ); /* Pi “nhường” Pj */ critical section flag[ i ] = false; remainder section } while (1); 18
- Giải thuật 2 (tiếp) (copy lại) Process P Process P1 0 do { do { flag[ 0 ] = true; flag[ 1 ] = true; while (flag[ 1 ]); while (flag[ 0 ]); critical section critical section flag[ 0 ] = false; flag[ 1 ] = false; remainder section remainder section } while (1); } while (1); Bảo đảm được mutual exclusion. Chứng minh? Không thỏa mãn progress. Vì sao? Nếu đồng thời P0 gán flag[ 0 ] = true P1 gán flag[ 1 ] = true P0 và P1 loop mãi mãi trong vòng lặp while 19
- Giải thuật Peterson cho 2 process (1/2) Biến chia sẻ: kết hợp cả giải thuật 1 và 2 Process Pi , với i = 0 hay 1 do { flag[ i ] = true; /* Process i sẵn sàng */ turn = j; /* Nhường process j */ while (flag[ j ] and turn == j ); critical section flag[ i ] = false; remainder section } while (1); 20
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Hệ điều hành - Chương 1: Giới thiệu hệ điều hành
32 p | 167 | 16
-
Bài giảng Hệ điều hành: Chương 9 - ĐH Bách khoa TP HCM
56 p | 116 | 13
-
Bài giảng Hệ điều hành: Chương 1 - Đỗ Quốc Huy
107 p | 69 | 9
-
Bài giảng Hệ điều hành: Chương 2 - ThS. Hà Lê Hoài Trung
20 p | 124 | 9
-
Bài giảng Hệ điều hành: Chương 1 - Trần Công Án
73 p | 121 | 8
-
Bài giảng Hệ điều hành: Chương 1 - ThS. Phan Đình Duy
31 p | 64 | 7
-
Bài giảng Hệ điều hành: Chương 2 - ThS. Phan Đình Duy
36 p | 79 | 7
-
Bài giảng Hệ điều hành: Chương 1 - TS. Ngô Hữu Dũng
60 p | 124 | 7
-
Bài giảng Hệ điều hành: Chương 1 - Đặng Minh Quân
23 p | 77 | 6
-
Bài giảng Hệ điều hành: Chương 1 - ThS. Huỳnh Triệu Vỹ
156 p | 78 | 5
-
Bài giảng Hệ điều hành - Chương 1: Tổng quan hệ điều hành (Lương Minh Huấn)
109 p | 46 | 5
-
Bài giảng Hệ điều hành: Chương 1 - ĐH Bách khoa TP Hồ Chí Minh
26 p | 119 | 5
-
Bài giảng Hệ điều hành: Chương 1 - Nguyễn Ngọc Duy
36 p | 53 | 4
-
Bài giảng Hệ điều hành: Chương 2 - ĐH Công nghệ thông tin
36 p | 69 | 3
-
Bài giảng Hệ điều hành: Chương 2.1 - TS. Ngô Hữu Dũng
23 p | 61 | 3
-
Bài giảng Hệ điều hành: Chương 1 - ThS. Phạm Thanh Bình
32 p | 85 | 3
-
Bài giảng Hệ điều hành: Chương 1 - ThS. Hà Lê Hoài Trung
33 p | 78 | 3
-
Bài giảng Hệ điều hành - Chương 1: Mở đầu
13 p | 89 | 3
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn