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

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  信息科學(xué)與工程學(xué)院課程設(shè)計任務(wù)書</p><p><b>  題目:銀行家算法</b></p><p> 課程設(shè)計的任務(wù)和具體要求指導(dǎo)教師簽字: 日期:</p><p> 指導(dǎo)教師評語成績:指導(dǎo)教師簽字: 日期:</p><p> 課程設(shè)計所需軟件、硬件等WIN-TC環(huán)境&

2、lt;/p><p> 課程設(shè)計進(jìn)度計劃</p><p> 起至日期工作內(nèi)容備注</p><p> 2014年6月6日1)從鍵盤輸入當(dāng)前系統(tǒng)的資源信息2)輸入進(jìn)程請求3)各種異常的處理</p><p> 參考文獻(xiàn)、資料索引</p><p> 序號文獻(xiàn)、資料名稱編著者出版單位</p><p> [1]

3、《計算機(jī)操作系統(tǒng)》湯子瀛,西安電子科技大學(xué)出版社,2007.86-132;[2] 《C語言程序設(shè)計》譚浩強,清華大學(xué)出版社,2009,(10):283;</p><p><b>  目錄</b></p><p><b>  一、緒論</b></p><p><b>  二、需求分析</b><

4、/p><p><b>  三、算法分析</b></p><p><b>  四、設(shè)計</b></p><p><b>  五、程序調(diào)試</b></p><p><b>  六、總結(jié)</b></p><p><b>  

5、附錄(源代碼)</b></p><p><b>  緒論</b></p><p>  Dijkstra (1965)提出了一種能夠避免死鎖的調(diào)度算法,稱為銀行家算法。</p><p>  銀行家算法是一種最有代表性的避免死鎖算法。在避免思死鎖方法中允許進(jìn)程動態(tài)地申請資源,但系統(tǒng)在進(jìn)行資源分配之前,應(yīng)先計算此次分配資源的安全性,若分

6、配不會導(dǎo)致系統(tǒng)進(jìn)入不安全狀態(tài),則分配,否則等待。為實現(xiàn)銀行家算法,系統(tǒng)必須設(shè)置若干數(shù)據(jù)結(jié)構(gòu)。</p><p>  銀行家算法執(zhí)行過程中,首先判斷申請資源的進(jìn)程所申請的資源數(shù)目是否合法,若是合法的,則可以為其進(jìn)行試分配,再利用安全性算法求出安全序列,·如果存在安全序列,則說明可以給申請資源的進(jìn)程分配資源,分配成功,繼續(xù)為其它進(jìn)程服務(wù)。如果找不到安全序列,則說明為該進(jìn)程分配資源后系統(tǒng)會進(jìn)入不安全狀態(tài),所以不

7、能為該進(jìn)程分配資源,使該進(jìn)程進(jìn)入阻塞狀態(tài)。若申請資源的進(jìn)程申請的資源數(shù)目不合法,則不需要進(jìn)行試分配,直接使其進(jìn)入阻塞狀態(tài),處理其他申請資源的進(jìn)程。</p><p>  在多道程序系統(tǒng)中,多個進(jìn)程的并發(fā)執(zhí)行來改善系統(tǒng)的資源利用率,提高系統(tǒng)的吞吐量,但可能發(fā)生一種危險——死鎖。所謂死鎖(Deadlock),是指多個進(jìn)程在運行過程中因爭奪資源而造成的一種僵局(DeadlyEmbrace),當(dāng)進(jìn)程處于這種狀態(tài)時,若無外力

8、作用,他們都無法在向前推進(jìn)。</p><p>  要預(yù)防死鎖,有摒棄“請求和保持”條件,摒棄“不剝奪”條件,摒棄“環(huán)路等待”條件等方法。</p><p>  但是,在預(yù)防死鎖的幾種方法之中,都施加了較強的限制條件;而在避免死鎖的方法中,所施加的限制條件較弱,有可能獲得令人滿意的系統(tǒng)性能。在該方法中把系統(tǒng)狀態(tài)分為安全狀態(tài)和不安全狀態(tài),便可避免死鎖的發(fā)生。</p><p&g

9、t;  而最具代表性的避免死鎖的算法,便是Dijkstra的銀行家算法。</p><p>  利用銀行家算法,我們可以來檢測CPU為進(jìn)程分配資源的情況,決定CPU是否響應(yīng)某進(jìn)程的的請求并為其分配資源,從而很好避免了死鎖的產(chǎn)生。</p><p><b>  需求分析</b></p><p><b>  2.1問題描述</b>

