Chapter05 2 process synchronization

81 462 0
Chapter05 2 process synchronization

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Chương V - Phần II Đồng Bộ Giải Quyết Tranh Chấp (Process Synchronization) Nội dung Đặt vấn đề (tại phải đồng giải tranh chấp ?)  Vấn đề Critical section  Các giải pháp phần mềm  – Giải thuật Peterson, giải thuật bakery Đồng hardware  Semaphore  Các toán đồng  Critical region  Monitor  Khoa KTMT Đặt vấn đề • Khảo sát process/thread thực thi đồng thời chia sẻ liệu (qua shared memory, file)  Nếu kiểm soát truy cập liệu chia sẻ đưa đến trường hợp không quán liệu (data inconsistency)  Để trì quán liệu, hệ thống cần có chế bảo đảm thực thi có trật tự process đồng thời Q p Khoa KTMT R L Hai nguyen nhan khong the chia se tai nguyen: -Dac tinh cau tao phan cung khong cho phep chia se -Cho ket qua khong chinh xac neu nhieu tien trinh su dung tai nguyen dong thoi Bài toán Producer-Consumer Producer-Consumer P khơng ghi liệu vào buffer đầy C khơng đọc liệu từ buffer trống P C khơng thao tác buffer lúc Giới hạn, không giới hạn ??? P Buffer (N) Buffer (N) Khoa KTMT C Đặt vấn đề  Xét toán Producer-Consumer với bounded buffer  Bounded buffer, thêm biến đếm count #define BUFFER_SIZE 10/* 10 buffers */ typedef struct { } item; item buffer[BUFFER_SIZE]; int in = 0, out = 0, count = 0; Khoa KTMT Bounded buffer (tt)  Quá trình Producer item nextProduced; while(1) { while (count == BUFFER_SIZE); /* nothing */ buffer[in] = nextProduced; count++; biến count chia sẻ in = (in + 1) % BUFFER_SIZE; producer consumer }  Quá trình Consumer item nextConsumed; while(1) { while (count == 0); /* nothing */ nextConsumed = buffer[out] ; count ; out = (out + 1) % BUFFER_SIZE; } Khoa KTMT Bounded buffer (tt)  Các lệnh tăng, giảm biến count tương đương ngôn ngữ máy là: • (Producer) count++: • register1 = count • register1 = register1 + = register1 • count • (Consumer) count : • register2 = count • register2 = register2 - = register2 • count  Đọc liệu từ vùng nhớ - nơi lưu trự biến count vào ghi Sau thực tác vụ ghi Cuối lưu trữ liệu từ ghi xuống nhớ Trong đó, registeri ghi CPU Khoa KTMT Bounded buffer (tt) • Mã máy lệnh tăng giảm biến count bò thực thi xen kẽ  Giả sử count Chuỗi thực thi sau xảy ra: • 0: producer register1 := count {register1 = 5} 1: producer register1 := register1 + {register1 = 6} 2: consumer register2 := count {register2 = 5} 3: consumer register2 := register2 - {register2 = 4} 4: producer count := register1 5: consumer {count = 6} count := register2 {count = 4} Các lệnh count++, count phải đơn nguyên (atomic), nghóa thực lệnh đơn, không bò ngắt nửa chừng Khoa KTMT Bounded buffer (tt)  Từ lệnh xảy cuối count giá trị ????? Lệnh 0, đọc liệu từ nhớ vào  Producer sinh Tai nguyen Comsumer tieu thu tai nguyen Theo dung nguyen tac thi so tai nguyen la khong doi – bien count van giu nguyen la nhung luc bien count co gia tri la    Đơn ngun thực thi hồn tất q trình có nhiều bước  lấy ví dụ rút tiền từ thẻ ATM Người dùng rút tiền cách đưa thẻ vào máy ATM, nhập số vào để rút, máy hết tiền q trình chấm dứt, máy tiền lúc tiền đưa đồng thời chuyển u cầu hệ thống u cầu hệ thống giảm tiền tài khoản, tài khoản khơng giảm lý … q trình rút tiền kết thúc, tài khoản giảm mà tiền khơng xuất ATM q trình rút tiền kết thúc Vẽ hình minh họa cho dễ Khoa KTMT Bounded buffer (tt)  Race condition: nhiều process truy xuất thao tác đồng thời lên liệu chia sẻ (như biến count) – 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  Để liệu chia sẻ quán, cần bảo đảm cho thời điểm có process thao tác lên liệu chia sẻ Do đó, cần có chế đồng hoạt động process Khoa KTMT 10 Dining philosophers (tt) 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); // left neighbor test((i + 1) % 5); // right … } Khoa KTMT 67 Dining philosophers (tt) void test(int i) { if ( (state[(i + 4) % 5] != eating) && (state[ i ] == hungry) && (state[(i + 1) % 5] != eating) ) { state[ i ] = eating; self[ i ].signal(); } void init() { for (int i = 0; i < 5; i++) state[ i ] = thinking; } } Khoa KTMT 68 Dining philosophers (tt)  Trước ăn, triết gia phải gọi hàm pickup(), ăn xong phải gọi hàm putdown() dp.pickup(i); ăn dp.putdown(i);  Giải thuật không deadlock gây starvation Khoa KTMT 69 Bài Tập Xét giải pháp đồng hoá sau : Pi while (TRUE) { int j = 1-i; flag[i]= TRUE; turn = j; while (turn == j && flag[j]==TRUE); critical-section (); flag[j] = FALSE; Noncritical-section (); } Đây có phải giải pháp bảo đảm điều kiện không ? Khoa KTMT 70 Bài tập Xét giải pháp phần mềm Dekker đề nghò để tổ chức truy xất độc quyền cho hai tiến trình Hai tiến trình P0, P1 chia sẻ biến sau : var flag : array [0 1] of boolean; (khởi động false) turn : 1; Cấu trúc tiến trình Pi ( i =0 hay 1, j tiến trình lại ) sau : repeat flag[i] := true; while flag[j] if turn = j then begin flag[i]:= false; while turn = j ; flag[i]:= true; end; critical_section(); turn:= j; flag[i]:= false; non_critical_section(); until false; Giải pháp có phải giải pháp thỏa mãn yêu cầu không ? Khoa KTMT 71 Bài tập Giả sử máy tính thò TSL, có thò Swap có khả hoán đổi nội dung hai từ nhớ thao tác phân chia : procedure Swap() var a,b: boolean); var temp : boolean; begin temp := a; a:= b; b:= temp; end; Sử dụng thò tổ chức truy xuất độc quyền không ? Nếu có, xây dựng cấu trúc chương trình tương ứng Khoa KTMT 72 Bài tập – semanphore Xét hai tiến trình xử lý đoạn chương trình sau : process P1 { A1 ; A2 } process P2 { B1 ; B2 } Đồng hoá hoạt động hai tiến trình cho A1 B1 hoàn tất trước A2 hay B2 bắt đầu Khoa KTMT 73 Bài tập – semanphore Sử dụng semaphore để viết lại chương trình sau theo mơ hình xử lý đồng hành: A = x1 + x2; B = A*x3; C= A + x4; D= B + C; E = D*x5 + C; Giả sử có process process thực biểu thức Khoa KTMT 74 Bài tập – semanphore  Xét hai tiến trình sau : process A { while (TRUE) na = na +1; } process B { while (TRUE) nb = nb +1; } – Đồng hoá xử lý hai tiến trình trên, sử dụng hai semaphore tổng quát, cho thời điểm có nb < na

Ngày đăng: 10/07/2016, 09:52