

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 課 程 設(shè) 計 報 告</p><p> 課程設(shè)計名稱: 銀行家算法模擬實現(xiàn) </p><p> 系 別: 二系 </p><p> 姓 名: </p><p> 班 級:
2、 </p><p> 學(xué) 號: </p><p> 成 績: </p><p> 指導(dǎo)教師: </p><p> 開課時間: 2014—20
3、15 學(xué)年 2 學(xué)期</p><p><b> 目錄</b></p><p> 第一章 需求目的1</p><p> 第二章 課題內(nèi)容1</p><p> 第三章 詳細設(shè)計1</p><p><b> 3.1初始化1</b></p>
4、<p> 3.2安全性檢查算法2</p><p> 3.3銀行家算法3</p><p> 第四章 調(diào)試分析4</p><p><b> 第五章 總結(jié)6</b></p><p><b> 第六章 附錄7</b></p><p><b>
5、 第一章 需求目的</b></p><p> 1.1了解多道程序系統(tǒng)中,多個進程并發(fā)執(zhí)行的資源分配。</p><p> 1.2掌握死鎖的產(chǎn)生的原因、產(chǎn)生死鎖的必要條件和處理死鎖的基本方法。</p><p> 1.3掌握預(yù)防死鎖的方法,系統(tǒng)安全狀態(tài)的基本概念。</p><p> 1.4掌握銀行家算法,了解資源在進程并發(fā)執(zhí)行中
6、的資源分配策略。</p><p> 1.5理解死鎖避免在當(dāng)前計算機系統(tǒng)不常使用的原因。 </p><p><b> 第二章 課題內(nèi)容</b></p><p> 2.1復(fù)習(xí)銀行家算法,設(shè)計一個具有若干(不少于3種)資源和若干(不少于5個)進程的系統(tǒng)。</p><p> 2.2定義系統(tǒng)的初始狀態(tài),即進程獲得的資源數(shù)
7、,還需要的資源數(shù)以及系統(tǒng)可用的資源數(shù)。</p><p> 2.3以用戶輸入的方式提出資源請求,并用銀行家算法避免可能發(fā)生的死鎖,若系統(tǒng)安全,允許用戶繼續(xù)申請資源。</p><p> 2.4設(shè)計的系統(tǒng)要求結(jié)構(gòu)清晰,與用戶的交互界面友好,能動態(tài)地實現(xiàn)資源的申請和分配。</p><p><b> 第三章 詳細設(shè)計</b></p>
8、<p> 銀行家算法可分為幾個主要的功能模塊,其描述如下:</p><p><b> 3.1初始化</b></p><p> 由用戶輸入數(shù)據(jù),分別對運行的進程數(shù)、總的資源種類數(shù)、總資源數(shù)、各進程所需要的最大資源數(shù)量(Max),已分配的資源數(shù)量賦值。</p><p><b> 初始化算法流程圖:</b>&l
9、t;/p><p> 3.2安全性檢查算法</p><p> (1)設(shè)置兩個工作向量Work=AVAILABLE;FINISH=false;</p><p> (2)從進程集合中找到一個滿足下述條件的進程,</p><p> FINISH==false;</p><p> NEED<=Work;</p&
10、gt;<p> 如找到,執(zhí)行(3);否則,執(zhí)行(4)</p><p> (3)設(shè)進程獲得資源,可順利執(zhí)行,直至完成,從而釋放資源。</p><p> Work+=ALLOCATION;</p><p> Finish=true;</p><p> (4).如所有的進程Finish= true,則表示安全;否則系統(tǒng)不安全
11、。</p><p><b> 安全性算法流程圖:</b></p><p><b> 3.3銀行家算法</b></p><p> 在避免死鎖的方法中,所施加的限制條件較弱,有可能獲得令人滿意的系統(tǒng)性能。在該方法中把系統(tǒng)的狀態(tài)分為安全狀態(tài)和不安全狀態(tài),只要能使系統(tǒng)始終都處于安全狀態(tài),便可以避免發(fā)生死鎖。</p>
12、;<p> 銀行家算法的基本思想是分配資源之前,判斷系統(tǒng)是否是安全的;若是,才分配。它是最具有代表性的避免死鎖的算法。</p><p> 設(shè)進程j提出請求REQUEST [i],則銀行家算法按如下規(guī)則進行判斷。</p><p> (1).如果REQUEST [j] [i]<= NEED[j][i],則轉(zhuǎn)(2);否則,出錯。</p><p>
13、 (2).如果REQUEST [j] [i]<= AVAILABLE[j][i],則轉(zhuǎn)(3);否則,出錯。</p><p> (3).系統(tǒng)試探分配資源,修改相關(guān)數(shù)據(jù):</p><p> AVAILABLE[i]-=REQUEST[j][i];</p><p> ALLOCATION[j][i]+=REQUEST[j][i];</p>&l
14、t;p> NEED[j][i]-=REQUEST[j][i];</p><p><b> 銀行家算法流程圖:</b></p><p><b> 第四章 調(diào)試分析</b></p><p> 系統(tǒng)中的進程和資源數(shù):</p><p> 系統(tǒng)目前可用資源和各進程所需資源:</p>
15、<p><b> 資源申請:</b></p><p><b> 安全性檢測:</b></p><p><b> 第五章 總結(jié)</b></p><p> 一周的操作系統(tǒng)課程設(shè)計,我學(xué)到了很多課本上沒有的知識。想要完成模擬銀行家算法的C語言程序,首先就是要徹底熟悉算法,了解算法的基本
16、原理,才能開始著手程序設(shè)計在程序設(shè)計設(shè)計過程中,遇到了一些困難,通過向同學(xué)詢問,翻閱資料等,問題被一一解決了。首先就是在知識層面上了解了銀行家算法這種進程調(diào)度和避免死鎖的算法,并用C語言程序真正模擬出安全性檢查和銀行家算法過程,復(fù)習(xí)了之前所學(xué)C語言和數(shù)據(jù)結(jié)構(gòu)的知識;在編程過程中雖然遇到很多困難,解決問題的過程中,同時也鍛煉了我不怕困難,勇于迎接挑戰(zhàn)的精神,為以后的工作打下了堅實的基礎(chǔ)。</p><p><b
17、> 第六章 附錄</b></p><p> #include<string.h></p><p> #include<stdio.h></p><p> #include<stdlib.h></p><p> #define FALSE 0 </p><p&g
18、t; #define TRUE 1 </p><p> #define W 10</p><p> #define R 20</p><p> int M ; //總進程數(shù)</p><p> int N ; //資源種類</p><p> int ALL_RESOURCE[W];//各種資源的數(shù)目總和<
19、;/p><p> int MAX[W][R]; //M個進程對N類資源最大資源需求量</p><p> int AVAILABLE[R]; //系統(tǒng)可用資源數(shù)</p><p> int ALLOCATION[W][R]; //M個進程已經(jīng)得到N類資源的資源量</p><p> int NEED[W][R]; //M個進程還需要N類資源的資
20、源量</p><p> int Request[R]; //請求資源個數(shù)</p><p> void showdata() //函數(shù)showdata,輸出資源分配情況</p><p><b> { </b></p><p><b> int i,j; </b></p><
21、p> printf("\n\n各種資源的總數(shù)量(all):\n"); </p><p> for (j=0;j<N;j++)</p><p> printf(" 資源 %d: %d\n",j+1,ALL_RESOURCE[j]);</p><p> printf("\n\n");
22、 </p><p> printf("系統(tǒng)目前各種資源可用的數(shù)為(available):\n");</p><p> for (j=0;j<N;j++)</p><p> printf(" 資源 %d: %d\n", j+1, AVAILABLE[j]); </p><p> p
23、rintf("\n\n"); </p><p> printf("各進程還需要的資源量(need):\n\n"); </p><p> printf(" 進程 ");</p><p> for(i=0;i<N;i++)</p><p> printf("
24、資源%d ",i+1); </p><p> printf("\n");</p><p> for (i=0;i<M;i++) </p><p><b> { </b></p><p> printf("進程p%d:",i+1);</p>&l
25、t;p> for (j=0;j<N;j++)</p><p> printf(" %d ",NEED[i][j]);</p><p> printf("\n"); </p><p><b> } </b></p><p> printf("\n
26、\n");</p><p> printf(" 各進程已經(jīng)得到的資源量(allocation): \n\n"); </p><p> printf(" 進程 ");</p><p> for(i=0;i<N;i++)</p><p> printf(" 資源%d &q
27、uot;,i+1);</p><p> printf("\n"); </p><p> for (i=0;i<M;i++) </p><p><b> { </b></p><p> printf("進程p%d: ",i+1);</p><p>
28、; for (j=0;j<N;j++)</p><p> printf(" %d ",ALLOCATION[i][j]);</p><p> printf("\n");</p><p><b> } </b></p><p> printf("\n&
29、quot;);</p><p><b> } </b></p><p> void changdata(int k) //函數(shù)changdata,改變可用資源和已經(jīng)拿到資源和還需要的資源的值</p><p><b> { </b></p><p><b> int j; </
30、b></p><p> for (j=0;j<N;j++) </p><p><b> { </b></p><p> AVAILABLE[j]=AVAILABLE[j]-Request[j]; </p><p> ALLOCATION[k][j]=ALLOCATION[k][j]+Request[j
31、]; </p><p> NEED[k][j]=NEED[k][j]-Request[j];}}</p><p> void rstordata(int k) //函數(shù)rstordata,恢復(fù)可用資源和已經(jīng)拿到資源和還需要的資源的值</p><p><b> {int j; </b></p><p> for (
32、j=0;j<N;j++) </p><p> { AVAILABLE[j]=AVAILABLE[j]+Request[j]; </p><p> ALLOCATION[k][j]=ALLOCATION[k][j]-Request[j]; </p><p> NEED[k][j]=NEED[k][j]+Request[j];}}</p>&l
33、t;p> int chkerr(int s) //函數(shù)chkerr,檢查是否安全</p><p> { int WORK,FINISH[W]; </p><p> int i,j,k=0; </p><p> for(i=0;i<M;i++)</p><p> FINISH[i]=FALSE; </p>&
34、lt;p> for(j=0;j<N;j++) </p><p><b> {</b></p><p> WORK=AVAILABLE[j]; </p><p><b> i=s; </b></p><p><b> do</b></p>&l
35、t;p><b> { </b></p><p> if(FINISH[i]==FALSE&&NEED[i][j]<=WORK)</p><p><b> {</b></p><p> WORK=WORK+ALLOCATION[i][j]; </p><p> F
36、INISH[i]=TRUE; </p><p><b> i=0; </b></p><p><b> } </b></p><p><b> else </b></p><p><b> { i++; </b></p><p&
37、gt;<b> } </b></p><p> }while(i<M);</p><p> for(i=0;i<M;i++) </p><p> if(FINISH[i]==FALSE) </p><p><b> {</b></p><p> pri
38、ntf("\n");</p><p> printf(" 系統(tǒng)不安全!!! 本次資源申請不成功!!!\n"); </p><p> printf("\n");</p><p> return 1; </p><p><b> } </b></p&g
39、t;<p><b> } </b></p><p> printf("\n");</p><p> printf(" 經(jīng)安全性檢查,系統(tǒng)安全,本次分配成功。\n"); </p><p> printf("\n");</p><p> re
40、turn 0; </p><p><b> }</b></p><p> void bank() //銀行家算法</p><p><b> {</b></p><p> int i=0,j=0; </p><p> char flag='Y';
41、</p><p> while(flag=='Y'||flag=='y') </p><p><b> { </b></p><p><b> i=-1; </b></p><p> while(i<0||i>=M) </p><
42、;p><b> { </b></p><p> printf(" 請輸入需申請資源的進程號(從P1到P%d,否則重輸入!):",M); </p><p> printf("p");</p><p> scanf("%d",&i); </p><
43、p> if(i<1||i>M)</p><p> printf(" 輸入的進程號不存在,重新輸入!\n"); </p><p><b> } </b></p><p> printf(" 請輸入進程P%d申請的資源數(shù):\n",i); </p><p>
44、for (j=0;j<N;j++) </p><p><b> { </b></p><p> printf(" 資源%d:",j+1); </p><p> scanf("%d",&Request[j]);</p><p> if(Request[j]>
45、;NEED[i-1][j]) //若請求的資源數(shù)大于進程還需要i類資源的資源量j</p><p><b> { </b></p><p> printf(" 進程P%d申請的資源數(shù)大于進程P%d還需要%d類資源的資源量!",i,i,j); </p><p> printf("申請不合理,出錯!請重新選擇!\n
46、\n"); </p><p> flag='N'; </p><p><b> break; </b></p><p><b> } </b></p><p><b> else </b></p><p><b&g
47、t; {</b></p><p> if(Request[j]>AVAILABLE[j]) //若請求的資源數(shù)大于可用資源數(shù)</p><p><b> { </b></p><p> printf("進程P%d申請的資源數(shù)大于系統(tǒng)可用%d類資源的資源量!",i,j); </p><
48、;p> printf("申請不合理,出錯!請重新選擇!\n\n"); </p><p> flag='N'; </p><p><b> break; </b></p><p><b> } </b></p><p><b> } <
49、;/b></p><p><b> } </b></p><p> if(flag=='Y'||flag=='y') </p><p><b> { </b></p><p> changdata(i-1); //調(diào)用changdata(i)函數(shù),改變資
50、源數(shù)</p><p> if(chkerr(i-1)) //若系統(tǒng)安全</p><p><b> { </b></p><p> rstordata(i-1); //調(diào)用rstordata(i)函數(shù),恢復(fù)資源數(shù)</p><p> showdata(); //輸出資源分配情況</p><p&
51、gt;<b> } </b></p><p> else //若系統(tǒng)不安全 </p><p> showdata(); </p><p> } //輸出資源分配情況 </p><p> else //若flag=N||flag=n</p><p> showdat
52、a(); </p><p> printf("\n");</p><p> printf("是否繼續(xù)銀行家算法演示,按'Y'或'y'鍵繼續(xù),按'N'或'n'鍵退出演示: "); </p><p> scanf("%c",&flag
53、);</p><p><b> } </b></p><p><b> } </b></p><p> void main() //主函數(shù)</p><p><b> { </b></p><p> int i=0,j=0,p; </p&
54、gt;<p> printf(" *************************************** \n");</p><p> printf(" 銀行家算法的模擬實現(xiàn) \n");</p><p> printf(" ******
55、********************************* \n\n");</p><p> printf("請輸入總進程數(shù):");</p><p> scanf("%d",&M);</p><p> printf("請輸入總資源種類:");</p>&
56、lt;p> scanf("%d",&N);</p><p> printf("請輸入總資源數(shù)(all_resource):");</p><p> for(i=0;i<N;i++)</p><p> scanf("%d",&ALL_RESOURCE[i]);</p&
57、gt;<p> printf("依次輸入各進程所需要的最大資源數(shù)量(max):\n");</p><p> for (i=0;i<M;i++)</p><p><b> {</b></p><p> for (j=0;j<N;j++)</p><p><b>
58、; {</b></p><p><b> do</b></p><p><b> {</b></p><p> scanf("%d",&MAX[i][j]);</p><p> if (MAX[i][j]>ALL_RESOURCE[j])<
59、;/p><p> printf("\n占有資源超過了聲明的該資源總數(shù),請重新輸入!\n");</p><p> }while (MAX[i][j]>ALL_RESOURCE[j]);</p><p><b> }</b></p><p><b> }</b></p
60、><p> printf("依次輸入各進程已經(jīng)占據(jù)的資源數(shù)量(allocation):\n");</p><p> for (i=0;i<M;i++)</p><p><b> {</b></p><p> for (j=0;j<N;j++)</p><p>&
61、lt;b> {</b></p><p><b> do</b></p><p><b> {</b></p><p> scanf("%d",&ALLOCATION[i][j]);</p><p> if (ALLOCATION[i][j]&g
62、t;MAX[i][j])</p><p> printf("\n占有資源超過了聲明的最大資源,請重新輸入\n");</p><p> }while (ALLOCATION[i][j]>MAX[i][j]);</p><p><b> }</b></p><p> }//初始化資源數(shù)量&l
63、t;/p><p> for (j=0;j<N;j++)</p><p><b> { </b></p><p> p=ALL_RESOURCE[j];</p><p> for (i=0;i<M;i++)</p><p><b> {</b></p&g
64、t;<p> p=p-ALLOCATION[i][j];//減去已經(jīng)被占據(jù)的資源</p><p> AVAILABLE[j]=p;</p><p> if(AVAILABLE[j]<0)</p><p> AVAILABLE[j]=0;</p><p><b> }</b></p>
65、;<p><b> }</b></p><p> for (i=0;i<M;i++)</p><p> for(j=0;j<N;j++)</p><p> NEED[i][j]=MAX[i][j]-ALLOCATION[i][j];</p><p> showdata();</p
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 銀行家算法課程設(shè)計報告
- 課程設(shè)計--銀行家算法
- 課程設(shè)計--銀行家算法
- 銀行家算法—課程設(shè)計
- 銀行家算法-課程設(shè)計
- 銀行家算法課程設(shè)計
- 銀行家算法課程設(shè)計報告 (2)
- 銀行家算法課程設(shè)計
- 銀行家算法的實現(xiàn)課程設(shè)計報告
- 課程設(shè)計---銀行家算法實驗報告
- 銀行家算法課程設(shè)計2
- 操作系統(tǒng)課程設(shè)計報告—銀行家算法
- 操作系統(tǒng)課程設(shè)計報告—銀行家算法
- 操作系統(tǒng)課程設(shè)計---銀行家算法報告
- 銀行家算法模擬實現(xiàn)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計--銀行家算法
- 操作系統(tǒng)課程設(shè)計---銀行家算法
- 課程設(shè)計--銀行家算法的模擬實現(xiàn)
- 操作系統(tǒng)課程設(shè)計銀行家算法
- 操作系統(tǒng)課程設(shè)計--銀行家算法
評論
0/150
提交評論