10、</p><p>  當(dāng)系統(tǒng)在進(jìn)行資源管理時,如果對進(jìn)城申請的資源分配不當(dāng),可能會使系統(tǒng)進(jìn)入死鎖狀態(tài),因而后面到來的進(jìn)程也無法順利執(zhí)行。銀行家算法中,要對當(dāng)前申請資源的進(jìn)程申請資源的數(shù)目進(jìn)行判斷,如果可以試分配,則試求出一個安全序列,如果可以求出,則說明給這個進(jìn)程分配資源后系統(tǒng)不會進(jìn)入不安全狀態(tài),將該進(jìn)程申請的資源分配給他,若求不出安全序列,則說明將資源分配給該進(jìn)程后系統(tǒng)會進(jìn)入不安全狀態(tài),所以就使該進(jìn)程進(jìn)入阻塞狀

11、態(tài),等待以后可以分配資源時再執(zhí)行該進(jìn)程,然后系統(tǒng)繼續(xù)服務(wù)其它進(jìn)程。通過這樣一個過程,可以有效避免系統(tǒng)進(jìn)入死鎖狀態(tài)。</p><p><b>  .2.2基本要求</b></p><p> ?。?)從鍵盤輸入當(dāng)前系統(tǒng)的資源信息,包括當(dāng)前可用資源,每個進(jìn)程對各類資源的最大需求量,每個進(jìn)程當(dāng)前已分配的各個資源量和每個進(jìn)程尚需要的各個資源量,輸出結(jié)果顯示在DOS界面上;<

12、;/p><p> ?。?)輸入進(jìn)程請求,按照設(shè)計好的安全性算法進(jìn)行檢查,得到結(jié)果并輸出整個執(zhí)行過程的相關(guān)信息和最終結(jié)果(主要包括資源分配表和安全序列)</p><p> ?。?)要求要有各種異常的處理,程序的可控制性和可連續(xù)性執(zhí)行。包括對進(jìn)程的存在有無檢查,請求向量的不合法檢查,試分配失敗后的數(shù)據(jù)恢復(fù)和重新接受進(jìn)程請求等。 </p><p><b>  2.

13、3概要分析</b></p><p>  在避免死鎖的算法中,允許進(jìn)程動態(tài)地申請資源,系統(tǒng)在進(jìn)行資源分配之前,先計算資源分配的安全性。若此次分配不會使系統(tǒng)進(jìn)入不安全狀態(tài),便將資源分配給該進(jìn)程否則進(jìn)程等待。</p><p>  所謂安全狀態(tài)是指系統(tǒng)能按某種順序如<p1,p2,……,pn>(稱<p1,p2,……,pn>為安全序列),就這樣來為每個進(jìn)程分配資源,

14、直至最大需求。使每個進(jìn)程都可以順序地執(zhí)行完畢。若系統(tǒng)不存在這樣一個安全序列,那么系統(tǒng)此時會進(jìn)入不安全狀態(tài)。</p><p>  雖然并非所有的不安全狀態(tài)都會產(chǎn)生死鎖狀態(tài),但當(dāng)系統(tǒng)進(jìn)入不安全狀態(tài)后,便可能進(jìn)而進(jìn)入死鎖狀態(tài);反之,只要系統(tǒng)處于安全狀態(tài),系統(tǒng)便可避免進(jìn)入死鎖狀態(tài)。因此,避免死鎖的實質(zhì)在于,如何使系統(tǒng)不進(jìn)入不安全狀態(tài),銀行家算法就是用來判斷某種情況會不會進(jìn)入不安全狀態(tài)。</p><p&

15、gt;<b>  2.4數(shù)據(jù)流模型</b></p><p><b>  三、算法分析</b></p><p><b>  3.1算法思路</b></p><p>  先對用戶提出的請求進(jìn)行合法性檢查,即檢查請求是否大于需要的,是否大于可利用的。若請求合法,則進(jìn)行預(yù)分配,對分配后的狀態(tài)調(diào)用安全性算法進(jìn)

16、行檢查。若安全,則分配;若不安全,則拒絕申請,恢復(fù)到原來的狀態(tài),拒絕申請。</p><p>  3.2銀行家算法步驟</p><p> ?。?)如果Requesti<o(jì)r =Need,則轉(zhuǎn)向步驟(2);否則,認(rèn)為出錯,因為它所需要的資源數(shù)已超過它所宣布的最大值。</p><p>  (2)如果Request<o(jì)r=Available,則轉(zhuǎn)向步驟(3);否則,表示系統(tǒng)

17、中尚無足夠的資源,進(jìn)程必須等待。</p><p>  (3)系統(tǒng)試探把要求的資源分配給進(jìn)程Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:</p><p>  Available=Available-Request[i];</p><p>  Allocation=Allocation+Request;</p><p>  Need=Need-Reques

18、t;</p><p>  (4)系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。</p><p>  3.3安全性算法步驟</p><p><b> ?。?)設(shè)置兩個向量</b></p><p> ?、俟ぷ飨蛄縒ork。它表示系統(tǒng)可提供進(jìn)程繼續(xù)運行所需要的各類資源數(shù)目,執(zhí)行安全算法開始時,Work=Allo

19、cation;</p><p> ?、诓紶栂蛄縁inish。它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運行完成,開始時先做Finish[i]=false,當(dāng)有足夠資源分配給進(jìn)程時,令Finish[i]=true。</p><p> ?。?)從進(jìn)程集合中找到一個能滿足下述條件的進(jìn)程:</p><p> ?、貴inish[i]=false</p><

20、p>  ②Need<or=Work</p><p>  如找到,執(zhí)行步驟(3);否則,執(zhí)行步驟(4)。</p><p> ?。?)當(dāng)進(jìn)程P獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:</p><p>  Work=Work+Allocation;</p><p>  Finish[i]=true;</

21、p><p><b>  轉(zhuǎn)向步驟(2)。</b></p><p>  (4)如果所有進(jìn)程的Finish[i]=true,則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。</p><p><b>  四、詳細(xì)設(shè)計</b></p><p>  4.1主要用到的數(shù)據(jù)結(jié)構(gòu)</p><p&g

22、t;  (1)進(jìn)程名向量 char processnema[N]; //進(jìn)程名</p><p>  (2)可利用資源向量int Available[M]; //資源清單——系統(tǒng)中現(xiàn)有各資源空閑個數(shù)。</p><p>  (3)最大需求矩陣int Max[N][M]; //最大需求矩陣——每個進(jìn)程對各資源的最大需求數(shù)分配矩陣</p>&l

23、t;p>  (4)已分配矩陣int Allocation[N][M];//分配矩陣——系統(tǒng)給每個進(jìn)程已分配的各類資源數(shù)</p><p>  (5)需求矩陣int Need[N][M]; //需求矩陣——每個進(jìn)程還需要每種資源的個數(shù)申請各類資源數(shù)量</p><p>  (6)申請向量int Request [M] //進(jìn)程申請資源的向量</p><p&g

24、t;  (7)工作向量int Work[N][M]; //初始第一個向量為Available[],隨尋找安全序列時為其余每個向量賦值,可以防止安全序列未找到而丟了初始狀態(tài)的值</p><p>  (8)安全序列向量int sequence[N]={0};//存放安全序列號</p><p>  (9)標(biāo)志向量int Finish[N] //求安全序列時記錄每個進(jìn)程是否可以順利執(zhí)

25、行</p><p><b>  4.2程序的模塊</b></p><p>  void main()//系統(tǒng)主函數(shù)</p><p>  intcheck_distribution()//安全性檢查函數(shù)</p><p>  intcheck_safe()//銀行家算法函數(shù)</p><p

26、>  void print()//輸出函數(shù)</p><p><b>  4.3程序流程圖</b></p><p><b>  五、程序調(diào)試</b></p><p>  函數(shù)的書寫分模塊進(jìn)行,每完成一個模塊進(jìn)行調(diào)試、測試直到該函數(shù)運行無誤。</p><p>  1、進(jìn)程信息的輸入與輸出調(diào)試

27、</p><p>  (1) 能正確無誤的輸入進(jìn)程名向量processnema[N],輸入系統(tǒng)現(xiàn)有各類資源數(shù)量Available[M]向量,輸入每個進(jìn)程對各類資源的最大需求數(shù)Max[N][M]矩陣,輸入系統(tǒng)給每個進(jìn)程已分配的各類資源數(shù)Allocation[N][M]矩陣。輸出程序過程如下圖所示:</p><p>  (2) 在進(jìn)程信息輸入中沒有出現(xiàn)多大問題,在進(jìn)程信息輸出時,按設(shè)計要求輸出

