Slide môn Nguyên Lý Hệ Điều Hành - Đồng bộ hoá

THThiNganHang
다운로드 0회
8
0

미리보기 생성 중...

자료 내용

1쪽

8/25/2014 Nội dung Chương 4: Process Schronization Nhu cầu đồng bộ hóa (synchronisation)  – Đồng bộ giữa các tiến trình Vấn đề đồng bộ   Giải pháp « busy waiting » Hiểu biết vấn đề đồng bộ giữa các Các giải pháp « SLEEP and WAKEUP » tiến trình, các giải pháp đồng bộ.  Làm bài tập, viết chương trình mô  Semaphore phỏng các giải pháp đồng bộ.  Monitors  Trao đổi thông điệp 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 1 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 2 1. Nhu cầu đồng bộ hóa 1.1. Yêu cầu độc quyền truy xuất Trong hệ thống, nhiều tiến trình liên lạc với nhau  Tài nguyên trong hệ thống phân 2 loại:  Tài nguyên chia sẻ: cho phép nhiều tiến trình đồng thời   HĐH luôn cần cung cấp những cơ chế đồng bộ truy xuất hóa để bảo đảm hoạt động đồng thời của các tiến  Tài nguyên không thể chia sẻ: tại một thời điểm chỉ có một tiến trình sử dụng trình không tác động sai lệch đến nhau Không thể chia sẻ do:   Việc tác động sai lệch do: Đặc điểm phần cứng   Yêu cầu độc quyền truy xuất  Nhiều tiến trình đồng thời sử dụng tài nguyên này sẽ gây ra kết quả không dự đoán trước được  Yêu cầu phối hợp Giải pháp:   HĐH cần đảm bảo vấn đề độc quyền truy xuất tài nguyên: tại một thời điểm chỉ cho phép một tiến trình sử dụng tài nguyên 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 3 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 4 1.2. Yêu cầu phối hợp đồng bộ 2. Vấn đề đồng bộ(1)  Các tiến trình trong hệ thống hoạt động độc lập,  Bài toán 1: thường không đồng bộ Khi có nhiều tiến trình phối hợp hoàn thành một Tiến trình tăng x lên 1 Tiến trình giảm x đi 1  tác vụ có thể dẫn đến yêu cầu đồng bộ:  x:=x+1;  x:=x-1  Tiến trình này sử dụng kết quả của tiến trình kia  Cần hoàn thiện các tiến trình con mới có thể hoàn thiện tiến trình cha •x khởi tạo = 1 •x được chia sẻ giữa 2 tiến trình •Giá trị của X là bao nhiêu sau khi cả 2 tiến trình hoàn thành? 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 5 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 6 ThiNganHang.com 1

2쪽

