1. Trang chủ
  2. » Luận Văn - Báo Cáo

Lập trình mô phỏng các phương pháp phân bổ tài nguyên để giải quyết bế tắc môn nguyên lí hệ điều hành

35 83 0

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 35
Dung lượng 425 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Lập trình mô phỏng các phương pháp phân bổ tài nguyên để giải quyết bế tắc, code mô phỏng thuật toán banker , mô tả đầy đủ cấp phát tài nguyên và code mô phỏng cấp phát tài nguyên , Báo cáo cuối kì môn nguyên lí hệ điều hành

Trang 1

TRƯỜNG ĐẠI HỌC _

KHOA CÔNG NGHỆ THÔNG TIN

~~~~~~*~~~~~~

BÀI TẬP TIỂU LUẬN

MÔN HỌC: NGUYÊN LÝ HỆ ĐIỀU HÀNH

ĐỀ TÀI: Lập trình mô phỏng các phương pháp phân bổ tài nguyên để

Trang 2

Mục Lục

Chương I: HIỆN TƯỢNG BẾ TẮC 3

I Bế tắc và hiện tượng bế tắc 3

1 Bế tắc 3

2 Hiện tượng bế tắc 4

II Điều kiện xảy ra bế tắc trong hệ thống 5

III Các mức phòng tránh bế tắc 5

IV Quy trình sử dụng tài nguyên 6

V CÁC BIỆN PHÁP PHÒNG TRÁNH BẾ TẮC 6

1 Ngăn ngừa bế tắc 6

2 Dự báo và tránh bế tắc 7

Chương II: ĐỒ THỊ CẤP PHÁT TÀI NGUYÊN 10

I Đồ thị cấp phát tài nguyên 10

II Trạng thái quá trình 11

Chương III: GIẢI QUYẾT HIỆN TƯỢNG BẾ TẮC 15

I Xử lý bế tắc 15

II Cách giải quyết deadlock 16

Chương IV: THUẬT TOÁN YÊU CẦU TÀI NGUYÊN 18

I Thuật toán chuyển hệ sang trạng thái an toàn 18

1 Mô tả 18

2 Thuật toán: 18

II Thuật toán kiểm tra tính an toàn của hệ thống (BANKER) 19

1 Mô tả 19

2 Thuật toán: 19

3 Lập trình mô phỏng 20

4 Bài tập minh họa 23

III Kết luận: 34

Trang 3

Lời Nói Đầu

Máy tính điện tử là một công cụ hỗ trợ đắc lực để giải quyết các công việc trong thời đại công nghệ hiện nay Các thế hệ máy tính lần lượt ra đời, thế hệ sau lại có nhiều cải tiến vượt trội hơn hẳn thế hệ trước-đáp ứng được nhu cầu của xã hội Mọi chương trình cần xử lý được người sử dụng đưa vào máy

Trang 4

tính và thu được kết quả mong muốn Tuy nhiên, trong hệ thống máy tính cũng gặp phải rất nhiều vấn

đề về phần tổ chức sao cho việc xử lý ngày càng hiệu quả nhất Bế tắc (hay deadlock) là một hiện

