1. Trang chủ
  2. » Giáo án - Bài giảng

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

21 64 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 21
Dung lượng 1,66 MB

Nội dung

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