8/25/2014 2. Vấn đề đồng bộ(2) 2. Vấn đề đồng bộ(3) P1 P2  Bài toán 2: x:=x+1; dịch thành  Khách hàng có tài khoản 800K, cần thực hiện yêu cầu rút 400K. x:=x-1; compiles to Việc thực hiện yêu cầu thông qua tiến trình P1  Ở một vị trí khác, Hacker có được mật khẩu của khách hàng, truy 1. Load RegAx, x nhập vào tài khoản khách hàng yêu cầu rút 700K. Việc thực hiện 1. Load RegAx, x yêu cầu hacker thông qua tiến trình P2 2. tăng RegAx Cả P1, P2 đều truy nhập vào biến dùng chung là account của  2. giảm RegAx khách hàng; mỗi tiến trình rút tiền có biến require(số tiền cần rút) 3. Save x, RegAx  Cả 2 tiến trình P1, P2 đều có đoạn rút tiền và cập nhật tài khoản: Nếu giá trị ban đầu của x là 1, sau khi 3. Save x, RegAx if (account >= require) thực hiện các bước trên, x sẽ có giá trị 0 account -= require; (chỉ = 1 khi 2 tiến trình lần lượt thực hiện: else P1 xong, P2 mới thực hiện) printf(“Error”); 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 7 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 8 2. Vấn đề đồng bộ(4) 2. Vấn đề đồng bộ(5): đoạn găng  Bài toán 2(tiếp)  Critical session(- critical region đoạn găng, miền Tình huống nảy sinh: găng)   P1 kiểm tra thấy account > require nên thực hiện đoạn code  Trong ví dụ trên, tiến trình P1, P2 đều bao gồm trên để rút tiền nhưng chưa cập nhật tài khoản( chưa thực hiện chuỗi các lệnh riêng và các lệnh thực hiện rút tiền: lệnh account -= require) do hết thời gian sử dụng CPU được phân phối cho nó …//các lệnh kết nối, lệnh kiểm tra  P2 kiểm tra điều kiện vẫn thỏa mãn( account vẫn = 800K) nên nó thực hiện việc rút tiền. Giả sử P2 được phân phối đủ thời if (account >= require) gian sử dụng CPU, cập nhật account = 100K và kết thúc account -= require;  P1 quay lại thực hiện( vì đã kiểm tra điều kiện từ lần trước) nốt print(„drawed money‟); Đoạn lệnh thao tác tài nguyên công việc và cập nhật account = -300 => tình huống lỗi else Chung, có thể xảy ra mâu thuẫn  Giải pháp: printf(“Error”); => Đoạn găng  Áp dụng cơ chế truy xuất độc quyền trên tài nguyên đó // các lệnh kết thúc tiến trình… (account): khi một tiến trình đang sử dụng tài nguyên thì các tiến trình khác không được sử dụng 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 9 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 10 2. Vấn đề đồng bộ(6): đoạn găng 2. Vấn đề đồng bộ(7): đoạn găng Khái niệm đoạn găng(miền găng):  Minh họa dòng thời gian của đoạn găng:   là đoạn mã lệnh có khả năng xảy ra mâu thuẫn khi truy xuất tài nguyên chung  HĐH cần cài đặt các giải pháp đồng bộ để giải quyết vấn đề độc quyền truy xuất  Quyết định tiến trình nào sẽ được vào miền găng( thực hiện các lệnh trong miền này)  Khi một tiến trình đang ở miền găng thì các tiến trình khác không thể vào miền găng 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 11 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 12 ThiNganHang.com 2

3쪽

