Bài giảng Hệ điều hành: Chương: 5.2 - ThS. Trần Thị Như Nguyệt

21 63 0
Bài giảng Hệ điều hành: Chương: 5.2 - ThS. Trần Thị Như Nguyệt

Đ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

Bài giảng Hệ điều hành - Chương 5: Đồng bộ phần 2 được biên soạn nhằm giúp người học có thể hiểu được nhóm giải pháp Busy waiting bao gồm: Các giải pháp phần mềm, các giải pháp phần cứng. Mời các bạn cùng tham khảo nội dung chi tiết.

Chương 5: Đồng - CuuDuongThanCong.com https://fb.com/tailieudientucntt 01/2015 Câu hỏi ơn tập -  Khi xảy tranh chấp race condition?  Vấn đề Critical Section gì?  Yêu cầu lời giải cho CS problem?  Có loại giải pháp? Kể tên? CuuDuongThanCong.com https://fb.com/tailieudientucntt Đồng Mục tiêu  Hiểu nhóm giải pháp Busy waiting bao gồm:  Các giải pháp phần mềm  Các giải pháp phần cứng CuuDuongThanCong.com https://fb.com/tailieudientucntt Đồng Nội dung  Các giải pháp phần mềm  Sử dụng giải thuật kiểm tra luân phiên  Sử dụng biến cờ hiệu  Giải pháp Peterson  Giải pháp Bakery  Các giải pháp phần cứng  Cấp  Chỉ ngắt thị TSL  Cấm  Các ngắt lệnh đặc biệt CuuDuongThanCong.com https://fb.com/tailieudientucntt Đồng Giải thuật  Biến chia sẻ  int turn; /* khởi đầu turn = */  nếu turn = i thì Pi phép vào critical section, với i = hay  Process Pi { while (turn != i); critical section turn = j; remainder section } while (1);  Thoả mãn mutual exclusion (1)  Nhưng không thoả mãn yêu cầu progress (2) và bounded waiting (3) CuuDuongThanCong.com https://fb.com/tailieudientucntt Đồng Giải thuật (tt) Process P1: while (turn != 1); critical section turn := 0; remainder section while (1); Process P0: while (turn != 0); critical section turn := 1; remainder section while (1);  Ví dụ: P0 có RS (remainder section) lớn P1 có RS nhỏ ??? CuuDuongThanCong.com https://fb.com/tailieudientucntt Đồng Giải thuật  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 { flag[ i ] = true; /* Pi “sẵn sàng” vào CS */ while ( flag[ j ] ); /* Pi “nhường” Pj */ critical section flag[ i ] = false; remainder section } while(1);  Bảo đảm mutual exclusion  Không thỏa mãn progress Vì sao? Nếu flag[i] = flag[j] = true, process lặp vòng vơ tận while, khơng vào CS Đồng CuuDuongThanCong.com https://fb.com/tailieudientucntt Giải thuật (Peterson)  Biến chia sẻ  Kết hợp giải thuật  Process Pi, với i = hay { 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);  Thoả mãn yêu cầu ⇒ giải quyết bài toán critical section cho process CuuDuongThanCong.com https://fb.com/tailieudientucntt Đồng Giải thuật Peterson – process Process P1 { Process P0 { /* wants in */ /* wants in */ flag[0] = true; flag[1] = true; /* gives a chance to */ /* gives a chance to */ turn = 0; while (flag[0] && turn == 0); turn = 1; while (flag[1] &&turn == 1); critical section critical section /* no longer wants in */ /* no longer wants in */ flag[1] = false; flag[0] = false; remainder section remainder section } while(1); } while(1); CuuDuongThanCong.com https://fb.com/tailieudientucntt Đồng Giải thuật 3: Tính đắn  Giải thuật thỏa mutual exclusion, progress, bounded waiting  Mutual exclusion đảm bảo bởi  P0 P1 ở CS nếu nếu flag[0] = flag[1] = true turn = i cho Pi (không thể xảy ra)  Chứng minh thỏa yêu cầu progress bounded waiting  Pi vào CS nếu nếu 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 CuuDuongThanCong.com 10 https://fb.com/tailieudientucntt Đồng Giải thuật 3: Tính đắn (tt) 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 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 nhất là sau một lần Pj vào CS (bounded waiting) CuuDuongThanCong.com 11 https://fb.com/tailieudientucntt Đồng Giải thuật bakery: n process  Trước vào CS, process Pi nhận một số Process nào giữ số nhỏ nhất thì được vào CS  Trường hợp Pi và Pj cùng nhận được một chỉ số:  Nếu i < j thì Pi được vào trước  Khi khỏi CS, Pi đặt lại số của mình bằng  Cơ chế cấp số cho các process thường tạo các số theo chế tăng dần, ví dụ 1, 2, 3, 3, 3, 3, 4, 5,…  Kí hiệu  (a,b) < (c,d) nếu a < c hoặc nếu a = c và b < d  max(a0,…,ak) là số b cho b ≥ với mọi i = 0,…, k CuuDuongThanCong.com 12 https://fb.com/tailieudientucntt Đồng Giải thuật bakery: n process (tt) /* shared variable */ boolean choosing[n]; /* initially, choosing[i] = false */ int num[n]; /* initially, num[i] = */ { choosing[i] = true; num[i] = max(num[0], num[1],…, num[n-1]) + 1; choosing[i] = false; for (j = 0; j < n; j++) { while (choosing[j]); while ((num[j] != 0) && (num[j], j) < (num[i], i)); } critical section num[i] = 0; remainder section } while(1); CuuDuongThanCong.com 13 https://fb.com/tailieudientucntt Đồng Từ software đến hardware  Khuyết điểm giải pháp software:  Các process yêu cầu vào vùng tranh chấp phải liên tục kiểm tra điều kiện (busy waiting), tốn nhiều thời gian xử lý CPU  Nếu thời gian xử lý vùng tranh chấp lớn, mợt giải pháp hiệu nên có chế block các process cần đợi  Các giải pháp phần cứng:  Cấm ngắt (disable interrupts)  Dùng các lệnh đặc biệt CuuDuongThanCong.com 14 https://fb.com/tailieudientucntt Đồng Cấm ngắt  Trong hệ thống uniprocessor: mutual exclusion đảm bảo  Trong hệ thống multiprocessor: mutual exclusion không đảm bảo  Chỉ cấm ngắt CPU thực thi lệnh disable_interrupts, CPU khác truy cập bợ nhớ chia sẻ  Nếu cấm ngắt tất CPU gây tốn thời gian lần vào vùng tranh chấp CuuDuongThanCong.com 15 Process Pi: { disable_interrupts(); critical section enable_interrupts(); remainder section } while (1); https://fb.com/tailieudientucntt Đồng Lệnh TestAndSet  Đọc ghi một biến một thao tác atomic (không chia cắt được) boolean TestAndSet( boolean *target){ boolean rv = *target; *target = true; Shared data: boolean lock = false; Process Pi : return rv; } { while (TestAndSet(&lock)); critical section lock = false; remainder section } while (1); CuuDuongThanCong.com 16 https://fb.com/tailieudientucntt Đồng Lệnh TestAndSet (tt)  Mutual exclusion bảo đảm: nếu Pi vào CS, các process Pj khác busy waiting  Khi Pi khỏi CS, quá trình chọn lựa process Pj vào CS kế tiếp là tùy ý ⇒ không bảo đảm điều kiện bounded waiting Do xảy starvation (bị bỏ đói)  Các processor (ví dụ Pentium) thông thường cung cấp một lệnh đơn là Swap(a, b) có tác dụng hoán chuyển nội dung a và b  Swap(a, b) cũng có ưu nhược điểm TestAndSet CuuDuongThanCong.com 17 https://fb.com/tailieudientucntt Đồng Swap mutual exclusion Biến chia sẻ lock được khởi tạo giá trị false Mỗi process Pi có biến cục bộ key Process Pi nào thấy giá trị lock = false thì được vào CS Biến chia sẻ (khởi tạo là false) bool lock; bool key;  Process Pi { Process Pi sẽ loại trừ các process Pj khác thiết lập lock = true key = true; while (key == true) Swap(&lock, &key); critical section lock = false; remainder section } while (1) void Swap(boolean *a, boolean *b) { boolean temp = *a; *a = *b; *b = temp; } CuuDuongThanCong.com  Không thỏa mãn bounded waiting 18 https://fb.com/tailieudientucntt Đồng Giải thuật dùng TestAndSet thoả mãn yêu cầu  Cấu trúc dữ liệu dùng chung (khởi tạo là false) bool waiting[n]; bool lock;  Mutual exclusion: Pi chỉ có thể vào CS nếu và chỉ nếu hoặc waiting[i] = false, hoặc key = false  key = false chỉ TestAndSet (hay Swap) được thực thi  Process đầu tiên thực thi TestAndSet mới có key == false; các process khác đều phải đợi  waiting[i] = false chỉ process khác rời khỏi CS  Chỉ có một waiting[i] có giá trị false  Progress: chứng minh tương tự mutual exclusion  Bounded waiting: waiting in the cyclic order CuuDuongThanCong.com 19 (Xem sách tham khảo trang 212) https://fb.com/tailieudientucntt Đồng Giải thuật dùng TestAndSet thoả mãn yêu cầu (tt) { waiting[ i ] = true; key = true; while (waiting[ i ] && key) key = TestAndSet(&lock); waiting[ i ] = false; critical section j = (i + 1) % n; while ( (j != i) && !waiting[ j ] ) j = (j + 1) % n; if (j == i) lock = false; else waiting[ j ] = false; remainder section } while (1) CuuDuongThanCong.com 20 https://fb.com/tailieudientucntt Đồng Nội dung  Các giải pháp phần mềm  Sử dụng giải thuật kiểm tra luân phiên  Sử dụng biến cờ hiệu  Giải pháp Peterson  Giải pháp Bakery  Các giải pháp phần cứng  Cấp  Chỉ ngắt thị TSL  Cấm  Các ngắt lệnh đặc biệt CuuDuongThanCong.com 21 https://fb.com/tailieudientucntt Đồng ... CuuDuongThanCong.com 14 https://fb.com/tailieudientucntt Đồng Cấm ngắt  Trong hệ thống uniprocessor: mutual exclusion đảm bảo  Trong hệ thống multiprocessor: mutual exclusion không đảm bảo  Chỉ cấm ngắt... biến cờ hiệu  Giải pháp Peterson  Giải pháp Bakery  Các giải pháp phần cứng  Cấp  Chỉ ngắt thị TSL  Cấm  Các ngắt lệnh đặc biệt CuuDuongThanCong.com https://fb.com/tailieudientucntt Đồng... i); critical section turn = j; remainder section } while (1);  Thoả mãn mutual exclusion (1)  Nhưng không thoả mãn yêu cầu progress (2) và bounded waiting (3) CuuDuongThanCong.com https://fb.com/tailieudientucntt

Ngày đăng: 11/01/2020, 18:08

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan