久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

東南大學操作系統實驗報告--銀行家算法

時間:2019-05-14 13:44:46下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《東南大學操作系統實驗報告--銀行家算法》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《東南大學操作系統實驗報告--銀行家算法》。

第一篇:東南大學操作系統實驗報告--銀行家算法

操作系統實驗三:銀行家算法的實現

一、基本信息:

a)實驗題目:銀行家算法的實現 b)完成人姓名:韓璐璐 c)學號:71114115 d)報告日期:2016.5.27

二、實驗目的

通過實驗,加深對多實例資源分配系統中死鎖避免方法——銀行家算法的理解,掌握Windows環境下銀行家算法的實現方法,同時鞏固利用Windows API進行共享數據互斥訪問和多線程編程的方法。

三、實驗內容

1.在Windows操作系統上,利用Win32 API編寫多線程應用程序實現銀行家算法。

2.創建n個線程來申請或釋放資源,只有保證系統安全,才會批準資源申請。3.通過Win32 API提供的信號量機制,實現共享數據的并發訪問。

四、程序運行時的初值和運行結果(系統截圖)

五、源程序并附上注釋 #include #include #include #include using namespace std;int r[3] = { 3, 3, 2 };//系統擁有的資源 int r0 = 0, r1 = 0, r2 = 0;//記錄申請資源 class pcb { public: int id;bool state;int max[3];int alc[3];int need[3];

pcb(){ } void init(){

state = false;

cout << “請輸入進程的id,各個資源總需求量和已占用資源” << endl;

cin >> id;

cout << “a,b,c三種資源的最大使用量” << endl;

cin >> max[0] >> max[1] >> max[2];

cout << “a,b,c三種資源的已占有量” << endl;

cin >> alc[0] >> alc[1] >> alc[2];} int rd(int n){

return rand()%(n + 1);

} int request(){

// Sleep(1000);

r0 = rd(max[0]alc[1]);

r2 = rd(max[2]alc[0]))&& r1 ==(max[1]alc[2]))

{

r[0] = r[0] + alc[0];

r[1] = r[1] + alc[1];

r[2] = r[2] + alc[2];

return 1;

}

return 2;

} };bool safe(vector

temp, int i){ int u = r[0]r1, l = r[2]1;j++)

temp[j] = temp[j + 1];temp.pop_back();int size = temp.size();//記錄下容器內還有多少個進程

// int range[size];//記錄下隊列

int x = 0;//計數器