tượng nguy hại cho máy tính (hay còn gọi là hiện tượng máy “treo” (chaos) Để giải quyết được vấn đề này trong hệ điều hành cũng có các mức để phòng tránh bế tắc (hay các phương pháp để phòng tránh bế tắc) Đó chính là phương pháp phân bổ tài nguyên

Để hiểu rõ về các phương pháp này, chúng ta cùng đi tìm hiểu về “ Lập trình mô phỏng các phương pháp phân bổ tài nguyên để giải quyết bế tắc”.

I Bế tắc và hiện tượng bế tắc.

1 Bế tắc.

Bế tắc là hiện tượng: Trong hệ thống xuất hiện hai hay nhiều các tiến trình, mà các tiến trình trong tập này đều chờ đợi một sự kiện nào đó đang được một tiến trình trong tập này chiếm giữ Và sự đợi này có thể kéo dài vô hạn nếu không có sự tác động từ bên ngoài. 

      

Trang 5

2 Hiện tượng bế tắc.

-  Bế tắc trong máy tính:.

Giả sử có hai tiến trình P1 và P2 hoạt động đồng thời trong hệ thống Tiến trình P1 đang giữ tài nguyên R1 và xin được cấp R2 để tiếp tục hoạt động, trong khi đó tiến trình P2 đang giữ tài nguyên R2 và xin được cấp R1 để tiếp tục hoạt động Trong trường hợp này cả P1 và P2 sẽ không tiếp tục hoạt động được Như vậy P1 và P2 rơi vào trạng thái tắc nghẽn

Khi hệ thống xảy ra tắc nghẽn nếu hệ điều hành không kịp thời phá bỏ tắc nghẽn thì hệ thống có thể rơi vào tình trạng treo toàn bộ hệ thống Như trong trường hợp tắc nghẽn ở ví dụ 1, nếu sau đó có tiến trình P3, đang giữ tài nguyên R3, cần R2 để tiếp tục thì P3 cũng sẽ rơi vào tập tiến trình bị tắc nghẽn, rồi sau đó nếu có tiến trình P4 cần tài nguyên R1 và R3 để tiếp tục thì P4 cũng rơi vào tập các tiến trình bị tắc nghẽn như P3, … cứ thế dần dần có thể dẫn đến một thời điểm tất cả các tiến trình trong hệ thống đều rơi vào tập tiến trình tắc nghẽn Và như vậy hệ thống

sẽ bị treo hoàn toàn

Trang 6

II Điều kiện xảy ra bế tắc trong hệ thống.

  Hiện tượng bế tắc xảy ra khi và chỉ khi trong hệ thống tồn tại bốn điều kiện sau:

-Có tài nguyên găng Các tài nguyên liên quan phải ở chế độ không thể chia sẻ được Chỉ có duy nhất một tiến trình tại một thời điểm có thể sử dụng được tài nguyên

-Có hiện tượng giữ và đợi: Có một tiến trình đang giữ một số tài nguyên và đợi tài nguyên bổ sung đang được giữ bởi các tiến trình khác

-Không có hệ thống phân phối lại tài nguyên: Việc sử dụng tài nguyên không bị ngắt Tức là, khi một tiến trình đang

sử dụng một tài nguyên, tài nguyên đó không bị ngắt hoặc không bị lấy mất Một tài nguyên chỉ có thể được giải phóng bởi tiến trình đang nắm giữ nó, sau khi mà tiến trình đã hoàn thành

-Có hiện tượng chờ đợi vòng tròn: Mỗi tiến trình nắm giữ các tài nguyên hiện đang được yêu cầu bởi tiến trình tiếp theo trong chuỗi không thể tồn tại

-Một tập hợp các quá trình {P0, P1,…,Pn} đang chờ mà trong đó P0 đang chờ một tài nguyên được giữ bởi P1, P1 đang chờ tài nguyên đang giữ bởi P2,…,Pn-1 đang chờ tài nguyên đang được giữ bởi quá trình P0

Lưu ý: tất cả bốn điều kiện phải cùng phát sinh để hiện tượng bế tắc xảy ra Điều kiện chờ đợi chu trình đưa đến điều

kiện giữ-và-chờ vì thế bốn điều kiện không hoàn toàn độc lập

III Các mức phòng tránh bế tắc.

Để tránh được bế tắc thông thường hệ thống áp dụng 3 mức:

-  Ngăn ngừa: áp dụng các biện pháp để hệ không rơi vào bế tắc

-  Dự báo và tránh bế tắc: áp dụng các biện pháp kiểm tra xem tiến trình có bị rơi vào trạng thái bế tặc hay không Nếu có thì thông báo trước khi bế tắc xảy ra

-  Nhận biết và khắc phục: tìm cách khắc phục và giải quyết

Trang 7

IV Quy trình sử dụng tài nguyên.

   Một tiến trình thường sử dụng tài nguyên theo các bước tuần tự sau:

-  Xin phép sử dụng (request)

-  Sử dụng tài nguyên (use)

-  Giải phóng tài nguyên sau khi sử dụng (release).  

V CÁC BIỆN PHÁP PHÒNG TRÁNH BẾ TẮC

1 Ngăn ngừa bế tắc

Để phòng ngừa bế tắc, cần phải đảm bảo sao cho bốn điều kiện gây bê tắc không xảy ra đông thời

a) Loại bỏ tài nguyên găng

