Bài giảng Điều độ các tiến trình - Nguyễn Thị Thùy Linh
NỘI DUNG
1. Các khái niệm.
2. Tiêu chí cho việc lập lịch biểu.
3. Các giải thuật lập lịch biểu.
4. Lập lịch biểu đa xử lý.
5. Lập lịch biểu thời gian thực.
6. Đánh giá giải thuật.3
Các khái niệm
Kỹ thuật đa chương giúp cho việc sử dụng CPU đạt
hiệu năng cao nhất.
Chu kỳ CPU + chờ đợi I/O, sự thực thi của 1 quá
trình bao gồm một chu kỳ là: sử dụng CPU để thực thi
và chờ đợi I/O.
Sự phân bố sử dụng CPU.4
Bộ định thời CPU
Chọn một trong số các quá trình sẵn sàng trong bộ
nhớ và giao CPU cho nó thực thi.
Quyết định lập lịch biểu cho CPU diễn ra khi một quá
trình:
Chuyển từ trạng thái Running sang trạng thái Waiting.
Chuyển từ trạng thái Running sang trạng thái Ready.
Chuyển từ trạng thái Waiting sang trạng thái Ready.
Kết thúc
Việc lập lịch biểu theo kiểu như trên được gọi là
không ưu tiên.
Tất cả giải pháp lập lịch biểu khác gọi là có ưu tiên
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Tóm tắt nội dung tài liệu: Bài giảng Điều độ các tiến trình - Nguyễn Thị Thùy Linh
ờ: Một quá trình đang giữ ít nhất là một tài nguyên và đang chờ để đạt được một tài nguyên khác đang bị giữ bởi quá trình khác. Không đòi lại tài nguyên từ quá trình đang giữ chúng: một tài nguyên có thể được giải phóng một cách tự nguyện bởi quá trình đang giữ nó, sau khi quá trình này hoàn thành. Tồn tại chu trình trong đồ thị cấp phát tài nguyên: tồn tại một tập hợp {P0, P1, , Pn} các quá trình đang chờ đợi như sau: P0 đang đợi tài nguyên mà P1 đang giữ, P1 đang đợi tài nguyên mà P2 đang giữ, , Pn–1 đang đợi tài nguyên mà Pn đang giữ và Pn lại đang chờ đợi tài nguyên mà P0 đang giữ 81 2. Đồ thị cấp phát tài nguyên Bao gồm tập hợp các đỉnh V và tập hợp các cạnh E. V được chia làm 2 kiểu: P = {P1, P2, , Pn}, là tập hợp các quá trình đang tồn tại trong hệ thống. R = {R1, R2, , Rm}, là tập hợp các tài nguyên đang tồn tại trong hệ thống. Cạnh yêu cầu: Pi Rj. QT Pi yêu cầu 1 kiểu thể hiện của kiểu tài nguyên Rj Cạnh cấp phát: Rj Pi Một thể hiện của kiểu tài nguyên Rj đã được cấp cho QT Pi 82 (Resource-Allocation Graph - RAG) Các ký hiệu: Tập các quá trình Pi P=(P1, P2, Pn) Tài nguyên với 4 thể hiện Rj P Pi yêu cầu một thể hiện của Rj i Rj Pi đang giữ một thể hiện của Rj P i Rj 83 Nếu đồ thị không có chu trình thì sẽ không xảy ra deadlock 84 85 Không deadlock vì: -P4 hoặc P2 có thể tự động giải phóng tài nguyên. -Nên P1 và P3 kết thúc được 86 Nếu đồ thị không có chu trình không có deadlock. Nếu đồ thị có một chu trình – Nếu một tài nguyên chỉ có một thể hiện thì chắn chắn deadlock xảy ra. – Nếu một tài nguyên có vài thể hiện thì có thể có deadlock. 87 Có 3 phương pháp xử lý Deadlock 1. Söû duïng quy taéc Ngaên chaën (Prevention) hoaëc Traùnh (Avoidance) ñeå Deadlock khoâng bao giôø xaûy ra. 2. Cho pheùp heä thoáng bò Deadlock, sau ñoù Xaùc ñònh (Detection) vaø tìm caùch Khaéc phuïc (Recover). 3. Khoâng xeùt vaán ñeà Deadlock, coi nhö khoâng bao giôø xaûy ra, coøn neáu xaûy ra thì Khôûi ñoäng laïi heä thoáng (Caùch naøy coù theå coù yù nghóa thöïc teá vì khoâng caàn ñöa vaøo HÑH caùc phöông tieän xöû trí thöôøng tröïc). 88 PP xử lý Deadlock: 1. Để đảm bảo deadlock không xảy ra, hệ thống có thể sử dụng: sơ đồ phòng ngừa hoặc sơ đồ tránh deadlock Phòng ngừa deadlock (deadlock prevention): các giải pháp để đảm bảo ít nhất 1 điều kiện cần không xảy ra. Tránh deadlock (deadlock advoidance): dựa trên thông tin: Yêu cầu giải phóng tài nguyên trong tương lai của mỗi QT. Các tài nguyên hiện đang bị chiếm giữ bởi mỗi QT Các tài nguyên hiện sẵn có trong hệ thống quyết định 1 yêu cầu tài nguyên của QT sẽ được đáp ứng ngay hay phải chờ. 89 PP xử lý Deadlock: (tt) 2. Cho phép deadlock xảy ra rồi phục hồi: Cần có một thuật toán kiểm tra trạng thái của hệ thống để phát hiện deadlock Và một thuật toán khôi phục deadlock 3. Bỏ qua deadlock: Có thể làm hệ thống rơi vào tình trạng ngưng vận động. Trường hợp như vậy giải pháp là khởi động lại hệ thống bằng tay. 90 Baèng caùch sao cho ít nhaát 1 trong 4 ñieàu kieän caàn keå treân khoâng xaûy ra. Loại trừ hỗ tương (Mutual Exclusion) – không yêu cầu đối với các tài nguyên chia sẻ, chỉ áp dụng đối với các tài nguyên không thể chia sẻ. Giữ và chờ (Hold and Wait) – phải đảm bảo rằng mỗi khi một quá trình yêu cầu một tài nguyên, nó không có giữ một tài nguyên khác. - Yêu cầu quá trình yêu cầu và được cấp tất cả các tài nguyên nó cần sau đó mới được thực thi, hoặc là yêu cầu rằng quá trình chỉ có thể yêu cầu một tài nguyên khi nó hiện không giữ một tài nguyên nào cả. - Giải pháp này làm giảm đáng kể hiệu xuất sử dụng tài nguyên, và có thể gây ra tình trạng chết đói 91 Không đòi lại tài nguyên từ quá trình đang giữ chúng ( không trưng dụng - No Preemption): Nếu một quá trình đang giữ một số tài nguyên lại yêu cầu thêm một tài nguyên mới, nhưng tài nguyên mới này không thể được cấp phát cho quá trình đó được, thì quá trình đó phải ngay lập tức giải phóng tất cả các tài nguyên nó đang có. Các tài nguyên vừa được trưng dụng được thêm vào danh sách các tài nguyên mà quá trình đang cần. quá trình sẽ bị khởi động lại chỉ khi nó không thể xin lại được các tài nguyên cũ cũng như tài nguyên mới nó đang cần. Tồn tại chu trình trong đồ thị cấp phát tài nguyên Circular Wait (chờ đợi vòng tròn): phải bày ra thứ tự toàn cục của tất cả các tài nguyên và yêu cầu rằng mỗi quá trình phải yêu cầu các tài nguyên theo thứ tự đã cho. 92 Yêu cầu HĐH phải có một số thông tin ưu tiên: Mô hình đơn giản và hữu dụng nhất yêu cầu rằng mỗi quá trình phải khai báo số lượng tối đa các tài nguyên mà nó có thể cần đến. Giải thuật tránh deadlock tự động xem xét trạng thái cấp phát tài nguyên của hệ thống để đảm bảo rằng không bao giờ có tình trạng chờ đợi vòng tròn. Trạng thái cấp phát tài nguyên được định nghĩa dựa trên số lượng tài nguyên đã được cấp phát và chưa được cấp phát, và số lượng tối đa các yêu cầu của các quá trình. 93 Khi một quá trình yêu cầu một tài nguyên đang sẵn dùng, hệ thống phải quyết định xem việc cấp tài nguyên này tức thời có đưa hệ thống đến trạng thái an toàn hay không. Hệ thống ở trạng thái an toàn nếu tồn tại một dãy an toàn đối với tất cả quá trình. Chuỗi được gọi là an toàn nếu với mỗi quá trình Pi, các tài nguyên mà Pi có thể còn yêu cầu có thể được làm thõa mãn bởi các tài nguyên đang sẵn dùng + các tài nguyên đã bị chiếm bởi tất cả quá trình Pj, với j<i. Nếu các nhu cầu tài nguyên của Pi không được làm thõa mãn ngay tức thì, thì Pi có thể đợi đến khi tất cả Pj hoàn thành. Khi Pj hoàn thành, Pi có thể lấy các tài nguyên cần thiết, thực thi tiếp, trả lại số tài nguyên đã chiếm và sau cùng là kết thúc. Khi Pi kết thúc, Pi+1 có thể lấy các tài nguyên mà nó cần, và cứ như thế 94 95 Nếu hệ thống ở trong trạng thái an toàn không có deadlocks. Nếu hệ thống ở trong trạng thái không an toàn có thể có deadlock. Tránh deadlock đảm bảo rằng hệ thống sẽ không bao giờ rơi vào trạng thái không an toàn. Giải pháp: - Mỗi tài nguyên có một thể hiện: dùng giải thuật đồ thị cấp phát tài nguyên. - Mỗi loại tài nguyên có nhiều thể hiện:dùng giải thuật Banker. 96 Cạnh “muốn yêu cầu (claim edge)” Pi → Rj chỉ ra rằng quá trình Pi có thể yêu cầu tài nguyên Rj; cạnh này được biểu diễn bởi một đường đứt nét. Cạnh muốn yêu cầu chuyển thành cạnh yêu cầu khi quá trình yêu cầu một tài nguyên. Khi một tài nguyên được giải phóng bởi một quá trình, cạnh yêu cầu chuyển thành cạnh muốn yêu cầu. Các tài nguyên phải được dự tính yêu cầu trước trong hệ thống 97 98 99 Một tài nguyên có nhiều thể hiện. Mỗi quá trình phải dự tính trước số tài nguyên tối đa mà mình cần dùng. Khi một quá trình yêu cầu một tài nguyên, nó có thể phải chờ đợi. Khi một quá trình có được tất cả tài nguyên mà nó cần, nó phải trả lại hết các tài nguyên trong một khoảng thời gian hữu hạn. 100 Đặt n = số quá trình, m = số loại tài nguyên. Available: Vector có chiều dài m. Nếu available [j] = k, có k thể hiện của tài nguyên Rj đang sẵn dùng. Max: ma trận n x m. Nếu Max [i,j] = k, thì quá trình Pi có thể yêu cầu tối đa k thể hiện của tài nguyên Rj. Allocation: ma trận n x m. Nếu Allocation[i,j] = k thì Pi đang giữ k thể hiện của Rj. Need: Ma trận n x m. Nếu Need[i,j] = k, thì Pi có thể cần thêm k thể hiện của tài nguyên Rj để có thể hoàn thành công việc của nó. Need [i,j] = Max[i,j] – Allocation [i,j]. 101 1.Đặt Work và Finish là các vectors có độ dài tương ứng là m và n. Khởi tạo: Work = Available Finish[i] = false for i =1,2,3, , n. 2. Tìm i để cả hai điều kiện sau thõa: (a) Finish[i] = false (b) Need[i] Work[i] Nếu không tồn tại i, nhảy đến bước 4. 3. Work = Work + Allocation[i] Finish[i] = true nhảy đến bước 2. 4. Nếu Finish [i] == true với mọi i, thì hệ thống đang ở trạng thái an toàn. 102 5 quá trình từ P0 , P4 3 loại tài nguyên A (10 thể hiện), B (5 thể hiện), và C (7 thể hiện). Hiện trạng tại thời điểm T0: Allocation Max Available A B C A B C A B C P0 0 1 0 7 5 3 3 3 2 P1 2 0 0 3 2 2 P2 3 0 2 9 0 2 P3 2 1 1 2 2 2 P4 0 0 2 4 3 3 103 Need Allocation Max Work Available A B C A B C A B C A B C A B C P0 7 4 3 0 1 0 7 5 3 10 5 7 3 3 2 P1 1 2 2 2 0 0 3 2 2 5 3 2 P2 6 0 0 3 0 2 9 0 2 10 4 7 P3 0 1 1 2 1 1 2 2 2 7 4 3 P4 4 3 1 0 0 2 4 3 3 7 4 5 Nội dung của ma trận Need = Max – Allocation. Hệ thống đang ở trạng thái an toàn do dãy < P1, P3, P4, P2, P0> thõa mãn tiêu chí về an toàn. Nên không bị deadlock. Vì hệ thống có đủ TN để cấp cho các QT theo thứ tự trên. 104 P1 YÊU CẦU THÊM 1 TN LOẠI A, 2 TN LOẠI C HỎI CÓ CẤP PHÁT NGAY LẬP TỨC KHÔNG? Thực thi giải thuật yêu cầu tài nguyên đối với p1 (slide 32) Hiện trạng mới của hệ thống đã thay đổi đối với p1 Thực thi gỉai thuật an toàn (slide 28) Nếu dãy cũ vẫn an toàn => cấp phát ngay lập tức cho p1 Nếu dãy cũ không an toàn => tìm ra dãy mới theo giải thuật an toàn => cấp phát cho P1 theo thứ tự mới Nếu không tìm được dãy nào an toàn cả => p1 chờ Request = vector yêu cầu cho quá trình Pi. Nếu Request[i,j] = k thì quá trình Pi muốn k thể hiện của tài nguyên Rj. 1. Nếu Request[i,j] Need[i,j] nhảy sang bước 2. Ngược lại, báo lỗi do quá trình đã vượt quá số tài nguyên nó đã dự định sử dụng. 2. Nếu Request[i,j] Available[j], nhảy sang bước 3. Ngược lại Pi phải chờ, do các tài nguyên nó yêu cầu hiện không sẵn dùng. 3. Giả vờ như đang cấp tài nguyên cho Pi bằng cách sửa đổi trạng thái như sau: Available[j] = Available[j] – Request[i,j]; Allocation[i,j] = Allocation[i,j] + Request[i,j]; Need[i,j] = Need[i,j] – Request[i,j] Nếu an toàn tài nguyên được cấp cho Pi. Nếu không an toàn Pi phải đợi, và trạng thái cấp phát tài nguyên cũ được phục hồi 106 Kiểm tra Request Available (nghĩa là, (1,0,2) (3,3,2)) true. Allocation Need Available A B C A B C A B C P0 0 1 0 7 4 3 2 3 0 P1 3 0 2 0 2 0 P2 3 0 2 6 0 0 P3 2 1 1 0 1 1 P4 0 0 2 4 3 1 Sự thực hiện giải thuật an toàn cho thấy dãy thõa mãn yêu cầu về an toàn. Vậy cấp phát ngay lập tức cho P1. Vì hệ thống vẫn đủ tài nguyên để cấp phát liền cho P1 107 BÀI TẬP Giả sử hiện trạng hệ thống ở thời điểm T0 (slide 30) Yêu cầu (3,3,0) của P4 có thể được cấp không? hoặc Yêu cầu (0,2,0) của P0 có thể được cấp không? Cho phép hệ thống bước vào trạng thái deadlock. Phát hiện Deadlock TN có 1 thể hiện thì dùng đồ thị chờ (wait-for), khắc phục bằng cách gở bỏ 1 cạnh trong đồ thị chờ tương đương 1 cạnh và 1 đỉnh tài nguyên trong đồ thị cấp phát tài nguyên. TN có nhiều thể hiện thì dùng giải thuật phát hiện Deadlock (slide 38). Khắc phục bằng cách kết thúc quá trình. 109 Duy trì đồ thị wait-for Các nút là các quá trình. Pi Pj nếu Pi đang đợi Pj Thường xuyên thực hiện giải thuật tìm kiếm chu trình trong đồ thị chờ. Một giải thuật phát hiện chu trình trong đồ thị yêu cầu theo thứ tự n2 thao tác, với n là số cạnh trong đồ thị. 110 Đồ thị cấp phát tài nguyên Đồ thị wait-for tương ứng 111 Available: Vector có chiều dài m chỉ ra số lượng thể hiện còn sẵn dùng của mỗi loại tài nguyên. Allocation: Một ma trận n x m định nghĩa số lượng thể hiện của mỗi loại tài nguyên hiện đang được cấp phát cho mỗi tiến trình. Request: Một ma trận n x m chỉ ra lượng yêu cầu của mỗi quá trình. Nếu Request [i,j] = k, thì quá trình Pi đang yêu cầu thêm k thể hiện của tài nguyên loại Rj 112 1. Đặt Work và Finish là các vectors có chiều dài tương ứng m và n, khởi tạo: (a) Work = Available (b) For i = 1,2, , n if Allocation[i] 0 then Finish[i] = false; else Finish[i] = true; 2. Tìm ra chỉ số i để hai điều kiện sau được thõa: (a) Finish[i] == false (b) Request[i] Work[i] Nếu không tồn tại i, nhảy đến bước 4 113 3.Work = Work + Allocation[i] Finish[i] = true Nhảy đến bước 2. 4. If Finish[i] == false, for some i, 1 i n, then hệ thống đang ở trạng thái deadlock. Ngoài ra, if Finish[i] == false, then Pi đang bị deadlock. Giải thuật yêu cầu O(m x n2) thao tác để phát hiện ra hệ thống có bị deadlock hay không 114 Năm quá trình P0 đến P4; có 3 kiểu tài nguyên A (7 thể hiện), B (2 thể hiện), và C (6 thể hiện). Hiện trạng tại thời điểm T0: Allocation Request Available A B C A B C A B C P0 0 1 0 0 0 0 0 0 0 P1 2 0 0 2 0 2 P2 3 0 3 0 0 0 P3 2 1 1 1 0 0 P4 0 0 2 0 0 2 Chuỗi sẽ dẫn đến Finish[i] = true với mọi i. 115 P2 yêu cầu thêm một thể hiện của tài nguyên loại C. Request A B C P0 0 0 0 P1 2 0 2 P2 0 0 1 P3 1 0 0 P4 0 0 2 Trạng thái của hệ thống? P0 không yêu cầu thêm tài nguyên nào, nhưng hệ thống vẫn không đủ tài nguyên để thõa mãn nhu cầu của các quá trình khác. Deadlock xảy ra, bao gồm các quá trình P1, P2, P3, và P4. 116 Sử dụng giải thuật khi nào và thường xuyên như thế nào sẽ phụ thuộc vào: Có deadlock có khả năng xảy ra thường xuyên như thế nào? Bao nhiêu quá trình cần phải quay lại? Một quá trình để mở một nút trong chu trình Nếu giải thuật phát hiện deadlock xảy ra quá ít, thì có thể sẽ có nhiều chu trình xuất hiện trong đồ thị. Khi đó, khó có thể bảo rằng quá trình nào trong số các quá trình bị deadlock đã gây ra deadlock. 117 Hủy bỏ tất cả các quá trình bị deadlock ( Finish[i]:=False) Hủy bỏ một lần một quá trình cho đến khi chu trình deadlock bị loại trừ. Thế chúng ta nên hủy bỏ các quá trình theo thứ tự nào? Độ ưu tiên của quá trình. quá trình đã diễn ra lâu chưa và nó còn tiếp diễn bao lâu nữa? Số tài nguyên mà quá trình đã sử dụng. Số tài nguyên mà quá trình cần phải tranh chấp thêm. Có bao nhiêu quá trình cần phải được dừng. quá trình là quá trình tương tác hay theo quá trình bó? 118 Chọn một quá trình nạn nhân dựa vào giá trị nhỏ nhất. Rollback – quay lại trạng thái an toàn nào đó, khởi động lại quá trình từ trạng thái đó. Starvation – một quá trình có thể liên tục được chọn là nạn nhân, làm nó không thể kết thúc. Giải pháp: 119 Kết hợp 3 giải pháp cơ bản Ngăn chặn - Prevention Tránh - Avoidance Phát hiện - Detection cho phép áp dụng một giải pháp tối ưu cho một loại tài nguyên trong hệ thống. Phân chia các tài nguyên thành các lớp theo thứ tự phân cấp. Sử dụng kỹ thuật thích hợp nhất để khống chế deadlock trong mỗi lớp tài nguyên. 120
File đính kèm:
- bai_giang_dieu_do_cac_tien_trinh_nguyen_thi_thuy_linh.pdf