while(!temp.empty()){

static int j = 0;

if((temp[j].max[0]temp[j].alc[1])<= k &&

(temp[j].max[2]1;e++)

temp[e] = temp[e + 1];

temp.pop_back();

if(j >= temp.size())

j = 0;

}

else

{

j++;

if(j >= temp.size())

j = 0;

}

x++;

if(x ==(size*size))

{

cout << “沒有安全隊列,以上情況不成立” << endl;

cout << endl;

return false;

}

} return true;} int main(){ srand(time(0));pcb p[4];vector

vp;for(int i = 0;i<4;i++){

p[i].init();

vp.push_back(p[i]);} int x = 0;//計算器

int c;cout << “請選擇分配資源方法:1.銀行家算法 2.隨機算法” << endl;cin >> c;switch(c){ case 1:

while(!vp.empty())

{

int a;

static int i = 0;

if((a = vp[i].request())!= 0)

{

if(a == 1)

endl;

r[1] << “ c

{

cout << ”進程“ << vp[i].id << ”已經結束“ <<

for(int j = i;j

r[1] = r[1]r2;

cout << ”a資源還剩“ << r[0] << ” b資源還剩“ << r[1] << ” c資源還剩“ << r[2] << endl;

cout << endl;

}

i++;

if(i >= vp.size())

i = 0;

}

}

else

i++;

if(i >= vp.size())

i = 0;

x++;

if(x >= 200)

{

cout << ”初始化的表不安全“ << endl;

return 0;

}

}

cout << ”進程已經全部結束“ << endl;

break;case 2:

while(!vp.empty())

{

int a2;

static int i2 = 0;

if((a2 = vp[i2].request())!= 0)

{

if(a2 == 1)

{

cout << ”進程“ << vp[i2].id << ”已經結束“ << endl;

for(int j = i2;j

r[1] = r[1]r2;

cout << ”a資源還剩“ << r[0] << ” b資源還剩“ << r[1] << ” c資源還剩“ << r[2] << endl;

cout << endl;

i2++;

if(i2 >= vp.size())

i2 = 0;

}

}

else

i2++;

if(i2 >= vp.size())

i2 = 0;

x++;

if(x >= 200)

{

cout << ”產生死鎖“ << endl;

return 0;

}

}

cout << ”進程已經全部結束“ << endl;

break;default:

cout << ”選擇錯誤“ << endl;

break;

} system(”pause");return 1;}

要求:實驗報告以電子版的形式通過Email提交給助教,做到內容翔實、圖表清晰,層次分明,標題突出。

一班 助教老師:丁文江 Email:dingwj@seu.edu.cn 二班 助教老師:張潤環 Email:seu-zrh@seu.edu.cn 兩位助教老師工作地點:九龍湖校區計算機樓333房間

第二篇:操作系統銀行家算法實驗報告

實驗四

死鎖

一、實驗目的

當系統的總資源數m小于或等于所有進程對對資源的最大需求時,就可能產生 死鎖。死鎖會引起計算機系統的癱瘓。銀行家算法是在實現資源分配時避免死鎖的一個著名算法,該算法是在能確保系統處于安全狀態時才把資源分配給申請者。通過本實驗使學生能進一步理解死鎖的概念,并能選擇一個算法來避免死鎖。

二、實驗題目

系統中有m個同類資源被n個進程共享,每個進程對資源的最大需求數分別為S1, S2,…,Sn,且 Max(Si)<=m,(i=1,2,…n)。進程可以動態地申請資源和釋放資源。編寫一個程序,現銀行家算法,當系統將資源分配給某一進程而不會死鎖時,就分配之。否則,推遲分配,并顯示適當的信息。

三、數據結構

主要數據結構:

Struct aa { void Print();//用于打印輸出表格的函數 void Input();//用于輸入的函數

void tryfenpei(int i);//試分配函數 void refenpei(int i);//恢復數據函數 void checksafe(int s);//安全檢測函數 };

四、銀行家算法的流程圖 開始初始化資源類數c=3,進程數t=5初始化Available[c],Max[t][c],Allocation[t][c],Need[t][c],Request[c]輸入進程數iInt f=0f

五、源代碼

#include #include “stdio.h” const unsigned short c = 3;//資源類數 const unsigned short t = 5;//進程數

void Print();//用于打印輸出表格的函數 void Input();//用于輸入的函數

void tryfenpei(int i);//試分配函數 void refenpei(int i);//恢復數據函數 void checksafe(int s);//安全檢測函數

//定義初始化數組 int Available[c], Max[t][c], Allocation[t][c], Need[t][c], Request[c];

int in;//用戶選擇的進程號

int main(int argc, char *argv[]){ int i;char ch='Y';cout<<“初始化數據如下:”<>in){ if(in<0||in>4){ cout<<“不存在該進程,請重新輸入”<>Request[i]){ if(Request[i]<0)cout<<“錯誤!輸入的數字無效.”<Need[in][i])cout<<“錯誤!超出進程需求量”<Available[i])cout<<“錯誤!系統還沒有足夠的可用資源量滿足進程需要”<

cout<<“試分配完成!”<

cout<<“需要繼續實驗嗎?(y-繼續 n終止)”;} else if(ch=='N'||ch=='n'){ cout<<“感謝您的使用,祝您愉快!”<>ch);return 0;}

void Print(){ int i,j;cout<<“ 進程個數 : ”<0){ cout<<“ |”;} cout<

void Input(){ for(int j=0;j>Available[j]){ if(Available[j]<0)cout<<“輸入數字無效,請重新輸入”<

{ for(int m=0;m>Max[l][m]){ if(Max[l][m]<0)cout<<“輸入數字無效,請重新輸入”<>Allocation[l][m])if(Allocation[l][m]<0)cout<<“輸入數字無效,請重新輸入”<

void tryfenpei(int i){ for(int f=0;f

//安全檢測函數

void checksafe(int s){ int Work, flag, temp[t], i,j,l=0,k=0;bool Finish[t];for(i=0;i

} if(l==5)//一共有三類資源A B C,一條進程下面的安全性檢測只檢測了A類。如果A類通過了,那么還要判斷B類,C類。否則不用 { for(i=0;i

} i=s;//s傳遞進來賦給i,s是用戶輸入的進程號(有主函數里的in傳遞進來)while(i

if(Finish[i]==false&&Need[i][j]<=Work){ Work=Work+Allocation[i][j];Finish[i]=true;temp[k]=i;//cout<<“temp=”<”;cout<

六、執行結果:

七、實驗總結

通過本次實驗了解到用銀行家算法來預防死鎖是可靠的,但也是非常保守的,因為它限制了進程對資源的存取,從而降低了進程的并發運行程度。死鎖檢測并不限制進程對資源的申請,只要有,就分配,但這也可能造成死鎖。但由于死鎖并不是經常發生的,故大大提高了系統運行的效率。

總之,通過本實驗,使我進一步加深理解和掌握銀行家算法。

第三篇:操作系統銀行家算法(避免死鎖)實驗報告

操作系統實驗:銀行家算法

姓名:李天瑋

班級:軟工1101 實驗內容:

在windows系統中實現銀行家算法程序。

學號:201126630117 實現銀行家算法所用的數據結構:

假設有5個進程3類資源,則有如下數據結構: 1.MAX[5,3] 5個進程對3類資源的最大需求量。2.AVAILABLE[3]系統可用資源數。

3.ALLOCATION[5,3]5個進程已經得到3類資源的資源量。4.NEED[5,3]5個進程還需要3類資源的資源量。

銀行家算法:

設進程1提出請求Request[N],則銀行家算法按如下規則進行判斷。(1)如果Request[N]<=NEED[1,N],則轉(2);否則,出錯。(2)如果Request[N]<=AVALIABLE,則轉(3);否則,出錯。(3)系統試探非配資源,修改相關數據。

AVALIABLE=AVALIABLE-REQUEST ALLOCATION=ALLOCATION+REQUEST NEED=NEED-REQUEST(4)系統執行安全性檢查,如安全,則分配成立;否則試探險性分配作廢,系統恢復原狀,進程等待。

安全性檢查:

(1)設置兩個工作向量WORK=AVAILABLE;FINISH[M]=FALSE.(2)從晉城集合中找到一個滿足下述條件的進程,FINISH[i]=FALSE NEED<=WORK 如找到,執行(3);否則,執行(4)。

(3)設進程獲得資源,可順利執行,直至完成,從而釋放資源。

WORK=WORK+ALLOCATION FINISH[i]=TRUE GOTO(2)

(4)如所有進程FINISH[M]=TRUE,則表示安全;否則系統不安全。

1.用init()函數對于數據的初始化

關鍵代碼:

#define M 5 #define N 3

void init(){

cout<<“請輸入5個進程對3類資源最大資源需求量:”<

} cout<<“請輸入系統可用的資哩源數:”<

{ } cin>>AVAILABLE[j];for(int j=0;j>MAX[i][j];} //cout<

cout<<“請輸入5個進程已經-的到的3類資源的資源量:”<

for(int i=0;i

} cout<<“請?輸?入?5個?進?程ì還1需è要癮3類え?資哩?源′的?資哩?源′量?:”<

} for(int j=0;j>NEED[i][j];} //cout<>ALLOCATION[i][j];} //cout<

}// Stack around the variable 'AVAILABLE' was corrupted.顯示數據詳細信息

進行測試 輸入一號進程號,并給需要申請資源設定為{1,0,2}

檢驗錯誤輸入時候的報錯信息

檢驗當再次申請0號資源并申請資源數目為{0,2,0}時,系統提示系統不安全申請不成功。

每當驗證申請成功后會進行的修改操作:

if(flag=='Y'||flag=='y')//進?行D數簓據Y修T改?

{ changdata(i);

}

} if(chkerr(0)){

} else showdata();rstordata(i);showdata();else showdata();cout<>flag;退?出?演Y示?”;

第四篇:銀行家算法_實驗報告

課程設計報告

課程設計名稱 共享資源分配與銀行家算法

系(部)

專業班級

指導教師

年 月 日

、目

一、課程設計目的和意義...................................................................................3

二、方案設計及開發過程..............................................................................................3

1.課題設計背景.................................................................................................................3 2.算法描述

............................................................................................................................3 3.數據結構

............................................................................................................................4 4.主要函數說明.................................................................................................................4 5.算法流程圖......................................................................................................................5

三、調試記錄與分析

四、運行結果及說明

..............................................................................................6

1.執行結果.........................................................................................................................6 2.結果分析.........................................................................................................................7

五、課程設計總結...................................................................................................8

、一、程設計目的和意義

計算機科學與技術專業學生學習完《計算機操作系統》課程后,進行的一次全面的綜合訓練,其目的在于加深催操作系統基礎理論和基本知識的理解,加強學生的動手能力.銀行家算法是避免死鎖的一種重要方法。通過編寫一個模擬動態資源分配的銀行家算法程序,進一步深入理解死鎖、產生死鎖的必要條件、安全狀態等重要概念,并掌握避免死鎖的具體實施方法

二、方案設計及開發過程

1.課題設計背景

銀行家算法又稱“資源分配拒絕”法,其基本思想是,系統中的所有進程放入進程集合,在安全狀態下系統受到進程的請求后試探性的把資源分配給他,現在系統將剩下的資源和進程集合中其他進程還需要的資源數做比較,找出剩余資源能滿足最大需求量的進程,從而保證進程運行完成后還回全部資源。這時系統將該進程從進程集合中將其清除。此時系統中的資源就更多了。反復執行上面的步驟,最后檢查進程的集合為空時就表明本次申請可行,系統處于安全狀態,可以實施本次分配,否則,只要進程集合非空,系統便處于不安全狀態,本次不能分配給他。請進程等待

2.算法描述

1)如果Request[i] 是進程Pi的請求向量,如果Request[i,j]=K,表示進程Pi需要K個Rj類型的資源。當Pi發出資源請求后,系統按下述步驟進行檢查: 如果Requesti[j]<= Need[i,j],便轉向步驟2;否則認為出錯,因為它所需要的資源數已超過它所宣布的最大值。

2)如果Requesti[j]<=Available[j],便轉向步驟3,否則,表示尚無足夠資源,進程Pi須等待。

3)系統試探著把資源分配給進程Pi,并修改下面數據結構中的數值: Available[j]:=Available[j]-Requesti[j];Allocation[i,j]:=Allocation[i,j]+Requesti[j];Need[i,j]:=Need[i,j]-Requesti[j];

、4)系統執行安全性算法,檢查此次資源分配后,系統是否處于安全狀態。若安全,才正式將資源分配給進程Pi,以完成本次分配;否則,將本次的試探分配作廢,恢復原來的資源分配狀態,讓進程pi等待。

3.數據結構

1.可利用資源向量AVAILABLE。這是一個含有M個元素的數組,其中的每一個元素代表一類可利用的資源數目,其3初始值是系統中所配置的該類全部可哦那個資源的數目,其數值隨該類資源的分配和回收而動態的改變。

2.最大需求矩陣MAX。這是一個M*N的矩陣,它定義了系統中N個進程中的每一個進程對M類資源的最大需求。

3.分配矩陣ALLOCATION。這也是一個M*N的矩陣,它定義了系統中每一類資源當前已分配給每一進程的資源數。

4.需求矩陣NEED。這也是一個M*N的矩陣,用以表示每一個進程尚需的各類資源數。5.NEED[R,W]=MAX[R,W]-ALLOCATION[R,W]

4.主要函數說明

主要的常量變量

#define W 10 //最大進程數W=10 #define R 20 //最大資源總數R=20 int AVAILABLE[R];//可利用資源向量 int MAX[W][R];//最大需求矩陣 int ALLOCATION[W][R];//分配矩陣 int NEED[W][R];//需求矩陣 int Request[R];//進程請求向量

void changdata(int k);//進程請求資源數據改變 int chksec(int s);//系統安全性的檢測

主要模塊

void inputdata()void showdata()void changdata(int k)void restoredata(int k)int chksec(int s)int chkmax(int s)

、5.算法流程圖

三、調試記錄與分析

調試通過,程序未出錯

、四、運行結果及說明

1.執行結果

、2.結果分析

銀行家算法就是當接收到一個系統資源的分配后找到一個安全序列,使得進程間不會發生死鎖,若發生死鎖則讓進程等待。

、五、課程設計總結

通過本次銀行家算法實驗,加深了我對銀行家算法的了解,掌握了如何利用銀行家算法避免死鎖。實驗中遇到點問題,通過查閱資料、詢問老師順利解決。通過這次的實踐,使我的理論知識更加的牢固。

附錄

程序源碼:

#include using namespace std;#define FALSE 0 #define TRUE 1 #define W 10 //最大進程數W=10 #define R 20 //最大資源總數R=20 int M;int N;int ALL_RESOURCE[W];int AVAILABLE[R];//可利用資源向量 int MAX[W][R];//最大需求矩陣 int ALLOCATION[W][R];//分配矩陣 int NEED[W][R];//需求矩陣 int Request[R];//進程請求向量 void inputdata();//數據輸入 void showdata();//數據顯示

void changdata(int k);//進程請求資源數據改變 void restoredata(int k);//數據恢復 int chksec(int s);//系統安全性的檢測 int chkmax(int s);//檢測最大需求

void bank();//檢測分配的資源是否合理

int main(){ int i,j;inputdata();//安全性算法 for(i=0;i=M)

、cout<<“錯誤提示:經安全性檢查發現,系統的初始狀態不安全!!n”<

{

int i=0,j=0,p;cout<<“請輸入總進程數:”<>M;if(M>W)cout<W);cout<>N;if(N>R)cout<R);cout<>ALL_RESOURCE[i];cout<>MAX[i][j];if(MAX[i][j]>ALL_RESOURCE[j])cout<ALL_RESOURCE[j]);} } cout<

、for(j=0;j

do{ cin>>ALLOCATION[i][j];

if(ALLOCATION[i][j]>MAX[i][j])

cout<

}while(ALLOCATION[i][j]>MAX[i][j]);} } cout<

NEED[i][j]=MAX[i][j]-ALLOCATION[i][j];for(j=0;j

AVAILABLE[j]=0;} } }

void showdata()//銀行家算法

{ int i,j;cout<<“各種資源的總數量,即向量all_resource為:”<

cout<

、cout<

cout<

void changdata(int k)//進程請求資源數據改變

{ int j;for(j=0;j

AVAILABLE[j]=AVAILABLE[j]-Request[j];

ALLOCATION[k][j]=ALLOCATION[k][j]+Request[j];

NEED[k][j]=NEED[k][j]-Request[j];} }

void restoredata(int k)//數據恢復

{ int j;for(j=0;j

ALLOCATION[k][j]=ALLOCATION[k][j]-Request[j];

NEED[k][j]=NEED[k][j]+Request[j];} }

int chksec(int s)//系統安全性的檢測

{ int WORK,FINISH[W];int i,j,k=0;for(i=0;i

FINISH[i]=FALSE;for(j=0;j

WORK=AVAILABLE[j];

、i=s;do

{ if(FINISH[i]==FALSE&&NEED[i][j]<=WORK)

{

WORK=WORK+ALLOCATION[i][j];

FINISH[i]=TRUE;

i=0;

}else

{ i++;

}

}while(i

if(FINISH[i]==FALSE)

{ return 1;

} } return 0;}

int chkmax(int s)//檢測最大需求

{ int j,flag=0;for(j=0;j

if(MAX[s][j]==ALLOCATION[s][j])

{ flag=1;

AVAILABLE[j]=AVAILABLE[j]+MAX[s][j];

MAX[s][j]=0;

} } return flag;} void bank(){ int i=0,j=0;char flag='Y';while(flag=='Y'||flag=='y'){ i=-1;while(i<0||i>=M){ cout<<“請輸入需申請資源的進程號(從P0到P”<

cin>>i;if(i<0||i>=M)

、cout<<“輸入的進程號不存在,重新輸入!”<

cin>>Request[j];if(Request[j]>NEED[i][j])

{ cout<<“進程P”<

cout<<“申請不合理,出錯!請重新選擇!”<

flag='N';

break;

}

else

{ if(Request[j]>AVAILABLE[j])

{ cout<<“進程P”<

cout<<“申請不合理,出錯!請重新選擇!”<

flag='N';

break;

}

} } if(flag=='Y'||flag=='y'){ changdata(i);

if(chksec(i))

{ cout<

cout<<“該分配會導致系統不安全!!本次資源申請不成功,不予分配!!”<

cout<

restoredata(i);

}

else

{ cout<

cout<<“經安全性檢查,系統安全,本次分配成功,且資源分配狀況如下所示:”<

cout<

showdata();

if(chkmax(i))

{cout<<“在資源分配成功之后,由于該進程所需的某些資源的最大需求量已經滿足,”<

cout<<“因此在進程結束后系統將回收這些資源!”<

showdata();

、}

} } cout<>flag;}}

第五篇:銀行家算法實驗報告

計算機操作系統實驗報告

一、實驗名稱:銀行家算法

二、實驗目的:銀行家算法是避免死鎖的一種重要方法,通過編寫一個簡單的銀行家算法程序,加深了解有關資源申請、避免死鎖等概念,并體會和了解死鎖和避免死鎖的具體實施方法。

三、問題分析與設計:

1、算法思路:先對用戶提出的請求進行合法性檢查,即檢查請求是否大于需要的,是否大于可利用的。若請求合法,則進行預分配,對分配后的狀態調用安全性算法進行檢查。若安全,則分配;若不安全,則拒絕申請,恢復到原來的狀態,拒絕申請。

2、銀行家算法步驟:(1)如果Requesti<or =Need,則轉向步驟(2);否則,認為出錯,因為它所需要的資源數已超過它所宣布的最大值。

(2)如果Request<or=Available,則轉向步驟(3);否則,表示系統中尚無足夠的資源,進程必須等待。

(3)系統試探把要求的資源分配給進程Pi,并修改下面數據結構中的數值:

Available=Available-Request[i];Allocation=Allocation+Request;Need=Need-Request;(4)系統執行安全性算法,檢查此次資源分配后,系統是否處于安全狀態。

3、安全性算法步驟:

(1)設置兩個向量

①工作向量Work。它表示系統可提供進程繼續運行所需要的各類資源數目,執行安全算法開始時,Work=Allocation;②布爾向量Finish。它表示系統是否有足夠的資源分配給進程,使之運行完成,開始時先做Finish[i]=false,當有足夠資源分配給進程時,令Finish[i]=true。

(2)從進程集合中找到一個能滿足下述條件的進程:

①Finish[i]=false ②Need

(3)當進程P獲得資源后,可順利執行,直至完成,并釋放出分配給它的資源,故應執行:

Work=Work+Allocation;Finish[i]=true;轉向步驟(2)。

(4)如果所有進程的Finish[i]=true,則表示系統處于安全狀態;否則,系統處于不安全狀態。

4、流程圖: 系統主要過程流程圖

銀行家算法流程圖

安全性算法流程圖

四、實驗代碼:

//#define M 5 //#define N 3 #include //本實驗中使用到的庫函數 #include #include int max[5][1];//開始定義銀行家算法中需要用到的數據 int allocation[5][1];int need[5][1];int available[1];int request[5][1];char *finish[5];int safe[5];int n,i,m;int k=0;int j=0;int work[1];int works[5][1];

void line()//美化程序,使程序運行時更加明朗美觀 { printf(“-----------------n”);} void start()//表示銀行家算法開始 { line();printf(“ 銀行家算法開始n”);printf(“--死鎖避免方法 line();} void end()//表示銀行家算法結束 { line();printf(” 銀行家算法結束,謝謝使用n“);line();} void input()//輸入銀行家算法起始各項數據 {

for(n=0;n<5;n++)

{

printf(”請輸入進程P%d的相關信息:n“,n);

printf(”Max:“);

for(m=0;m<1;m++)

scanf(”%d“,&max[n][m]);

printf(”Allocation:“);

for(m=0;m<1;m++)

scanf(”%d“,&allocation[n][m]);

n”);

}

for(m=0;m<1;m++)

need[n][m]=max[n][m]-allocation[n][m];printf(“請輸入系統可利用資源數Available:”);for(m=0;m<1;m++)

} void output()//輸出系統現有資源情況 { line();printf(“資源情況 Max Allocation Need Availablen”);printf(“進程 A A A A n”);line();for(n=0;n<5;n++){ printf(“P%d%3d%3d%3d”,n,max[n][0],allocation[n][0],need[n][0]);

} line();}

