intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Hệ điều hành: Chương 3 - Đồng bộ quá trình

Chia sẻ: Lavie Lavie | Ngày: | Loại File: PPT | Số trang:65

92
lượt xem
8
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Hệ điều hành: Chương 3 - Đồng bộ quá trình

  1. Chương 3  Đồng Bộ Quá Trình -1.1-
  2. 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
  3. 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
  4. 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 producer­consumer: 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
  5. Đồ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
  6. Bài toán Producer­consumer (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
  7. Bài toán Producer­consumer (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
  8. Bài toán Producer­consumer (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
  9. Đồ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
  10. 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
  11. 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
  12. 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
  13. Đị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 (lockout­freedom) ● (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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2