Bài giảng Hệ điều hành - Chương 3: Đồng bộ và giải quyết tranh chấp cung cấp cho người học các kiến thức: Khái niệm cơ bản, bài toán Critical-Section, các giải pháp phần mềm, đồng bộ bằng hardware, semaphore,.... Mời các bạn cùng tham khảo nội dung chi tiết.
Chương Đồng giải tranh chấp (Process Synchronization) -1- Nội dung Khái niệm Bài toán “Critical-Section” Các giải pháp phần mềm – Peterson, Bakery Đồng hardware Semaphore Các toán đồng Critical Region Monitor Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -2- Khái niệm Các process/thread thực thi đồng thời chia sẻ code, chia sẻ liệu (qua shared memory, file) Nếu điều khiển truy cập liệu chia sẻ xảy trường hợp không quán liệu (data inconsistent) Để trì quán liệu, hệ thống cần có chế bảo đảm thực thi có thứ tự process đồng thời Ví dụ Bounded-Buffer (ch.4) thêm biến đếm count #define BUFFER_SIZE 10 # typedef struct { … } item; item buffer[BUFFER_SIZE]; int in = 0, out = 0, count = 0; Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM -3- Bounded Buffer (t.t) Producer item nextProduced; while (1){ while ( count == BUFFER_SIZE ); /* nothing */ buffer[in] = nextProduced; count++; in = (in + 1) % BUFFER_SIZE; } Consumer item nextConsumed; while (1){ while ( count == ); /* nothing */ buffer[in] = nextConsumed; count ; out = (out + 1) % BUFFER_SIZE; } Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -4- Race Condition Race condition: nhieàu process truy xuất thao tác đồng thời liệu chia sẻ – Kết cuối việc truy xuất đồng thời phụ thuộc thứ tự thực thi lệnh thao tác liệu Chúng ta cần bảo đảm cho thời điểm có process truy xuất, thao tác liệu chia sẻ Do đó, cần có chế đồng hoạt động process Các lệnh tăng, giảm biến tương đương ngôn ngữ máy là: (P) count ++; – register1 := count – register1 := register1 +1 – count := register1 (C) count ; – register2 := count – register2 := register2 -1 – count := register2 Trong đó, registeri ghi CPU Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM -5- Ví dụ Race Condition Quá trình thực xen kẽ lệnh tăng/giảm biến count Hiện tại: count = 0: producer register1 := count 1: producer register1 := register1+1 2: consumer register2 := count 3: consumer register2 := register2-1 4: producer count := register1 5: consumer count := register2 {register1 = 5} {register1 = 6} {register2 = 5} {register2 = 4} {count = 6} {count = 4} Cả hai process thao tác đồng thời biến chung count Kết biến chung không quán thao tác hai process ⇒ lệnh count++, count phải atomic, nghóa thực lệnh đơn, không bị ngắt nửa chừng Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -6- Critical Section Giả sử có n process truy xuất đồng thời liệu chia sẻ Không phải tất đoạn code phải quan tâm giải vấn đề race condition mà đoạn code có chứa thao tác liệu chia sẻ Đoạn code gọi vùng tranh chấp - critical section (CS) Vấn đề đặt ra: phải bảo đảm process thực thi vùng tranh chấp, process khác phép thực thi lệnh vùng tranh chấp ⇒ mutual exclusion (mutex): loại trừ tương hỗ Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM -7- Critical Section vaø Mutual Exclusion A:enter(critical_section) A:leave(critical_section) Process A B attem ps to enterC S B :enter(critical_section) Process B B blocked B :leave(critical_section) Tim e t1 t2 t3 Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -8- Cấu trúc tổng quát Giả sử process thực thi bình Một số giả định: thường (i.e, nonzero speed) Có thể có nhiều CPU không cho phép có nhiều tác tương quan tốc vụ truy cập vị trí độ thực thi process nhớ lúc (simultaneous) Cấu trúc tổng quát Không ràng buộc thứ tự process: thực thi process Các process chia sẻ DO { số biến chung nhằm mục entry section đích đồng hoạt động chúng critical section Giải pháp cần exit section phải đặc tả phần remainder section entry section exit section } WHILE (1); Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM -9- Ràng buộc toán tranh chấp Mutual Exclusion – Tại thời điểm, có process phép thực thi vùng tranh chấp (CS) Progress: process thực thi vùng tranh chấp có số process chờ đợi vào vùng tranh chấp thì: – Chỉ process thực thi vùng không tranh chấp ứng cử viên cho việc chọn process vào vùng tranh chấp – Quá trình chọn lựa không trì hoãn vô hạn (postponed indefinitely) Bounded Waiting – Mỗi process phải chờ để vào vùng tranh chấp khoảng thời gian Không để xảy tình trạng “đói tài nguyên” (starvation) Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -10- Phân loại giải pháp Giải pháp phần mềm (software solutions) – user/programmer tự thực (thông thường có hỗ trợ thư viện lập trình) – OS cung cấp số công cụ (các hàm cấu trúc liệu) hỗ trợ cho programmer qua system calls Giải pháp phần cứng (hardware solutions) – Dựa số lệnh máy đặc biệt » Interrupt disable, Test-and-Set Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM -11- Giải pháp phần mềm Trường hợp process đồng thời – Giải thuật – Giải thuật (Peterson’s algorithm) Giải thuật tổng quát cho n process – Bakery algorithm Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -12- Giải thuật Biến chia sẻ – int turn; /* khởi đầu turn = */ – turn = i ⇒ Pi phép vào critical section Process Pi { while (turn != i) ; Critical_Section(); turn = j; Remainder_Section(); } while (1); Thoả mãn mutual exclusion (1) Không thoả mãn yêu cầu progress (2) boundedwaiting (3) tính chất strict alternation Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM -13- Giải thuật (t.t) Process P0: while(turn !=0 ); Critical_Section(); turn:=1; Remainder_Section(); Process P1: while(turn!=1); Critical_Section(); turn:=0; Remainder_Section(); while (1); while (1); Ví dụ: P0 có RS lớn P1 có RS nhỏ Nếu turn=0, P0 vào CS sau thực thi vùng RS (turn=1) Đến P1 vào CS sau thực thi RS (turn=0) tìm cách vào CS lần yêu cầu bị từ chối !!! P1 phải chờ P0 !!! Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -14- Giải thuật Biến chia sẻ – boolean flag[2]; /* khởi đầu flag [0] = flag [1] = false */ – Neáu flag [i] = true ⇒ Pi sẵn sàng vào critical section Process Pi { flag[i] := true; while (flag[j]) ; Critical_Section(); flag [i] = false; Remainder_Section(); } while (1); Bảo đảm mutual exclusion Chứng minh? Không thoả mãn progress Vì sao? Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM -15- Giải thuật (Peterson) Biến chia sẻ: kết hợp giải thuật Process Pi { flag [i]:= true; turn = j; while (flag [j] and turn = j) ; Critical_Section(); flag [i] = false; Remainder_Section(); } while (1); Thoả mãn yêu cầu (chứng minh - ?), giải toán “critical-section” cho process Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -16- Giải thuật Peterson-2 process PROCESS P0 DO { flag[0]:=true; /* wants in */ PROCESS P1 DO { flag[1]:=true; /* wants in */ turn:= 1; turn:=0; /* gives a chance to */ /* gives a chance to */ WHILE ( flag[1] && turn=1 ); CRITICAL_SECTION; flag[0]:=false; WHILE ( flag[0] && turn=0 ); CRITICAL_SECTION; flag[1]:=false; /* no longer wants in */ /* no longer wants in */ REMAINDER_SECTION; WHILE (1); REMAINDER_SECTION; WHILE (1); Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM -17- Giải thuật 3: Tính đắn Mutual exclusion bảo đảm – P0 P1 CS flag[0] = flag[1] = true turn = i với Pi (không thể xảy ra) Chứng minh thoả yêu cầu progress bounded waiting – Pi vào CS bị kẹt vòng lặp while() với điều kiện flag[j] = true turn = j – Nếu Pj không muốn vào CS flag[j] = false Pi vào CS Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -18- Giải thuật 3: Tính đắn (t.t) – Nếu Pj bật flag[j]=true chờ while() có hai trường hợp turn=i turn=j – Nếu turn=i Pi vào CS Nếu turn=j Pj vào CS bật flag[ j]=false thoát ⇒ cho phép Pi vào CS – Nhưng Pj có đủ thời gian bật flag[ j]=true Pj phải gán turn=i – Vì Pi không thay đổi trị biến turn kẹt vòng lặp while(), Pi chờ để vào CS nhiều sau lần Pj vào CS (bounded waiting) Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM -19- Trường hợp process bị “chết” Nếu thỏa đồng thời yêu cầu (mutex, progress, bounded waiting) giải pháp giải tranh chấp có khả phát process bị “chết” vùng tranh chấp (remainder section) – Khi đó, process bị “chết” vùng không tranh chấp có nghóa có remainder section dài vô hạn Không có giải pháp cung cấp chế đủ mạnh để giải trường hợp process bị “chết” bên critical section (CS) Khoa Công Nghệ Thông Tin – Đại Học Baùch Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -20- 10 Semaphore Là công cụ đồng cung cấp OS mà không đòi hỏi busy waiting Semaphore S biến số nguyên, thao tác khởi động biến truy xuất qua hai tác vụ có tính đơn nguyên (atomic) loại trừ (mutual exclusive) – wait(S) hay gọi P(S): giảm giá trị semaphore Nếu giá trị âm process thực lệnh wait() bị blocked – signal(S) hay gọi V(S): tăng giá trị semaphore Nếu giá trị âm, process blocked lệnh wait() hồi phục để thực thi Tránh busy waiting: phải đợi process đặt vào blocked queue, chứa process chờ đợi kiện Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM -31- Hiện thực Semaphore Định nghóa semaphore record typedefstruct{ intvalue; structprocess *L; /* process queue */ } sem aphore; Giả sử có hai tác vụ đơn: – block: tạm treo process thực thi lệnh – wakeup(P): hồi phục trình thực thi process P blocked Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -32- 16 Hiện thực Semaphore (t.t) Các tác vụ semaphore định nghóa sau wait(S): S.value ; if (S.value < 0) { add this process to S.L; block; } signal(S): S.value++; if (S.value =0: số process thực thi wait(S)mà không bị blocked = S.value Khi S.value 0){ nextc = pool[out]; out = ( out + ) % n; count ; } Khoa Coâng Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -50- 25 Monitor Cũng cấu trúc ngôn ngữ cấp cao (high-level language construct) tương tự CR, có chức semaphore dễ điều khiển Xuất nhiều ngôn ngữ lập trình đồng thời – Concurrent Pascal, Modula-3, uC++, Java Có thể thực semaphore (!!!) shared data Entry queue operations initialization code Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM -51- Monitor Là module phần mềm bao gồm – Một nhiều thủ tục/hàm (procedure) – Một đoạn code khởi tạo (initialization code) – Các biến liệu cục (local data variable) Đặc tính monitor: – Local variable truy xuất thủ tục monitor – Process vào monitor cách gọi thủ tục – Chỉ có process vào monitor thời điểm ⇒ Mutual Exclusion bảo đảm Hiện thực monitor (tham khảo tài liệu) Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -52- 26 Cấu trúc Monitor m onitor m onitor-nam e { shared variable declarations procedure body P1 (… ){ } procedure body P2 (… ){ } procedure body Pn (… ){ } { initialization code } } Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM -53- Condition Variable Nhằm cho phép process đợi monitor, phải khai báo biến điều kiện (condition variable) condition a, b; Các biến điều kiện cục truy cập bên monitor Chỉ truy xuất thay đổi hai thủ tục: – cwait(a): process gọi tác vụ bị block biến điều kiện a » process tiếp tục thực thi có process khác thực tác vụ csignal(a); – csignal(a): phục hồi trình thực thi process bị block biến điều kiện a » Nếu có nhiều process: chọn » Nếu process: tác dụng Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -54- 27 Monitor coù condition variable shared data a b operations initialization code entrance queue ª Các process đợi entrance queue đợi condition queue (a, b, ) ª Khi thực lệnh cwait(a), process chuyển vào condition queue a ª Lệnh csignal(a) chuyển process condition queue a vào monitor ª Do đó, process gọi csignal(cn) bị blocked đưa vào urgent queue Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM -55- Monitor có condition variable m onitorw aiting area entrance queue entrance MONITOR localdata condition c1 conditionalvariable Procedure cw ait(c1) condition cn cw ait(cn) urgentqueue csignal Procedure k initialization code exit Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -56- 28 Monitor vaø Dining Philosopher type dining-philosophers = monitor { var state : array [0 4] of :(thinking, hungry, eating); var self : array [0 4] of condition; procedure pickup (i: 4); begin state[i] := hungry; test (i); if state[i] ≠ eating then self[i].wait; end; } Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM -57- Monitor Dining Philosopher monitor dp { enum {thinking, hungry, eating} state[5]; condition self[5]; void pickup(int i); void putdown(int i); void test(int i); void init() { for (int i = 0; i < 5; i++) state[i] = thinking; } } Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -58- 29 Dining Philosopher (t.t) void pickup(int i) { state[i] = hungry; test[i]; if (state[i] != eating) self[i].wait(); } void putdown(int i) { state[i] = thinking; // test left and right neighbors test((i+4) % 5); test((i+1) % 5); } Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM -59- Dining Philosopher (t.t) void test(int i) { if ( (state[(I + 4) % 5] != eating) && (state[i] == hungry) && (state[(i + 1) % 5] != eating)) { state[i] = eating; self[i].signal(); } } Trước ăn, triết gia phải gọi hàm pickup(), ăn xong phải gọi haøm putdown() dp.pickup(i); /* yum yum yum */ dp.putdown(i); Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -60- 30 ... (chứng minh - ?), giải toán “critical-section” cho process Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -1 6- Giải thuật Peterson-2 process... tăng dần, ví dụ 1,2 ,3, 3 ,3, 3,4,5 Kí hiệu – (a,b) < (c,d) a < c if a == c b < d – max(a0, ak) số b cho b >= với i=0, k Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM -2 1- Giải thuaät Bakery:... false; R em ainder_Section; } Khoa Công Nghệ Thông Tin – Đại Học Bách Khoa Tp.HCM CuuDuongThanCong.com https://fb.com/tailieudientucntt -2 6- 13 Lệnh test-and-set (t.t) Mutual exclusion bảo đảm: Pi