void change()//當Request[i,j]<=Available[j]時,系統把資源分配給進程P[i],Available[j]和Need[i,j]發生改變

{ for(m=0;m<1;m++){ if(n==0)else

printf(“n”);

printf(“%3d%3dn”,available[0]);scanf(“%d”,&available[m]);

} } available[m]-=request[i][m];allocation[i][m]+=request[i][m];need[i][m]-=request[i][m];void outputsafe()//輸出安全序列的資源分配表 { printf(“該安全序列的資源分配圖如下:n”);line();printf(“資源情況 Work Need Allocation Work+Allocation Finishn”);printf(“進程 A A A A n”);line();for(n=0;n<5;n++)

printf(“P%d%9d%3d%3d%5d%12sn”,safe[n],works[safe[n]][0],need[safe[n]][0],allocation[safe[n]][0],works[safe[n]][0]+allocation[safe[n]][0],finish[n]);line();} int check()//安全性算法 { printf(“開始執行安全性算法……n”);for(m=0;m<1;m++)//數組work和finish初始化

work[m]=available[m];for(n=0;n<5;n++){

} finish[n]=“false”;safe[n]=0;k=0;for(m=0;m<5;m++)for(n=0;n<5;n++)

if(strcmp(finish[n],“false”)==0 && need[n][0]<=work[0])//查找可以分配資源但尚未分配到資源的進程