Mô phỏng tài nguyên găng bằng các tài nguyên có thể dùng chung được (áp dụng kĩ thuật SPOOL)

b) Loại bỏ yếu tố giữ và đợi

Thực hiện phân bổ trước tài nguyên; tiến trình chỉ có thể thực hiện khi mọi tài nguyên mà nó yêu cầu đã được phân bổ đủ Tiến trình chỉ được phép đòi tài nguyên khi nó không giữ tài nguyên nào cả Nếu tiến trình phải đợi thì mọi tài ang thá rơi vào nguyên nó đang giữ phải tạm thời giải phóng

c) Xây dựng hệ thống ngắt tài nguyên

Hệ thống ngắt tài nguyên có thể được xây dựng theo hai phương pháp:

Phương pháp 1: Nếu tiến trình đang giữ một số tài nguyên và yêu cầu tài nguyên bổ sung nhưng hệ thống không thể

phân bổ ngay được thì mọi tài nguyên mà tiến trình đang giữ sẽ bị ngắt và được bổ sung vào danh sách các tài

nguyên tự do Tiến trình sẽ được bắt đầu lại khi nó được phân bố đủ các tài nguyên cần thiết

Phương pháp 2: Nếu tiến trình đang giữ một số tài nguyên và yêu cầu tai nguyên bố sung nhưng hệ thống không thể

phân bổ ngay được, khi đó hệ tiến trình khác cũng đang đợi hay không Nếu có thì ngắt các tiến trình này, nhu cầu

Trang 8

phải đợi và trong khi đợi, tài nguyên hiện có của nó cũng có thể bị ngắt khi thống sẽ kiểm tra xem liệu tài nguyên màtiến trình yêu cầu có bị giữ bởi các yêu nội lại tài nguyên để phân bồ cho tiến trình yêu cầu; ngược lại có tiên trình khác yêu cầu Tiến trình sẽ được bắt đầu lại khi nó được phân bổ đủ tài nguyên yêu cầu và tái tạo lại các tài nguyên

bị ngắt

d) Loại bỏ yếu tố chờ đợi vòng tròn

Yếu tố chờ đợi vòng tròn có thể được loại bỏ bằng cách sắp thứ tự các tài nguyên Mỗi tài nguyên r được gán một sốthứ tự f(r)

-Phương pháp 1: Tiến trình giữ tài nguyên rị chi được phép đòi tài nguyên r,khi f(r) <f(r).

- Phương pháp 2: Tiến trình đang giữ tài nguyênr; muốn đòi tài nguyên rj thì phải giải phóng các tài nguyên r; thoả

mãn điều kiện f(r) > f(r)

2 Dự báo và tránh bế tắc

Nguyên tắc chung của dự báo và tránh bế tắc là mỗi lần phân bổ tài nguyên cho các tiến trình thì hệ thống sẽ kiểm tra xem việc phân bổ đó có đẩy hệ thống vào tình trạng bế tắc hay không Nếu có thì tìm cách giải quyết trước khi bếtắc xảy ra

a) Khái niệm về dãy tiến trình an toàn

Cho dãy tiến trình P, P2 , P, song hành Dãy tiến trình được gọi là an toàn (safe process) nếu với mọi tiến trình P;, tài nguyên mà P; cần có thể được thoả mãn bởi các tài nguyên khả dụng của hệ thống và tài nguyên do các tiến trình

