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