{

safe[k]=n;//以數組safe[k]記下各個進程得到

分配的資源的順序

works[safe[k]][0]=work[0];

放出分配給它的資源

work[0]+=allocation[n][0];//進程執行后釋

finish[n]=“ture”;//finish[n]變為1以示該進

程完成本次分

}

k++;for(m=0;m<5;m++)//判斷是否所有進程分配資源完成{

0

素都為ture } else

if(m==4)//此處m=4表示所有數組finish的所有元if(strcmp(finish[m],“false”)==0){

printf(“找不到安全序列,系統處于不安全狀態。n”);return 0;//找不到安全序列,結束check函數,返回 {

printf(“找到安全序列P%d->P%d->P%d->P%d->P%d,系統是安全的n”,safe[0],safe[1],safe[2],safe[3],safe[4]);

} return 1;} void main()//主程序開始 { start();for(;j==0;)//確認輸入數據的正確性,若輸入錯誤,重新輸入

{

入:“);

} printf(”數據確認無誤,算法繼續。n“);if(check()==0)//若check函數返回值為0,表示輸入的初始數據找不到安全序列,無法進行下一步,程序結束

{

} for(;j==1;)//當有多個進程請求資源時,循環開始

{

printf(”請輸入請求資源的進程i(0、1、2、3、4):“);//輸入發出請求向量的進程及請求向量 end();exit(0);input();printf(”以下為進程資源情況,請確認其是否正確:n“);output();printf(”數據是否無誤:n正確:輸入1n錯誤:輸入0n請輸

}

