Các giải pháp « SLEEP and WAKEUP »

8 2.1K 11
Các giải pháp « SLEEP and WAKEUP »

Đang tải... (xem toàn văn)

Thông tin tài liệu

Các giải pháp « SLEEP and WAKEUP » Các giải pháp « SLEEP and WAKEUP » Bởi: Giảng viên Trần Hạnh Nhi Để loại bỏ bất tiện giải pháp « busy waiting », tiếp cận theo hướng cho tiến trình chưa đủ điều kiện vào miền găng chuyển sang trạng thái blocked, từ bỏ quyền sử dụng CPU Để thực điều này, cần phải sử dụng thủ tục hệ điều hành cung cấp để thay đổi trạng thái tiến trình Hai thủ tục SLEEP WAKEUP thường sử dụng để phục vụ mục đích SLEEP lời gọi hệ thống có tác dụng tạm dừng hoạt động tiến trình (blocked) gọi chờ đến tiến trình khác « đánh thức » Lời gọi hệ thống WAKEUP nhận tham số : tiến trình tái kích hoạt (đặt trạng thái ready) Ý tưởng sử dụng SLEEP WAKEUP sau : tiến trình chưa đủ điều kiện vào miền găng, gọi SLEEP để tự khóa đến có tiến trình khác gọi WAKEUP để giải phóng cho Một tiến trình gọi WAKEUP khỏi miền găng để đánh thức tiến trình chờ, tạo hội cho tiến trình vào miền găng : int busy; // miền găng bị chiếm, không int blocked; // đếm số lượng tiến trình bị khóa while (TRUE) { if (busy){ blocked = blocked + 1; sleep();}else busy = 1; critical-section ();busy = 0;if(blocked){ wakeup(process); blocked = blocked - 1;} Noncritical-section (); } Hình 3.9 Cấu trúc chương trình giải pháp SLEEP and WAKEUP 1/8 Các giải pháp « SLEEP and WAKEUP » Khi sử dụng SLEEP WAKEUP cần cẩn thận, không muốn xảy tình trạng mâu thuẫn truy xuất vài tình đặc biệt sau : giả sử tiến trình A vào miền găng, trước rời khỏi miền găng tiến trình B kích hoạt Tiến trình B thử vào miền găng nhận thấy A đó, B tăng giá trị biến blocked chuẩn bị gọi SLEEP để tự khoá Tuy nhiên trước B thực SLEEP, tiến trình A lại tái kích hoạt khỏi miền găng Khi khỏi miền găng A nhận thấy có tiến trình chờ (blocked=1) nên gọi WAKEUP giảm giá trị blocked Khi tín hiệu WAKEUP lạc tiến trình B chưa thật « ngủ » để nhận tín hiệu đánh thức !Khi tiến trình B tiếp tục xử lý, goi SLEEP tự khó vĩnh viễn ! Vấn đề ghi nhận tình trạng lỗi xảy việc kiểm tra tư cách vào miền găng việc gọi SLEEP hay WAKEUP hành động tách biệ, bị ngắt nửa chừng trình xử lý, có tín hiệu WAKEUP gởi đến tiến trình chưa bị khóa lạc Để tránh tình tương tự, hệ điều hành cung cấp chế đồng hóa dựa ý tưởng chiến lược « SLEEP and WAKEUP » xây dựng bao hàm phương tiện kiểm tra điều kiện vào miền găng giúp sử dụng an toàn Semaphore Tiếp cận: Được Dijkstra đề xuất vào 1965, semaphore s biến 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 tiến trình bị khóa (chờ) semaphore s Chỉ có hai thao tác định nghĩa semaphore Down(s): giảm giá trị semaphore s đơn vị semaphore có trị e(s) > 0, tiếp tục xử lý Ngược lại, e(s) ≤ 0, tiến trình phải chờ đến e(s) >0 Up(s): tăng giá trị semaphore s lên đơn vị Nếu có nhiều tiến trình chờ semaphore s, bị khóa thao tác Down, hệ thống chọn tiến trình để kết thúc thao tác Down cho tiếp tục xử lý 2/8 Các giải pháp « SLEEP and WAKEUP » Hình 3.10 Semaphore s Cài đặt: Gọi p tiến trình thực thao tác Down(s) hay Up(s) Down(s): e(s) = e(s) - 1; if e(s) < { status(P)= blocked; enter(P,f(s)); } Up(s): e(s) = e(s) + 1; if s ≤ { exit(Q,f(s)); //Q tiến trình chờ s status (Q) = ready; enter(Q,ready-list); } Lưu ý cài đặt đưa đến giá trị âm cho semaphore, trị tuyệt đối semaphore cho biết số tiến trình chờ semaphore Điều quan trọng thao tác cần thực cách không bị phân chia, không bị ngắt chừng, có nghĩa không tiến trình phép truy xuất đến 3/8 Các giải pháp « SLEEP and WAKEUP » semaphore tiến trình thao tác semaphore chưa kết thúc xử lý hay chuyển sang trạng thái blocked Sử dụng: dùng semaphore để giải vấn đề truy xuất độc quyền hay tổ chức phối hợp tiến trình Tổ chức truy xuất độc quyền với Semaphores: khái niệm semaphore cho phép bảo đảm nhiều tiến trình truy xuất đến miền găng mà mâu thuẫn truy xuất n tiến trình sử dụng semaphore s, e(s) khởi gán Để thực đồng hóa, tất tiến trình cần phải áp dụng cấu trúc chương trình sau đây: while (TRUE) { Down(s) critical-section (); Up(s) Noncritical-section (); } Hình 3.11 Cấu trúc chương trình giải pháp semaphore Tổ chức đồng hóa với Semaphores: với semaphore đồng hóa hoạt động hai tiến trình tình tiến trình phải đợi tiến trình khác hoàn tất thao tác bắt đầu hay tiếp tục xử lý Hai tiến trình chia sẻ semaphore s, khởi gán e(s) Cả hai tiến trình có cấu trúc sau: P1: while (TRUE) { job1();Up(s); //đánh thức P2 } P2: while (TRUE) { Down(s); // chờ P1job2(); 4/8 Các giải pháp « SLEEP and WAKEUP » } Hình 3.12 Cấu trúc chương trình giải pháp semaphore Thảo luận : Nhờ có thực phân chia, semaphore giải vấn đề tín hiệu "đánh thức" bị thất lạc Tuy nhiên, lập trình viên vô tình đặt primitive Down Up sai vị trí, thứ tự chương trình, tiến trình bị khóa vĩnh viễn Ví dụ : while (TRUE) { Down(s)critical-section ();Noncritical-section (); } tiến trình quên gọi Up(s), kết khỏi miền găng không cho tiến trình khác vào miền găng ! Vì việc sử dụng cách semaphore để đồng hóa phụ thuộc hoàn toàn vào lập trình viên đòi hỏi lập trình viên phải thận trọng Monitors Tiếp cận: Để dễ viết chương trình đồng hóa hơn, Hoare(1974) Brinch & Hansen (1975) đề nghị chế cao cung cấp ngôn ngữ lập trình , monitor Monitor cấu trúc đặc biệt bao gồm thủ tục, biến cấu trúc liệu có thuộc tính sau : Các biến cấu trúc liệu bên monitor thao tác thủ tục định nghĩa bên monitor (encapsulation) Tại thời điểm, có tiến trình hoạt động bên monitor (mutualexclusive) Trong monitor, định nghĩa biến điều kiện hai thao tác kèm theo Wait Signal sau : gọi c biến điều kiện định nghĩa monitor: Wait(c): chuyển trạng thái tiến trình gọi sang blocked , đặt tiến trình vào hàng đợi biến điều kiện c Signal(c): có tiến trình bị khóa hàng đợi c, tái kích hoạt tiến trình đó, tiến trình gọi rời khỏi monitor 5/8 Các giải pháp « SLEEP and WAKEUP » Hình 3.13 Monitor biến điều kiện Cài đặt : trình biên dịch chịu trách nhiệm thực việc truy xuất độc quyền đến liệu monitor Để thực điều này, semaphore nhị phân thường sử dụng Mỗi monitor có hàng đợi toàn cục lưu tiến trình chờ vào monitor, ra, biến điều kiện c gắn với hàng đợi f(c) hai thao tác định nghĩa sau: Wait(c) : status(P)= blocked;enter(P,f(c)); Signal(c) : if (f(c) != NULL){ exit(Q,f(c)); //Q tiến trình chờ cstatusQ) = ready;enter(Q,ready-list); } Sử dụng: Với nhóm tài nguyên cần chia sẻ, định nghĩa monitor đặc tả tất thao tác tài nguyên với số điều kiện đó.: monitor condition ; 6/8 Các giải pháp « SLEEP and WAKEUP » ; procedure Action1(); { } procedure Actionn(); { } end monitor; Hình 3.14 Cấu trúc monitor Các tiến trình muốn sử dụng tài nguyên chung thao tác thông qua thủ tục bên monitor gắn kết với tài nguyên: while (TRUE) { Noncritical-section ();.Actioni; //critical-section();Noncritical-section (); } Hình 3.15 Cấu trúc tiến trình Pitrong giảipháp monitor Thảo luận: Với monitor, việc truy xuất độc quyền bảo đảm trình biên dịch mà không lập trình viên, nguy thực đồng hóa sai giảm nhiều Tuy nhiên giải pháp monitor đòi hỏi phải có ngôn ngữ lập trình định nghĩa khái niệm monitor, ngôn ngữ chưa có nhiều Trao đổi thông điệp Tiếp cận: giải pháp dựa sở trao đổi thông điệp với hai primitive Send Receive để thực đồng hóa: Send(destination, message): gởi thông điệp đến tiến trình hay gởi vào hộp thư 7/8 Các giải pháp « SLEEP and WAKEUP » Receive(source,message): nhận thông điệp thừ tiến trình hay từ tiến trình nào, tiến trình gọi chờ thông điệp để nhận Sử dụng: Có nhiều cách thức để thực việc truy xuất độc quyền chế trao đổi thông điệp Đây mô hình đơn giản: tiến trình kiểm soát việc sử dụng tài nguyên nhiều tiến trình khác yêu cầu tài nguyên Tiến trình có yêu cầu tài nguyên gởi thông điệp đến tiến trình kiểm soát sau chuyển sang trạng thái blocked nhận thông điệp chấp nhận cho truy xuất từ tiến trình kiểm soát tài nguyên.Khi sử dụng xong tài nguyên , tiến trình gởi thông điệp khác đến tiến trình kiểm soát để báo kết thúc truy xuất Về phần tiến trình kiểm soát , nhận thông điệp yêu cầu tài nguyên, chờ đến tài nguyên sẵn sàng để cấp phát gởi thông điệp đến tiến trình bị khóa tài nguyên để đánh thức tiến trình while (TRUE) { Send(process controler, request message);Receive(process controler, accept message);critical-section ();Send(process controler, end message);Noncritical-section (); } Hình 3.16 Cấu trúc tiến trình yêu cầu tài nguyên giải pháp message Thảo luận: Các primitive semaphore monitor giải vấn đề truy xuất độc quyền máy tính có nhiều xử lý chia sẻ vùng nhớ chung Nhưng primitive không hữu dụng hệ thống phân tán, mà xử lý sỡ hữu nhớ riêng biệt liên lạc thông qua mạng Trong hệ thống phân tán thế, chế trao đổi thông điệp tỏ hữu hiệu dùng để giải toán đồng hóa 8/8 ... Down(s); // chờ P1job2(); 4/8 Các giải pháp « SLEEP and WAKEUP » } Hình 3.12 Cấu trúc chương trình giải pháp semaphore Thảo luận : Nhờ có thực phân chia, semaphore giải vấn đề tín hiệu "đánh thức".. .Các giải pháp « SLEEP and WAKEUP » Khi sử dụng SLEEP WAKEUP cần cẩn thận, không muốn xảy tình trạng mâu thuẫn truy xuất vài... Điều quan trọng thao tác cần thực cách không bị phân chia, không bị ngắt chừng, có nghĩa không tiến trình phép truy xuất đến 3/8 Các giải pháp « SLEEP and WAKEUP » semaphore tiến trình thao tác

Ngày đăng: 14/01/2016, 15:09

Từ khóa liên quan

Mục lục

  • Các giải pháp « SLEEP and WAKEUP »

  • Semaphore

  • Monitors

  • Trao đổi thông điệp

Tài liệu cùng người dùng

Tài liệu liên quan