hệ điều hành trần thị như nguyệt 5 2 đồng bộ 2 sinhvienzone com

21 64 0
hệ điều hành trần thị như nguyệt 5 2 đồng bộ 2 sinhvienzone com

Đ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 5: Đồng - SinhVienZone.com https://fb.com/sinhvienzonevn 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? SinhVienZone.com https://fb.com/sinhvienzonevn Đồ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 SinhVienZone.com https://fb.com/sinhvienzonevn Đồ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 SinhVienZone.com https://fb.com/sinhvienzonevn Đồ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) SinhVienZone.com https://fb.com/sinhvienzonevn Đồ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 cịn P1 có RS nhỏ ??? SinhVienZone.com https://fb.com/sinhvienzonevn Đồ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 SinhVienZone.com https://fb.com/sinhvienzonevn 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 SinhVienZone.com https://fb.com/sinhvienzonevn Đồ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); SinhVienZone.com https://fb.com/sinhvienzonevn Đồ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 SinhVienZone.com 10 https://fb.com/sinhvienzonevn Đồ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) SinhVienZone.com 11 https://fb.com/sinhvienzonevn Đồ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 SinhVienZone.com 12 https://fb.com/sinhvienzonevn Đồ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); SinhVienZone.com 13 https://fb.com/sinhvienzonevn Đồ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 SinhVienZone.com 14 https://fb.com/sinhvienzonevn Đồ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 SinhVienZone.com 15 Process Pi: { disable_interrupts(); critical section enable_interrupts(); remainder section } while (1); https://fb.com/sinhvienzonevn Đồ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); SinhVienZone.com 16 https://fb.com/sinhvienzonevn Đồ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 SinhVienZone.com 17 https://fb.com/sinhvienzonevn Đồ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; } SinhVienZone.com  Không thỏa mãn bounded waiting 18 https://fb.com/sinhvienzonevn Đồ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 SinhVienZone.com 19 (Xem sách tham khảo trang 212) https://fb.com/sinhvienzonevn Đồ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) SinhVienZone.com 20 https://fb.com/sinhvienzonevn Đồ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 SinhVienZone.com 21 https://fb.com/sinhvienzonevn Đồng ... tên? SinhVienZone. com https://fb .com/ sinhvienzonevn Đồ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 SinhVienZone. com https://fb .com/ sinhvienzonevn... (1);  Thoả mãn mutual exclusion (1)  Nhưng không thoả mãn yêu cầu progress (2) và bounded waiting (3) SinhVienZone. com https://fb .com/ sinhvienzonevn Đồng Giải thuật (tt) Process P1: while... 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 SinhVienZone. com 12 https://fb .com/ sinhvienzonevn

Ngày đăng: 28/01/2020, 22:04

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