j=1;

outputsafe();//輸出安全序列的資源分配表

scanf(“%d”,&j);

scanf(“%d”,&i);printf(“請輸入進程P%d的請求向量Request%d:”,i,i);for(n=0;n<1;n++)

scanf(“%d”,&request[i][n]);

for(;request[i][0]>need[i][0];)//若請求向量大于需求資源,則認為是輸入錯誤,要求重新輸入

{

printf(“數據輸入有誤,請重試!n請輸入進程P%d的請求向量Request%d:”,i,i);

提供分配

n“,i);

} if(request[i][0]<=available[0])//判斷系統是否有足夠資源

for(n=0;n<1;n++)

scanf(”%d“,&request[i][n]);{

} else

printf(”系統沒有足夠的資源,進程P%d需要等待。printf(“系統正在為進程P%d分配資源……n”,i);change();//分配資源 j=0;if(j==0)//j=0表示系統有足夠資源分配的情況 {

printf(“當前系統資源情況如下:n”);//輸出分配資源后的系統資源分配情況

分配無效

output();

if(check()==0)//若找不到安全系列,則之前的資源 {

printf(“本次資源分配作廢,恢復原來的資源分配

狀態。n”);

資源狀態

輸入:“);

for(m=0;m<1;m++)//恢復分配資源前的系統

}

}

