Tải bản đầy đủ (.docx) (23 trang)

Lập trình mô phỏng các phương pháp kiểm tra tính anh toàn của hệ | Nguyên Lí hệ điều hành Haui

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (303.59 KB, 23 trang )

Trường Đại học công nghiệp Hà Nội
Khoa công nghệ thông tin

Mơn học: Ngun lý hệ điều hành
Đề tài: Lập trình mơ phỏng các phương pháp
kiểm tra tính anh tồn của hệ.

Giáo viên: Nguyễn Thanh Hải
Nhóm số: 6
Lớp: 20222IT6025003
Hà Nội, 2023


Trường Đại học công nghiệp Hà Nội
Khoa công nghệ thông tin

Mơn học: Ngun lý hệ điều hành
Đề tài: Lập trình mơ phỏng các phương pháp kiểm
tra tính anh tồn của hệ.
Giáo viên: Nguyễn Thanh hải
Sinh viên thực hiện:
1. Trần Văn Hoàng 2020603969
2. Trương Ngọc Khuê 2021600018
3. Nguyễn Minh Giang 2020607589
4. Nguyễn Đức Kiên 2020605889
5. Dương Quốc Huy 2020606563

Hà Nội, 2023


MỤC LỤC.


Contents
LỜI NÓI ĐẦU....................................................................................................4
Chương 1: Hiện tượng bế tắc............................................................................5
1.1. Khái niệm về bế tắc..........................................................................5
1.2. Điều kiện xảy ra bế tắc trong hệ thống............................................5
1.3. Các mức phòng tránh bế tắc.............................................................6
Chương 2: Ngăn ngừa bế tắc............................................................................6
2.1. Ngăn ngừa bế tắc............................................................................6
2.1.1. Loại bỏ tài nguyên găng:.......................................................................................................6
2.1.2. Loại bỏ yếu tố giữ và đợi......................................................................................................6
2.1.3. Xây dựng hệ thống ngắt tài nguyên......................................................................................6
2.1.4. Loại bỏ yếu tố chờ đợi vòng tròn..........................................................................................7

2.2. Dự báo và tránh bế tắc..................................................................7
2.2.1. Khái niệm về dãy tiến trình an tồn......................................................................................7
2.2.2. Thuật tốn chuyển hệ sang trạng thái an tồn.......................................................................7
2.2.3. Thuật tốn kiểm tra tính an tồn của hệ................................................................................9

2.3. Phát hiện bế tắc..............................................................................9
Chương 3: Xây dựng thuật tốn kiểm tra tính an tồn................................10
3.1. Kiểu dữ liệu....................................................................................10
3.2. Lưu đồ thuật tốn...........................................................................12
3.3. Thuật tốn......................................................................................13
3.4. Dữ liệu vào/ra.................................................................................19
3.5. Hướng dẫn sử dụng........................................................................19
Chương 4: Kết quả chương trình...................................................................20
4.1. Ví dụ hệ ở trạng thái an tồn......................................................20
4.1.1. Input....................................................................................................................................20
4.1.2. Output.................................................................................................................................21


4.2. Ví dụ hệ ở trạng thái khơng an toàn..........................................22
4.2.1. Input....................................................................................................................................22
4.2.2. Output.................................................................................................................................23


LỜI NĨI ĐẦU
Lập trình mơ phỏng các phương pháp kiểm tra tính an tồn của hệ là một
lĩnh vực quan trọng trong ngành cơng nghệ thơng tin. Đảm bảo tính an toàn của
hệ thống phần mềm là một yếu tố không thể bỏ qua trong thời đại số hiện nay.
Sử dụng lập trình mơ phỏng, chúng ta có thể kiểm tra tính an tồn của hệ thống
trong các tình huống đa dạng và khó đốn trước. Lập trình mơ phỏng cũng giúp
chúng ta kiểm tra tính an tồn của hệ tiến trình. Mặc dù lập trình mơ phỏng địi
hỏi sự kiên nhẫn và sáng tạo, nhưng nó đem lại lợi ích to lớn cho việc đảm bảo
tính an toàn của hệ thống. Sử dụng lập trình mơ phỏng, chúng ta có thể thử
nghiệm và cải thiện các biện pháp bảo mật trong hệ thống, từ đó nâng cao khả
năng phát hiện và giải quyết các vấn đề an toàn.

4


Chương 1: Hiện tượng bế tắc
1.1. Khái niệm về bế tắc

Bế tắc là trạng thái khi hai hoặc nhiều tiến trình cùng chờ đợi một số sự
kiện nào đó và nếu khơng có sự tắc động đặc biệt từ bên ngồi thì sự chờ đợi đó
là vơ hạn
Ví dụ:
Giả sử có hai tiến trình P1 và P2 song hành sử dụng các tài nguyên r1 và
r2 được điều khiển bởi hai đèn hiệu S1 và S2. Tại mỗi thời điểm, mỗi tài
nguyên chỉ phục vụ cho sự hoạt động của một tiến trình. Xét trạng thái:

P1
Wait(S1)
.....
Wait(S2)

Thời điểm
t1
t2
t3
t4

P2
Wait(S2)
.....
.....
Wait(S1)

Nhận xét: Tại ví dụ trên, sau thời điểm t3, tiến trình P1 rơi vào trạng thái
chờ tài nguyên r2 đang được P2 sử dụng; Sau thời điểm t4, tiến trình P2 rơi vào
trạng thái chờ tài nguyên r1 đang được tiến trình P1 sử dụng và bắt đầu từ đây,
cả hai tiến trình rơi vào trạng thái chờ đợi vô hạn và hệ thống gặp bế tắc

1.2. Đ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:
 Có tài nguyên găng.
 Có hiện tượng giữ và đợi: Có một tiến trình đang giữ một số tài ngun
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 ngun: Việc sử dụng tài ngun
khơng bị ngắt.
 Có hiện tượng chờ đợi vòng tròn.

5


1.3. Các mức phòng tránh bế tắc
Để tránh hiện tượng bế tắc, thông thường hệ thống áp dụng ba mức:
 Ngăn ngừa: Áp dụng các biện pháp để hệ không rơi vào trạng thái bế tắc.
 Dự báo và tránh bế tắc: Áp dụng các biện pháp để kiểm tra các tiến trình
xem 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 phát hiện và giải quyết.

Chương 2: Ngăn ngừa bế tắc
2.1. Ngăn ngừa bế tắc
Phải đảm bảo cho 4 điều kiện gây bế tắc không đồng thời xảy ra:

2.1.1. 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

2.1.2. 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 ngun mà nó u cầu được phân bổ đủ. Tiến trình chỉ được phép địi
tài ngun khi nó khơng giữ tài ngun nào cả. Nếu tiến trình phải đợi thì mọi
tài nguyên của nó đang dữ phải được giải phóng.

2.1.3. Xây dựng hệ thống ngắt tài nguyên
* 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.


6


* 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
tài nguyên bổ sung nhưng hệ thống khơng thể phân bổ ngay được. Khi đó hệ
thống sẽ kiểm tra xem liệu tài nguyên mà tiến trình u cầu có bị giữ lại bởi các
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 và thu hồi lại tài nguyên để phân bổ
cho các tiến trình u cầu
+ Nếu khơng, tiến trình yêu cầu phải đợi và trong khi chờ đợi, tài nguyên
hiện có của nó cũng có thể bị ngắt khi có tiến trình khác 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.

2.1.4. 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 1 số thứ tự f(r).

2.2. Dự báo và tránh bế tắc
2.2.1. Khái niệm về dãy tiến trình an tồn
Cho dãy tiến trình P1,P2,…Pn song hành. Dãy tiến trình được gọi là an
tồn (safe process) nếu với mọi tiến trình Pi, tài ngun mà Pi cần có thể được
thỏa 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 Pi đang giữ với điều kiện i’Hệ thống ở trạng thái an tồn tại 1 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 dãy an toàn

7



2.2.2. Thuật tốn chuyển hệ sang trạng thái an tồn
- Available: mảng 1 × n thể hiện số tài nguyên có thể sử dụng của mỗi
kiểu. Nếu Available(j)=k suy ra có k tài nguyên kiểu rj có thể sử dụng.
- Max: mảng m × n 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 Pi chỉ có thể u cầu cực đại k tài nguyên
kiểu rj .
- Allocation: mảng m × n thể hiện số tài nguyên mỗi kiểu hiện đã phân
bố cho các 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 .
- Max: mảng m × n thể hiện số tài nguyên cịn cần của mỗi tiến trình.
Nếu Need(i,j)= k suy ra tiền tình Pi cịn cần k tài ngun kiểu rj
(Need(i,j)=Max(i,j)-Allocation(i,j)).
- Request: mảng m × n thể hiện yêu cầu tài nguyên của các tiến trình tại
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:
Step1:
If Request(i) <= Need(i) then goto Step2 else erro:
(tiến trình yêu cầu tài nguyên vượt quá quy định)
Step2:
If Request(i)<=Available then goto Step3 else P, Wait:
(khơng có đủ tài nguyên để phân bố cho Pi)
Step3:
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)

8



Step4:
Kiểm tra tính an tồn của hệ:
Nếu hệ trạng thái an tồn thì phân bố tài ngun theo dự định. Ngược lại,
tiến trình Pi phải chờ đợi cùng với yêu cầu tài ngun Request(i)