P đang giữ với điều kiện i' < i Hệ thống ở trạng thái an toàn tại một thời điểm nếu dãy tiến trình song hành tại thời điểm đó có thể được sắp xếp thành một dãy an toàn

b) Thuật toán chuyển hệ sang trạng thái an toàn

Giả sử hệ có n tiến trình và m kiểu tài nguyên Các cấu trúc dữ liệu sử dụng trong thuật toán được xây dựng như sau:

Trang 9

- Available: mång 1 x m thể hiện số tài nguyên có thể sử dụng của mẽ kiểu Nếu Available(j) = k suy ra có k tài

nguyên kiểur; có thể sử dụng

-Max: mång n × m thế hiện số tài nguyên cực đại mà mỗi tiến trình yêu cầu, Nếu Max(i, j) = k suy ra tiến trình P,

chỉ có thể yêu cầu cực đại k nguyên kiểu rj

-Allocation : mảng n × m thể hiện ố tài nguyên còn cân của mỗi tiến trình Nếu Allocation(i, j)=k suy ra tién trình

Pi đang sử dụng k tài nguyên kiểu rj - -Need: mảng n × m thể hiện số tài nguyên còn cần của mỗi tiến trình

nếu nếu need(i,j) =k suy ra tiến trình Pi đang sử dụng k tài nguyên kiểu rj

Chú ý: Need(i, j) = Max(i, j) – Allocation(i, j)

Request: mảng n × m thể hiện yêu cầu tài nguyên của các tiến trình tại Tj mỗi thời điểm Nếu Request(i, j)=k suy ra

tiến trình Pi đang yêu cầu k tài nguyên kiểu rj

Thuật toán:

Step 1: If Request(i) <=Need(i) then go to Step 2 else error;

(Tiến trình yêu cầu tài nguyên vượt quá quy định)

Step 2: If Request(i) <= Available then go to Step 3 else Pi wait (không đủ tài nguyên để phân bổ cho P) yên Step 3 else Pi wait;

Step 3: Hệ thống dự định phân bổ tài nguyên như sau

Available:=Available - Request(i)

Allocation(i):=Allocation(i) + Request(i)

Need(i): =Need(i) - Request(i)

Step 4: Kiểm tra tính an toàn của hệ

Nếu hệ ở trạng thái an toàn thì phân bồ tài nguyên theo dự định, ngược lại tiến trình P, phải đợi cùng với yêu cầu tài nguyên Request (i)

c) Thuật toán kiểm tra tính an toàn của hệ thống (BANKER)

Trang 10

Trong thuật toán sử dụng hai cấu trúc dữ liệu sau:

-Work: mång 1 x m thể hiện số tài nguyên khả dụng của hệ thống và số tài nguyên do các tiến trình P; đang sử dụng

với điều kiện i' < i

- Finish: mång 1 ×n đánh dấu các tiến trình đã xét.

Thuật toán:

Step 1: Khởi tạo:

Work: Available;

Finish(i):= false; (với mọi i= n)

Step 2: Tìm i sao cho Finish(i)= false và need(i)<= Work

Nếu không tìm thấy, go to Step 4Step 3: Work=Work+Allocation(i);

Trang 11

Chú ý rằng một cạnh yêu cầu trỏ tới chỉ một hình vuông Rj, trái lại một cạnh gán cũng phải gán tới một trong các dấu chấm trong hình vuông

Khi quá trình Pi yêu cầu một thể hiện của loại tài nguyên Rj, một cạnh yêu cầu được chèn vào đồ thị cấp phát tài nguyên Khi yêu cầu này có thể được đáp ứng, cạnh yêu cầu lập tức được truyền tới cạnh gán Khi quá trình

không còn cần truy xuất tới tài nguyên, nó giải phóng tài nguyên, và khi đó dẫn đến cạnh gán bị xoá Đồ thị cấp phát tài nguyên được hiển thị trong hình 1 dưới đây mô tả trường hợp

Trang 12

II Trạng thái quá trình.

