Nội dung của đề tài gồm: Giới thiệu chung. Sơ lược sự an toàn hệ thống. Thuật toán kiểm tra tính an toàn của hệ thống. Bài code của thuật toán. Ví dụ minh họa. Hệ điều hành là một môn học góp phần cung cấp những nội dung kiến thức chung nhất về hệ điều hành máy tính, nó giúp người học nắm bắt được những nguyên lý cơ bản và những nguyên tắc làm việc của một hệ điều hành máy tính tổng quát. Từ đó có thể áp dụng để làm việc tốt với các hệ điều hành cụ thể trên thực tế, hình dung được xu hướng phát triển của những hệ điều hành mới trong tương lai. Để phục vụ cho học tập nhóm chúng tôi đã nhận đề tài : ”Lập trình mô phỏng kiểm tra tính an toàn hệ thống”. Nhằm giúp các bạn hiểu được về cách kiểm tra tiến trình an toàn trong hệ điều hành cũng như việc phân bổ tài nguyên cho các tiến trình. Mặc dù nhóm chúng tôi đã giành thời gian tìm kiếm tài liệu và làm bài nhưng không tránh khỏi còn thiếu sót, mong thầy góp ý để bài tập lớn của chúng em được đầy đủ hơn.
Trang 1BỘ CÔNG THƯƠNG TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP LỚN
MÔN HỌC: NGUYÊN LÝ HỆ ĐIỂU HÀNH
Đề tài: Lập trình mô phỏng kiểm tra tính an toàn
của hệ thống
Nhóm sinh viên thực hiện: Nhóm 17 Lớp: Hệ Thống Thông Tin - K6
HÀ NỘI -2012 LỜI NÓI ĐẦU
Đề tài: Lập trình mô phỏng kiểm tra tính an toàn của hệ thống
Trang 2Nội dung của đề tài gồm:
- Giới thiệu chung
- Sơ lược sự an toàn hệ thống
- Thuật toán kiểm tra tính an toàn của hệ thống
- Bài code của thuật toán
- Ví dụ minh họa
Hệ điều hành là một môn học góp phần cung cấp những nội dung kiến thức chung nhất về hệ điều hành máy tính, nó giúp người học nắm bắt được những nguyên lý cơ bản và những nguyên tắc làm việc của một hệ điều hành máy tính tổng quát Từ đó có thể áp dụng để làm việc tốt với các hệ điều hành cụ thể trên thực tế, hình dung được
xu hướng phát triển của những hệ điều hành mới trong tương lai
Để phục vụ cho học tập nhóm chúng tôi đã nhận đề tài : ”Lập trình mô phỏng kiểm tra tính an toàn hệ thống” Nhằm giúp các bạn hiểu được về cách kiểm tra tiến trình an toàn trong hệ điều hành cũng như việc phân bổ tài nguyên cho các tiến trình
Mặc dù nhóm chúng tôi đã giành thời gian tìm kiếm tài liệu và làm bài nhưng không tránh khỏi còn thiếu sót, mong thầy góp ý để bài tập lớn của chúng em được đầy đủ hơn
Xin chân thành cảm ơn!
1 GIỚI THIỆU CHUNG
Trang 3Phần mềm mô phỏng kiểm tra tính an toàn hệ thống được thiết kế dựa trên các thuật toán chuyển hệ sang trạng thái an toàn và thuật toán kiểm tra tính an toàn của hệ điều hành
Được lập trình bằng ngôn ngữ C++
2 SƠ LƯỢC VỀ SỰ AN TOÀN HỆ THỐNG
2.1.Bế tắc(deadlock)
Trong môi trường đa chương, nhiều tiến trình có thể cạnh tranh một số giới hạn tài nguyên Một tiến trình tài nguyên, nếu tài nguyên không sẵn dùng tại thời điểm đó, tiến trình đi vào trạng thái chờ Tiến trình chờ có thể không bao giờ chuyển trạng thái trở lại vì tài nguyên chúng yêu cầu bị giữ bởi những tiến trình đang chờ khác Trong trường hợp này được gọi là deadlock (bế tắc)
Điều kiện xảy ra bế tắc khi và chỉ khi có các điều kiện sau trong hệ thống: có tài nguyên “găng”, có hiên tượng giữ và đợi, không có hệ thống phân phối lại tài nguyên, có hiện tượng chờ đợi vòng tròn
Phòng chống bế tắc: Áp dụng các biện pháp để hệ thống không rơi vào trạng thái bế tắc Áp dụng các biện pháp kiểm tra xem tiến trình có rơi vào bế tắc hay không, nếu có thông báo trước khi xảy ra và tìm cách giải quyết
2.2.Tránh bế tắc và an toàn hệ thống
2.2.1.Tránh bế tắc
Mỗi khi phân bổ tài nguyên cho các tiến trình, hệ thống sẽ kiểm tra xem liệu 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ó tìm cách giải quyết trước khi bế tắc xảy ra
2.2.2 Khái niệm dãy tiến trình an toàn
Cho 1 dãy tiến trình P1, P2, P3, …, Pn song hành Dãy tiến trình gọi là an toàn (safe process) nếu với mọi tiến trình Pi, tài nguyên mà Pi cần có đượ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’<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 dãy an toàn
Ví dụ:
Trang 4Tiến trình Max Need Current Need
Là một dãy an toàn
3 THUẬT TOÁN KIỂM TRA TÍNH AN TOÀN CỦA HỆ THỐNG
3.1.Thuật toán chuyển 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:
- Available : mảng 1x m thể hiện số tài nguyên có thể sử dụng của mỗi kiểu Nếu
- Max: mảng n x 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
cực đại là k
- Allocation: mảng n x m thể hiện số tài nguyên mỗi kiểu hiện đã phân bổ cho
- Need: mảng n x m thể hiện số tài nguyên còn cần của mỗi tiến trình
Need(i,j)=Max(i,j) – Allocation(i,j)
- Request: Mảng n x m thể hiện yêu cầu tài nguyên của các tiến trình
sau:
Else Error;
Step 3: Hệ thống dự định phân bổ tài nguyên
Trang 5Avaiable i = Avaiable i – Request i
Step 4: kiểm tra hệ có ở trạng thái an toàn hay không
Nếu có phân bổ tài nguyên theo dự tính
3.2.Thuật toán kiểm tra tính an toàn hệ thống
Trong thuật toán này ta sử dụng thêm 2 cấu trúc dữ liệu
- Work : Mảng 1x m thể hiện số tài nguyên khả dụng của hệ thống và số tài
- Finish : Mảng 1x n đánh dấu các tiến trình đã xét
Thuật toán:
Step 1: khởi tạo
Work: = Avaiable Finish [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, goto Step 4;
Step 3: Work:=Work+ Allocation(i);
Finish(i):=true;
Step 4: Nếu Finish(i)=true với mọi i thì hệ thống ở trạng thái an toàn, ngược lại
hệ thống gặp bế tắc
3.3.Bài code của thuật toán
#include<conio.h>
#include<iostream.h>
#include<stdio.h>
#include<string.h>
void main()
{
clrscr();
int allocation[50][50];
Trang 6int max[50][50];
int need[50][50];
int available[50];
int work[50];
char* finish[20];
int tientrinh[20];
int n,m,i,j,d1,d2, check;
cout<<"Nhap so kieu tai nguyen m= "; cin>>m; cout<<"Nhap Allocation:";
for(i=0; i<n; i++)
for(j=0; j<m; j++)
{
gotoxy(10+3*j, 4+i);
cin>>allocation[i][j];
}
cout<<"Nhap Max: ";
for(i=0; i<n; i++)
for(j=0; j<m; j++)
{
gotoxy(10+3*j,10+i);
cin>>max[i][j];
}
cout<<"Nhap Available: ";
for(j=0; j<m; j++)
{
gotoxy(10+3*j,16);
cin>>available[j];
}
cout<<"So tai nguyen ma tien trinh can: "; for (i=0; i<n; i++)
Trang 7for (j=0; j<m; j++)
}
}
for (i=0;i<n; i++)
for (j=0; j<m; j++)
{
gotoxy(10+3*j,19+i);
cout<<need[i][j];
}
for(i=0; i<n; i++)
finish[i]="false";
for (j=0; j<m; j++)
work[j]=available[j];
i=0; j=0;
do
{
if(finish[i]=="false" && need[i][j]<=work[j]) {
for(d1=0; d1<n; d1++) {
for(d2=0; d2<m; d2++) work[d1]=work[d2]+ allocation[d1][d2]; finish[i]="true";
} j++;
}
if (i=n) i=tientrinh[i];
}
Trang 8cout<<"\nHe o trang thai an toan\n";
cout<<"Day tien trinh an toan:\n";
for(i=0; i<n; i++)
cout<<"P"<<tientrinh[i]<<",\t";
getch();
}
3.4 Ví d minh h a ụ minh họa ọa
Cho m t dãy ti n trình và 4 ki u tài nguyên đột dãy tiến trình và 4 kiểu tài nguyên được phân bổ như sau: ến trình và 4 kiểu tài nguyên được phân bổ như sau: ểu tài nguyên được phân bổ như sau: ược phân bổ như sau:c phân b nh sau:ổ như sau: ư
Process Allocation Max Available
A B C D A B C D A B C D
P0 0 0 1 2 0 0 1 2 1 5 2 0
P1 1 0 0 0 1 7 5 0
P2 1 3 5 4 2 3 5 6
P3 0 6 3 2 0 6 5 2
P4 0 0 1 4 0 6 5 6
- Tính s tài nguyên mà ti n trình còn c n?ố tài nguyên mà tiến trình còn cần? ến trình và 4 kiểu tài nguyên được phân bổ như sau: ần? - H có tr ng thái an toàn hay không?ệ có ở trạng thái an toàn hay không? ở trạng thái an toàn hay không? ạng thái an toàn hay không? Bài làm: - S tài nguyên mà các ti n trình còn c n Need:ố tài nguyên mà tiến trình còn cần? ến trình và 4 kiểu tài nguyên được phân bổ như sau: ần? Need[i][j] = Max[i][j] – Allocation[i][j] Process Need A B C D P0 0 0 0 0
P1 0 7 5 0
P2 1 0 0 2
P3 0 0 2 0
P4 0 6 4 2
Trang 9- Ki m tra tính an toàn c a hểu tài nguyên được phân bổ như sau: ủa hệ ệ có ở trạng thái an toàn hay không?
Work = Available = (1,5,2,0);
Xét P0:
Finish[0]=false và Need[0] <= Work
Work=Work+Allocation[0]=(1,5,3,2);
Finish[0]=true;
Xét P1:
Finish[1] = false và Need[1] <= Work
→ P1 chờ
Xét P2:
Finish[2] = false và Need[2] <= Work
Work = Work+Allocation[2]=(2,8,8,6);
Finish[2] = true;
Xét P3:
Finish[3] = false và Need[3] <= Work
Finish[3]=true;
Xét P4:
Work=Work+Allocation[4]=(2,14,12,12);
Finish[4]=true;
Xét P1:
Trang 10Finish[1]=true;
Finish[i]= true v i m i iới i=0,1,2,3,4); ọi i
→ H th ng tr ng thái an toàn v i th t các ti n trình (P0, P2, P3, P4,ệ có ở trạng thái an toàn hay không? ố tài nguyên mà tiến trình còn cần? ở trạng thái an toàn hay không? ạng thái an toàn hay không? ới i=0,1,2,3,4); ứ tự các tiến trình (P0, P2, P3, P4, ự các tiến trình (P0, P2, P3, P4, ến trình và 4 kiểu tài nguyên được phân bổ như sau: P1)
Trang 11Tài liệu tham khảo
Giáo trình : Nguyên lý hệ điều hành – giảng viên –Ts.Nguyễn tuấn Tú Giáo trình : Kỹ thuật lập trình C++ – GS.TS.Phạm Văn ẤT
http://www.microsoft.com
http://en.wikipedia.org
Trang 12MỤC LỤC
L i nói đ u ờ ần? 2
1.Giới thiệu chung 3
2.Sơ lược về sự an toàn hệ thống 3
2.1.Bế tắc(deadlock) 3
2.2.Tránh bế tắc và an toàn hệ thống 3
2.2.1.Tránh bế tắc 3
2.2.2 Khái niệm dãy tiến trình an toàn 3
3.Thuật toán kiểm tra tính an toàn hệ thống 4
3.1.Thuật toán chuyển sang trạng thái an toàn 4
3.2.Thuật toán kiểm tra tính an toàn hệ thống 5
3.3.Bài code của thuật toán 5
3.4.Ví d minh h aụ minh họa ọi i 8
Tài li u tham kh o ệ có ở trạng thái an toàn hay không? ảo .11