2.2.3. Thuật tốn kiểm tra tính an tồn của hệ
- Work: mảng 1 × n 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 Pi’ đang sử dụng với điều kiện i’- Finish: mảng 1 × m đánh dấu các tiến trình đã xét.
Thuật tốn:
Step 1: Khởi tạo
Work= Available;
Finsh(i)=false; (với mọi i=1....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 4;
Step 3: Work=Work +Allocation(i);
Finsh(i)= true;
Go to step 2;
Step 4: Nếu Finish(i)=true với mọi i thì hệ thống ở trạng thái an tồn ngược lại
hệ thống gặp bê sắc

9


2.3. Phát hiện bế tắc
Thuật tốn:
Step 1:
Tìm i sao cho Finishi(i)=false và Request (i)

Nếu khơng tìm thấy go to step 3
Step 2:
Work=Work+Allocation(i)
Finish(i)=true
Go to step 1
Step 3:
Nếu tồn tại sao cho Finish(i)=false thì hệ thống gặp bế tắc

Chương 3: Xây dựng thuật tốn kiểm tra tính an
tồn
3.1. Kiểu dữ liệu
Giả sử hệ có m tiến trình và n kiểu tài ngun. Các cấu trúc dữ liệu được
xây dựng trong thuật toán này được xây như sau:
- Available: mảng 1 × n thể hiện số tài nguyên có thể sử dụng của mỗi
kiểu.Nếu Available(j)=k suy ra có k tài nguyên kiểu rj có thể sử dụng.
- Max: mảng m × n thể hiện số tài nguyên cực đại mà mỗi tến trình u
cầu.Nếu Max(i,j)=k suy ra tiến trình Pi chỉ có thể yêu cầu cực đại k tài
nguyên kiểu rj .

10


- Allocation: mảng m × n thể hiện số tài nguyên mỗi kiểu hiện đã phân bố
cho các tiến trình Nếu Allocation(i,j)=k suy ra tiến trình P i đang sử dụng
k tài nguyên kiểu rj .
- Max: mảng m × n thể hiện số tài nguyên còn cần của mỗi tiến trình. Nếu
Need(i,j)= k suy ra tiền tình P i còn cần k tài nguyên kiểu rj
(Need(i,j)=Max(i,j)-Allocation(i,j)).
- Request: mảng m × n thể hiện yêu cầu tài nguyên của các tiến trình tại
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.
- Work: mảng 1 × n 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 Pi’ đang sử dụng với điều kiện i’- Finish: mảng 1 × m đánh dấu các tiến trình đã xét.
- STT: mảng 1 × m thể hiện thứ tự của dãy tiến trình an tồn.
- kt: biến dùng để xác định trong 1 lần duyệt tất cả các tiến trình có ít nhất
1 tiến trình thỏa mãn Finish[i]=false và Need[i]<=Work hay khơng
Các hàm trong thuật tốn:
- KT: Hàm kiểm tra nếu Need của một tiến trình nhỏ hơn hoặc bằng Work
thì trả về true, ngược lại trả về false.
- dayAnToan: Hàm kiểm tra xem có cịn tiến trình chưa hồn thành hay
khơng.
- InMang: Hàm in ra từng phần tử của mảng hoặc ma trận.
- GiaiThich, GiaiThich1, GiaiThich2: Các hàm in ra giải thích các bước
của thuật tốn.
- Read: Hàm đọc dữ liệu từ file.

11


3.2. Lưu đồ thuật toán

12


3.3. Thuật toán
#include <bits/stdc++.h>
using namespace std;
int m,n;
int **Need,**Allocation,**Max;

int *Available,*Work;
bool *Finish;
int Read(istream& f, int **&a)
{
a = new int*[m];
for (int i=0; ia[i] = new int[n];
}
for (int i=0; ifor (int j=0; jf >> a[i][j];
}
void InMang(int **a)
{
for (int i=0;i{
for (int j=0;jcout<cout<}
}
bool KT(int **Need,int *Work,int Hang)//ham kiem tra need<=work
13


{
for (int i=0;iif (Need[Hang][i]>Work[i]) return false;
return true;
}

bool dayAnToan(bool Finish[])//ham kiem tra day da an toan chua
{
for (int j=0;jif (Finish[j]==false) return false;
return true;
}
void GiaiThich(int i)//In ra Need[i]<=Work
{
cout<<" (("<for (int j=1;jcout<<","<cout<<")<=";
cout<<"("<for (int j=1;jcout<<","<cout<<"))"<}
void GiaiThich2(int i)//In ra Need[i]>Work
{
cout<<" (("<for (int j=1;jcout<<","<cout<<")>";
14


cout<<"("<for (int j=1;jcout<<","<cout<<"))"<<"=> Bo qua"<

}
void GiaiThich1(int i)//In ra Work+Allocation[i]
{
cout<<" (("<for (int j=1;jcout<<","<cout<<")+";
cout<<"("<for (int j=1;jcout<<","<cout<<"))"<}
int main() {
fstream f;
f.open("Size_Available.txt", ios::in);
f>>m;f>>n;
Available= new int[n];
for(int j=0;jf>>Available[j];
f.close();
f.open("Allocation.txt", ios::in);
Read(f, Allocation);
f.close();
15


f.open("Max.txt", ios::in);
Read(f, Max);
f.close();
cout<<"m = "<

cout<<"Allocation:"<InMang(Allocation);
cout<<"Max: "<InMang(Max);
Work= new int[n];
cout<<"Available:"<for (int j=0;j{
cout<Work[j]=Available[j];
}
cout<Need = new int*[m];
for (int i=0; iNeed[i] = new int[n];
}
for (int i=0;ifor (int j=0;jNeed[i][j]=Max[i][j]-Allocation[i][j];
cout<<"Need:"<InMang(Need);
16


Finish=new bool[m];
for (int i=0;iint *STT=new int[m],d=0;
B2:
bool kt=false;
for (int i=0;i

{
if (Finish[i]==false&&KT(Need,Work,i)==true)
{
cout<<"Xet p"<Need["<cout<<" Work = Work + Allocation["<GiaiThich1(i);
for(int j=0;jWork[j]+=Allocation[i][j];
Finish[i]=true;cout<<" Finish["<kt=true;
STT[d]=i;d++;
}
else
{
if (Finish[i]==true) cout<<"Xet p"<=> Bo qua"<else
if (KT(Need,Work,i)==false)
{
cout<<"Xet p"<Need["<GiaiThich2(i);
17


}
}
}
cout<

if (kt==true) goto B2;
if (dayAnToan(Finish)==true)
{
cout<for (int i=0;icout<}
else cout<// Giai phong bo nho
delete[] Available;
delete[] Work;
for (int i=0; idelete[] Need[i];
delete[] Allocation[i];
delete[] Max[i];
}
delete[] Need;
delete[] Allocation;
delete[] Max;
delete[] Finish;
system("pause");
return 0;
}
18


3.4. Dữ liệu vào/ra
- Dữ liệu đầu vào
 Số tiến trình và số loại tài nguyên
 Số lượng tài nguyên có sẵn mỗi loại của hệ thống (Available)

 Ma trận Allocation
 Ma trận Max
- Dữ liệu đầu ra
 Dãy tiến trình an tồn cùng với thứ tự sắp xếp các tiến trình hoặc dãy
tiến trình khơng an tồn

3.5. Hướng dẫn sử dụng
Để sử dụng chương trình, bạn cần chuẩn bị các tệp dữ liệu đầu vào
"Size_Available.txt", "Allocation.txt" và "Max.txt", chứa thơng tin về số tiến
trình và số loại tài ngun và số lượng tài nguyên có sẵn mỗi loại của hệ thống
(Available), ma trận Allocation và ma trận Max.
Các tệp dữ liệu đầu vào phải có định dạng như sau:
- Tệp "Size_Available.txt": Dòng đầu tiên chứa hai số nguyên m và n,
tương ứng với số tiến trình và số loại tài nguyên của ma trận Allocation
và Max. Dòng thứ hai chứa n giá trị tài nguyên có sẵn của từng tiến trình
cách nhau bởi 1 dấu cách (Available).
- Tệp "Allocation.txt": Gồm m dịng mỗi dịng chứa thơng tin của 1 tiến
trình gồm n giá trị cách nhau bởi 1 dấu cách thể hiện số tài nguyên mỗi
loại đang được cấp phát.
- Tệp "Max.txt": Gồm m dịng mỗi dịng chứa thơng tin của 1 tiến trình
gồm n giá trị cách nhau bởi 1 dấu cách thể hiện số tài nguyên mỗi loại tối
đa được cấp phát cho tiến trình.
Sau khi đã chuẩn bị các tệp dữ liệu đầu vào bạn mở file "ThuatToan.exe" để
chạy chương trình. Kết quả của chương trình sẽ được in ra trên màn hình. Nếu
hệ thống an tồn, chương trình sẽ in ra một dãy các tiến trình được sắp xếp theo
thứ tự để chúng có thể hồn thành mà khơng gây ra bế tắc. Nếu hệ thống khơng
an tồn, chương trình sẽ in ra thơng báo "Day khong an toan"

19



Chương 4: Kết quả chương trình
4.1. Ví dụ hệ ở trạng thái an toàn
4.1.1. Input

- Size_Available.txt

- Allocation.txt

- Max.txt
20



×