- Quá trình P1 đang giữ một thể hiện của loại tài nguyên R2 và đang chờ một thể hiện của loại tài nguyên R1

Trang 13

- Quá trình P2 đang giữ một thể hiện của loại tài nguyên R1 và R2 và đang chờ một thể hiện của loại tài nguyên R3.

- Quá trình P3 đang giữ một thể hiện của R3 Đồ thị cấp phát tài nguyên hiển thị rằng, nếu đồ thị không chứa chu trình, thì không có quá trình nào trong hệ thống bị bế tắc (hay deadlock).  Nếu đồ thị có chứa chu trình, thì hiện tượng bế tắc có thể tồn tại Nếu mỗi loại tài nguyên có chính xác một thể hiện, thì một chu trình ngụ ý rằng một hiện tượng bế tắc xảy ra Nếu một chu trình bao gồm chỉ một tập hợp các loại tài nguyên, mỗi loại tài nguyên chỉ có một thể hiện thì deadlock xảy ra Mỗi quá trình chứa trong chu trình bị deadlock Trong trường hợp này, một chu trình trong đồ thị là điều kiện cần và đủ để tồn tại deadlock Nếu mỗi loại tài nguyên có nhiều thể hiện thì chu trình không ngụ ý deadlock xảy Trong trường hợp này, một chu trình trong đồ thị là điều kiện cần nhưng chưa đủ để tồn tại deadlock Giả sử quá trình P3 yêu cầu một thể hiện của loại tài nguyên R2 Vì không có thể hiện tài nguyên hiện có, một cạnh yêu cầu P3 → R2 được thêm vào đồ thị (hình 2) Tại thời điểm này, hai chu trình nhỏ tồn tại trong hệ

thống:

P1 → R1 → P2 → R3 → P3 → R2 → P1 

P2 → R3 → P3 → R2 → P2

Trang 14

Hình 2: Đồ thị cấp phát tài nguyên với deadlock

 Quá trình P1, P2, và P3 bị deadlock Quá trình P3 đang chờ tài nguyên R3, hiện được giữ bởi quá trình P2 Hay nói cách khác, quá trình P3 đang chờ quá trình P1 hay P2 giải phóng tài nguyên R2 Ngoài ra, quá trình P1 đang chờ quátrình P2 giải phóng tài nguyên R1 Bây giờ xem xét đồ thị cấp phát tài nguyên trong hình 3 dưới đây Trong thí dụ này, chúng ta cũng có một chu kỳP1 → R1 → P3 → R2 → P1

Trang 15

Hình 3: Đồ thị cấp phát tài nguyên có chu trình nhưng không bị deadlock

   Tuy nhiên, không có deadlock Chú ý rằng quá trình P4 có thể giải phóng thể hiện của loại tài nguyên R2 Tài nguyên đó có thể được cấp phát tới P3 sau đó, chu trình sẽ không còn

Tóm lại, nếu đồ thị cấp phát tài nguyên không có chu trình thì hệ thống không có trạng thái deadlock Ngoài ra, nếu

có chu trình thì có thể có hoặc không trạng thái deadlock Nhận xét này là quan trọng khi chúng ta giải quyết vấn đề deadlock

 

Trang 16

Chương III: GIẢI QUYẾT HIỆN TƯỢNG BẾ TẮC.

I Xử lý bế tắc

Khi hệ thống gặp bế  tắc hệ điều hành có thể sử dụng phương pháp sau giải quyết:

-  Thông báo cho Operator biết để xử lý

-  Đình chỉ hoạt động của tiến trình: phương pháp này dựa trên việc thu hồi lại các tài nguyên của những tiến trình bị kết thúc Có thể sử dụng một trong hai cách đình chỉ sau:

+  Đình chỉ hoạt động của mọi tiến trình trong tình trạng bế tắc

+  Đình chỉ hoạt động lần lượt của từng tiến trình cho tới khi thoát khỏi tình trạng bế tắc (khi đình chỉ tiến trìnhnào thì thu hồi lại tài nguyên của tiến trình đó)

