版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 操作系統(tǒng)課程設(shè)計(jì)報(bào)告</p><p> 課程設(shè)計(jì)題目:模擬實(shí)現(xiàn)銀行家算法</p><p> 學(xué) 院:高職院</p><p> 專(zhuān) 業(yè):計(jì)算機(jī)應(yīng)用</p><p> 班 級(jí):計(jì)算機(jī)應(yīng)用1班</p><p><b> 目的和要求 </
2、b></p><p> 銀行家算法是死鎖避免的重要算法,本次課程設(shè)計(jì)要求用高級(jí)語(yǔ)言編寫(xiě)和調(diào)試一個(gè)簡(jiǎn)單的銀行家算法程序。通過(guò)本次課程設(shè)計(jì),加深對(duì)死鎖以及避免死鎖概念的理解,并體會(huì)銀行家算法的具體實(shí)施辦法。</p><p><b> 具體內(nèi)容</b></p><p> (1)設(shè)置各類(lèi)資源的最大數(shù)目以及各個(gè)進(jìn)程所需的資源的最大數(shù)目。<
3、;/p><p> (2)初始設(shè)置各資源的分配情況,且為安全狀態(tài)。</p><p> (3)某個(gè)進(jìn)程提出對(duì)各資源的申請(qǐng),通過(guò)銀行家算法決定是否答應(yīng)該申請(qǐng)。</p><p><b> 三、 實(shí)驗(yàn)要求</b></p><p> (1)需寫(xiě)出設(shè)計(jì)說(shuō)明。</p><p> (2)設(shè)計(jì)實(shí)現(xiàn)代碼及說(shuō)明。&
4、lt;/p><p><b> (3)運(yùn)行結(jié)果。</b></p><p><b> 四、主要實(shí)驗(yàn)步驟</b></p><p> (1)分析銀行家算法結(jié)構(gòu);</p><p> (2)畫(huà)出銀行家算法的流程圖,即設(shè)計(jì)說(shuō)明;</p><p> (3)根據(jù)畫(huà)出的流程圖使用C++語(yǔ)言
5、編寫(xiě)相應(yīng)的代碼;程序主要由main函數(shù)和以下幾個(gè)函數(shù)組成:void input();用戶(hù)輸入銀行家算法的初始數(shù)據(jù);void output();輸出當(dāng)前系統(tǒng)資源分配情況;void change();當(dāng)請(qǐng)求資源滿(mǎn)足要求時(shí),進(jìn)行分配,系統(tǒng)資源發(fā)生改變;int check();安全性算法,檢查是否存在安全序列;void outputsafe();輸出安全序列的資源分配表。</p><p> (4)檢查代碼,將
6、編出的代碼編譯、鏈接,驗(yàn)證其正確性。</p><p><b> 五、實(shí)驗(yàn)環(huán)境</b></p><p> PC兼容機(jī)、Windows操作系統(tǒng)、編譯語(yǔ)言等。</p><p><b> 六、程序代碼</b></p><p> #include <stdio.h> //本實(shí)驗(yàn)中使用
7、到的庫(kù)函數(shù)</p><p> #include <stdlib.h></p><p> #include <string.h></p><p> int max[5][3]; //開(kāi)始定義銀行家算法中需要用到的數(shù)據(jù)</p><p> int allocation[5][3];</p>
8、<p> int need[5][3];</p><p> int available[3];</p><p> int request[5][3];</p><p> char *finish[5];</p><p> int safe[5];</p><p> int n,i,m;</
9、p><p><b> int k=0;</b></p><p><b> int j=0;</b></p><p> int work[3];</p><p> int works[5][3];</p><p> void line() //美化程序,使程序運(yùn)行
10、時(shí)更加明朗美觀</p><p><b> {</b></p><p> printf("------------------------------------------------------------------\n");</p><p><b> }</b></p><
11、;p> void start() //表示銀行家算法開(kāi)始</p><p><b> {</b></p><p><b> line();</b></p><p> printf(" 銀行家算法開(kāi)始\n");</p><
12、p> printf(" ——Designed by Zhang Hong\n");</p><p><b> line();</b></p><p><b> }</b></p><p> void end() /
13、/表示銀行家算法結(jié)束</p><p><b> {</b></p><p><b> line();</b></p><p> printf(" 銀行家算法結(jié)束,謝謝使用\n");</p><p><b> line();
14、</b></p><p><b> }</b></p><p> void input() //輸入銀行家算法起始各項(xiàng)數(shù)據(jù)</p><p><b> {</b></p><p> for (n=0;n<5;n++)</p><p><b>
15、; {</b></p><p> printf("請(qǐng)輸入進(jìn)程P%d的相關(guān)信息:\n",n);</p><p> printf("Max:");</p><p> for (m=0;m<3;m++)</p><p> scanf("%d",&max[
16、n][m]);</p><p> printf("Allocation:");</p><p> for (m=0;m<3;m++)</p><p> scanf("%d",&allocation[n][m]);</p><p> for (m=0;m<3;m++)</
17、p><p> need[n][m]=max[n][m]-allocation[n][m];</p><p><b> }</b></p><p> printf("請(qǐng)輸入系統(tǒng)可利用資源數(shù)Available:");</p><p> for (m=0;m<3;m++)</p>&
18、lt;p> scanf("%d",&available[m]);</p><p><b> }</b></p><p> void output() //輸出系統(tǒng)現(xiàn)有資源情況</p><p><b> {</b></p><p><b> li
19、ne();</b></p><p> printf("資源情況 Max Allocation Need Available\n");</p><p> printf("進(jìn)程 A B C A B C A B C A B C\n");</p>&l
20、t;p><b> line();</b></p><p> for(n=0;n<5;n++)</p><p><b> {</b></p><p> printf("P%d%9d%3d%3d%5d%3d%3d%6d%3d%3d",n,max[n][0],max[n][1],max[n
21、][2],allocation[n][0],allocation[n][1],allocation[n][2],need[n][0],need[n][1],need[n][2]);</p><p><b> if (n==0)</b></p><p> printf("%6d%3d%3d\n",available[0],available[1]
22、,available[2]);</p><p><b> else</b></p><p> printf("\n");</p><p><b> }</b></p><p><b> line();</b></p><p>
23、<b> }</b></p><p> void change() //當(dāng)Request[i,j]<=Available[j]時(shí),系統(tǒng)把資源分配給進(jìn)程P[i],Available[j]和Need[i,j]發(fā)生改變</p><p><b> {</b></p><p> for (m=0;m<3;m+
24、+)</p><p><b> {</b></p><p> available[m]-=request[i][m];</p><p> allocation[i][m]+=request[i][m];</p><p> need[i][m]-=request[i][m];</p><p>
25、;<b> }</b></p><p><b> }</b></p><p> void outputsafe() //輸出安全序列的資源分配表</p><p><b> {</b></p><p> printf("該安全序列的資源分配圖如下:\n&q
26、uot;);</p><p><b> line();</b></p><p> printf("資源情況 Work Need Allocation Work+Allocation Finish\n");</p><p> printf("進(jìn)程 A B C A B
27、 C A B C A B C\n");</p><p><b> line();</b></p><p> for(n=0;n<5;n++)</p><p> printf("P%d%9d%3d%3d%5d%3d%3d%5d%3d%3d%6d%3d%3d%12s\n",safe[
28、n],works[safe[n]][0],works[safe[n]][1],works[safe[n]][2],need[safe[n]][0],need[safe[n]][1],need[safe[n]][2],allocation[safe[n]][0],allocation[safe[n]][1],allocation[safe[n]][2],works[safe[n]][0]+allocation[safe[n]][0],wo
29、rks[safe[n]][1]+allocation[safe[n]][1],works[safe[n]][2]+allocation[safe[n]][2],finish[n]);</p><p><b> line();</b></p><p><b> }</b></p><p> int check()
30、 //安全性算法</p><p><b> {</b></p><p> printf("開(kāi)始執(zhí)行安全性算法……\n");</p><p> for (m=0;m<3;m++) //數(shù)組work和finish初始化</p><p> work[m]=available[m];<
31、;/p><p> for (n=0;n<5;n++)</p><p><b> {</b></p><p> finish[n]="false";</p><p> safe[n]=0;</p><p><b> }</b></p>
32、<p><b> k=0;</b></p><p> for (m=0;m<5;m++)</p><p> for (n=0;n<5;n++)</p><p> if(strcmp(finish[n],"false")==0 && need[n][0]<=work[0]
33、 && need[n][1]<=work[1] && need[n][2]<=work[2]) //查找可以分配資源但尚未分配到資源的進(jìn)程</p><p><b> {</b></p><p> safe[k]=n; //以數(shù)組safe[k]記下各個(gè)進(jìn)程得到分配的資源的順序</p><p>
34、 works[safe[k]][0]=work[0];</p><p> works[safe[k]][1]=work[1];</p><p> works[safe[k]][2]=work[2];</p><p> work[0]+=allocation[n][0]; //進(jìn)程執(zhí)行后釋放出分配給它的資源</p><p> wo
35、rk[1]+=allocation[n][1];</p><p> work[2]+=allocation[n][2];</p><p> finish[n]="ture"; //finish[n]變?yōu)?以示該進(jìn)程完成本次分</p><p><b> k++;</b></p><p><b
36、> }</b></p><p> for (m=0;m<5;m++) //判斷是否所有進(jìn)程分配資源完成</p><p><b> {</b></p><p> if (strcmp(finish[m],"false")==0)</p><p><b> {
37、</b></p><p> printf("找不到安全序列,系統(tǒng)處于不安全狀態(tài)。\n");</p><p> return 0; //找不到安全序列,結(jié)束check函數(shù),返回0</p><p><b> }</b></p><p><b> else </b&
38、gt;</p><p> if (m==4) //此處m=4表示所有數(shù)組finish的所有元素都為ture</p><p><b> {</b></p><p> printf("找到安全序列P%d->P%d->P%d->P%d->P%d,系統(tǒng)是安全的\n",safe[0],safe[1
39、],safe[2],safe[3],safe[4]);</p><p><b> j=1;</b></p><p> outputsafe(); //輸出安全序列的資源分配表</p><p><b> }</b></p><p><b> }</b></p
40、><p><b> return 1;</b></p><p><b> }</b></p><p> void main() //主程序開(kāi)始</p><p><b> {</b></p><p><b> start();</b
41、></p><p> for (;j==0;) //確認(rèn)輸入數(shù)據(jù)的正確性,若輸入錯(cuò)誤,重新輸入</p><p><b> {</b></p><p><b> input();</b></p><p> printf("以下為進(jìn)程資源情況,請(qǐng)確認(rèn)其是否正確:\n&qu
42、ot;);</p><p><b> output();</b></p><p> printf("數(shù)據(jù)是否無(wú)誤:\n正確:輸入1\n錯(cuò)誤:輸入0\n請(qǐng)輸入:");</p><p> scanf("%d",&j);</p><p><b> }</b
43、></p><p> printf("數(shù)據(jù)確認(rèn)無(wú)誤,算法繼續(xù)。\n"); </p><p> if (check()==0) //若check函數(shù)返回值為0,表示輸入的初始數(shù)據(jù)找不到安全序列,無(wú)法進(jìn)行下一步,程序結(jié)束</p><p><b> {</b></p><p><
44、b> end();</b></p><p><b> exit(0);</b></p><p><b> }</b></p><p> for(;j==1;) //當(dāng)有多個(gè)進(jìn)程請(qǐng)求資源時(shí),循環(huán)開(kāi)始</p><p><b> {</b><
45、/p><p> printf("請(qǐng)輸入請(qǐng)求資源的進(jìn)程i(0、1、2、3、4):"); //輸入發(fā)出請(qǐng)求向量的進(jìn)程及請(qǐng)求向量</p><p> scanf("%d",&i);</p><p> printf("請(qǐng)輸入進(jìn)程P%d的請(qǐng)求向量Request%d:",i,i);</p>&l
46、t;p> for(n=0;n<3;n++)</p><p> scanf("%d",&request[i][n]);</p><p> for (;request[i][0]>need[i][0] || request[i][1]>need[i][1] || request[i][2]>need[i][2];) //若請(qǐng)求向量
47、大于需求資源,則認(rèn)為是輸入錯(cuò)誤,要求重新輸入</p><p><b> {</b></p><p> printf("數(shù)據(jù)輸入有誤,請(qǐng)重試!\n請(qǐng)輸入進(jìn)程P%d的請(qǐng)求向量Request%d:",i,i);</p><p> for(n=0;n<3;n++)</p><p> scanf(
48、"%d",&request[i][n]);</p><p><b> }</b></p><p> if(request[i][0]<=available[0] && request[i][1]<=available[1] && request[i][2]<=available[2])
49、 //判斷系統(tǒng)是否有足夠資源提供分配</p><p><b> {</b></p><p> printf("系統(tǒng)正在為進(jìn)程P%d分配資源……\n",i);</p><p> change(); //分配資源</p><p><b> j=0;</b></p&
50、gt;<p><b> }</b></p><p><b> else</b></p><p> printf("系統(tǒng)沒(méi)有足夠的資源,進(jìn)程P%d需要等待。\n",i);</p><p> if (j==0) //j=0表示系統(tǒng)有足夠資源分配的情況</p><
51、p><b> {</b></p><p> printf("當(dāng)前系統(tǒng)資源情況如下:\n"); //輸出分配資源后的系統(tǒng)資源分配情況</p><p><b> output();</b></p><p> if(check()==0) //若找不到安全系列,則之前的資源分配無(wú)效<
52、;/p><p><b> {</b></p><p> printf("本次資源分配作廢,恢復(fù)原來(lái)的資源分配狀態(tài)。\n");</p><p> for (m=0;m<3;m++) //恢復(fù)分配資源前的系統(tǒng)資源狀態(tài)</p><p><b> {</b></p&
53、gt;<p> available[m]+=request[i][m];</p><p> allocation[i][m]-=request[i][m];</p><p> need[i][m]+=request[i][m];</p><p><b> }</b></p><p> out
54、put(); //輸出系統(tǒng)資源狀態(tài)</p><p><b> }</b></p><p><b> }</b></p><p> printf("是否還有進(jìn)程請(qǐng)求資源?\n是:輸入1\n否:輸入0\n請(qǐng)輸入:");</p><p> scanf("%d&
55、quot;,&j); //若還有進(jìn)程請(qǐng)求資源,j=1,之前的for循環(huán)條件滿(mǎn)足</p><p><b> }</b></p><p><b> end();</b></p><p><b> }</b></p><p> 七、實(shí)驗(yàn)數(shù)據(jù)及處理結(jié)果<
56、/p><p><b> 八、實(shí)驗(yàn)總結(jié)</b></p><p> (1)在做本次課程設(shè)計(jì)的過(guò)程中,一開(kāi)始輸入完程序的時(shí)候,書(shū)本上的程序并不正確。在程序中函數(shù)都是錯(cuò)誤的,所以在寫(xiě)完程序的后在編譯的時(shí)候,在整個(gè)程序報(bào)的錯(cuò)誤中只有一次,就是頭文件有錯(cuò)誤。而在改正頭文件之后,錯(cuò)誤就不斷開(kāi)始出現(xiàn)了。</p><p> (2) 在做課程設(shè)計(jì)的時(shí)候也最容易出
57、現(xiàn)的錯(cuò)誤就是在定義的時(shí)候和程序中寫(xiě)的變量不同,我在定義的時(shí)候用的是英文的大寫(xiě),而在主函數(shù)中是用的是英文的小寫(xiě)字母,從而導(dǎo)致程序的報(bào)錯(cuò)。在本次的課程設(shè)計(jì)中,最多的錯(cuò)誤就是在程序中需要用到的變量沒(méi)有定義,這也是很多初學(xué)編程者中經(jīng)常出現(xiàn)的錯(cuò)誤。其實(shí)在改正程序的同時(shí)我們也在學(xué)習(xí)怎樣進(jìn)步。</p><p> (3)在做課程設(shè)計(jì)的時(shí)候也最容易出現(xiàn)的錯(cuò)誤就是在定義的時(shí)候和程序中寫(xiě)的變量不同,我在定義的時(shí)候用的是英文的大寫(xiě),而
58、在主函數(shù)中是用的是英文的小寫(xiě)字母,從而導(dǎo)致程序的報(bào)錯(cuò)。</p><p> (4)在課程設(shè)計(jì)的時(shí)候我們要首先對(duì)進(jìn)程有個(gè)初步的理解,以及每個(gè)進(jìn)程在運(yùn)行是所需要的系統(tǒng)資源,這樣系統(tǒng)才能更好的分配資源。</p><p> (5)通過(guò)本次的課程設(shè)計(jì)讓我對(duì)進(jìn)程的死鎖有了進(jìn)一步的了解,同時(shí)也讓我對(duì)進(jìn)程有了新的認(rèn)識(shí),同時(shí)也讓我了解了銀行家算法是如何避免死鎖這個(gè)問(wèn)題的。</p><p
59、> (6)但是在課程設(shè)計(jì)中我同時(shí)也看見(jiàn)了自己的不足之處,在程序編寫(xiě)的整個(gè)過(guò)程中對(duì)編程這一塊學(xué)的不怎么好,使得在編寫(xiě)程序是存在比較大的困難,還有在程序編譯的時(shí)候所報(bào)的錯(cuò)誤,由于英語(yǔ)沒(méi)學(xué)好在編譯的很多時(shí)候自己看不懂時(shí)是叫同學(xué)們幫我調(diào)試的。</p><p> (7)在本次的課程設(shè)計(jì)中,最多的錯(cuò)誤就是在程序中需要用到的變量沒(méi)有定義,這也是很多初學(xué)編程者中經(jīng)常出現(xiàn)的錯(cuò)誤。其實(shí)在改正程序的同時(shí)我們也在學(xué)習(xí)怎樣進(jìn)步。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計(jì)---模擬銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)——銀行家算法的模擬實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)---銀行家算法實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告—銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)-模擬銀行家算法-課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告—銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)---銀行家算法報(bào)告
- 操作系統(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ì)--銀行家算法
評(píng)論
0/150
提交評(píng)論