{

}

output();//輸出系統資源狀態

available[m]+=request[i][m];allocation[i][m]-=request[i][m];need[i][m]+=request[i][m];printf(”是否還有進程請求資源?n是:輸入1n否:輸入0n請

scanf(“%d”,&j);//若還有進程請求資源,j=1,之前的for循環條件滿足

} end();}

五、程序執行結果:

六、實驗總結

多個進程同時運行時,系統根據各類系統資源的最大需求和各類系統的剩余資源為進程安排安全序列,使得系統能快速且安全地運行進程,不至發生死鎖。銀行家算法是避免死鎖的主要方法,其思路在很多方面都非常值得我們來學習借鑒。

下載東南大學操作系統實驗報告--銀行家算法word格式文檔
下載東南大學操作系統實驗報告--銀行家算法.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    銀行家算法實驗報告

    計算機操作系統實驗報告 何美西109253030212 一、 實驗名稱:銀行家算法 二、 實驗目的:銀行家算法是避免死鎖的一種重要方法,通過編寫一個簡單的銀行家算法程序,加深了解有關資......

    操作系統課程設計實驗報告-用C++實現銀行家算法

    操 作 系 統 實 驗 報 告 (2) 學院:計算機科學與技術學院 班級:計091 學號:姓名: 時間:2011/12/30 目 錄 1. 實驗名稱……………………………………………………3 2. 實驗目的…......

    死鎖_銀行家算法實驗報告

    實驗目的 銀行家算法是避免死鎖的一種重要方法。通過編寫一個模擬動態資源分配的銀行家算法程序,進一步深入理解死鎖、產生死鎖的必要條件、安全狀態等重要概念,并掌握避免死......

    銀行家算法《操作系統》課程設計報告

    《操作系統》課程設計報告課題:銀行家算法專業計算機科學與技術學生姓名班級計算機學號指導教師信息工程學院一、實驗要求和實驗目的實驗目的:本課程設計是學生學習完《操作系......

    操作系統實驗報告-利用銀行家算法避免死鎖(推薦五篇)

    計算機操作系統實驗報告 題 目 利用銀行家算法避免死鎖一、 實驗目的: 1、加深了解有關資源申請、避免死鎖等概念,并體會和了解死鎖和避免死鎖的具體實施方法。 2、要求編寫和......

    操作系統實驗報告(clock算法)

    實驗四 頁面置換算法 一、實驗目的 本實驗主要對操作系統中請求分頁式內存管理及其應用的一些關鍵算法進行模擬。學生通過設計與實現Clock算法,能夠加強對相應理論的理解,并對......

    銀行家算法實驗報告[推薦閱讀]

    實驗三 銀行家算法 (1)死鎖產生的原因和必要條件是什么? 原因: a) 系統資源不足; b) 進程運行推進的順序不合適; c) 資源分配不當。 如果系統資源充足,進程的資源請求都能夠得到滿......

    計算機操作系統 課程設計報告 銀行家算法

    《計算機操作系統》 課 程 設 計 報 告 題 目: 銀行家算法班 級: XXXXXXXXXXXXXXXX 姓 名: XXM 學 號: XXXXXXXXXXXX 指導老師: XXXXXXXXXXXXXX 設計時間: XXXXXXXXXXXXXXX......