Chú ý: khi đình chỉ hoạt động của các tiến trình cần chú ý tới các yếu tố sau:

+  Độ ưu tiên của tiến trình

+  Tiến trình đã diễn ra bao lâu và còn bao lâu thì hoàn thành

+  Có bao nhiêu kiểu tài nguyên và số lượng tài nguyên mà tiến trình đã dùng

+  Tiến trình còn cần bao nhiêu tài nguyên để hoàn thành một công việc

-  Thu hồi tài nguyên: Áp dụng biện pháp ngắt tài nguyên từ một số tiến trình để cấp phát cho các tiến trình đang có nhu cầu sau đó kiểm tra lại tình trạng bế tắc Phương pháp này cần phải:

+  Xem xét và lựa chọn tiến trình nào để ngắt tài nguyên và ngắt tài nguyên nào?

+  Khả năng phục hồi trạng thái ban đầu của tiến trình có thực hiện được hay không?

+  Có thể xảy ra khả năng một số tiến trình không bao giờ được cấp đủ tài nguyên

Trang 17

II Cách giải quyết deadlock.

Phần lớn, chúng ta có thể giải quyết vấn đề deadlock theo một trong ba cách:

        Chúng ta có thể sử dụng một giao thức để ngăn chặn hay tránh deadlocks, đảm bảo rằng hệ thống sẽ không bao giờ đi vào trạng thái deadlock

      Chúng ta có thể cho phép hệ thống đi vào trạng thái deadlock, phát hiện nó và phục hồi

      Chúng ta có thể bỏ qua hoàn toàn vấn đề này và giả vờ deadlock không bao giờ xảy ra trong hệ thống Giải pháp này được dùng trong nhiều hệ điều hành, kể cả UNIX

Để đảm bảo deadlock không bao giờ xảy ra, hệ thống có thể dùng kế hoạch ngăn chặn hay tránh deadlock Ngăn chặn deadlock là một tập hợp các phương pháp để đảm bảo rằng ít nhất một điều kiện cần không thể xảy ra

Ngược lại, tránh deadlock yêu cầu hệ điều hành cung cấp những thông tin bổ sung tập trung vào loại tài nguyênnào một quá trình sẽ yêu cầu và sử dụng trong thời gian sống của nó Với những kiến thức bổ sung này, chúng ta có thể quyết định đối với mỗi yêu cầu quá trình nên chờ hay không Để quyết định yêu cầu hiện tại có thể được thỏa mãn hay phải bị trì hoãn, hệ thống phải xem xét tài nguyên hiện có, tài nguyên hiện cấp phát cho mỗi quá trình, và các yêu cầu và giải phóng tương lai của mỗi quá trình

Nếu một hệ thống không dùng giải thuật ngăn chặn hay tránh deadlock thì trường hợp deadlock có thể xảy ra Trong môi trường này, hệ thống có thể cung cấp một giải thuật để xem xét trạng thái của hệ thống để xác định deadlock có xảy ra hay không và giải thuật phục hồi từ deadlock

Nếu hệ thống không đảm bảo rằng deadlock sẽ không bao giờ xảy ra và cũng không cung cấp một cơ chế để phát hiện và phục hồi deadlock thì có thể dẫn đến trường hợp hệ thống ở trong trạng thái deadlock Trong trường hợp này, deadlock không được phát hiện sẽ làm giảm năng lực hệ thống vì tài nguyên đang được giữ bởi những quá trình mà chúng không thể thực thi, đi vào trạng thái deadlock Cuối cùng, hệ thống sẽ dừng các chức năng và cần được khởi động lại bằng thủ công

Mặc dù phương pháp này dường như không là tiếp cận khả thi đối với vấn đề deadlock nhưng nó được dùng trong một số hệ điều hành Trong nhiều hệ thống, deadlock xảy ra không thường xuyên; do đó phương pháp này là rẻ

Ngày đăng: 24/06/2021, 16:06

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w