28、的話應(yīng)該是一個表格形式,在輸出函數(shù)設(shè)計最初,由于有些部分分割或空格沒有填充好,導(dǎo)致輸出表格比較亂,沒有達(dá)到設(shè)計要求,經(jīng)過修改后輸出形式才符合了設(shè)計要求,進(jìn)程信息輸入完成后,初始狀態(tài)各進(jìn)程信息輸出如下:</p><p>  2、進(jìn)程請求資源輸入出錯提示信息處理</p><p>  在系統(tǒng)詢問是否有進(jìn)程申請資源時,如果有輸入信息出錯,系統(tǒng)會給與出錯提示,如果輸入信息正確則系統(tǒng)將繼續(xù)執(zhí)行下面操作

29、,執(zhí)行如下:</p><p>  3、判斷是否可以試分配函數(shù)intcheck_distribution(int* p,int k)</p><p>  在這個函數(shù)中主要是對申請資源的進(jìn)程申請的資源數(shù)量是否滿足約束條件Request []<=need[]或Request []<=available[],如果不滿足將打出提示信息,如果滿足,則返回1繼續(xù)執(zhí)行下面程序,執(zhí)行結(jié)果如下:&

30、lt;/p><p>  4、求安全序列函數(shù)intcheck_safe()</p><p>  如果申請資源的進(jìn)程申請的資源數(shù)目滿足試分配條件,則再用這個函數(shù)來求試分配后的安全序列,如果可以求出安全序列,則說明這次分配不會使系統(tǒng)進(jìn)入不安全狀態(tài),正式將資源分配給該進(jìn)程,修改系統(tǒng)資源信息。如果求不出安全序列,說明這次分配后系統(tǒng)會進(jìn)入不安全狀態(tài),不能給該進(jìn)程分配資源,系統(tǒng)恢復(fù)初始狀態(tài),打印出提示信息,

31、執(zhí)行結(jié)果如下:</p><p><b>  六、總結(jié)</b></p><p>  經(jīng)過幾天的操作系統(tǒng)課程設(shè)計,我學(xué)習(xí)到了很多東西。首先,這次課程設(shè)計的內(nèi)容是銀行家算法,我用的編程工具是VC++,語言使用的是C語言,目的是模擬實現(xiàn)處理機(jī)避免死鎖;其次,通過模擬實現(xiàn)算法,我更進(jìn)一步地學(xué)習(xí)了C語言,這使我的編程能力得到了提高。</p><p>  解

32、決死鎖,我們要檢測一個安全狀態(tài),雖然并非所有的不安全狀態(tài)都會產(chǎn)生死鎖狀態(tài),但系統(tǒng)進(jìn)入不安全狀態(tài)時,便可能進(jìn)而進(jìn)入死鎖狀態(tài)后,當(dāng)系統(tǒng)在進(jìn)行資源管理時,如果對進(jìn)城申請的資源分配不當(dāng),可能會使系統(tǒng)進(jìn)入死鎖狀態(tài),因而后面到來的進(jìn)程也無法順利執(zhí)行。</p><p>  銀行家算法中,要對當(dāng)前申請資源的進(jìn)程申請資源的數(shù)目進(jìn)行判斷,如果可以試分配,則試求出一個安全序列,如果可以求出,則說明給這個進(jìn)程分配資源后系統(tǒng)不會進(jìn)入不安全

33、狀態(tài),將該進(jìn)程申請的資源分配給他,若求不出安全序列,則說明將資源分配給該進(jìn)程后系統(tǒng)會進(jìn)入不安全狀態(tài),所以就使該進(jìn)程進(jìn)入阻塞狀態(tài),等待以后可以分配資源時再執(zhí)行該進(jìn)程,然后系統(tǒng)繼續(xù)服務(wù)其它進(jìn)程。通過這樣一個過程,可以有效避免系統(tǒng)進(jìn)入死鎖狀態(tài)。反之,只要系統(tǒng)處于安全狀態(tài),系統(tǒng)便可避免進(jìn)入死鎖狀態(tài)。因此,避免死鎖的實質(zhì)在于——如何使系統(tǒng)不進(jìn)入不安全狀態(tài)。很明顯這些概念在操作系統(tǒng)上是非常重要的東西,我相信這對我以后的學(xué)習(xí)也有很大的幫助。</

34、p><p><b>  附錄(源代碼)</b></p><p>  #include<STRING.H></p><p>  #include<stdio.h></p><p>  #include<stdlib.h></p><p>  #include<C

