Thực hành Hệ điều hành - Bài thực hành số 6: Đồng bộ
Critical section (miền găng): đoạn mã nguồn đọc/ghi dữ liệu
lên vùng nhớ chia sẻ
Race condition (tranh đoạt điều khiển): có tiềm năng bị xen kẻ
lệnh giữa các tiểu trình khác nhau trong miền găng
Kết quả không xác định
Mutual exclusion: cơ chế đồng bộ đảm bảo chỉ có một tiểu
trình duy nhất được thực hiện trong miền găng tại một thời
điểm
Deadlock: tình trạng các tiểu trình bị khóa mãi mãi
Starvation: đang thực thi nhưng không có tiến triển
lên vùng nhớ chia sẻ
Race condition (tranh đoạt điều khiển): có tiềm năng bị xen kẻ
lệnh giữa các tiểu trình khác nhau trong miền găng
Kết quả không xác định
Mutual exclusion: cơ chế đồng bộ đảm bảo chỉ có một tiểu
trình duy nhất được thực hiện trong miền găng tại một thời
điểm
Deadlock: tình trạng các tiểu trình bị khóa mãi mãi
Starvation: đang thực thi nhưng không có tiến triển
Bạn đang xem 20 trang mẫu của tài liệu "Thực hành Hệ điều hành - Bài thực hành số 6: Đồng bộ", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.
File đính kèm:
- thuc_hanh_he_dieu_hanh_bai_thuc_hanh_so_6_dong_bo.pdf
Nội dung text: Thực hành Hệ điều hành - Bài thực hành số 6: Đồng bộ
- Từ khóa Critical section (miền găng): đoạn mã nguồn đọc/ghi dữ liệu lên vùng nhớ chia sẻ Race condition (tranh đoạt điều khiển): có tiềm năng bị xen kẻ lệnh giữa các tiểu trình khác nhau trong miền găng Kết quả không xác định Mutual exclusion: cơ chế đồng bộ đảm bảo chỉ có một tiểu trình duy nhất được thực hiện trong miền găng tại một thời điểm Deadlock: tình trạng các tiểu trình bị khóa mãi mãi Starvation: đang thực thi nhưng không có tiến triển. ĐH KHTN TpHCM 2 TH 106: Hệ điều hành
- Miền găng (critical section) . Đoạn mã nguồn truy cập đến vùng nhớ dùng chung gọi là miền găng // bắt đầu miền găng if (taikhoan – tien_rut >= 0) taikhoan = taikhoan – tien_rut; else cout << “Không đủ tiền trong tài khoản”; // kết thúc miền găng ĐH KHTN TpHCM 4 TH 106: Hệ điều hành
- Giải pháp Giải pháp BUSY WAITING Giải pháp phần mềm .Sử dụng cờ hiệu .Kiểm tra luân phiên .Giải pháp Peterson Giải pháp phần cứng .Vô hiệu hóa ngắt .Chỉ thị TSL (Test-and-Set) Giải pháp “SLEEP and WAKEUP” ĐH KHTN TpHCM 6 TH 106: Hệ điều hành
- Giải pháp Giải pháp BUSY WAITING Giải pháp phần mềm .Sử dụng cờ hiệu .Kiểm tra luân phiên .Giải pháp Peterson Giải pháp phần cứng .Vô hiệu hóa ngắt .Chỉ thị TSL (Test-and-Set) ĐH KHTN TpHCM 8 TH 106: Hệ điều hành
- Giải pháp Giải pháp BUSY WAITING Giải pháp phần mềm .Sử dụng cờ hiệu .Kiểm tra luân phiên .Giải pháp Peterson Giải pháp phần cứng .Vô hiệu hóa ngắt .Chỉ thị TSL (Test-and-Set) ĐH KHTN TpHCM 10 TH 106: Hệ điều hành
- Giải pháp Giải pháp BUSY WAITING Giải pháp phần mềm .Sử dụng cờ hiệu .Kiểm tra luân phiên .Giải pháp Peterson Giải pháp phần cứng .Vô hiệu hóa ngắt .Chỉ thị TSL (Test-and-Set) ĐH KHTN TpHCM 12 TH 106: Hệ điều hành
- Giải pháp Giải pháp BUSY WAITING Giải pháp phần mềm .Sử dụng cờ hiệu .Kiểm tra luân phiên .Giải pháp Peterson Giải pháp phần cứng .Vô hiệu hóa ngắt .Chỉ thị TSL (Test-and-Set) ĐH KHTN TpHCM 14 TH 106: Hệ điều hành
- Giải pháp Giải pháp BUSY WAITING Giải pháp phần mềm .Sử dụng cờ hiệu .Kiểm tra luân phiên .Giải pháp Peterson Giải pháp phần cứng .Vô hiệu hóa ngắt .Chỉ thị TSL (Test-and-Set) ĐH KHTN TpHCM 16 TH 106: Hệ điều hành
- Giải pháp “SLEEP and WAKEUP” Giải pháp Peterson và TSL đều đúng, tuy nhiên chiếm thời gian CPU vì vòng lặp kiểm tra liên tục giải pháp sleep and wakeup ĐH KHTN TpHCM 18 TH 106: Hệ điều hành
- Semaphore Dijkstra đề xuất năm 1965 Một semaphore là 1 biến có các thuộc tính sau: Một giá trị nguyên dương e(s) Một hàng đợi f(s) lưu danh sách các tiến trình đang bị khóa Chỉ có hai thao tác được định nghĩa trên semaphore: .Down(s): giảm giá trị của semaphore s đi 1 đơn vị nếu e(s) > 0, và tiếp tục xử lý. Nếu e(s) = 0, tiến trình phải chờ đến khi e(s) >0. .Up(s): tăng giá trị của semaphore s lên 1 đơn vị. hệ thống sẽ chọn một trong các tiến trình bị khóa để cho tiếp tục thực thi. ĐH KHTN TpHCM 20 TH 106: Hệ điều hành
- #define N 100 /* kích thước buffer */ semaphore mutex = 1; /* điều khiển vào miền găng */ semaphore empty = N; /* đếm số ô rỗng trong buffer*/ semaphore full = 0; /* đếm số ô đã chiếm trong buffer*/ void Producer(void) { int item; while (TRUE) { item = produce_item(); /* sản xuất 1 mẫu tin */ down(&empty); /* giảm ô rỗng */ down(&mutex); /* vào miền găng */ insert_item(item); /* đặt mẫu tin vào buffer */ up(&mutex); /* rời miền găng */ up(&full); /* tăng số ô đã chiếm */ } } ĐH KHTN TpHCM TH 106: Hệ điều hành
- Buổi ăn tối của các triết gia ĐH KHTN TpHCM 24 TH 106: Hệ điều hành
- Giải pháp 1* void philosopher(int i) {// mã số triết gia while (TRUE) { think( ); // triết gia đang suy nghĩ down(mutex); take_fork(i); // lấy nĩa bên trái take_fork((i+1) % N); // lấy nĩa bên phải eat(); // ăn spaghetti put_fork(i); // trả lại nĩa bên trái put_fork((i+1) % N); // trả lại nĩa bên phải up(mutex); } } Chỉ một triết gia được ăn tại 1 lúc ĐH KHTN TpHCM 26 TH 106: Hệ điều hành
- Giải pháp 2 (tt) void take_forks(int i) { down(&mutex); // vào miền găng state[i] = HUNGRY; // lưu trạng thái HUNGRY test(i); // thử lấy hai nĩa up(&mutex); // ra khỏi miền găng down(&s[i]); // khóa nếu không lấy được nĩa } void put_forks(i) { down(&mutex); // vào miền găng state[i] = THINKING; // ăn xong test(LEFT); // kiểm tra thử triết gia trái có thể ăn test(RIGHT); // kiểm tra thử triết gia phải có thể ăn up(&mutex); // thoát khỏi miền găng } ĐH KHTN TpHCM TH 106: Hệ điều hành