8/25/2014 3.1. Sử dụng các biến cờ hiệu( 3. Giải pháp « busy waiting » Simaphore)(1)  Ý tưởng:  Giải pháp phần mềm:  Các tiến trình chia sẻ một biến chung đóng vai trò « chốt cửa » (lock) , biến này được khởi động là 0.  Sử dụng các biến cờ hiệu(simaphore)  Một tiến trình muốn vào miền găng, trước tiên phải kiểm tra giá trị của biến lock. Nếu lock = 0, tiến trình đặt lại giá trị cho lock = 1 và đi vào  Sử dụng việc kiểm tra luân phiên miền găng. Nếu lock đang nhận giá trị 1, tiến trình phải chờ đến khi lock có giá trị 0.  Giải pháp của Peterson Như vậy giá trị 0 của lock mang ý nghĩa là không có tiến trình nào  Giải pháp có sự hỗ trợ phần cứng: đang ở trong miền găng, và lock=1 khi có một tiến trình đang ở trong  miền găng. Cấm ngắt while (TRUE) {  while (lock == 1); { // đợi lock = 0}  Test & Set //trường hợp lock == 0 lock = 1; //đặt lock = 1 để cấm các tiến trình khác critical-section (); //thực hiện đoạn găng lock = 0; //kết thúc đoạn găng phải đặt lock = 0 để giải phóng tài nguyên Noncritical-section (); // thực hiện các lệnh bên ngoài đoạn găng } 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 13 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 14 3.1. Sử dụng các biến cờ hiệu( 3.2. Sử dụng việc kiểm tra luân Simaphore)(2) phiên(1)  Nhận xét:  Ý tưởng:  Giải pháp này vẫn xảy ra trường hợp 2 tiến  Giải pháp đề nghị cho hai tiến trình. trình cùng trong đoạn găng khi:  Hai tiến trình sử dụng chung biến turn  Lock==0, Tiến trình P1 vào đoạn găng nhưng chưa  Khởi động với giá trị 0. kịp đặt lock=1 vì hết thời gian sử dụng CPU Nếu turn = 0, tiến trình P1 được vào đoạn găng, turn= 1 P2  P2 kiểm tra thấy lock==0, đặt lock=1 và đang thực được vào đoạn găng.  hiện các lệnh trong đoạn găng nhưng chưa xong vì  Nếu turn = 1, tiến trình P1 đi vào một vòng lặp chờ đến khi hết thời gian CPU turn nhận giá trị 0. P1 được phân phối CPU và thực hiện các lệnh trong  Khi tiến trình P1 rời khỏi đoạn găng, nó đặt giá trị turn về 1 để  đoạn găng cho phép tiến trình P2 đi vào đoạn găng.  P1, P2 cùng trong đoạn găng 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 15 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 16 3.2. Sử dụng việc kiểm tra luân 3.2. Sử dụng việc kiểm tra luân phiên(2) phiên(3)  Cấu trúc tiến trình P1  Nhận xét: while (TRUE) {  Ngăn được trường hợp 2 tiến trình đồng thời trong đoạn while (turn != 0); {// wait} găng critical-section ();//thực hiện đoạn găng xong mới đặt turn=1 Xảy ra tình huống một tiến trình bị ngăn vào đoạn găng turn = 1;  Noncritical-section (); bởi một tiến trình bên ngoài đoạn găng khi: }  Turn=0, P1 vào đoạn găng xong, đặt turn=1 rồi ra và muốn nhanh chóng quay lại đoạn găng lần nữa  Cấu trúc tiến trình P2 Nhưng P2 vẫn thực hiện các lệnh bên ngoài đoạn găng với  while (TRUE) { lượng rất lớn nên thời gian thực hiện rất lâu không thể vào đoạn găng ngay được. Do đó turn vẫn = 1 và P1 không thể vào while (turn != 1); {// wait} Số lần vào đoạn găng của P1, P2 là cân bằng(luân phiên critical-section ();  turn = 0; nhau) do đó gặp vấn đề khi P1 cần vào đoạn găng liên Noncritical-section (); tục còn P2 không cần thiết lắm. } 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 17 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 18 ThiNganHang.com 3

4쪽

8/25/2014 3.3. Giải pháp Peterson(1) 3.3. Giải pháp Peterson()  Do Peterson đề nghị  Cấu trúc tiến trình Pi//gia su: p0 muon vao, p1 ko  Ý tưởng: kết hợp 2 giải pháp trên //ban dau: interese[1]=interese[0]=false; turn=0  P0, P1 sử dụng 2 biến chung turn, interesse[2] while (TRUE) {  Turn = 0 đến phiên P0, turn=1 đến phiên P1  Interesse[i]=TRUE, Pi muốn vào đoạn găng interesse[i]= TRUE;//interesse[0]=true  Khởi tạo: int j = 1-i; // j là tiến trình còn lại  Interesse[0]=Interesse[1]=false; turn = 0 hoặc 1 turn = j;  Để có thể vào được miền găng: while (turn == j && interesse[j]==TRUE);{//wait}  Pi đặt giá trị interesse[i]=TRUE critical-section ();  Sau đó đặt turn=j (đề nghị thử tiến trình khác vào miền găng). interesse[i] = FALSE;  Nếu tiến trình Pj không quan tâm đến việc vào miền găng Noncritical-section (); (interesse[j]=FALSE), thì Pi có thể vào miền găng, nếu không, Pi phải chờ đến khi interesse[j]=FALSE. }  Khi tiến trình Pi rời khỏi miền găng, nó đặt lại giá trị cho interesse[i]= FALSE. 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 19 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 20 3.3. Giải pháp Peterson() 3.4. Cấm ngắt Nhận xét:  Ý tưởng:   Cho phép tiến trình cấm tất cả các ngắt trước khi vào miền găng,  Ngăn chặn được tình trạng mâu thuẫn truy xuất: và phục hồi ngắt khi ra khỏi miền găng. Pi chỉ có thể vào miền găng khi interesse[j]=FALSE  Khi đó, ngắt đồng hồ cũng không xảy ra, do vậy hệ thống không  thể tạm dừng hoạt động của tiến trình đang xử lý để cấp phát CPU hoặc turn = i. cho tiến trình khác, nhờ đó tiến trình hiện hành yên tâm thao tác Nếu cả hai tiến trình đều muốn vào miền găng thì trên miền găng mà không sợ bị tiến trình nào khác tranh chấp.  interesse[i] = interesse[j] =TRUE nhưng giá trị của  Nhận xét: turn chỉ có thể hoặc là 0 hoặc là 1, do vậy chỉ có  Không được ưa chuộng vì rất thiếu thận trọng khi cho phép tiến trình người dùng được phép thực hiện lệnh cấm ngắt. một tiến trình được vào miền găng Hệ thống có nhiều CPU, lệnh cấm ngắt chỉ có tác dụng trên CPU  đang xử lý tiến trình hiện tại, các tiến trình hoạt động trên các CPU khác vẫn có thể truy xuất đến miền găng 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 21 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 22 3.5. Test & Set(1) 3.5. Test & Set(2)  Giải pháp:  Nếu có hai chỉ thị TSL xử lý đồng thời (trên hai CPU khác nhau), chúng sẽ được xử lý tuần tự.  Tập lệnh máy có thêm một chỉ thị đặc biệt cho phép Có thể cài đặt giải pháp truy xuất độc quyền với TSL bằng kiểm tra và cập nhật nội dung một vùng nhớ trong  cách sử dụng thêm một biến chung lock, được khởi tạo là một thao tác đơn vị, gọi là chỉ thị Test-and-Set Lock FALSE. Tiến trình phải kiểm tra giá trị của biến lock trước (TSL) khi vào miền găng, nếu lock = FALSE, tiến trình có thể Định nghĩa: vào miền găng.  Test-and-Setlock(boolean target)  Cấu trúc một ctr sử dụng giải pháp TSL: { boolean temp = target; while (TRUE) { target = TRUE;//thiết lập giá trị mới = True để khóa while (Test-and-Setlock(lock)){//wait} critical-section (); return temp;//lấy giá trị cũ để kiểm tra lock = FALSE;//ra khỏi đoạn găng, lock=False(không khóa) } Noncritical-section (); } 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 23 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 24 ThiNganHang.com 4

5쪽

8/25/2014 3.6. Kết luận về giải pháp Busy 3.5. Test & Set(3) waiting Nhận xét:  Hoạt động chung:  Tất cả các giải pháp trên đều phải thực hiện một vòng lặp để  Giảm nhẹ công việc lập trình nhưng việc cài đặt kiểm tra xem có được phép vào đoạn găng.  Nếu điều kiện chưa cho phép, tiến trình phải chờ tiếp tục trong TSL như một lệnh máy không đơn giản  vòng lặp kiểm tra này. Khi có nhiều CPU, việc điều phối thực hiện  Các giải pháp buộc tiến trình phải liên tục kiểm tra điều kiện để  phát hiện thời điểm thích hợp được vào đoạn găng như thế được TSL cho từng CPU gặp khó khăn. gọi các giải pháp « busy waiting »-”Bận vì chờ”.  Hạn chế:  Việc kiểm tra như thế tiêu thụ rất nhiều thời gian sử dụng CPU, do vậy tiến trình đang chờ vẫn chiếm dụng CPU(để kiểm tra điều kiện).  Xu hướng giải quyết vấn đề đồng bộ hoá là nên tránh các giải pháp « busy waiting » 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 25 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 26 4. Các giải pháp « SLEEP and 4. Các giải pháp « SLEEP and WAKEUP »(1) WAKEUP »(2)  Khắc phục nhược điểm của các giải pháp busy waiting  Giải pháp: bằng cách cho một tiến trình chưa đủ điều kiện vào đoạn  Hệ điều hành sử dụng 2 thủ tục sleep và wakeup găng chuyển sang trạng thái waiting  SLEEP là một lời gọi hệ thống có tác dụng tạm dừng hoạt động của tiến trình (chuyển sang trạng thái waiting) gọi nó và chờ  Tạm khóa tiến trình không cho sử dụng CPU ngay vì tiến trình chỉ đến khi được một tiến trình khác « đánh thức ». Với busy sử dụng CPU khi ở trạng thái running Lời gọi hệ thống WAKEUP nhận một tham số duy nhất : tiến  waiting, Tiến trình chỉ có thể chuyển sang trạng thái running khi đang ở trình sẽ được tái kích hoạt (đặt về trạng thái ready).  process trạng thái ready(sẵn sàng)  Ý tưởng: chưa đủ Khi một tiến trình chưa đủ điều kiện vào đoạn găng, nó gọi  điều kiện SLEEP để tự khóa đến khi có một tiến trình khác gọi vào đoạn WAKEUP để giải phóng cho nó. găng đều Với sleep&wakeup Một tiến trình gọi WAKEUP khi ra khỏi miền găng để đánh process chưa đủ điều  ở trạng thức một tiến trình đang chờ, tạo cơ hội cho tiến trình này vào thái ready kiện vào đoạn găng miền găng đều ở trạng thái waiting 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 27 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 28 4. Các giải pháp « SLEEP and 4. Các giải pháp « SLEEP and WAKEUP »(3) WAKEUP »(4)  Cấu trúc chương trình trong giải pháp SLEEP and WAKEUP Các giải pháp phổ biến: int busy; // 1 nếu miền găng đang bị chiếm, nếu không là 0  int blocked; // đếm số lượng tiến trình đang bị tạm khóa Simaphore( Dijktra đề xuất)  while (TRUE) { if (busy){ ++blocked;// = blocked + 1;  Monitors sleep(); } Trao đổi thông điệp else busy = 1;  critical-section (); busy = 0; if(blocked){ wakeup(process);//truyền vào process cần đánh thức blocked = blocked - 1; } Noncritical-section (); } 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 29 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 30 ThiNganHang.com 5

6쪽

8/25/2014 4.1. Simaphore – Dijkstra(1) 4.1. Simaphore – Dijkstra(2)  Một semaphore s là một biến(cấu trúc) có các thuộc tính  Cài đặt: tiến trình P thực hiện down sau: Minh họa simaphore và up trên simaphore s  Một giá trị nguyên e(s) Down(s): Một hàng đợi f(s) lưu danh sách các tiến trình đang có trạng thái e(s) = e(s) - 1;  if e(s) < 0 { waiting(chờ) trên semaphore s Hai thao tác được định nghĩa trên semaphore: status(P)= waiting;  enter(P,f(s));  Down(s): giảm giá trị của semaphore e(s) đi 1 đơn vị. Nếu } semaphore có trị e(s) >= 0 thi tiếp tục xử lý. Ngược lại, tiến trình Up(s): phải chờ. e(s) = e(s) + 1; Up(s): tăng giá trị của semaphore s lên 1 đơn vị. Nếu có một hoặc if e(s) < 0 {  exit(Q,f(s)); //Q là tiến trình đang chờ trên s nhiều tiến trình đang chờ trên semaphore s, bị khóa bởi thao tác Down, thì hệ thống sẽ chọn một trong các tiến trình này để kết status (Q) = ready; thúc thao tác Down và cho tiếp tục xử lý enter(Q,ready-list); } 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 31 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 32 4.1.1. Tổ chức truy xuất độc 4.1.2. Tổ chức đồng bộ hóa với quyền với Semaphores Semaphores  Sử dụng semaphore có thể đồng bộ hóa hoạt động của hai  Semaphore bảo đảm nhiều tiến trình cùng truy xuất mà tiến trình trong tình huống một tiến trình phải đợi một tiến không có sự mâu thuẫn. trình khác hoàn tất thao tác nào đó mới có thể bắt đầu hay  Giả sử n tiến trình cùng sử dụng một semaphore s, e(s) tiếp tục xử lý. được khởi gán là 1. Hai tiến trình chia sẻ một semaphore s, khởi gán e(s) là 0.   Để thực hiện đồng bộ hóa, tất cả các tiến trình cần phải áp Cả hai tiến trình có cấu trúc như sau: dụng cùng cấu trúc chương trình: P1: while (TRUE) { while (TRUE) { Down(s) job1(); critical-section (); Up(s); //đánh thức P2 Up(s) } Noncritical-section (); P2: } while (TRUE) { Down(s); // chờ P1 job2(); 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 33 25-Aug-14} HuongPv - Khoa CNTT - HvKTMM 34 4.2. Monitors(1) 4.2. Monitors(2)  Do Hoare(1974) Brinch & Hansen đề nghị  Trong một monitor, có thể định nghĩa các biến Monitors là cơ chế cao hơn được cung cấp bởi điều kiện và hai thao tác kèm theo là Wait và  ngôn ngữ lập trình Signal như sau : gọi c là biến điều kiện được định Monitors là một cấu trúc dữ liệu(bao gồm các biến nghĩa trong monitor:  và các thủ tục) có đặc điểm:  Wait(c): chuyển trạng thái tiến trình gọi sang trạng thái waiting, và đặt tiến trình này vào hàng đợi trên biến  Các biến và cấu trúc dữ liệu bên trong monitor chỉ có điều kiện c. thể được thao tác bởi các thủ tục định nghĩa bên trong Signal(c): nếu có một tiến trình đang bị khóa trong monitor đó  hàng đợi của c, tái kích hoạt tiến trình đó, và tiến trình  Tại một thời điểm, chỉ có một tiến trình duy nhất được gọi sẽ rời khỏi monitor hoạt động bên trong một monitor (mutual exclusive). 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 35 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 36 ThiNganHang.com 6

7쪽

8/25/2014 4.2. Monitors(3) 4.2. Monitors(4) Minh họa Monitor:  Cài đặt : Mỗi monitor có một hàng đợi toàn cục lưu các  tiến trình đang chờ được vào monitor, ngoài ra, mỗi biến điều kiện c cũng gắn với một hàng đợi f(c) và hai thao tác trên đó được định nghĩa như sau: Wait(c) : status(P)= waiting; enter(P,f(c)); Signal(c) : if (f(c) != NULL){ exit(Q,f(c)); //chọn 1 tiến trình chơ Q trên c statusQ) = ready; enter(Q,ready-list); } 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 37 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 38 4.2. Monitors(5) 4.2. Monitors(6)  Sử dụng:  Sử dụng(tiếp) Với mỗi nhóm tài nguyên cần chia sẻ, có thể định nghĩa  Các tiến trình muốn sử dụng tài nguyên chung này chỉ  một monitor trong đó đặc tả tất cả các thao tác trên tài có thể thao tác thông qua các thủ tục bên trong monitor nguyên này với một số điều kiện được gắn kết với tài nguyên:  Cấu trúc tiến trình Pi trong giải pháp monitor monitor <tên monitor > while (TRUE) { condition <list các biến đ/kiện>; <khai báo các biến>; Noncritical-section (); <monitor>.Action1(Pi);//critical-section(); procedure Action1(); { } .... Noncritical-section (); procedure Actionn(); { } end monitor; } 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 39 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 40 4.3. Trao đổi thông điệp(1) 4.3. Trao đổi thông điệp(2)  Giải pháp: dựa trên cơ sở trao đổi thông điệp với  Sử dụng: hai primitive(thao tác nguyên tử) Send và Receive  Một tiến trình kiểm soát việc sử dụng tài nguyên và nhiều tiến trình khác yêu cầu tài nguyên này. để thực hiện sự đồng bộ hóa Tiến trình có yêu cầu tài nguyên sẽ gởi một thông điệp đến tiến  Send(destination, message): gởi một thông điệp đến trình kiểm soát và sau đó chuyển sang trạng thái waiting cho đến  khi nhận được một thông điệp chấp nhận cho truy xuất từ tiến trình một tiến trình hay gởi vào hộp thư. kiểm soát tài nguyên. Receive(source,message): nhận một thông điệp thừ  Khi sử dụng xong tài nguyên , tiến trình gởi một thông điệp khác  một tiến trình hay từ bất kỳ một tiến trình nào, tiến trình đến tiến trình kiểm soát để báo kết thúc truy xuất. gọi sẽ chờ nếu không có thông điệp nào để nhận.  Tiến trình kiểm soát , khi nhận được thông điệp yêu cầu tài nguyên, nó sẽ chờ đến khi tài nguyên sẵn sàng để cấp phát thì gửi một thông điệp đến tiến trình đang bị khóa trên tài nguyên đó để đánh thức tiến trình này 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 41 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 42 ThiNganHang.com 7

8쪽

8/25/2014 4.3. Trao đổi thông điệp(3) Q & A  Cấu trúc tiến trình yêu cầu tài nguyên trong  List Câu hỏi giải pháp message while (TRUE) { Send(process controler, request message); Receive(process controler, accept message); critical-section (); Send(process controler, end message); Noncritical-section (); } 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 43 25-Aug-14 HuongPv - Khoa CNTT - HvKTMM 44 ThiNganHang.com 8

앞 8페이지만 표시됩니다. 전체를 보려면 자료를 다운로드하세요.

댓글 (0)

로그인 하여 토론에 참여하기

댓글이 없습니다. 첫 댓글을 남겨보세요!