35、ONIO.H> /*用到了getch()*/</p><p>  #define M 5 /*進(jìn)程數(shù)*/</p><p>  #define N 3 /*資源數(shù)*/</p><p>  #define FALSE 0</p><p>  #define TRUE 1</p><p>  /*M個進(jìn)程對N類資源最大

36、資源需求量*/</p><p>  int max[M][N]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};</p><p>  /*系統(tǒng)可用資源數(shù)*/</p><p>  int AVAILABLE[N]={10,5,7};</p><p>  /*M個進(jìn)程已分配到的N類數(shù)量*/</p>

37、<p>  int ALLOCATION[M][N]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};</p><p>  /*M個進(jìn)程已經(jīng)得到N類資源的資源量*/</p><p>  int NEED[M][N]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};</p><p> 

38、 /*M個進(jìn)程還需要N類資源的資源量*/</p><p>  int Request[N]={0,0,0};</p><p>  void main()</p><p><b>  {</b></p><p>  int i=0,j=0;</p><p>  char flag;</p>

39、;<p>  voidshowdata();</p><p>  voidchangdata(int);</p><p>  voidrstordata(int);</p><p>  intchkerr(int);</p><p>  showdata();</p><p><b>  ent

40、er:</b></p><p><b>  {</b></p><p>  printf("請輸入需申請資源的進(jìn)程號(從0到");</p><p>  printf("%d",M-1);</p><p>  printf("):");</p&g

41、t;<p>  scanf("%d",&i);</p><p><b>  }</b></p><p>  if(i<0||i>=M)</p><p><b>  {</b></p><p>  printf("輸入的進(jìn)程號不存在,重新

42、輸入!\n");</p><p>  goto enter;</p><p><b>  }</b></p><p><b>  err:</b></p><p><b>  {</b></p><p>  printf("請輸入進(jìn)程

43、");</p><p>  printf("%d",i);</p><p>  printf("申請的資源數(shù)\n");</p><p>  printf("類別:ABC\n");</p><p>  printf("");</p><

44、p>  for(j=0;j<N;j++)</p><p><b>  {</b></p><p>  scanf("%d",&Request[j]);</p><p>  if(Request[j]>NEED[i][j])</p><p><b>  {</b

45、></p><p>  printf("%d",i);</p><p>  printf("號進(jìn)程");</p><p>  printf("申請的資源數(shù)>進(jìn)程");</p><p>  printf("%d",i);</p><p

46、>  printf("還需要");</p><p>  printf("%d",j);</p><p>  printf("類資源的資源量!申請不合理,出錯!請重新選擇!\n");</p><p><b>  goto err;</b></p><p>&

47、lt;b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if(Request[j]>AVAILABLE[j])</p><p><b>  {</b></p>&l

48、t;p>  printf("進(jìn)程");</p><p>  printf("%d",i);</p><p>  printf("申請的資源數(shù)大于系統(tǒng)可用");</p><p>  printf("%d",j);</p><p>  printf("

49、類資源的資源量!申請不合理,出錯!請重新選擇!\n");</p><p><b>  goto err;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p&

50、gt;<p><b>  }</b></p><p>  changdata(i);</p><p>  if(chkerr(i))</p><p><b>  {</b></p><p>  rstordata(i);</p><p>  showdata()

51、;</p><p><b>  }</b></p><p><b>  else</b></p><p>  showdata();</p><p>  printf("\n");</p><p>  printf("按'y'或&

52、#39;Y'鍵繼續(xù),否則退出\n");</p><p>  flag=getch();</p><p>  if(flag=='y'||flag=='Y')</p><p><b>  {</b></p><p>  goto enter;</p><

53、p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  exit(0);</b></p><p><b>  }</b></p>

54、<p><b>  }</b></p><p><b>  /*顯示數(shù)組*/</b></p><p>  voidshowdata()</p><p><b>  {</b></p><p><b>  inti,j;</b></p>

55、;<p>  printf("系統(tǒng)可用資源向量:\n");</p><p>  printf("***Available***\n");</p><p>  printf("資源類別:ABC\n");</p><p>  printf("資源數(shù)目:");</p>

56、<p>  for(j=0;j<N;j++)</p><p><b>  {</b></p><p>  printf("%d",AVAILABLE[j]);</p><p><b>  }</b></p><p>  printf("\n"

57、;);</p><p>  printf("\n");</p><p>  printf("各進(jìn)程還需要的資源量:\n");</p><p>  printf("******Need******\n");</p><p>  printf("資源類別:ABC\n"

58、);</p><p>  for(i=0;i<M;i++)</p><p><b>  {</b></p><p>  printf("");</p><p>  printf("%d",i);</p><p>  printf("號進(jìn)程:&

59、quot;);</p><p>  for(j=0;j<N;j++)</p><p><b>  {</b></p><p>  printf("%d",NEED[i][j]);</p><p><b>  }</b></p><p>  print

60、f("\n");</p><p><b>  }</b></p><p>  printf("\n");</p><p>  printf("各進(jìn)程已經(jīng)得到的資源量:\n");</p><p>  printf("***Allocation***\n&

61、quot;);</p><p>  printf("資源類別:ABC\n");</p><p>  for(i=0;i<M;i++)</p><p><b>  {</b></p><p>  printf("");</p><p>  printf(

62、"%d",i);</p><p>  printf("號進(jìn)程:");</p><p>  /*printf(":\n");*/</p><p>  for(j=0;j<N;j++)</p><p><b>  {</b></p><p&

63、gt;  printf("%d",ALLOCATION[i][j]);</p><p><b>  }</b></p><p>  printf("\n");</p><p><b>  }</b></p><p>  printf("\n"

64、;);</p><p><b>  }</b></p><p>  /*系統(tǒng)對進(jìn)程請求響應(yīng),資源向量改變*/</p><p>  voidchangdata(int k)</p><p><b>  {</b></p><p><b>  int j;</b&

65、gt;</p><p>  for(j=0;j<N;j++)</p><p><b>  {</b></p><p>  AVAILABLE[j]=AVAILABLE[j]-Request[j];</p><p>  ALLOCATION[k][j]=ALLOCATION[k][j]+Request[j];<

66、/p><p>  NEED[k][j]=NEED[k][j]-Request[j];</p><p>  AVAILABLE[j]=AVAILABLE[j]+ALLOCATION[k][j];</p><p><b>  }</b></p><p><b>  }</b></p><

67、p>  /*資源向量改變*/</p><p>  voidrstordata(int k)</p><p><b>  {</b></p><p><b>  int j;</b></p><p>  for(j=0;j<N;j++)</p><p><b&

68、gt;  {</b></p><p>  AVAILABLE[j]=AVAILABLE[j]+Request[j];</p><p>  ALLOCATION[k][j]=ALLOCATION[k][j]-Request[j];</p><p>  NEED[k][j]=NEED[k][j]+Request[j];</p><p>

69、;<b>  }</b></p><p><b>  }</b></p><p>  /*安全性檢查函數(shù)*/</p><p>  intchkerr(int s)</p><p><b>  {</b></p><p>  int WORK,FINISH

70、[M],temp[M];</p><p>  inti,j,k=0;</p><p>  for(i=0;i<M;i++) FINISH[i]=FALSE;</p><p>  for(j=0;j<N;j++)</p><p><b>  {</b></p><p>  WORK=AV

71、AILABLE[j];</p><p><b>  i=s;</b></p><p>  while(i<M)</p><p><b>  {</b></p><p>  if(FINISH[i]==FALSE&&NEED[i][j]<=WORK)</p>

72、<p><b>  {</b></p><p>  WORK=WORK+ALLOCATION[i][j];</p><p>  FINISH[i]=TRUE;</p><p>  temp[k]=i;</p><p><b>  k++;</b></p><p>&

73、lt;b>  i=0;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p><b>  i++;</b></p><p&

74、gt;<b>  }</b></p><p><b>  }</b></p><p>  for(i=0;i<M;i++)</p><p>  if(FINISH[i]==FALSE)</p><p><b>  {</b></p><p>  p

75、rintf("\n");</p><p>  printf("系統(tǒng)不安全!本次資源申請不成功!\n");</p><p>  printf("\n");</p><p><b>  return 1;</b></p><p><b>  }</b

76、></p><p><b>  }</b></p><p>  printf("\n");</p><p>  printf("經(jīng)安全性檢查,系統(tǒng)安全,本次分配成功。\n");</p><p>  printf("\n");</p><

77、p>  printf("本次安全序列:\n");</p><p>  printf("進(jìn)程依次為");</p><p>  for(i=0;i<M;i++)</p><p><b>  {</b></p><p>  printf("%d",temp

78、[i]);</p><p>  printf("->");</p><p><b>  }</b></p><p>  printf("\n");</p><p><b>  return 0;</b></p><p><b

溫馨提示

  • 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

提交評論