

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 《操作系統(tǒng)--銀行家算法》</p><p><b> 課程設(shè)計報告</b></p><p> 姓 名: </p><p> 學(xué) 號: </p><p> 班 級:05計科12班
2、 </p><p> 專 業(yè):計算機科學(xué)與技術(shù) </p><p><b> 目 錄</b></p><p> 1 課程設(shè)計目的 …………………………………………………… 1</p><p> 2 課程設(shè)計的要求 ………………………………………………… 1</p>
3、<p> 3 課程設(shè)計題目描述 ……………………………………………… 2</p><p> 4 課程設(shè)計之銀行家算法原理 …………………………………… 2</p><p> 5 源程序結(jié)構(gòu)分析及代碼實現(xiàn) …………………………………… 4</p><p> 6 課程設(shè)計總結(jié) …………………………………………………… 25</p>&l
4、t;p><b> 一、課程設(shè)計的目的</b></p><p> 操作系統(tǒng)是計算機系統(tǒng)的核心系統(tǒng)軟件,它負(fù)責(zé)控制和管理整個系統(tǒng)的資源并組織用戶協(xié)調(diào)使用這些資源,使計算機高效的工作?!恫僮飨到y(tǒng)課程設(shè)計》是《操作系統(tǒng)》理論課的必要補充,是復(fù)習(xí)和檢驗所學(xué)課程的重要手段,本課程設(shè)計的目的是綜合應(yīng)用學(xué)生所學(xué)知識,通過實驗環(huán)節(jié),加深學(xué)生對操作系統(tǒng)基本原理和工作過程的理解,提高學(xué)生獨立分析問題、解
5、決問題的能力,增強學(xué)生的動手能力。</p><p><b> 二、課程設(shè)計的要求</b></p><p> 1.分析設(shè)計內(nèi)容,給出解決方案(要說明設(shè)計實現(xiàn)的原理,采用的數(shù)據(jù)結(jié)構(gòu))。</p><p> 2.畫出程序的基本結(jié)構(gòu)框圖和流程圖。</p><p> 3.對程序的每一部分要有詳細(xì)的設(shè)計分析說明。</p&
6、gt;<p> 4.源代碼格式要規(guī)范。</p><p> 5.設(shè)計合適的測試用例,對得到的運行結(jié)果要有分析。</p><p> 6.設(shè)計中遇到的問題,設(shè)計的心得體會。</p><p> 7.按期提交完整的程序代碼、可執(zhí)行程序和課程設(shè)計報告。</p><p> 三、課程設(shè)計題目描述 </p><p&
7、gt; 銀行家算法是一種最有代表性的避免死鎖的算法?! ∫忉屻y行家算法,必須先解釋操作系統(tǒng)安全狀態(tài)和不安全狀態(tài)?! “踩珷顟B(tài):如果存在一個由系統(tǒng)中所有進(jìn)程構(gòu)成的安全序列P1,…,Pn,則系統(tǒng)處于安全狀態(tài)。安全狀態(tài)一定是沒有死鎖發(fā)生?! 〔话踩珷顟B(tài):不存在一個安全序列。不安全狀態(tài)不一定導(dǎo)致死鎖。 那么什么是安全序列呢? 安全序列:一個進(jìn)程序列{P1,…,Pn}是安全的,如果對于每一個進(jìn)程Pi(1≤i≤n),它以后尚需要的
8、資源量不超過系統(tǒng)當(dāng)前剩余資源量與所有進(jìn)程Pj (j < i )當(dāng)前占有資源量之和。 銀行家算法: 我們可以把操作系統(tǒng)看作是銀行家,操作系統(tǒng)管理的資源相當(dāng)于銀行家管理的資金,進(jìn)程向操作系統(tǒng)請求分配資源相當(dāng)于用戶向銀行家貸款。操作系統(tǒng)按照銀行家制定的規(guī)則為進(jìn)程分配資源,當(dāng)進(jìn)程首次申請資源時,要測試該進(jìn)程對資源的最大需求量,如果系統(tǒng)現(xiàn)存的資源可以滿足它的最大需求量則按當(dāng)前的申請量分配資源,否則就推遲分配。當(dāng)進(jìn)程在執(zhí)行中繼續(xù)申請資
9、源時,先測試該進(jìn)程已占用的資源數(shù)與本次申請的資源數(shù)之和是否超過了該進(jìn)程對資源的最大需求量。若超過則拒絕分配資源,若沒有超過則再測試系統(tǒng)現(xiàn)</p><p> 課程設(shè)計之銀行家算法原理</p><p> 1.銀行家算法的思路</p><p> 先對用戶提出的請求進(jìn)行合法性檢查,即檢查請求的是不大于需要的,是否不大于可利用的。若請求合法,則進(jìn)行試分配。最后對試分配后
10、的狀態(tài)調(diào)用安全性檢查算法進(jìn)行安全性檢查。若安全,則分配,否則,不分配,恢復(fù)原來狀態(tài),拒絕申請。</p><p> 2.銀行家算法中用到的主要數(shù)據(jù)結(jié)構(gòu)</p><p> 可利用資源向量 int Available[j] j為資源的種類。</p><p> 最大需求矩陣 int Max[i][j] i為進(jìn)程的數(shù)量。</p>
11、<p> 分配矩陣 int Allocation[i][j] </p><p> 需求矩陣 int need[i][j]= Max[i][j]- Allocation[i][j]</p><p> 申請各類資源數(shù)量 int Request i[j] i進(jìn)程申請j資源的數(shù)量</p><p> 工作向量
12、 int Work[x] int Finish[y] </p><p> 3.銀行家算法bank()</p><p> 進(jìn)程i發(fā)出請求申請k個j資源,Request i[j]=k </p><p> (1)檢查申請量是否不大于需求量:Request i[j]<=need[i,j],若條件不符重新輸入,不允許申請大于需求量。</p&
13、gt;<p> (2)檢查申請量是否小于系統(tǒng)中的可利用資源數(shù)量:Request i[j]<=available[i,j],若條件不符就申請失敗,阻塞該進(jìn)程,用goto語句跳轉(zhuǎn)到重新申請資源。</p><p> (3)若以上兩個條件都滿足,則系統(tǒng)試探著將資源分配給申請的進(jìn)程,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:</p><p> Available[i,j]= Availa
14、ble[i,j]- Request i[j];</p><p> Allocation[i][j]= Allocation[i][j]+ Request i[j];</p><p> need[i][j]= need[i][j]- Request i[j];</p><p> (4)試分配后,執(zhí)行安全性檢查,調(diào)用safe()函數(shù)檢查此次資源分配后系統(tǒng)是否處于安
15、全狀態(tài)。若安全,才正式將資源分配給進(jìn)程;否則本次試探分配作廢,恢復(fù)原來的資源分配狀態(tài),讓該進(jìn)程等待。</p><p> (5)用do{…}while 循環(huán)語句實現(xiàn)輸入字符y/n判斷是否繼續(xù)進(jìn)行資源申請。</p><p> 4.安全性檢查算法(safe()函數(shù))</p><p> (1)設(shè)置兩個向量:</p><p> 工作向量Work
16、,它表示系統(tǒng)可提供給進(jìn)程繼續(xù)運行所需的各類資源數(shù)目,在執(zhí)行安全性算法開始時,Work= Available。</p><p> Finish,它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運行完成。開始時先做Finish[i]=0;當(dāng)有足夠的資源分配給進(jìn)程時,再令Finish[i]=1。</p><p> (2)在進(jìn)程中查找符合以下條件的進(jìn)程:</p><p>
17、條件1:Finish[i]=0;</p><p> 條件2:need[i][j]<=Work[j]</p><p> 若找到,則執(zhí)行步驟(3)否則,執(zhí)行步驟(4)</p><p> (3)當(dāng)進(jìn)程獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:</p><p> Work[j]= Work[j]+ Alloca
18、tion[i][j];</p><p> Finish[i]=1;</p><p> goto step 2;</p><p> (4)如果所有的Finish[i]=1都滿足,則表示系統(tǒng)處于安全狀態(tài),否則,處于不安全狀態(tài)。</p><p> 五、源程序結(jié)構(gòu)分析及代碼實現(xiàn)</p><p><b> 1
19、.程序結(jié)構(gòu)</b></p><p> 程序共有以下五個部分:</p><p> .初始化chushihua():用于程序開始進(jìn)行初始化輸入數(shù)據(jù):進(jìn)程數(shù)量、資源種類、各種資源可利用數(shù)量、各進(jìn)程的各種資源已分配數(shù)量、各進(jìn)程對各類資源最大需求數(shù)等。</p><p> (2).當(dāng)前安全性檢查safe():用于判斷當(dāng)前狀態(tài)安全性,根據(jù)不同地方的調(diào)用提示處理不
20、同。</p><p> (3).銀行家算法bank():進(jìn)行銀行家算法模擬實現(xiàn)的模塊,調(diào)用其他各個模塊進(jìn)行銀行家算法模擬過程。</p><p> (4).顯示當(dāng)前狀態(tài)show():顯示當(dāng)前資源分配詳細(xì)情況,包括:各種資源的總數(shù)量(all)、系統(tǒng)目前各種資源可用的數(shù)量、各進(jìn)程已經(jīng)得到的資源數(shù)量、各進(jìn)程還需要的資源量。</p><p> (5).主程序main()
21、</p><p> 逐個調(diào)用初始化、顯示狀態(tài)、安全性檢查、銀行家算法函數(shù),使程序有序的進(jìn)行。</p><p><b> 2.?dāng)?shù)據(jù)結(jié)構(gòu)</b></p><p> 程序使用的全局變量:</p><p> const int x=10,y=10; //定義常量</p><p> int Av
22、ailable[x]; //各種資源可利用的數(shù)量</p><p> int Allocation[y][y]; //各進(jìn)程當(dāng)前已分配的資源數(shù)量</p><p> int Max[y][y]; //各進(jìn)程對各類資源的最大需求數(shù)</p><p> int Need[y][y]; //還需求矩陣</p>&
23、lt;p> int Request[x]; //申請各類資源的數(shù)量</p><p> int Work[x]; //工作向量,表系統(tǒng)可提供給進(jìn)程運行所需各類資源數(shù)量</p><p> int Finish[y]; //表系統(tǒng)是否有足夠的資源分配給進(jìn)程,0為否,1為是</p><p> int p[y]; //存儲安全
24、序列</p><p> int i,j; //全局變量,主要用于循環(huán)語句中</p><p> int n,m; //n為進(jìn)程的數(shù)量,m為資源種類數(shù)</p><p> int l=0,counter=0;</p><p><b> 3.函數(shù)聲明</b></p><p>
25、; void chushihua(); //系統(tǒng)初始化函數(shù)</p><p> void safe(); //安全性算法函數(shù)</p><p> void bank(); //銀行家算法函數(shù)</p><p> void show (); //輸出當(dāng)前資源分配情況</p><p> 4.主函數(shù)main(
26、)</p><p> int main()</p><p><b> {</b></p><p> cout<<…… //顯示程序開始提示信息</p><p> chushihua(); //初始化函數(shù)調(diào)用</p><p> cout<<endl<<
27、endl;</p><p> showdata(); //輸出初始化后的狀態(tài)</p><p> //===判斷當(dāng)前狀態(tài)的安全性===</p><p> safe(); //安全性算法函數(shù)調(diào)用</p><p><b> if (l<n){</b></p><p> cout<&
28、lt;"\n當(dāng)前狀態(tài)不安全,無法申請,程序退出!!!!!"<<endl;</p><p> cout<<endl; </p><p> system("pause"); </p><p> sign(); //調(diào)用簽名函數(shù)</p><p> return 0; //
29、 break; </p><p><b> }</b></p><p><b> else{ </b></p><p> int i; //局部變量</p><p><b> l=0;</b></p><p> cout<<&qu
30、ot;\n安全的狀態(tài)!!!"<<endl;</p><p> cout<<"安全序列為: ";</p><p> cout<<endl<<"進(jìn)程"<<"("<<p[0]<<")"; //輸出安全序列,考慮顯示格
31、式,先輸出第一個</p><p> for (i=1; i<n; i++){</p><p> cout<<"==>>"<<"進(jìn)程"<<"("<<p[i]<<")";</p><p><b>
32、} </b></p><p> for (i=0; i<n; i++) Finish[i]=0; //所有進(jìn)程置為未分配狀態(tài)</p><p> cout<<endl<<endl;</p><p><b> }</b></p><p> bank(); //銀行家算法函數(shù)調(diào)
33、用</p><p> return 0; </p><p><b> }</b></p><p> 操作系統(tǒng)銀行家算法流程圖:</p><p><b> 源程序代碼:</b></p><p> #include <iostream.h></p>
34、;<p> #include <vector> </p><p> #include <iomanip></p><p> using namespace std; </p><p> #define TRUE 1 //定義 TRUE =1</p><p> #define FA
35、LSE 0 //定義 FLASE=0</p><p> void bank(vector<int>,vector<vector<int> >,vector<vector<int> >,int ,int ); //聲明bank(應(yīng)行家算法)</p><p>
36、int safe(vector<int> Available,vector<vector<int> > Need,vector<vector<int> > Allocation,int n,int m);//聲明safe()安全性算法</p><p> void init();</p><p> /*************
37、************************主函數(shù)main()**************************************************************/</p><p> void main()</p><p><b> {</b></p><p><b> init();</b&g
38、t;</p><p> int safe(vector<int> Available,vector<vector<int> > Need,vector<vector<int> > Allocation,int n,int m);</p><p><b> }</b></p><p>
39、; /**************************************初始化函數(shù)init()*********************************************************/</p><p> void init()</p><p><b> {</b></p><p> int m; /
40、/m資源類數(shù)</p><p> int n; //進(jìn)程數(shù)</p><p> cout<<"輸入資源類數(shù)"<<endl;</p><p><b> cin>>m;</b></p><p> vector<int> Available(m); /
41、/動態(tài)申請數(shù)組Available可用資源向量 </p><p> cout<<"輸入各類資源總數(shù):"<<endl;</p><p> /************************************************************************/</p><p> /* 下面的被剛
42、掉的為在DOS下輸入資源向量*/</p><p> /*未被剛掉的是從Available.txt文件中讀入數(shù)據(jù)*/</p><p> /************************************************************************/</p><p><b> /*/</b></p&g
43、t;<p> for (int i=0;i<m;i++)</p><p><b> {</b></p><p> cout<<"輸入R"<<i<<"類資源總數(shù):";</p><p> cin>>Available[i];</
44、p><p><b> }</b></p><p><b> //*/</b></p><p><b> FILE *fp;</b></p><p> fp=fopen("Available.txt","r+");</p>
45、<p> cout<<"從Available.txt文件中讀入數(shù)據(jù),并輸出"<<endl;</p><p> for(int i=0;i<m;i++)</p><p><b> {</b></p><p> fscanf(fp,"%d",&Avai
46、lable[i]);</p><p> cout<<Available[i]<<'\t';</p><p><b> }</b></p><p> fclose(fp);</p><p> cout<<"\n輸入進(jìn)程數(shù)"<<end
47、l;</p><p><b> cin>>n;</b></p><p> vector<vector<int> > Max(n, vector<int>(m));</p><p> /*****************************************************
48、*******************/</p><p> /* 下面的被剛掉的為在DOS下輸入資源向量*/</p><p> /*未被剛掉的是從Max.txt文件中讀入數(shù)據(jù)*/</p><p> /************************************************************************/</p&g
49、t;<p><b> /*</b></p><p> for ( i=0;i<n;i++)</p><p><b> {</b></p><p> cout<<"輸入進(jìn)程"<<i<<"的最大需求向量";</p&g
50、t;<p> for (int j=0;j<m;j++)</p><p><b> {</b></p><p> cout<<" 輸入需要R"<<j<<"類資源的最大數(shù)目";</p><p> cin>>Max
51、[i][j];</p><p> while (Max[i][j]>Available[j])</p><p><b> {</b></p><p> cout<<j<<"類資源最大需求超過該類資源總量,重新輸入";</p><p> cin>>Max
52、[i][j];</p><p><b> }</b></p><p><b> }</b></p><p><b> }//*/</b></p><p> fp=fopen("Max.txt","r+");</p>
53、<p> cout<<"從Max.txt文件中讀入數(shù)據(jù),并輸出"<<endl;</p><p> for(i=0;i<n;i++) </p><p><b> {</b></p><p> for (int j=0;j<m;j++)</p><p>
54、;<b> {</b></p><p> fscanf(fp,"%d",&Max[i][j]);</p><p> cout<<Max[i][j]<<" ";</p><p><b> }</b></p><p>
55、cout<<endl;</p><p><b> }</b></p><p> fclose(fp);</p><p> cout<<"輸入已分配的Allocation"<<endl;</p><p> vector<vector<int>
56、 > Allocation(n, vector<int>(m));</p><p> vector<vector<int> > Need(n, vector<int>(m));</p><p> /******************************************************************
57、******/</p><p> /* 下面的被剛掉的為在DOS下輸入資源向量*/</p><p> /*未被剛掉的是從Allocation.txt文件中讀入數(shù)據(jù)*/</p><p> /************************************************************************/</p>&l
58、t;p><b> /*</b></p><p> for ( i=0;i<n;i++)</p><p><b> {</b></p><p> cout<<"輸入為進(jìn)程"<<i<<"的分配向量";</p><
59、p> for (int j=0;j<m;j++)</p><p><b> {</b></p><p> cout<<" 輸入分配R"<<j<<"類資源的數(shù)目";</p><p> cin>>Allocation[i][j];&l
60、t;/p><p> while(Allocation[i][j]>Max[i][j])</p><p><b> {</b></p><p> cout<<j+1<<"類資源最大需求超過該類需求資源總量,重新輸入";</p><p> cin>>Alloc
61、ation[i][j];</p><p><b> }</b></p><p> Need[i][j]=Max[i][j]-Allocation[i][j];</p><p> Available[j] =Available[j]-Allocation[i][j];</p><p><b> }<
62、/b></p><p><b> }//*/</b></p><p> fp=fopen("Allocation.txt","r+");</p><p> cout<<"Allocation.txt從文件中讀入數(shù)據(jù),并輸出"<<endl;</p
63、><p> for(i=0;i<n;i++)</p><p><b> {</b></p><p> for (int j=0;j<m;j++)</p><p><b> {</b></p><p> fscanf(fp,"%d",&am
64、p;Allocation[i][j]);</p><p> Need[i][j]=Max[i][j]-Allocation[i][j]; //在初始化Max時,同時初始化Need數(shù)組</p><p> Available[j] =Available[j]-Allocation[i][j]; //在初始化Max時,同時修改Available數(shù)組
65、</p><p> cout<<Allocation[i][j]<<' ';</p><p><b> }</b></p><p> cout<<endl;</p><p><b> }</b></p><p>
66、fclose(fp);</p><p> int safe(vector<int> Available,vector<vector<int> > Need,vector<vector<int> > Allocation,int n,int m);</p><p> cout<<"此狀態(tài)安全!"&
67、lt;<endl;</p><p> bank(Available,Need,Allocation,n,m);//調(diào)用銀行家算法bank()函數(shù)</p><p><b> }</b></p><p> /**************************************銀行家算法bank()函數(shù)**************
68、*******************************************/</p><p> void bank(vector<int> Available,vector<vector<int> > Need,vector<vector<int> > Allocation,int n,int m)</p><p>
69、<b> {</b></p><p> vector<int> Request(m);</p><p> int all=0;</p><p> //定義變量all,如果all==0,表示進(jìn)程已經(jīng)運行完,如果all>=1,表示還有進(jìn)程沒有運行完</p><p> for (int i=0;i&
70、lt;n;i++)</p><p> for(int j=0;j<m;j++)</p><p> all +=Need[i][j];</p><p> if (0==all)</p><p><b> {</b></p><p> cout<<"所有進(jìn)程已經(jīng)運
71、行完,結(jié)束"<<endl;</p><p><b> exit(0);</b></p><p><b> } </b></p><p> int jc;//任選一個進(jìn)程</p><p> char again;</p><p> all=0;/
72、/重新初始化all,</p><p><b> while (1)</b></p><p><b> {</b></p><p> while (all==0)</p><p><b> {</b></p><p><b> all=
73、0;</b></p><p> //如果all==0,表示進(jìn)程已經(jīng)運行完,如果all>=1,表示還有進(jìn)程沒有運行完</p><p> //循環(huán)直至all>0,即找到一個未運行完的進(jìn)程</p><p> cout<<"任選一個進(jìn)程作為當(dāng)前進(jìn)程0--"<<n-1<<endl;</
74、p><p><b> cin>>jc;</b></p><p> for (int j=0;j<m;j++)</p><p><b> {</b></p><p> all += Need[jc][j];</p><p><b> }<
75、/b></p><p> if (0==all)</p><p><b> {</b></p><p> cout<<"此進(jìn)程已經(jīng)運行,重新輸入"<<endl;</p><p><b> }</b></p><p>&
76、lt;b> }</b></p><p> cout<<"輸入該進(jìn)程的請求向量"<<endl;</p><p> for (i=0;i<m;i++)</p><p><b> {</b></p><p> cin>>Request[i
77、];</p><p> while(Request[i]>Need[jc][i]||Request[i]>Available[i])</p><p><b> {</b></p><p> cout<<"請求向量無法滿足"<<endl;</p><p><
78、;b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p> //////////////////////////////////////////////////////////////////////////</p>&
79、lt;p> //系統(tǒng)試探著把資源分配給該進(jìn)程///////////////////////////////////////////</p><p> for (i=0;i<m;i++)</p><p><b> {</b></p><p> Available[i]=Available[i]-Request[i];</
80、p><p> Allocation[jc][i]=Allocation[jc][i]+Request[i];</p><p> Need[jc][i]=Need[jc][i]-Request[i];</p><p><b> }</b></p><p><b> int bb=0;</b><
81、;/p><p> bb=safe(Available,Need,Allocation,n,m);//調(diào)用安全性算法,判斷此次資源分配后,系統(tǒng)是否處安全狀態(tài)</p><p> if (1==bb)</p><p><b> {</b></p><p> cout<<"系統(tǒng)成功分配資源"&
82、lt;<endl;</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> cout<<"系統(tǒng)未能成分配資源,收回預(yù)分配資源"<<endl
83、;</p><p> for (i=0;i<m;i++)</p><p><b> {</b></p><p> Available[i]=Available[i]+Request[i];</p><p> Allocation[jc][i]=Allocation[jc][i]-Request[i];<
84、;/p><p> Need[jc][i]=Need[jc][i]+Request[i];</p><p><b> }</b></p><p><b> }</b></p><p> cout<<"您還想再次請求分配嗎?是請按y/Y,否請按其它鍵"<<
85、endl;</p><p> cin>>again;</p><p> if(again=='y'||again=='Y')</p><p><b> {</b></p><p><b> all=0;</b></p><p&g
86、t;<b> continue;</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p>
87、<p> /**************************************安全性算法safe()函數(shù)*********************************************************/</p><p> int safe(vector<int> Available,vector<vector<int> > Need,
88、vector<vector<int> > Allocation,int n,int m)</p><p><b> {</b></p><p> vector<int> Work(m),Finish(n);//申請工作向量work,finish</p><p> Work=Available;</
89、p><p> vector<int> count(n); //記錄安全序列</p><p> int len=-1; //記錄安全序列的進(jìn)程個數(shù),如果len==n,即表示所有的finish【i】=true,處于安全狀態(tài)</p><p> for(int i=0;i<m;i++)Finish[i]
90、=FALSE;</p><p> for (i=0;i<n;i++)</p><p><b> {</b></p><p> int needed=1;</p><p> for (int j=0;j<m;j++)</p><p><b> {</b>&
91、lt;/p><p> if(Need[i][j]<=Work[j])</p><p><b> {</b></p><p> needed=needed*TRUE;</p><p><b> }</b></p><p> else needed=needed*FA
92、LSE;</p><p><b> }</b></p><p> if ((Finish[i]==FALSE)&&needed==1)</p><p><b> {</b></p><p> for (j=0;j<m;j++)</p><p>&
93、lt;b> {</b></p><p> Work[j]=Work[j]+Allocation[i][j];</p><p><b> }</b></p><p> Finish[i]=TRUE;</p><p> len=len+1;</p><p> count[
94、len]=i;</p><p><b> i=-1;</b></p><p><b> }</b></p><p><b> }</b></p><p> if (len==n-1)</p><p><b> {</b>&
95、lt;/p><p> cout<<"系統(tǒng)是安全的"<<endl;</p><p> cout<<"安全序列"<<endl;</p><p> for (i=0;i<=len;i++)</p><p><b> {</b>&l
96、t;/p><p> cout<<count[i];</p><p> if (i!=len)</p><p><b> {</b></p><p> cout<<"-->";</p><p><b> }</b><
97、/p><p><b> }</b></p><p> cout<<endl;</p><p> return TRUE;</p><p><b> }</b></p><p><b> else</b></p><p
98、><b> {</b></p><p> cout<<"系統(tǒng)是不安全的"<<endl; return FALSE; }}</p><p><b> 運行結(jié)果:</b></p><p><b> 初始化結(jié)果</b></p><
99、;p> 檢測系統(tǒng)資源分配是否安全結(jié)果:</p><p><b> 六、課程設(shè)計的總結(jié)</b></p><p> 操作系統(tǒng)的基本特征是并發(fā)與共享。系統(tǒng)允許多個進(jìn)程并發(fā)執(zhí)行,并且共享系統(tǒng)的軟、硬件資源。為了最大限度的利用計算機系統(tǒng)的資源,操作系統(tǒng)應(yīng)采用動態(tài)分配的策略,但是這樣就容易因資源不足,分配不當(dāng)而引起“死鎖”。而我本次課程設(shè)計就是得用銀行家算法來避免“死
100、鎖”。銀行家算法就是一個分配資源的過程,使分配的序列不會產(chǎn)生死鎖。此算法的中心思想是:按該法分配資源時,每次分配后總存在著一個進(jìn)程,如果讓它單獨運行下去,必然可以獲得它所需要的全部資源,也就是說,它能結(jié)束,而它結(jié)束后可以歸還這類資源以滿足其他申請者的需要。</p><p> 本次程序就是按照上面的思路展開的。但是因為時間上的倉促,本課程設(shè)計的存在著以下不足:一、不能實現(xiàn)并發(fā)操作,即當(dāng)總資源同時滿足幾個進(jìn)程所需要
101、的資源數(shù)時,這些進(jìn)程不能同時進(jìn)行,只能一一按進(jìn)程順序執(zhí)行。二、掃描進(jìn)程順序單一,只能按進(jìn)程到來的順序(即編號)來掃描,從而產(chǎn)生的安全順序只能是在這個順序的基礎(chǔ)上產(chǎn)生的,而其實安全順序是有多個的。三、對進(jìn)程數(shù)和資源數(shù)進(jìn)行的數(shù)量進(jìn)行了限制,都只能最多有十個。四、運行程序后,界面較差,進(jìn)程數(shù),所需要資源數(shù),已分配資源數(shù),能用資源數(shù),不能一目了然。</p><p> 這次課程設(shè)計時間上雖說倉促點,但是我依然學(xué)到了很多的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計---銀行家算法
- 操作系統(tǒng)課程設(shè)計銀行家算法
- 操作系統(tǒng)課程設(shè)計--銀行家算法
- 操作系統(tǒng)課程設(shè)計(銀行家算法)
- 操作系統(tǒng)課程設(shè)計-銀行家算法
- 操作系統(tǒng)課程設(shè)計--銀行家算法
- 操作系統(tǒng)課程設(shè)計--銀行家算法
- 操作系統(tǒng)課程設(shè)計(銀行家算法設(shè)計)
- 操作系統(tǒng)課程設(shè)計--銀行家算法 (3)
- 操作系統(tǒng)課程設(shè)計---銀行家算法 (2)
- 操作系統(tǒng)課程設(shè)計--銀行家算法 (2)
- 操作系統(tǒng)課程設(shè)計---模擬銀行家算法
- 操作系統(tǒng)課程設(shè)計---銀行家算法實現(xiàn)
- 操作系統(tǒng)課程設(shè)計報告—銀行家算法
- 操作系統(tǒng)原理課程設(shè)計--銀行家算法
- 操作系統(tǒng)課程設(shè)計報告—銀行家算法
- 操作系統(tǒng)課程設(shè)計---銀行家算法報告
- 操作系統(tǒng)課程設(shè)計-模擬銀行家算法-課程設(shè)計
- 操作系統(tǒng)課程設(shè)計報告---模擬實現(xiàn)銀行家算法
- 操作系統(tǒng)課程設(shè)計——銀行家算法的模擬實現(xiàn)
評論
0/150
提交評論