版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 實(shí) 驗(yàn) 報(bào) 告</b></p><p><b> 附錄3</b></p><p><b> 程序源代碼:</b></p><p> #include<string.h></p><p> #include<stdio.h&
2、gt;</p><p> #include<stdlib.h></p><p> # define m 50</p><p> # define false 0</p><p> #define true 1</p><p> int no1; //進(jìn)程數(shù)</p><p>
3、; int no2; //資源數(shù)</p><p><b> int r;</b></p><p> int allocation[m][m],need[m][m],available[m],max[m][m]; </p><p> char name1[m],name2[m];
4、 //定義全局變量</p><p> void main()</p><p><b> {</b></p><p> void check();</p><p> void print();</p><p> int i,j,p=0,q=0;</p><p>&
5、lt;b> char c;</b></p><p> int request[m],allocation1[m][m],need1[m][m],available1[m];</p><p> printf("**********************************************\n");</p><p&g
6、t; printf("* 銀行家算法的設(shè)計(jì)與實(shí)現(xiàn) *\n");</p><p> printf("**********************************************\n");</p><p> printf("請(qǐng)輸入進(jìn)程總數(shù):\n");</p>
7、<p> scanf("%d",&no1);</p><p> printf("請(qǐng)輸入資源種類數(shù):\n");</p><p> scanf("%d",&no2);</p><p> printf("請(qǐng)輸入Max矩陣:\n");</p>&l
8、t;p> for(i=0;i<no1;i++)</p><p> for(j=0;j<no2;j++)</p><p> scanf("%d",&max[i][j]); //輸入已知進(jìn)程最大資源需求量</p><p> printf("請(qǐng)輸入Allocation矩陣:\n");</p
9、><p> for(i=0;i<no1;i++)</p><p> for(j=0;j<no2;j++)</p><p> scanf("%d",&allocation[i][j]); //輸入已知的進(jìn)程已分配的資源數(shù)</p><p> for(i=0;i<no1;i++)</p>
10、;<p> for(j=0;j<no2;j++)</p><p> need[i][j]=max[i][j]-allocation[i][j]; //根據(jù)輸入的兩個(gè)數(shù)組計(jì)算出need矩陣的值</p><p> printf("請(qǐng)輸入Available矩陣\n");</p><p> for(i=0;i<no2;i
11、++)</p><p> scanf("%d",&available[i]); //輸入已知的可用資源數(shù)</p><p> print(); //輸出已知條件</p><p> check(); //檢測(cè)T0時(shí)刻已知條件的安全狀態(tài)</p><p> if(r==1) //如果安全則執(zhí)行以下
12、代碼</p><p><b> {</b></p><p><b> do{ </b></p><p> printf("\n請(qǐng)輸入請(qǐng)求資源的進(jìn)程號(hào)(0~4):\n");</p><p> for(j=0;j<=no2;j++)</p><p&g
13、t;<b> {</b></p><p> scanf("%d",&i);</p><p> if(i>=no1)</p><p><b> {</b></p><p> printf("輸入錯(cuò)誤,請(qǐng)重新輸入:\n");</p&g
14、t;<p> continue; </p><p><b> }</b></p><p> else break;</p><p><b> }</b></p><p> printf("\n請(qǐng)輸入該進(jìn)程所請(qǐng)求的資源數(shù)request[j]:\n"
15、);</p><p> for(j=0;j<no2;j++)</p><p> scanf("%d",&request[j]);</p><p> for(j=0;j<no2;j++)</p><p> if(request[j]<=need[i][j]) p=0; </p>
16、<p> //判斷請(qǐng)求是否超過(guò)該進(jìn)程所需要的資源數(shù)</p><p><b> if(p)</b></p><p> printf("請(qǐng)求資源超過(guò)該進(jìn)程資源需求量,請(qǐng)求失敗!\n");</p><p><b> else</b></p><p><b&g
17、t; {</b></p><p> for(j=0;j<no2;j++)</p><p> if(request[j]<=available[j]) q=0; //判斷請(qǐng)求是否超過(guò)可用資源數(shù)</p><p><b> if(q) </b></p><p> printf("沒(méi)
18、有做夠的資源分配,請(qǐng)求失?。n");</p><p> else //請(qǐng)求滿足條件</p><p><b> {</b></p><p> for(j=0;j<no2;j++) </p><p><b> {</b>
19、</p><p> available1[j]=available[j]; </p><p> allocation1[i][j]=allocation[i][j];</p><p> need1[i][j]=need[i][j]; </p><p> //保存原已分配的資源數(shù),仍需要的資源數(shù)和可用的資源數(shù)</p>
20、<p> available[j]=available[j]-request[j]; </p><p> allocation[i][j]=allocation+request[j];</p><p> need[i][j]=need[i][j]-request[j];</p><p> //系統(tǒng)嘗試把資源分配給請(qǐng)求的進(jìn)程</p>
21、<p><b> }</b></p><p><b> print();</b></p><p> check(); //檢測(cè)分配后的安全性</p><p> if(r==0) //如果分配后系統(tǒng)不安全</p><p><b> {</b>&
22、lt;/p><p> for(j=0;j<no2;j++)</p><p><b> {</b></p><p> available[j]=available1[j]; </p><p> allocation[i][j]=allocation1[i][j];</p><p> n
23、eed[i][j]=need1[i][j];</p><p> //還原已分配的資源數(shù),仍需要的資源數(shù)和可用的資源數(shù)</p><p><b> }</b></p><p> printf("返回分配前資源數(shù)\n");</p><p><b> print();</b>&l
24、t;/p><p><b> }</b></p><p><b> }</b></p><p> }printf("\n你還要繼續(xù)分配嗎?Y or N ?\n"); </p><p> //判斷是否繼續(xù)進(jìn)行資源分配</p><p> c=getch
25、ar();</p><p> }while(c=='y'||c=='Y');</p><p><b> }</b></p><p><b> }</b></p><p> void check() //安全算法函數(shù)</p><p>
26、<b> {</b></p><p> int k,f,v=0,i,j;</p><p> int work[m],a[m];</p><p> int finish[m];</p><p><b> r=1;</b></p><p> for(i=0;i<
27、no1;i++)</p><p> finish[i]=false; // 初始化進(jìn)程均沒(méi)得到足夠資源數(shù)并完成</p><p> for(i=0;i<no2;i++)</p><p> work[i]=available[i];//work[i]表示可提供進(jìn)程繼續(xù)運(yùn)行的各類資源數(shù)</p><p><b> k=no
28、1;</b></p><p><b> do{</b></p><p> for(i=0;i<no1;i++)</p><p><b> {</b></p><p> if(finish[i]==false)</p><p><b> {
29、</b></p><p><b> f=1;</b></p><p> for(j=0;j<no2;j++)</p><p> if(need[i][j]>work[j])</p><p><b> f=0;</b></p><p> if(
30、f==1) //找到還沒(méi)有完成且需求數(shù)小于可提供進(jìn)程繼續(xù)運(yùn)行的資源數(shù)的進(jìn)程</p><p><b> {</b></p><p> finish[i]=true;</p><p> a[v++]=i; //記錄安全序列號(hào)</p><p> for(j=0;j<no2;j++)</p>
31、;<p> work[j]+=allocation[i][j]; //釋放該進(jìn)程已分配的資源</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> k--; //每
32、完成一個(gè)進(jìn)程分配,未完成的進(jìn)程數(shù)就減1</p><p> }while(k>0);</p><p><b> f=1;</b></p><p> for(i=0;i<no1;i++) //判斷是否所有的進(jìn)程都完成</p><p><b> {</b></p>
33、<p> if(finish[i]==false) </p><p><b> {</b></p><p><b> f=0;</b></p><p><b> break;</b></p><p><b> }</b></p
34、><p><b> }</b></p><p> if(f==0) //若有進(jìn)程沒(méi)完成,則為不安全狀態(tài)</p><p><b> {</b></p><p> printf("系統(tǒng)處在不安全狀態(tài)!");</p><p><b>
35、 r=0;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> printf("\n系統(tǒng)當(dāng)前為安全狀態(tài),安全序列為:\n");</p>
36、;<p> for(i=0;i<no1;i++)</p><p> printf("p%d ",a[i]); //輸出安全序列</p><p><b> }</b></p><p><b> }</b></p><p> void print()
37、 //輸出函數(shù)</p><p><b> {</b></p><p><b> int i,j;</b></p><p> printf("\n");</p><p> printf("*************此時(shí)刻資源分配情況***************
38、******\n");</p><p> printf("進(jìn)程名/號(hào) | Max | Allocation | Need |\n");</p><p> for (i = 0; i < no1; i++)</p><p><b> {</b></p>&l
39、t;p> printf(" p%d/%d ",i,i);</p><p> for (j = 0; j < no2; j++) </p><p> {printf("%d ",max[i][j]);}</p><p> for (j = 0; j < no2; j++) </p
40、><p> {printf(" %d ",allocation[i][j]);}</p><p> for (j = 0; j < no2; j++)</p><p> {printf(" %d ",need[i][j]);}</p><p> printf("\n"
41、;);</p><p><b> }</b></p><p> printf("\n");</p><p> printf("各類資源可利用的資源數(shù)為:");</p><p> for (j = 0; j < no2; j++) </p><p&g
42、t; {printf(" %d",available[j]);}</p><p> printf("\n");</p><p><b> }</b></p><p><b> (程序結(jié)束)</b></p><p><b> 附錄 4<
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計(jì)---模擬銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)---銀行家算法實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告---模擬實(shí)現(xiàn)銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)-模擬銀行家算法-課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)---銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)--銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)(銀行家算法)
- 操作系統(tǒng)課程設(shè)計(jì)-銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)--銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)--銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)(銀行家算法設(shè)計(jì))
- 操作系統(tǒng)課程設(shè)計(jì)--銀行家算法 (3)
- 操作系統(tǒng)課程設(shè)計(jì)---銀行家算法 (2)
- 操作系統(tǒng)課程設(shè)計(jì)--銀行家算法 (2)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告—銀行家算法
- 操作系統(tǒng)原理課程設(shè)計(jì)--銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)----模擬銀行家算法避免死鎖
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告—銀行家算法
評(píng)論
0/150
提交評(píng)論