版權(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><b> 銀行家算法</b></p><p> 院 系: 計(jì)算機(jī)科學(xué)技術(shù)學(xué)院 </p><p><b> 2015年7月2日</b></p><p> 操作系統(tǒng)原理課程設(shè)計(jì)任務(wù)書(shū)</p>&
2、lt;p> 一、題目:銀行家算法</p><p><b> 二、設(shè)計(jì)要求</b></p><p> (1)**負(fù)責(zé)設(shè)計(jì)與實(shí)現(xiàn)。</p><p> ?。?)查閱相關(guān)資料,自學(xué)具體課題中涉及到的新知識(shí)。</p><p> ?。?)采用結(jié)構(gòu)化、模塊化程序設(shè)計(jì)方法,功能要完善,具有一定的創(chuàng)新。</p>
3、<p> ?。?)所設(shè)計(jì)的程序應(yīng)有輸入、輸出。</p><p> ?。?)按要求寫(xiě)出課程設(shè)計(jì)報(bào)告,并于設(shè)計(jì)結(jié)束后1周內(nèi)提交。其主要內(nèi)容包括:封皮、課程設(shè)計(jì)任務(wù)書(shū),指導(dǎo)教師評(píng)語(yǔ)與成績(jī)、目錄、概述、軟件總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、軟件的調(diào)試、總結(jié)、謝啟、附錄:帶中文注釋的程序清單、參考文獻(xiàn)。報(bào)告一律用A4紙打印,中文字體為宋體,西文字體用Time New Roma,一律用小四號(hào)字,行距采用“固定值”18磅,首行縮進(jìn)
4、2字符。總體設(shè)計(jì)應(yīng)配合軟件總體模塊結(jié)構(gòu)圖來(lái)說(shuō)明軟件應(yīng)具有的功能。詳細(xì)設(shè)計(jì)應(yīng)用傳統(tǒng)或N-S流程圖和屏幕抓圖說(shuō)明,調(diào)試的敘述應(yīng)配合出錯(cuò)場(chǎng)景的抓圖來(lái)說(shuō)明出現(xiàn)了哪些錯(cuò)誤,如何解決的。</p><p><b> 三、課程設(shè)計(jì)工作量</b></p><p> 由于是設(shè)計(jì)小組團(tuán)結(jié)協(xié)作完成設(shè)計(jì)任務(wù),一般每人的程序量在200行有效程序行左右,不得抄襲。</p><
5、;p> 四、課程設(shè)計(jì)工作計(jì)劃</p><p> 2015年6月23日,指導(dǎo)教師講課,學(xué)生根據(jù)題目準(zhǔn)備資料;</p><p> 2015年6月24日,進(jìn)行總體方案設(shè)計(jì);</p><p> 2015年6月25日~2015年6月29日,完成程序模塊并通過(guò)獨(dú)立編譯;</p><p> 2015年6月30日~2015年7月1日,將各模塊
6、集成為一個(gè)完整的系統(tǒng),并錄入足夠的數(shù)據(jù)進(jìn)行調(diào)試運(yùn)行;</p><p> 2015年7月2日~2015年7月5日,驗(yàn)收、撰寫(xiě)報(bào)告;</p><p> 指導(dǎo)教師簽章: </p><p> 教研室主任簽章 </p><p> 操作系統(tǒng)原理課程設(shè)計(jì)指導(dǎo)教師評(píng)語(yǔ)與成績(jī)</p>
7、<p><b> 目錄</b></p><p><b> 一 概述2</b></p><p> 二 總體方案設(shè)計(jì)3</p><p><b> 三 詳細(xì)設(shè)計(jì)4</b></p><p> 四 程序的調(diào)試與運(yùn)行結(jié)果說(shuō)明7</p><p
8、> 五 課程設(shè)計(jì)總結(jié)9</p><p><b> 六 后記10</b></p><p><b> 八 附錄11</b></p><p><b> 九 參考文獻(xiàn)18</b></p><p><b> 一 概述</b></p>
9、;<p> 一、課程設(shè)計(jì)的目的。</p><p> 1.使學(xué)生更深入地理解和掌握該課程中的有關(guān)基本概念。</p><p> 2.培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí)獨(dú)立完成課題的能力。</p><p> 3.培養(yǎng)學(xué)生勇于探索、嚴(yán)謹(jǐn)推理、實(shí)事求是、有錯(cuò)必改,用實(shí)踐來(lái)檢驗(yàn)理論,全方位考慮問(wèn)題等科學(xué)技術(shù)人員應(yīng)具有的素質(zhì)。</p><p>
10、 4.提高學(xué)生對(duì)工作認(rèn)真負(fù)責(zé)、一絲不茍,對(duì)同學(xué)團(tuán)結(jié)友愛(ài),協(xié)作攻關(guān)的基本素質(zhì)。</p><p> 5.培養(yǎng)學(xué)生從資料文獻(xiàn)、科學(xué)實(shí)驗(yàn)中獲得知識(shí)的能力,提高學(xué)生從別人經(jīng)驗(yàn)中找到解決問(wèn)題的新途徑的悟性。</p><p> 6.對(duì)學(xué)生掌握知識(shí)的深度、運(yùn)用理論去處理問(wèn)題的能力、實(shí)驗(yàn)?zāi)芰Α⒄n程設(shè)計(jì)能力、書(shū)面及口頭表達(dá)能力進(jìn)行考核。</p><p> 二、課程設(shè)計(jì)的要求。&
11、lt;/p><p> (1)學(xué)生自由組成課程設(shè)計(jì)小組,建議每組最多不超過(guò)3個(gè)學(xué)生。</p><p> (2)選擇課程設(shè)計(jì)題目中的一個(gè)課題,每組獨(dú)立完成。</p><p> ?。?)查閱相關(guān)資料,自學(xué)具體課題中涉及到的新知識(shí)。</p><p> (4)采用結(jié)構(gòu)化程序設(shè)計(jì)方法或面向?qū)ο蟪绦蛟O(shè)計(jì)方法進(jìn)行設(shè)計(jì),功能要完善,具有一定創(chuàng)新。</p
12、><p> 銀行家算法是操作系統(tǒng)當(dāng)中為避免鎖死的算法,并且是最具有代表性的避免鎖死的算法,能夠有效的在資源分配的過(guò)程中,對(duì)系統(tǒng)的安全性進(jìn)行檢測(cè)。整個(gè)算法的計(jì)算步驟為對(duì)輸入的數(shù)據(jù)進(jìn)行試分配,并對(duì)安全性進(jìn)行檢測(cè),當(dāng)系統(tǒng)為安全的時(shí),依照安全序列執(zhí)行程序,如果不安全則進(jìn)入阻塞狀態(tài)。銀行家算法的來(lái)源是在銀行中,客戶(hù)申請(qǐng)貸款的數(shù)量是有限的,每個(gè)客戶(hù)在第一次申請(qǐng)貸款時(shí)要聲明完成該項(xiàng)目所需的最大資金量,在滿(mǎn)足所有貸款要求時(shí),客戶(hù)應(yīng)
13、及時(shí)歸還。銀行家在客戶(hù)申請(qǐng)的貸款數(shù)量不超過(guò)自己擁有的最大值時(shí),都應(yīng)盡量滿(mǎn)足客戶(hù)的需要。在這樣的描述中,銀行家就好比操作系統(tǒng),資金就是資源,客戶(hù)就相當(dāng)于要申請(qǐng)資源的進(jìn)程。</p><p> 在避免死鎖的方法中,所施加的簡(jiǎn)直條件比在預(yù)防死鎖的方法中限制條件要弱,有可能獲得令人滿(mǎn)意的系統(tǒng)性能。在該方法中,把系統(tǒng)的狀態(tài)分為安全狀態(tài)和不安全狀態(tài),只要能使系統(tǒng)都處于安全狀態(tài),就可避免死鎖的發(fā)生。</p>&l
14、t;p> 所謂安全狀態(tài)與不安全狀態(tài)是指如果所有過(guò)程有可能完成執(zhí)行(終止),則一個(gè)狀態(tài)被認(rèn)為是安全的。由于系統(tǒng)無(wú)法知道什么時(shí)候一個(gè)過(guò)程將終止,或者之后它需要多少資源,系統(tǒng)假定所有進(jìn)程將最終試圖獲取其聲明的最大資源并在不久之后終止。 </p><p> 三、程序的主要設(shè)計(jì)思想。</p><p> 在多道程序系統(tǒng)中,雖然能夠借助于多個(gè)進(jìn)程的并發(fā)執(zhí)行,來(lái)改善系統(tǒng)資源的利用率,提高系統(tǒng)
15、的吞吐量,但是依然有風(fēng)險(xiǎn)存在,那就是——鎖死。所謂鎖死是指,多個(gè)進(jìn)程在運(yùn)行中因爭(zhēng)奪資源而造成的一種僵局,當(dāng)進(jìn)程的這種僵持狀態(tài)時(shí),若無(wú)外力作用,它們將無(wú)法再向前推進(jìn)。一組程序中,每個(gè)進(jìn)程都無(wú)限等待被該組進(jìn)程中的另一進(jìn)程所占有的資源,因而永遠(yuǎn)無(wú)法得到資源,這種現(xiàn)象就叫做進(jìn)程死鎖。</p><p><b> 二 總體方案設(shè)計(jì)</b></p><p><b>
16、程序模塊</b></p><p> 本程序包括了四個(gè)基本模塊: 主函數(shù)、試分配、安全性測(cè)試、數(shù)據(jù)的輸入與輸出。</p><p><b> 1、主函數(shù)</b></p><p> 主函數(shù)用于輸出系統(tǒng)的主要操作界面,以及調(diào)用其他的函數(shù),完成銀行家算法。</p><p><b> 2、試分配:<
17、;/b></p><p> 對(duì)輸入的進(jìn)程的Max、Available、Allocation以及Request進(jìn)行分配,判斷是否可以正常分配。</p><p><b> 3 、安全性測(cè)試:</b></p><p> 當(dāng)試分配完成時(shí),通過(guò)安全性測(cè)試來(lái)對(duì)系統(tǒng)的安全性進(jìn)行檢測(cè),安全時(shí)輸出安全序列,不安全時(shí)進(jìn)行提醒,并且恢復(fù)到初始化時(shí)輸入的數(shù)
18、據(jù)。</p><p><b> 二、模塊之間關(guān)系</b></p><p> 主函數(shù)可以調(diào)用系統(tǒng)的所有函數(shù),以及輸出功能界面,將試分配函數(shù),安全性測(cè)試函數(shù)和輸入輸出函數(shù)定義在主函數(shù)當(dāng)中,在需要時(shí)通過(guò)相應(yīng)的選項(xiàng)進(jìn)行調(diào)用。而試分配與安全性測(cè)試是并列的兩個(gè)函數(shù),存在執(zhí)行試分配后需對(duì)安全序列進(jìn)行判斷。</p><p> 輸入輸出函數(shù),確定數(shù)值,并將
19、相對(duì)應(yīng)的數(shù)據(jù)輸入到對(duì)應(yīng)的模塊,來(lái)進(jìn)行計(jì)算。</p><p><b> 三、 數(shù)據(jù)結(jié)構(gòu)</b></p><p> 程序當(dāng)中需要四種數(shù)據(jù)結(jié)構(gòu)。</p><p> 1、可利用資源矩陣(Available),當(dāng)Available[]=k時(shí),這表示系統(tǒng)中有該類(lèi)資源k個(gè)。</p><p> 2、最大需求矩陣(Max),當(dāng)Ma
20、x[][]=k時(shí),則表示進(jìn)程需要的資源為k個(gè)。</p><p> 3、分配矩陣(Allocation),當(dāng)Allocation[][]=k時(shí),則表示進(jìn)程當(dāng)前已被分得k個(gè)資源。</p><p> 4、需求矩陣(Need),當(dāng)Need[][]=k時(shí),則表示進(jìn)程還需要k個(gè)資源才能夠完成。</p><p><b> 四、算法思想</b></
21、p><p> 操作系統(tǒng)按照銀行家制定的規(guī)則為進(jìn)程分配資源,當(dāng)進(jìn)程首次申請(qǐng)資源時(shí),要測(cè)試該進(jìn)程對(duì)資源的最大需求量,如果系統(tǒng)現(xiàn)存的資源可以滿(mǎn)足它的最大需求量則按當(dāng)前的申請(qǐng)量分配資源,否則就推遲分配。當(dāng)進(jìn)程在執(zhí)行中繼續(xù)申請(qǐng)資源時(shí),先測(cè)試該進(jìn)程已占用的資源數(shù)與本次申請(qǐng)的資源數(shù)之和是否超過(guò)了該進(jìn)程對(duì)資源的最大需求量。若超過(guò)則拒絕分配資源,若沒(méi)有超過(guò)則再測(cè)試系統(tǒng)現(xiàn)存的資源能否滿(mǎn)足該進(jìn)程尚需的最大資源量,若能滿(mǎn)足則按當(dāng)前的申請(qǐng)量
22、分配資源,否則也要推遲分配。</p><p><b> 三 詳細(xì)設(shè)計(jì)</b></p><p><b> 一、程序模塊劃分:</b></p><p> 1. 數(shù)據(jù)的初始化:</p><p> 根據(jù)提示輸入最大需求矩陣(Max),可利用資源量(Available),分配矩陣(Allocation
23、)所需的數(shù)據(jù)。</p><p> 2. 輸出所對(duì)應(yīng)的矩陣:</p><p> 根據(jù)輸入的數(shù)據(jù)輸出對(duì)應(yīng)的矩陣,并且計(jì)算出需求矩陣(Need),將完整的算法需要的數(shù)據(jù)呈現(xiàn)給操作者。</p><p><b> 3. 試分配:</b></p><p> 根據(jù)操作者所輸入的進(jìn)程號(hào)已經(jīng)請(qǐng)求,對(duì)系統(tǒng)進(jìn)行時(shí)分配。</p&g
24、t;<p><b> 4.安全測(cè)試</b></p><p> 當(dāng)試分配完成時(shí)可進(jìn)行安全性測(cè)試,當(dāng)進(jìn)程間是安全的時(shí)候則可以輸出相應(yīng)的安全序列。如果錯(cuò)誤,則可以回到數(shù)據(jù)的初始化狀態(tài)。</p><p><b> 二、數(shù)據(jù)判斷</b></p><p> 當(dāng)輸入的數(shù)據(jù)不符合規(guī)定時(shí),可以對(duì)該數(shù)據(jù)進(jìn)行判斷,不符合條
25、件重新輸入,例如:if(!(0<=in&&in<=t-1)),在程序中,用于判斷所輸入的進(jìn)程號(hào)是否滿(mǎn)足要求,如果不滿(mǎn)足要求通過(guò)該語(yǔ)句輸出“cout<<"該進(jìn)程不存在,重新輸入"<<endl;”。</p><p><b> 三、 函數(shù)調(diào)用</b></p><p> 1.通過(guò)switch語(yǔ)句對(duì)所調(diào)
26、用的函數(shù)進(jìn)行判斷。</p><p> switch(choice)</p><p><b> {</b></p><p> case 1: Input();break;//輸入相關(guān)數(shù)據(jù)函數(shù)</p><p> case 2: Print();break;//打印輸出相關(guān)數(shù)據(jù)表函數(shù) </p><
27、;p> case 3: cout<<"請(qǐng)輸入有請(qǐng)求的進(jìn)程號(hào):" break;</p><p> case 4: checksafe(in); break;//安全性檢查</p><p> case 5: refenpei(in); break;//恢復(fù)數(shù)據(jù)</p><p><b> }</b>&
28、lt;/p><p> 2.輸入函數(shù)Input();</p><p> void Input()</p><p><b> {</b></p><p> int j,n,m;</p><p> cout<<"輸入 可利用資源:"<<endl;<
29、/p><p> for(j=0;j<c;j++)</p><p><b> {</b></p><p> //cout<<"請(qǐng)輸入 Available["<<j<<"]:";</p><p> while(cin>>Avai
30、lable[j])</p><p><b> {</b></p><p> if(Available[j]<0)</p><p> cout<<"輸入數(shù)字無(wú)效,請(qǐng)重新輸入"<<endl;</p><p> else break;</p><p&
31、gt;<b> };</b></p><p><b> }</b></p><p> cout<<"輸入 最大需求:"<<endl;</p><p> for(n=0;n<t;n++)//各個(gè)進(jìn)程循環(huán)輸入</p><p><b>
32、 {</b></p><p> for(m=0;m<c;m++)//c個(gè)類(lèi)資源ABC循環(huán)輸入</p><p><b> {</b></p><p> while(cin>>Max[n][m])</p><p><b> {</b></p><
33、p> if(Max[n][m]<0)</p><p> cout<<"輸入數(shù)字無(wú)效,請(qǐng)重新輸入"<<endl;</p><p> else break;</p><p><b> };</b></p><p><b> }</b>&l
34、t;/p><p><b> }</b></p><p> cout<<"輸入 占有資源:"<<endl;</p><p> for(n=0;n<t;n++)//各個(gè)進(jìn)程循環(huán)輸入</p><p><b> {</b></p><
35、p> for(m=0;m<c;m++)//c個(gè)類(lèi)資源ABC循環(huán)輸入</p><p><b> {</b></p><p> while(cin>>Allocation[n][m])</p><p> if(Allocation[n][m]<0)</p><p> cout<&
36、lt;"輸入數(shù)字無(wú)效,請(qǐng)重新輸入"<<endl;</p><p> else break;</p><p> Need[n][m]=Max[n][m]-Allocation[n][m];</p><p><b> }</b></p><p><b> }</b>
37、;</p><p> cout<<"初始化完成!..."<<endl;</p><p> }/*----------------------輸入函數(shù)結(jié)束----------------------*/</p><p> 輸出函數(shù)Print();</p><p> /*------------
38、-------------輸出函數(shù)------------------------*/</p><p> void Print()</p><p><b> {</b></p><p><b> int i,j;</b></p><p> cout<<"|*****|*
39、************|*************|**********|*************|"<<endl;</p><p> cout<<"|*****| | | | |"<<endl;</p><p> cout&l
40、t;<"| 進(jìn)程| Max | Allocation | Need | Available |"<<endl;</p><p> cout<<"|*****|*************|*************|**********|*************|"<<endl;</p>
41、<p> for(i=0;i<t;i++)</p><p><b> {</b></p><p> cout<<"| p"<<i<<" | ";</p><p> for(j=0;j<c;j++)</p><p>
42、;<b> {</b></p><p> cout<<Max[i][j]<<" ";</p><p><b> }</b></p><p> cout<<"| ";</p><p> for(j=0;j<
43、c;j++) </p><p><b> {</b></p><p> cout<<Allocation[i][j]<<" ";</p><p><b> }</b></p><p> cout<<"| ";&
44、lt;/p><p> for(j=0;j<c;j++)</p><p><b> {</b></p><p> cout<<Need[i][j]<<" ";</p><p><b> }</b></p><p> co
45、ut<<"| ";</p><p><b> if(i==0)</b></p><p><b> {</b></p><p> for(j=0;j<c;j++)</p><p><b> {</b></p><p
46、> cout<<Available[j]<<" ";</p><p><b> }</b></p><p> cout<<"| ";</p><p><b> }</b></p><p><b>
47、 if(i>0)</b></p><p><b> {</b></p><p> cout<<" |";</p><p><b> }</b></p><p> cout<<endl;</p>
48、<p><b> }</b></p><p> cout<<"|*****|*************|*************|**********|*************|"<<endl;</p><p> }/*--------------------輸出函數(shù)結(jié)束----------------
49、----------*/</p><p> 四 程序的調(diào)試與運(yùn)行結(jié)果說(shuō)明</p><p><b> 一、程序調(diào)試:</b></p><p> 1、在數(shù)據(jù)初始化當(dāng)中要考慮到輸入進(jìn)程數(shù)是否為負(fù)數(shù),是否為字符。</p><p> 2、在安全性算法當(dāng)中要考慮到當(dāng)不安全時(shí),數(shù)據(jù)能否恢復(fù),是否可以重新進(jìn)行分配。當(dāng)輸入的Req
50、uest大于Need或者大于Available的情況,當(dāng)大于是需要重新輸入。</p><p><b> 二、程序測(cè)試:</b></p><p><b> 1.輸入初始化:</b></p><p><b> 2.矩陣輸出</b></p><p><b> 3.
51、安全序列輸出</b></p><p><b> 4.進(jìn)程不安全時(shí)</b></p><p><b> 五 課程設(shè)計(jì)總結(jié)</b></p><p> 操作系統(tǒng)是計(jì)算系組成當(dāng)中最為重要的系統(tǒng)軟件,只有操作系統(tǒng)的存在在能夠使得計(jì)算機(jī)能夠有正常有序的進(jìn)行工作,操作系統(tǒng)對(duì)于計(jì)算機(jī)來(lái)說(shuō)是各項(xiàng)活動(dòng)的組織者和指揮者。而銀行家
52、算法的存在則是為了保證這個(gè)系統(tǒng)能夠正常的安全的進(jìn)行工作的保證。我們可以把操作系統(tǒng)看成是銀行,而銀行家算法則可以看成是銀行的管理者,而各類(lèi)資源則可以看成時(shí)銀行的資金,而進(jìn)程則是客戶(hù)。作為管理者的銀行家算法則需要使得在銀行的資金,即操作系統(tǒng)的資源進(jìn)行正常有序的分配,以保證操作系統(tǒng)能夠正常運(yùn)轉(zhuǎn)。并保證在進(jìn)程有足夠的資源進(jìn)行運(yùn)轉(zhuǎn)。</p><p> 操作系統(tǒng)按照銀行家制定的規(guī)則進(jìn)行資源分配,當(dāng)進(jìn)程首次申請(qǐng)資源是,要測(cè)試
53、進(jìn)程對(duì)最遠(yuǎn)的最大需求是多少,如果系統(tǒng)現(xiàn)有的資源能夠滿(mǎn)足,則最該進(jìn)程分配資源,否則推遲分配。當(dāng)進(jìn)程在執(zhí)行過(guò)程,依然要求分配資源時(shí),則先測(cè)試該進(jìn)程已占用的資源數(shù)與需求數(shù)是否超過(guò)了該進(jìn)程的最大需求。若超過(guò),應(yīng)該拒絕分配資源。</p><p> 銀行家算法作為系統(tǒng)資源的保障,起著舉足輕重的作用,所以多銀行家算法必須有深入的了解,從而認(rèn)識(shí)操作系統(tǒng)的工作過(guò)程。</p><p><b>
54、六 后記</b></p><p> 在我們這個(gè)小組從選擇這個(gè)程序到編寫(xiě)程序再到程序的調(diào)試再到最后的驗(yàn)收,都使我學(xué)到了許多的東西,有的根本就是書(shū)本上學(xué)不到的!在我看來(lái),這次課程設(shè)計(jì)也可以看作是我們?cè)谏鐣?huì)上工作時(shí)候的一場(chǎng)小小的模擬!跟我們?cè)谝院蟮墓ぷ鲗W(xué)習(xí)中有很多地方相像之處!</p><p> 不光是在程序的學(xué)習(xí)上!而且還在人際關(guān)系上,我也學(xué)到了很多的東西!因?yàn)樵谶@次課程設(shè)計(jì)中
55、,我被任命了我們小組的組長(zhǎng),雖然只是一個(gè)小小的組長(zhǎng),但是我并沒(méi)有輕視它的地位,作為我們組的小組長(zhǎng),我不能拈輕怕重,應(yīng)該主動(dòng)把難的地方,比較累得地方給我,還應(yīng)該照顧到我們組的組員的情況,看他們是否能接受他們所分得的模塊,如果不能,在進(jìn)行重新分配,以解決他們的難題!在承擔(dān)我們組的小組長(zhǎng)的過(guò)程中我學(xué)到了不少的東西!</p><p> 這次的課程設(shè)計(jì)讓我學(xué)到的東西還有很多,例如:遇到困難應(yīng)該自己獨(dú)立解決,不能遇到困難就
56、找老師,或者一決不振,不想再繼續(xù)了,在這個(gè)時(shí)候我們應(yīng)該調(diào)整我們的心態(tài),冷靜一下。不應(yīng)該煩躁,試想在以后的工作中如果遇到了類(lèi)似的更難得問(wèn)題時(shí),那時(shí)候我們可不能再找老師或者不想干了,那樣是不行的!</p><p> 還有就是我學(xué)到了有的錯(cuò)誤是以前從沒(méi)犯過(guò)的,最后知道了,也增加了我的經(jīng)驗(yàn)!為以后的學(xué)習(xí)奠定基礎(chǔ)!</p><p> 雖然我們的程序已經(jīng)基本完事了,一些基本的功能已經(jīng)基本實(shí)現(xiàn)但是還
57、是有不足之處,因?yàn)檫@次得時(shí)間有限,所以以后應(yīng)該進(jìn)一步學(xué)習(xí)!以增加自己的學(xué)習(xí)經(jīng)驗(yàn)!</p><p> 非常感謝*老師在實(shí)驗(yàn)的過(guò)程中耐心的幫助我修改程序的錯(cuò)誤,并給我講解是為什么錯(cuò)的,并如何改正,這樣使我學(xué)到了很多課本上學(xué)不到的東西!還有我要感謝我們組的成員,這樣使我懂得了什么叫團(tuán)隊(duì)合作精神,他們給予我的幫助也是很巨大的,如果沒(méi)有我們組的共同努力,我們的這個(gè)“磁盤(pán)調(diào)度”也不會(huì)運(yùn)行成功!</p><
58、;p> 在此我再一次對(duì)以上等人表示由衷的感謝!??! </p><p><b> 八 附錄</b></p><p> #include <iostream.h></p><p> #define M 10 //資源類(lèi)數(shù)</p><p> #define N 50 //進(jìn)程數(shù)</p>
59、;<p> void Input(); //用于輸入的函數(shù)</p><p> void Print(); //用于打印輸出表格的函數(shù)</p><p> void tryfenpei(int i);//試分配函數(shù)</p><p> void checksafe(int x);//安全檢測(cè)函數(shù)</p><p> void
60、refenpei(int i);//恢復(fù)數(shù)據(jù)函數(shù)</p><p><b> //定義初始化數(shù)組</b></p><p> int Available[M],</p><p> Max[N][M],</p><p> Allocation[N][M],</p><p> Need[N][M
61、],</p><p> Request[M];</p><p> int c,t;//資源進(jìn)程</p><p> int in;//用戶(hù)選擇的進(jìn)程號(hào)</p><p> /*----------------------------------------------------------------*/</p><
62、p> void main( )</p><p><b> {</b></p><p> int choice;</p><p> char ch='Y';</p><p> cout<<"輸入資源數(shù):";</p><p><b&
63、gt; cin>>c;</b></p><p> cout<<"輸入進(jìn)程數(shù):";</p><p><b> cin>>t;</b></p><p><b> do</b></p><p><b> {</b
64、></p><p> if(ch=='Y'||ch=='y')</p><p><b> {</b></p><p> cout<<"銀行家算法"<<endl;</p><p> cout<<"1:輸入所需數(shù)據(jù)
65、 "<<endl;</p><p> cout<<"2:顯示矩陣 "<<endl;</p><p> cout<<"3:試分配 "<<endl;</p><p> cout<<"4:檢查安全性 "&l
66、t;<endl;</p><p> cout<<"5:恢復(fù)數(shù)據(jù)到初始狀態(tài) "<<endl;</p><p> cout<<"**********************"<<endl;</p><p> cout<<"請(qǐng)選擇操作序號(hào):&qu
67、ot;;</p><p> cin>>choice;</p><p> switch(choice)</p><p><b> {</b></p><p> case 1: Input();//輸入相關(guān)數(shù)據(jù)函數(shù)</p><p><b> break;</b&
68、gt;</p><p> case 2: Print();//打印輸出相關(guān)數(shù)據(jù)表函數(shù) </p><p><b> break;</b></p><p> case 3: cout<<"請(qǐng)輸入有請(qǐng)求的進(jìn)程號(hào):";</p><p> while(cin>>in)<
69、;/p><p><b> {</b></p><p> if(!(0<=in&&in<=t-1))</p><p><b> {</b></p><p> cout<<"該進(jìn)程不存在,重新輸入"<<endl;</p&g
70、t;<p><b> }</b></p><p> else break;</p><p><b> } </b></p><p> tryfenpei(in);//試分配</p><p><b> break;</b></p><p
71、> case 4: checksafe(in);//安全性檢查</p><p><b> break;</b></p><p> case 5: refenpei(in);//恢復(fù)數(shù)據(jù)</p><p><b> break;</b></p><p> default: cout&
72、lt;<"請(qǐng)(1-5)中選擇正確的操作序號(hào)!"<<endl;</p><p><b> break;</b></p><p><b> }</b></p><p> cout<<"要繼續(xù)進(jìn)行嗎?(y-是 n否)"; </p><
73、;p><b> }</b></p><p> else if(ch=='N'||ch=='n')</p><p><b> {</b></p><p> cout<<"正在退出..."<<endl;</p><p&
74、gt;<b> break;</b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> cout<<"輸入無(wú)效!重新輸入..."
75、;<<endl;</p><p><b> }</b></p><p> }while(cin>>ch);</p><p> }/*---------------------main函數(shù)結(jié)束----------------------------------*/</p><p> /*--
76、------------------------輸入函數(shù)----------------------------------*/</p><p> void Input()</p><p><b> {</b></p><p> int j,n,m;</p><p> cout<<"輸入 可
77、利用資源:"<<endl;</p><p> for(j=0;j<c;j++)</p><p><b> {</b></p><p> //cout<<"請(qǐng)輸入 Available["<<j<<"]:";</p><
78、p> while(cin>>Available[j])</p><p><b> {</b></p><p> if(Available[j]<0)</p><p> cout<<"輸入數(shù)字無(wú)效,請(qǐng)重新輸入"<<endl;</p><p> e
79、lse break;</p><p><b> };</b></p><p><b> }</b></p><p> cout<<"輸入 最大需求:"<<endl;</p><p> for(n=0;n<t;n++)//各個(gè)進(jìn)程循環(huán)輸入<
80、;/p><p><b> {</b></p><p> for(m=0;m<c;m++)//c個(gè)類(lèi)資源ABC循環(huán)輸入</p><p><b> {</b></p><p> while(cin>>Max[n][m])</p><p><b>
81、 {</b></p><p> if(Max[n][m]<0)</p><p> cout<<"輸入數(shù)字無(wú)效,請(qǐng)重新輸入"<<endl;</p><p> else break;</p><p><b> };</b></p><p
82、><b> }</b></p><p><b> }</b></p><p> cout<<"輸入 占有資源:"<<endl;</p><p> for(n=0;n<t;n++)//各個(gè)進(jìn)程循環(huán)輸入</p><p><b>
83、 {</b></p><p> for(m=0;m<c;m++)//c個(gè)類(lèi)資源ABC循環(huán)輸入</p><p><b> {</b></p><p> while(cin>>Allocation[n][m])</p><p> if(Allocation[n][m]<0)<
84、/p><p> cout<<"輸入數(shù)字無(wú)效,請(qǐng)重新輸入"<<endl;</p><p> else break;</p><p> Need[n][m]=Max[n][m]-Allocation[n][m];</p><p><b> }</b></p>&l
85、t;p><b> }</b></p><p> cout<<"初始化完成!..."<<endl;</p><p> }/*-------------------------輸入函數(shù)結(jié)束----------------------------------*/</p><p> /*----
86、---------------------輸出函數(shù)----------------------------------*/</p><p> void Print()</p><p><b> {</b></p><p><b> int i,j;</b></p><p> cout<
87、<"|*****|*************|*************|**********|*************|"<<endl;</p><p> cout<<"|*****| | | | |"<<endl;</p>
88、<p> cout<<"| 進(jìn)程| Max | Allocation | Need | Available |"<<endl;</p><p> cout<<"|*****|*************|*************|**********|*************|"<&l
89、t;endl;</p><p> for(i=0;i<t;i++)</p><p><b> {</b></p><p> cout<<"| p"<<i<<" | ";</p><p> for(j=0;j<c;j++)&l
90、t;/p><p><b> {</b></p><p> cout<<Max[i][j]<<" ";</p><p><b> }</b></p><p> cout<<"| ";</p><p&
91、gt; for(j=0;j<c;j++) </p><p><b> {</b></p><p> cout<<Allocation[i][j]<<" ";</p><p><b> }</b></p><p> cout<&l
92、t;"| ";</p><p> for(j=0;j<c;j++)</p><p><b> {</b></p><p> cout<<Need[i][j]<<" ";</p><p><b> }</b></p&
93、gt;<p> cout<<"| ";</p><p><b> if(i==0)</b></p><p><b> {</b></p><p> for(j=0;j<c;j++)</p><p><b> {</b>
94、;</p><p> cout<<Available[j]<<" ";</p><p><b> }</b></p><p> cout<<"| ";</p><p><b> }</b></p>
95、<p><b> if(i>0)</b></p><p><b> {</b></p><p> cout<<" |";</p><p><b> }</b></p><p> cout<&l
96、t;endl;</p><p><b> }</b></p><p> cout<<"|*****|*************|*************|**********|*************|"<<endl;</p><p> }/*------------------------
97、-輸出函數(shù)結(jié)束--------------------------------*/</p><p> /*-------------------------試分配函數(shù)----------------------------------*/</p><p> void tryfenpei(int n)</p><p><b> {</b>&
98、lt;/p><p><b> int i;</b></p><p> cout<<"您輸入的是 "<<"p["<<n<<"]"<<" 進(jìn)程"<<endl;</p><p> cout<&
99、lt;"該進(jìn)程需求量為: ";</p><p> for(i=0;i<c;i++)</p><p> cout<<Need[n][i]<<" ";</p><p> cout<<endl;</p><p> cout<<"請(qǐng)輸入請(qǐng)求
100、資源的數(shù)目:";</p><p> for(i=0;i<c;i++)</p><p><b> {</b></p><p> while(cin>>Request[i])</p><p><b> {</b></p><p> if (
101、Request[i]<0) </p><p><b> {</b></p><p> cout<<"!!輸入的數(shù)字無(wú)效."<<endl;</p><p><b> }</b></p><p> else if (Request[i]>
102、Need[n][i]) </p><p><b> {</b></p><p> cout<<"!!超出進(jìn)程需求量"<<endl<<endl;</p><p><b> }</b></p><p> else if (Request[i
103、]>Available[i]) </p><p><b> {</b></p><p> cout<<"!!系統(tǒng)沒(méi)有足夠的可用資源量滿(mǎn)足進(jìn)程需要"<<endl<<endl;</p><p><b> }</b></p><p>
104、else break;</p><p><b> }</b></p><p><b> }</b></p><p> cout<<"輸入成功,輸入的是:";</p><p> for(int f=0;f<c;f++)</p><p&g
105、t; cout<<Request[f]<<" ";</p><p> cout<<endl; </p><p> cout<<"執(zhí)行銀行家算法,進(jìn)行試分配..."<<endl;</p><p> for( f=0;f<c;f++)</p>
106、<p><b> {</b></p><p> Available[f] = Available[f] - Request[f];</p><p> Allocation[n][f] = Allocation[n][f] + Request[f];</p><p> Need[n][f] = Need[n][f]-Reque
107、st[f];</p><p><b> }</b></p><p> cout<<"試分配完成!"<<endl; </p><p> }/*-------------------------試分配函數(shù)結(jié)束----------------------------------*/</p&
108、gt;<p> /*-------------------------安全檢測(cè)函數(shù)----------------------------------*/</p><p> void checksafe(int x)</p><p><b> { </b></p><p> cout<<"進(jìn)入安
109、全性檢測(cè)..."<<endl;</p><p> int i,m,apply,j,k=0,flag=0;</p><p> int Work[M],temp[N];</p><p> bool Finish[N]; //t為進(jìn)程數(shù)</p><p> for(i=0;i<c;++i)</p>
110、<p><b> {</b></p><p> Work[i]=Available[i];</p><p><b> }</b></p><p> for(i=0;i<t;i++)</p><p><b> {</b></p><p
111、> Finish[i]=false;</p><p><b> }</b></p><p> for(i=0;i<t;i++)</p><p><b> { </b></p><p><b> apply=0;</b></p><p&g
112、t; for(j=0;j<c;j++)</p><p><b> {</b></p><p> if (false==Finish[i] && Need[i][j]<=Work[j])</p><p><b> {</b></p><p> apply++;//
113、標(biāo)記是否所需的資源都得到滿(mǎn)足</p><p> if(apply==c)</p><p><b> {</b></p><p> for(m=0;m<c;m++)</p><p><b> {</b></p><p> Work[m]=Work[m]+Allo
114、cation[i][m];//變分配數(shù) w=w+a</p><p><b> }</b></p><p> Finish[i]=true;</p><p> temp[k++]=i;//將滿(mǎn)足的進(jìn)程號(hào)存入temp[]數(shù)組中</p><p> i=-1; //若有進(jìn)程滿(mǎn)足條件則從頭開(kāi)始尋找</p>
115、<p><b> } </b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> for(i=0;i<t;i++)</p><
116、;p><b> {</b></p><p> if(Finish[i]==false)</p><p><b> {</b></p><p> cout<<"試分配后系統(tǒng)不安全!!! 本次資源申請(qǐng)不成功!!!"<<endl;</p><p>
117、 cout<<"等待恢復(fù)原來(lái)的數(shù)據(jù)..."<<endl;</p><p> refenpei(in);</p><p><b> return ;</b></p><p><b> }</b></p><p><b> }</b&
118、gt;</p><p> cout<<"安全序列:"<<endl;</p><p> cout<<"分配的序列:";</p><p> for(i=0;i<t-1;i++)</p><p><b> {</b></p>
119、<p> cout<<"P"<<temp[i]<<"-->";</p><p><b> }</b></p><p> cout<<"P"<<temp[t-1]<<endl;</p><p>
120、; cout<<"已通過(guò)安全性測(cè)試!"<<endl;</p><p> cout<<"開(kāi)始給第 "<<"p["<<in<<"]"<<"進(jìn)程分配資源..."<<endl;</p><p> c
121、out<<"分配完成!等待打印輸出..."<<endl;</p><p><b> Print();</b></p><p><b> return ;</b></p><p> }/*-------------------------安全性檢查函數(shù)結(jié)束----------
122、------------------------*/</p><p> /*-------------------------恢復(fù)數(shù)據(jù)函數(shù)----------------------------------*/</p><p> void refenpei(int i)</p><p><b> {</b></p><
123、p> for(int f=0;f<c;f++)</p><p><b> {</b></p><p> Available[f] = Available[f] + Request[f];</p><p> Allocation[i][f] = Allocation[i][f] - Request[f];</p>
124、<p> Need[i][f] = Need[i][f] + Request[f];</p><p><b> }</b></p><p> cout<<"數(shù)據(jù)已恢復(fù)初始狀態(tài)..."<<endl;</p><p><b> Print();</b></p
125、><p><b> }</b></p><p><b> 九 參考文獻(xiàn)</b></p><p> [1] 計(jì)算機(jī)操作系統(tǒng)(第三版) 湯小丹 梁紅兵 哲鳳屏 湯子瀛 編著 西安電子科技大學(xué)出版社</p><p> [2] 軟件工程 王長(zhǎng)元 李晉惠 等編著 西安地圖出版社</p>
溫馨提示
- 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ì)---銀行家算法
- 操作系統(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ì)---模擬銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)---銀行家算法實(shí)現(xiàn)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告—銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告—銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)---銀行家算法報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)-模擬銀行家算法-課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告---模擬實(shí)現(xiàn)銀行家算法
- 操作系統(tǒng)課程設(shè)計(jì)——銀行家算法的模擬實(shí)現(xiàn)
評(píng)論
0/150
提交評(píng)論