2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論