主站蜘蛛池模板: 欧美性性性性性色大片免费的| 97一区二区国产好的精华液| 国产偷窥真人视频在线观看| 99re视频热这里只有精品38| 国产亚洲欧美日韩在线三区| 亚洲一区日韩高清中文字幕亚洲| 国产无套精品一区二区| 欧美国产成人精品一区二区三区| 精品一区二区久久久久久久网站| 久久久久青草线蕉综合| 青草内射中出高潮| 在线观看成人无码中文av天堂| 亚洲精品久久久久久久久久久捆绑| 国产性色av高清在线观看| 亚洲精品一区二区三区不卡| 久久久久久人妻精品一区二区三区| 中文字幕无线乱码人妻| 亚洲av无码专区青青草原| 久久久国产精品无码一区二区| 无码国产福利av私拍| 亚洲欧美综合成人五月天网站| 三个男吃我奶头一边一个视频| 野花香社区在线观看| 国产av国片偷人妻麻豆| 亚洲精品综合一区二区三区在线| 高清一区二区三区免费视频| 亚洲精品亚洲人成人网| 亚洲欧美熟妇综合久久久久| 久久久久无码精品国产app| 老鲁夜夜老鲁| 久久亚洲国产成人精品无码区| 在线亚洲精品国产成人av剧情| 人妻无码中文字幕免费视频蜜桃| 国产午夜影视大全免费观看| 高清国产精品人妻一区二区| 内射中出无码护士在线| 女性女同性aⅴ免费观女性恋| 人妻体体内射精一区二区| 日本少妇???喂切| 少妇系列之白嫩人妻| 国产区精品系列在线观看|