Bài Giảng Hệ điều Hành - Chương 5: Đồng Bộ Hóa Tiến Trình
Có thể bạn quan tâm
- Đăng ký
- Đăng nhập
- Liên hệ
Đồ án, luận văn, do an, luan van
Thư viện đồ án, luận văn, tiểu luận, luận án tốt nghiệp, thạc sĩ, tiến sĩ, cao học
- Trang Chủ
- Tài Liệu
- Upload
Xử lý đồng hành và các vấn đề: Vấn đề tranh đoạt điều khiển (Race Condition) Vấn đề phối hợp xử lý Bài toán đồng bộ hóa Yêu cầu độc quyền truy xuất (Mutual Exclusion) Yêu cầu phối hợp xử lý (Synchronization) Các giải pháp đồng bộ hoá Busy waiting Sleep & Wakeup Các bài toán đồng bộ hoá kinh điển Producer – Consumer Readers – Writers Dinning Philosophers
Bạn đang xem trước 20 trang tài liệu Bài giảng Hệ điều hành - Chương 5: Đồng bộ hóa tiến trình, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trênChương 5 : Đồng bộ hóa tiến trình 1 2Nội dung bài giảng Xử lý đồng hành và các vấn đề: Vấn đề tranh đoạt điều khiển (Race Condition) Vấn đề phối hợp xử lý Bài toán đồng bộ hóa Yêu cầu độc quyền truy xuất (Mutual Exclusion) Yêu cầu phối hợp xử lý (Synchronization) Các giải pháp đồng bộ hoá Busy waiting Sleep & Wakeup Các bài toán đồng bộ hoá kinh điển Producer – Consumer Readers – Writers Dinning Philosophers 3Nhiều tiến trình “chung sống hoà bình” trong hệ thống ? ĐỪNG HY VỌNG An toàn khi các tiến trình hoàn toàn độc lập Làm sao có được ?? Thực tế Các tiến trình chia sẻ tài nguyên chung ( file system, CPU...) Concurrent access => bugs. Ví dụ : Dê con qua cầu Xử lý đồng hành = ...nhức đầu 4Các vấn đề Tranh chấp Nhiều tiến trình truy xuất đồng thời một tài nguyên mang bản chất không chia sẻ được Xảy ra vấn đề tranh đoạt điều khiển (Race Condition) Kết quả ? Khó biết , thường là ...sai Luôn luôn nguy hiểm ? ...Không, nhưng đủ để cân nhắc kỹ càng Phối hợp Các tiến trình không biết tương quan xử lý của nhau để điều chỉnh hoạt động nhịp nhàng Cần phối hợp xử lý (Rendez-vous) Kết quả : khó biết, không bảo đảm ăn khớp 5Nội dung bài giảng Xử lý đồng hành và các vấn đề: Vấn đề tranh đoạt điều khiển (Race Condition) Vấn đề phối hợp xử lý Bài toán đồng bộ hóa Yêu cầu độc quyền truy xuất (Mutual Exclusion) Yêu cầu phối hợp xử lý (Synchronization) Các giải pháp đồng bộ hoá Busy waiting Sleep & Wakeup Các bài toán đồng bộ hoá kinh điển Producer – Consumer Readers – Writers Dinning Philosophers 6Tranh đoạt điều khiển - Ví dụ hits = hits +1; hits = hits + 1; P1 P2 hits = 0 Kết quả cuối cùng là bao nhiêu ? Đếm số người vào Altavista : dùng 2 threads cập nhật biến đếm hits=> P1 và P2 chia sẻ biến hits 7Tranh đoạt điều khiển - Ví dụ (4)hits = 0 + 1 (1) read hits (0) (3) hits = 0 + 1 (2)read hits (0) P1 P2 hits = 1 hits = 0 time 8Tranh đoạt điều khiển - Ví dụ (4) hits = 1 + 1 (1) read hits (0) (2) hits = 0 + 1 (3) read hits (1) P1 P2 hits = 2 hits = 0 time 9 Ai thắng ? Có bảo đảm rằng sẽ có người thắng ? Nếu mỗi tiến trình xử lý trên 1 CPU thì sao ? Tranh đoạt điều khiển - Ví dụ Thread b: while(i > -10) i = i - 1; print “B won!”; Thread a: while(i < 10) i = i +1; print “A won!”; i=0; 10 Tranh đoạt điều khiển - Nhận xét Kết quả thực hiện tiến trình phụ thuộc vào kết quả điều phối Cùng input, không chắc cùng output Khó debug lỗi sai trong xử lý đồng hành 11 Tranh đoạt điều khiển - Nhận xét Xử lý Làm lơ Dễ, nhưng có phải là giải pháp Không chia sẻ tài nguyên chung : dùng 2 biến hits1,hits2; xây cầu 2 lane... Nên dùng khi có thể, nhưng không bao giờ có thể đảm bảo đủ tài nguyên, và cũng không là giải pháp đúng cho mọi trường hợp Giải pháp tổng quát: có hay không? Lý do xảy ra Race condition? Bad interleavings: một tiến trình “xen vào” quá trình truy xuất tài nguyên của một tiến trình khác Giải pháp: bảo đảm tính atomicity cho phép tiến trình hoàn tất trọn vẹn quá trình truy xuất tài nguyên chung trước khi có tiến trình khác can thiệp 12 Atomicity : loại bỏ Race Condition read hits(1) hits = 1 + 1 P1 P2 hits = 2 hits = 0 time read hits (0) hits = 0 + 1 Miền găng (Critical Section) Miền găng (CS) là đoạn chương trình có khả năng gây ra hiện tượng race condition Giải pháp: Hỗ trợ Atomicity Cần bảo đảm tính “độc quyền truy xuất” (Mutual Exclusion) cho miền găng (CS) 13 14 Critical Section & Mutual Exclusion hits = hits + 1 printf(“Welcome”); hits = hits + 1 printf(“Welcome”); P1 P2 CSCS printf(“Bye”); printf(“Bye”); 15 Nội dung bài giảng Xử lý đồng hành và các vấn đề: Vấn đề tranh đoạt điều khiển (Race Condition) Vấn đề phối hợp xử lý Bài toán đồng bộ hóa Yêu cầu độc quyền truy xuất (Mutual Exclusion) Yêu cầu phối hợp xử lý (Synchronization) Các giải pháp đồng bộ hoá Busy waiting Sleep & Wakeup Các bài toán đồng bộ hoá kinh điển Producer – Consumer Readers – Writers Dinning Philosophers 16 Phối hợp hoạt động (1) Send(“Anh”); P1 (2) Send(“yeâu”); P2 (3) Send(“em”); P3 (4) Send(“Khoâng”); P4 Chuyện gì đã xảy ra ? (1) Send(“Anh”); P1 (2) Send(“yeâu”); P2 (3) printf(“em”); P3 (4) Send(“Khoâng”); P4 (1)Send(“Anh”); P1 (2) Send(“yeâu”); P2 (3) Send(“em”); P3 (4) Send(“Khoâng”); P4 17 18 Phối hợp xử lý Làm thế nào bảo đảm trình tự thực hiện Job1 - Job2 ? P1 và P2 thực hiện “hẹn hò” (Rendez-vous) với nhau Hỗ trợ Rendez-vous : Bảo đảm các tiến trình phối hợp với nhau theo 1 trình tự xử lý định trước. P1 P2 Job1; Job2; 19 Nội dung bài giảng Xử lý đồng hành và các vấn đề: Vấn đề tranh đoạt điều khiển (Race Condition) Vấn đề phối hợp xử lý Bài toán đồng bộ hóa Yêu cầu độc quyền truy xuất (Mutual Exclusion) Yêu cầu phối hợp xử lý (Synchronization) Các giải pháp đồng bộ hoá Busy waiting Sleep & Wakeup Các bài toán đồng bộ hoá kinh điển Producer – Consumer Readers – Writers Dinning Philosophers 20 Bài toán đồng bộ hoá (Synchronization) Nhiều tiến trình chia sẻ tài nguyên chung đồng thời : Tranh chấp Race Condition Nhu cầu “độc quyền truy xuất” (Mutual Exclusion) Các tiến trình phối hợp hoạt động : Tương quan diễn tiến xử lý ? Nhu cầu “hò hẹn” (Rendez-vous) 21 Bài toán đồng bộ hoá (Synchronization) Thực hiện đồng bộ hoá : Lập trình viên đề xuất chiến lược Các tiến trình liên quan trong bài toán phải tôn trọng các luậtđồng bộ Giải pháp sử dụng các cơ chế đồng bộ : Do lập trình viên /phần cứng / HĐH / NNLT cung cấp 22 Mô hình đảm bảo Mutual Exclusion Kiểm tra và dành quyền vào CS CS; Từ bỏ quyền sử dụng CS Nhiệm vụ của lập trình viên: Thêm các đoạn code đồng bộ hóa vào chương trình gốc Thêm thế nào : xem mô hình sau ... 23 Mô hình phối hợp giữa hai tiến trình P1 P2 Job1; Chờ Báo hiệu Job2; Nhiệm vụ của lập trình viên: Thêm các đoạn code đồng bộ hóa vào 2 chương trình gốc Thêm thế nào : xem mô hình sau ... Nhiều tiến trình hơn thì sao ? Không có mô hình tổng quát Tùy thuộc bạn muốn hẹn hò ra sao 24 Nội dung bài giảng Xử lý đồng hành và các vấn đề: Vấn đề tranh đoạt điều khiển (Race Condition) Vấn đề phối hợp xử lý Bài toán đồng bộ hóa Yêu cầu độc quyền truy xuất (Mutual Exclusion) Yêu cầu phối hợp xử lý (Synchronization) Các giải pháp đồng bộ hoá Busy wating Sleep & Wakeup Các bài toán đồng bộ hoá kinh điển Producer – Consumer Readers – Writers Dinning Philosophers 25 Giải pháp đồng bộ hoá Một phương pháp giải quyết tốt bài toán đồng bộ hoá cần thoả mản 4 điều kiện sau: Mutual Exclusion: Không có hai tiến trình cùng ở trong miền găng cùng lúc. Progess: Một tiến trình tạm dừng bên ngoài miền găng không được ngăn cản các tiến trình khác vào miền găng Bounded Waiting: Không có tiến trình nào phải chờ vô hạn để được vào miền găng. Không có giả thiết nào đặt ra cho sự liên hệ về tốc độ của các tiến trình, cũng như về số lượng bộ xử lý trong hệ thống. 26 Các giải pháp đồng bộ hoá Nhóm giải pháp Busy Waiting Phần mềm Sử dụng các biến cờ hiệu Sử dụng việc kiểm tra luân phiên Giải pháp của Peterson Phần cứng Cấm ngắt Chỉ thị TSL Nhóm giải pháp Sleep & Wakeup Semaphore Monitor Message 27 Các giải pháp “Busy waiting” While (chưa có quyền) donothing() ; CS; Từ bỏ quyền sử dụng CS Tiếp tục tiêu thụ CPU trong khi chờ đợi vào miền găng Không đòi hỏi sự trợ giúp của Hệ điều hành 28 Nhóm giải pháp Busy-Waiting Các giải pháp Busy Waiting Các giải pháp phần mềm Giải pháp biến cờ hiệu Giải pháp kiểm tra luân phiên Giải pháp Peterson Phần cứng Cấm ngắt Chỉ thị TSL 29 while (lock == 1); // wait lock = 1; CS; lock = 0; int lock = 0 NonCS; NonCS; P0 while (lock == 1); // wait lock = 1; CS; lock = 0; NonCS; NonCS; P1 Giải pháp phần mềm 1: Sử dụng cờ hiệu 30 while (lock == 1); // wait lock = 1; CS; lock = 0; int lock = 0 NonCS; NonCS; P0 while (lock == 1); // wait lock = 1; CS; lock = 0; NonCS; NonCS; P1 Giải pháp phần mềm 1: Tình huống 31 Nhận xét Giải pháp1: Cờ hiệu Có thể mở rộng cho N tiến trình Không bảo đảm Mutual Exclusion Nguyên nhân ? Bản thân đoạn code kiểm tra và dành quyền cũng là CS ! while ( lock == 1); // wait lock = 1;Bị ngắt xử lý Tài nguyên dùng chung CS ! 32 Giải pháp phần mềm 2 : Kiểm tra luân phiên while (turn !=0); // wait CS; turn = 1; int turn = 1 NonCS; NonCS; P0 while (turn != 1); // wait CS; turn = 0; NonCS; NonCS; P1 33 Giải pháp phần mềm 2 : Tình huống int turn = 1 turn ==1 Wait... CS; turn = 1 NonCS; CS ? (turn ==1) P0 CS; turn = 0; NonCS... P1 P0 không vào được CS lần 2 khi P1 dừng trong NonCS ! 34 Nhận xét Giải pháp 2: Kiểm tra luân phiên Chỉ dành cho 2 tiến trình Bảo đảm Mutual Exclusion Chỉ có 1 biến turn, tại 1 thời điểm chỉ cho 1 tiến trình turn vào CS Không bảo đảm Progress Nguyên nhân ? “Mởø của” cho người = “Đóng cửa” chính mình ! 35 Kết hợp ý tưởng của 1 & 2, các tiến trình chia sẻ: int turn; //đến phiên ai int interest[2] = FALSE; //interest[i] = T : Pi muốn vào CS Giải pháp phần mềm 3 : Peterson’s Solution j = 1 – i; interest[i] = TRUE; turn = j; while (turn==j && interest[j]==TRUE); CS; interest[i] = FALSE; NonCS; NonCS; Pi 36 Giải pháp phần mềm 3 : Peterson i = 1 – j; interest[j] = TRUE; turn = i; while (turn==i && interest[i]==TRUE); CS; interest[j] = FALSE; NonCS; NonCS; Pj 37 Là giải pháp phần mềm đáp ứng được cả 3 điều kiện Mutual Exclusion : Pi chỉ có thể vào CS khi: interest[j] == F hay turn == i Nếu cả 2 muốn về thì do turn chỉ có thể nhận giá trị 0 hay 1 nên chỉ có 1 tiến trình vào CS Progress Sử dụng 2 biến interest[i] riêng biệt => trạng thái đối phương không khoá mình được Bounded Wait : interest[i] và turn đều có thay đổi giá trị Không thể mở rộng cho N tiến trình Nhận xét giải pháp phần mềm 3: Peterson 38 Nhận xét chung về các giải pháp phần mềm trong nhóm Busy-Waiting Không cần sự hỗ trợ của hệ thống Dễ...sai, Khó mở rộng Giải pháp 1 nếu có thể được hỗ trợ atomicity thì sẽ tốt... Nhờ đến phần cứng ? 39 Nhóm Busy-Waiting - Các giải pháp phần cứng Các giải pháp Busy Waiting Các giải pháp phần mềm Giải pháp biến cờ hiệu Giải pháp kiểm tra luân phiên Giải pháp Peterson Các giải pháp phần cứng Cấm ngắt Test&Set lock Instruction 40 Giải pháp phần cứng: Cấm ngắt Disable Interrupt; CS; Enable Interrupt; NonCS; NonCS; Disable Interrupt: Cấm mọi ngắt, kể cả ngắt đồng hồ Enable Interrupt: Cho phép ngắt 41 Thiếu thận trọng Nếu tiến trình bị khoá trong CS ? System Halt Cho phép tiến trình sử dụng một lệnh đặc quyền Quá ...liều ! Máy có N CPUs ? Không bảo đảm được Mutual Exclusion Giải pháp phần cứng 1: Cấm ngắt 42 CPU hỗ trợ primitive Test and Set Lock Trả về giá trị hiện hành của 1 biến, và đặt lại giá trị True cho biến Thực hiện một cách không thể phân chia Giải pháp phần cứng 2: chỉ thị TSL() TSL (boolean &target) { TSL = target; target = TRUE; } 43 Aùp dụng TSL while (TSL(lock)); // wait CS; lock = 0; NonCS; NonCS; Pi int lock = 0 44 Các giải pháp phần cứng thuộc nhóm Busy - Waiting Cần được sự hỗ trợ của cơ chế phần cứng Không dễ, nhất là trên các máy có nhiều bộ xử lý Dễ mở rộng cho N tiến trình Sử dụng CPU không hiệu quả Liên tục kiểm tra điều kiện khi chờ vào CS Khắc phục Khoá các tiến trình chưa đủ điều kiện vào CS, nhường CPU cho tiến trình khác Phải nhờ đến Scheduler Wait and See... Nhận xét 45 Các giải pháp đồng bộ hoá Nhóm giải pháp Busy Waiting Phần mềm Sử dụng các biến cờ hiệu Sử dụng việc kiểm tra luân phiên Giải pháp của Peterson Phần cứng Cấm ngắt Chỉ thị TSL Nhóm giải pháp Sleep & Wakeup Semaphore Monitor Message 46 Các giải pháp “Sleep & Wake up” if (chưa có quyền) Sleep() ; CS; Wakeup( somebody); Từ bỏ CPU khi chưa được vào CS Khi CS trống, sẽ được đánh thức để vào CS Cần được Hệ điều hành hỗ trợ Vì phải thay đổi trạng thái tiến trình 47 Ý tưởng Hệ Điều hành hỗ trợ 2 primitive : Sleep() : Tiến trình gọi sẽ nhận trạng thái Blocked WakeUp(P): Tiến trình P nhận trạng thái Ready Áp dụng Sau khi kiểm tra điều kiện sẽ vào CS hay gọi Sleep() tùy vào kết quả kiểm tra Tiến trình vừa sử dụng xong CS sẽ đánh thức các tiến trình bị Blocked trước đó 48 Áp dụng Sleep() and Wakeup() int busy; // busy ==0 : CS troáng int blocked; // ñeám soá tieán trình bò Blocked chôø vaøo CS if (busy) { blocked = blocked + 1; Sleep(); } else busy = 1; busy = 0; if(blocked) { WakeUp(P); blocked = blocked - 1; } CS; 49 Vấn đề với Sleep & WakeUp if (busy) { blocked = blocked + 1; Sleep(); } else busy = 1; busy = 0; if(blocked) { WakeUp(P); blocked = blocked - 1; } CS; if (busy) { blocked = blocked + 1; Sleep(); } else busy = 1; busy = 0; if(blocked) { WakeUp(P); blocked = blocked - 1; } CS; Nguyên nhân : Việc kiểm tra điều kiện và động tác từ bỏ CPU có thể bị ngắt quãng Bản thân các biến cờ hiệu không được bảo vệ P1 P2 P1 blocked vĩnh viễn WakeU p bị “lạc” 50 Cài đặt các giải pháp Sleep & WakeUp ? Hệ điều hành cần hỗ trợ các cơ chế cao hơn Dựa trên Sleep&WakeUp Kết hợp các yếu tố kiểm tra Thi hành không thể phân chia Nhóm giải pháp Sleep & Wakeup Semaphore Monitor Message 51 Giải pháp Sleep & Wakeup 1: Semaphore Semaphore s; // s >=0 Được đề nghị bởi Dijkstra năm 1965 Các đặc tính : Semaphore s; Có 1 giá trị Chỉ được thao tác bởi 2 primitives : Down(s) Up(s) Các primitive Down và Up được thực hiện không thể phân chia 52 Cài đặt Semaphore (Sleep & Wakeup) Semaphore được xem như là một resource Các tiến trình “yêu cầu” semaphore : gọi Down(s) Nếu không hoàn tất được Down(s) : chưa được cấp resource Blocked, được đưa vào s.L Cần có sự hỗ trợ của HĐH Sleep() & Wakeup() typedef struct { int value; struct process* L; } Semaphore ; Giá trị bên trong của semaphore Danh sách các tiến trình đang bị block đợi semaphore nhận giá trị dương 53 Cài đặt Semaphore (Sleep & Wakeup) Down (S) { S.value --; if S.value < 0 { Add(P,S.L); Sleep(); } } Up(S) { S.value ++; if S.value 0 { Remove(P,S.L); Wakeup(P); } } 54 Sử dụng Semaphore Tổ chức “độc quyền truy xuất” Pi Down (s) CS; Up(s) Tổ chức “hò hẹn” P1 : Job1; Up(s) P2: Down (s); Job2; Semaphore s = ?1 Semaphore s = ?0 55 Nhận xét Semaphores Là một cơ chế tốt để thực hiện đồng bộ Dễ dùng cho N tiến trình Nhưng ý nghĩa sử dụng không rõ ràng MutualExclusion : Down & Up Rendez-vous : Down & Up Chỉ phân biệt qua mô hình Khó sử dụng đúng Nhầm lẫn 56 Giải pháp Sleep & Wakeup 2: Monitor Đề xuất bởi Hoare(1974) & Brinch (1975) Là cơ chế đồng bộ hoá do NNLT cung cấp Hỗ trợ cùng các chức năng như Semaphore Dễ sử dụng và kiểm soát hơn Semaphore Bảo đảm Mutual Exclusion một cách tự động Sử dụng biến điều kiện để thực hiện Synchronization 57 Monitor : Ngữ nghĩa và tính chất(1) Là một module chương trình định nghĩa Các CTDL, đối tượng dùng chung Các phương thức xử lý các đối tượng này Bảo đảm tính encapsulation Các tiến trình muốn truy xuất dữ liệu bên trong monitor phải dùng các phương thức của monitor : P1 : M.C() // i=5 P2: M.B() // printf(j) MethodA i=0 MethodB prinf(j) MethodC i=5 Share variable: i,j; Monitor M 58 Monitor : Ngữ nghĩa và tính chất(2) Tự động bảo đảm Mutual Exclusion Tại 1 thời điểm chỉ có 1 tiến trình được thực hiện các phương thức của Monitor Các tiến trình không thể vào Monitor sẽ được đưa vào Entry queue của Monitor Ví dụ P1 : M.A(); P6 : M.B(); P7 : M.A(); P8 : M.C(); MethodA i = 0 MethodB printf(i) MethodC i=5 P1 P8P7P6 Entry queue Share variable: i,j; 59 Monitor : Ngữ nghĩa và tính chất(3) Hỗ trợ Synchronization với các condition variables Wait(c) : Tiến trình gọi hàm sẽ bị blocked Signal(c): Giải phóng 1 tiến trình đang bị blocked trên biến điều kiện c C.queue : danh sách các tiến trình blocked trên c MethodA i=0; signal(c1) MethodB MethodC wait(C1); i=5 signal(C2 ); C1: C2: P5 P4 P1 P3 P2 P8P7P6 Entry queue Share variable: i,j; Condition variable: P1 60 Monitor : Ngữ nghĩa và tính chất(3) Trạng thái tiến trình sau khi gọi Signal? Blocked. Nhường quyền vào monitor cho tiến trình được đánh thức Tiếp tục xử lý hết chu kỳ, rồi blocked MethodA i=0; signal(c1) MethodB MethodC wait(C1); i=5 signal(C2 ); C1: C2: P5 P4 P1 P3 P2 P8P7P6 Entry queue Share variable: i,j; Condition variable: P1 61 Sử dụng Monitor Tổ chức “độc quyền truy xuất” Pi M.AccessMutual(); //CS Tổ chức “hò hẹn” P1 : M.F1(); P2: M.F2(); Monitor M RC; Function AccessMutual CS; // access RC Monitor M Condition c; Function F1 Job1; Signal(c); Function F2 Wait(c); Job2; 62 Được hỗ trợ bởi HĐH Đồng bộ hóa trên môi trường phân tán 2 primitive Send & Receive Cài đặt theo mode blocking Server P 1. Send Request 2. Receive Accept 3. Send Finish Giải pháp Sleep & Wakeup 3: Message 63 Nội dung bài giảng Xử lý đồng hành và các vấn đề: Vấn đề tranh đoạt điều khiển (Race Condition) Vấn đề phối hợp xử lý Bài toán đồng bộ hóa Yêu cầu độc quyền truy xuất (Mutual Exclusion) Yêu cầu phối hợp xử lý (Synchronization) Các giải pháp đồng bộ hoá Busy waiting Sleep & Wakeup Các bài toán đồng bộ hoá kinh điển Producer – Consumer Readers – Writers Dinning Philosophers 64 Producer - Consumer (Bounded-Buffer Problem) P C Buffer (N) Mô tả : 2 tiến trình P và C hoạt động đồng hành P sản xuất hàng và đặt vào Buffer C lấy hàng từ Buffer đi tiêu thụ Buffer có kích thước giới hạn Tình huống P và C đồng thời truy cập Buffer ? P thêm hàng vào Buffer đầy ? C lấy hàng từ Buffer trống ? P không được ghi dữ liệu vào buffer đã đầy (Rendez-vous) C không được đọc dữ liệu từ buffer đang trống (Rendez-vous) P và C không được thao tác trên buffer cùng lúc (Mutual Exclusion) 65 Producer – Consummer: Giải pháp Semaphore Các biến dùng chung giữa P và C BufferSize = N; // số chỗ trong bộ đệm semaphore mutex = 1 ; // kiểm soát truy xuất độc quyền semaphore empty = BufferSize; // số chỗ trống semaphore full = 0; // số chỗ đầy int Buffer[BufferSize]; // bộ đệm dùng chung 66 Producer() { int item; while (TRUE) { produce_item(&item); down(&empty); down(&mutex) enter_item(item,Buffer); up(&mutex); up(&full); } } Consumer() { int item; while (TRUE) { down(&full); down(&mutex); remove_item(&item,Buffer); up(&mutex); up(&empty); consume_item(item); } } Producer – Consummer: Giải pháp Semaphore 67 P&C - Giải pháp Semaphore: Thinking... Producer() { int item; while (TRUE) { produce_item(&item); down(&mutex) down(&empty); enter_item(item,Buffer); up(&mutex); up(&full); } } Consumer() { int item; while (TRUE) { down(&mutex); down(&full); remove_item(&item,Buffer); up(&mutex); up(&empty); consume_item(item); } } 68 Producer – Consummer : Giải pháp Monitor monitor ProducerConsumer condition full, empty; int Buffer[N], count; procedure enter(); { if (count == N) wait(full); enter_item(item,Buffer); count ++; if (count == 1) signal(empty); } procedure remove(); { if (count == 0) wait(empty) remove_item(&item,Buffer); count --; if (count == N-1) signal(full); } count = 0; end monitor; 69 Producer – Consummer : Giải pháp Monitor Producer() { int ite Tài liệu liên quan
Đồ án Xử lý sự cố phần mềm21 trang | Lượt xem: 1637 | Lượt tải: 0
Đề tài Network Access Control33 trang | Lượt xem: 2275 | Lượt tải: 0
ICT 5 Web Development - Chapter 9: Maintaining state through multiple forms - Nguyen Thi Thu Trang11 trang | Lượt xem: 756 | Lượt tải: 0
Luận văn Nghiên cứu thiết kế theo hợp đồng và xây dựng công cụ hỗ trợ61 trang | Lượt xem: 1740 | Lượt tải: 0
Bài giảng Lập trình hướng đối tượng - Chương 3: Lập trình Hướng đối tượng với Java (P1) - Trần Minh Thái73 trang | Lượt xem: 906 | Lượt tải: 0
Giáo trình Kiến trúc máy tính - Bài 5: Cấu trúc bộ xử lý và thực thi chương trình - Nguyễn Hồng Sơn14 trang | Lượt xem: 1214 | Lượt tải: 0
Bài giảng Trigger5 trang | Lượt xem: 3039 | Lượt tải: 0
Bài giảng Nhập môn tin học - Chương 19: Đa phương tiện70 trang | Lượt xem: 843 | Lượt tải: 0
Luận văn Kiến trúc phần mềm dựa trên agent37 trang | Lượt xem: 1775 | Lượt tải: 0
Bài giảng Xử lý và nâng cao chất lượng ảnh15 trang | Lượt xem: 6566 | Lượt tải: 1
Từ khóa » Busy Waiting Là Gì
-
Busy Waiting Là Gì? - Học Tốt
-
CÁC GIẢI PHÁP ĐỒNG BỘ HOÁ
-
Giải Pháp “busy Waiting” - Những Kiến Thức Về Hệ điều Hành - 123doc
-
HĐH - Ôn Tập Cuối Kỳ - Part 1 (Lý Thuyết) | Facebook
-
[PDF] ĐỒNG BỘ HOÁ QUÁ TRÌNH
-
Semaphore (tin Học) – Wikipedia Tiếng Việt
-
[Duong Tran] Shared_variable - SlideShare
-
Chương 5 - Đồng Bộ Flashcards | Quizlet
-
Busy-waiting - Tra-loi-cau-hoi-phat-trien
-
Bài Giảng Hệ điều Hành - Chương 5: Đồng Bộ (Phần 3)
-
Tìm Hiểu Phương Pháp đồng Bộ Hóa Tiến Trình Semaphores
-
Chương 7: Đồng Bộ Hóa Tiến Trình - TaiLieu.VN
-
Nguyên Lý Hệ điều Hành - Chương 6: Đồng Bộ Hóa Tiến Trình
-
[PDF] Module 7: Đồng Bộ Tiến Trình- Synchronisation