




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、操作系統(tǒng)操作系統(tǒng)課程設(shè)計課程設(shè)計 題題 目目處理機調(diào)度模擬設(shè)計處理機調(diào)度模擬設(shè)計短作業(yè)先調(diào)短作業(yè)先調(diào)度、先來先服務(wù)調(diào)度、最高響應(yīng)比調(diào)度、先來先服務(wù)調(diào)度、最高響應(yīng)比調(diào)度算法度算法專專 業(yè)業(yè)班班 級級學(xué)學(xué) 號號姓姓 名名指導(dǎo)教師指導(dǎo)教師年月日目目 錄錄1 1、概述、概述.1 11.1、設(shè)計目的.11.2、設(shè)計內(nèi)容.11.3、開發(fā)環(huán)境.11.4、任務(wù)分配.12 2、需求分析、需求分析.2 22.1、死鎖概念:.22.2、關(guān)于死鎖的一些結(jié)論:.22.3、資源分類:.22.4、產(chǎn)生死鎖的四個必要條件:.32.5、 死鎖的解決方案.32.5.1 產(chǎn)生死鎖的例子.32.5.2 死鎖預(yù)防: .42.6安全狀態(tài)
2、與不安全狀態(tài).53 3、數(shù)據(jù)結(jié)構(gòu)設(shè)計、數(shù)據(jù)結(jié)構(gòu)設(shè)計.5 53.1、定義全局變量.53.2、函數(shù)聲明.53.3、主函數(shù)結(jié)構(gòu).64 4、算法的實現(xiàn)、算法的實現(xiàn).7 74.1、初始化.74.2、銀行家算法.74.3、安全性檢查算法.74.4、程序模塊劃分.84.5 程序運行結(jié)果顯示.94.6、各算法流程圖.114.7、源程序清單.125 5、心得與體會:、心得與體會:.22226 6、參考文獻、參考文獻.222211 1、概述、概述 1.11.1、設(shè)計目的、設(shè)計目的(1)了解多道程序系統(tǒng)中,多個進程并發(fā)執(zhí)行的資源分配。 (2)掌握死鎖的產(chǎn)生的原因、產(chǎn)生死鎖的必要條件和處理死鎖的基本方法。 (3)掌握
3、預(yù)防死鎖的方法,系統(tǒng)安全狀態(tài)的基本概念。 (4)掌握銀行家算法,了解資源在進程并發(fā)執(zhí)行中的資源分配策略。 (5)理解死鎖避免在當(dāng)前計算機系統(tǒng)不常使用的原因。1.21.2、設(shè)計內(nèi)容、設(shè)計內(nèi)容 利用銀行家算法來實現(xiàn)資源的分配。先對用戶提出的請求進行合法性檢查,再進行預(yù)分配,利用安全性檢查算法進行安全性檢查。1.31.3、開發(fā)環(huán)境、開發(fā)環(huán)境 操作系統(tǒng)編譯環(huán)境生成文件Windows7Visual C+6.0Bank.exeWindows7Code blocks 10.05Bank.exe源文件:Bank.cpp 1.1.4 4、任務(wù)分配、任務(wù)分配設(shè)計人員設(shè)計任務(wù)劉新宇負責(zé)主要代碼編寫丁正寧負責(zé)程序意見
4、提取和進度安排譚瓊斐課程設(shè)計報告主要的書寫王正香心得與體會的書寫22 2、需求分析、需求分析2.12.1、死鎖概念:、死鎖概念:在多道程序系統(tǒng)中,雖可借助于多個進程的并發(fā)執(zhí)行,來改善系統(tǒng)的資源利用率,提高系統(tǒng)的吞吐量,但可能發(fā)生一種危險死鎖。所謂死鎖(Deadlock),是指多個進程在運行中因爭奪資源而造成的一種僵局(Deadly_Embrace),當(dāng)進程處于這種僵持狀態(tài)時,若無外力作用,它們都將無法再向前推進。一組進程中,每個進程都無限等待被該組進程中另一進程所占有的資源,因而永遠無法得到的資源,這種現(xiàn)象稱為進程死鎖,這一組進程就稱為死鎖進程。 2.22.2、關(guān)于死鎖的一些結(jié)論:、關(guān)于死鎖的
5、一些結(jié)論: a 參與死鎖的進程最少是兩個(兩個以上進程才會出現(xiàn)死鎖) b 參與死鎖的進程至少有兩個已經(jīng)占有資源 c 參與死鎖的所有進程都在等待資源 d 參與死鎖的進程是當(dāng)前系統(tǒng)中所有進程的子集 注:如果死鎖發(fā)生,會浪費大量系統(tǒng)資源,甚至導(dǎo)致系統(tǒng)崩潰。 2.32.3、資源分類:、資源分類: 永久性資源: 可以被多個進程多次使用(可再用資源) a 可搶占資源 b 不可搶占資源 臨時性資源:只可使用一次的資源;如信號量,中斷信號,同步信號等(可消耗性資源) “申請分配使用釋放”模式 3 2.42.4、產(chǎn)生死鎖的四個必要條件:、產(chǎn)生死鎖的四個必要條件:1、互斥使用(資源獨占) 一個資源每次只能給一個進
6、程使用 2、不可強占(不可剝奪) 資源申請者不能強行的從資源占有者手中奪取資源,資源只能由占有者自愿釋放 3、請求和保持(部分分配,占有申請) 一個進程在申請新的資源的同時保持對原有資源的占有(只有這樣才是動態(tài)申請,動態(tài)分配) 4、循環(huán)等待 存在一個進程等待隊列 P1 , P2 , , Pn, 其中 P1 等待 P2 占有的資源,P2 等待 P3 占有的資源,Pn 等待 P1 占有的資源,形成一個進程等待環(huán)路 2.52.5、 死鎖的解決方案死鎖的解決方案 2.5.1 產(chǎn)生死鎖的例子 申請不同類型資源產(chǎn)生死鎖 P1: 申請打印機 申請掃描儀 使用 釋放打印機 釋放掃描儀 4P2: 申請掃描儀 申
7、請打印機 使用 釋放打印機 釋放掃描儀 申請同類資源產(chǎn)生死鎖(如內(nèi)存) 設(shè)有資源 R,R 有 m 個分配單位,由 n 個進程 P1,P2,Pn(n m)共享。假設(shè)每個進程對 R 的申請和釋放符合下列原則: * 一次只能申請一個單位 * 滿足總申請后才能使用 * 使用完后一次性釋放 m=2,n=3 資源分配不當(dāng)導(dǎo)致死鎖產(chǎn)生 2.5.2 死鎖預(yù)防: 定義:在系統(tǒng)設(shè)計時確定資源分配算法,保證不發(fā)生死鎖。具體的做法是破壞產(chǎn)生死鎖的四個必要條件之一 破壞“不可剝奪”條件 在允許進程動態(tài)申請資源前提下規(guī)定,一個進程在申請新的資源不能立即得到滿足而變?yōu)榈却隣顟B(tài)之前,必須釋放已占有的全部資源,若需要再重新申請
8、 破壞“請求和保持”條件 要求每個進程在運行前必須一次性申請它所要求的所有資源,且僅當(dāng)該進程所要資源均可滿足時才給予一次性分配 破壞“循環(huán)等待”條件 5采用資源有序分配法: 把系統(tǒng)中所有資源編號,進程在申請資源時必須嚴格按資源編號的遞增次序進行,否則操作系統(tǒng)不予分配。 2.62.6安全狀態(tài)與不安全狀態(tài)安全狀態(tài)與不安全狀態(tài) 安全狀態(tài): 如果存在一個由系統(tǒng)中所有進程構(gòu)成的安全序列 P1,Pn,則系統(tǒng)處于安全狀態(tài)。一個進程序列P1,Pn是安全的,如果對于每一個進程 Pi(1in),它以后尚需要的資源量不超過系統(tǒng)當(dāng)前剩余資源量與所有進程 Pj (j i )當(dāng)前占有資源量之和,系統(tǒng)處于安全狀態(tài) (安全狀
9、態(tài)一定是沒有死鎖發(fā)生的) 不安全狀態(tài):不存在一個安全序列,不安全狀態(tài)一定導(dǎo)致死鎖。 3、數(shù)據(jù)結(jié)構(gòu)設(shè)計、數(shù)據(jù)結(jié)構(gòu)設(shè)計3.13.1、定義全局變量、定義全局變量const int x=50,y=100; /定義常量,便于修改int Availablex; /各種資源可利用的數(shù)量int Allocationyy; /各進程當(dāng)前已分配的資源數(shù)量int Maxyy; /各進程對各類資源的最大需求數(shù)int Needyy; /還需求矩陣int Requestx; /申請各類資源的數(shù)量int Workx; /工作向量,表示系統(tǒng)可提供給進程運行所需各類資源數(shù)量int Finishy; /表示系統(tǒng)是否有足夠的資源分
10、配給進程,0 為否,1 為是int py; /存儲安全序列int i,j; /全局變量,主要用于循環(huán)語句中int n,m; /n 為進程的數(shù)量,m 為資源種類數(shù)int l=0,counter=0;3.23.2、函數(shù)聲明、函數(shù)聲明int shuzi(int sz); /數(shù)字判斷函數(shù)void chushihua(); /系統(tǒng)初始化函數(shù)void safe(); /安全性算法函數(shù)void bank(); /銀行家算法函數(shù)6void showdata(); /函數(shù) showdata,輸出當(dāng)前資源分配情況void sign(); /簽名函數(shù)3.33.3、主函數(shù)結(jié)構(gòu)、主函數(shù)結(jié)構(gòu)int main() syst
11、em(color 06f); /設(shè)置當(dāng)前窗口的背景色和前景色 0 = 黑色 8 = 灰色 coutendlendl; couttt=endl; couttt| |endl; couttt| 模擬銀行家算法 |endl; couttt| |endl; couttt| 作者:lxy |endl; couttt| |endl; couttt=endlendlendlendl; chushihua(); /初始化函數(shù)調(diào)用 coutendlendl; showdata(); /輸出初始化后的狀態(tài)/=判斷當(dāng)前狀態(tài)的安全性= safe(); /安全性算法函數(shù)調(diào)用 if (ln) coutn 當(dāng)前狀態(tài)不安全,
12、無法申請,程序退出!endl; coutendl; system(pause); sign(); /調(diào)用簽名函數(shù) return 0; / break; else int i; l=0; coutn 安全的狀態(tài)!endl; cout安全序列為: ; coutendl進程(p0); /輸出安全序列,考慮顯示格式,先輸出第一個 for (i=1; in; i+) cout進程(pi); for (i=0; in; i+) Finishi=0; /所有進程置為未分配狀態(tài)7 coutendlendl; bank(); /銀行家算法函數(shù)調(diào)用 return 0;4、算法的實現(xiàn)、算法的實現(xiàn)4.14.1、初始化
13、、初始化 調(diào)用函數(shù) chushihua(),輸入進程數(shù)量,資源種類,各資源可用數(shù)量,各進程已分配、最大需求各資源數(shù)量等。4.24.2、銀行家算法、銀行家算法 調(diào)用 bank()函數(shù),輸入用戶的請求三元組(I,J,K),為進程 I 申請 K 個 J 類資源。4.34.3、安全性檢查算法、安全性檢查算法 調(diào)用函數(shù) safe()檢查當(dāng)前資源分配狀態(tài)。 (1)設(shè)置兩個臨時變量。FINISHN記錄進程模擬執(zhí)行的結(jié)束狀態(tài),初值為 0,如果可以模擬執(zhí)行結(jié)束,則可設(shè)為 1,也可設(shè)為其它非零值以表示執(zhí)行的先后次序。WORKM記錄模擬執(zhí)行中資源的回收情況,初值為 AVAILABLEM的值。(2)在進程中查找符合以
14、下條件的進程。條件 1:FINISHI=0條件 2:NEEDIJ=WORKJ(3)如果查找成功則進行資源的模擬回收,語句如下:WORKJ=WORKJ+ALLOCATIONIJ;FINISHI=1 或查找到的順序號;(4)如果查找不成功,則檢查所有進程的 FINISH,如果有一個為 0,則系統(tǒng)不為 0,返8回不成功標(biāo)志。否則返回成功標(biāo)志。4.44.4、程序模塊劃分、程序模塊劃分本程序共有以下六個模塊: 4.4.1、字符判斷模塊:判斷輸入的字符是否為數(shù)字,如果不是則提示出錯并重新輸入,主要處理輸入為非數(shù)字時程序出現(xiàn)運行錯誤現(xiàn)象。此模塊功能由數(shù)字判斷函數(shù)( int shuzi(int sz); )實
15、現(xiàn)。 4.4.2、程序初始化模塊:用于程序開始進行初始化輸入數(shù)據(jù):進程數(shù)量、資源種類、各種資源可利用數(shù)量、各進程的各種資源已分配數(shù)量、各進程對各類資源最大需求數(shù)等。此模塊功能在系統(tǒng)初始化函數(shù)(void chushihua(); )中實現(xiàn)。 4.4.3、當(dāng)前安全性檢查模塊:用于判斷當(dāng)前狀態(tài)安全性,根據(jù)不同地方的調(diào)用提示處理不同,在安全性算函數(shù)(void safe(); )中實現(xiàn)。 4.4.4、銀行家算法模塊:進行銀行家算法模擬實現(xiàn)的模塊,調(diào)用其他各個模塊進行銀行家算法模擬過程,在銀行家算法函數(shù)(void bank();)中實現(xiàn)。 4.4.5、顯示分配模塊:顯示當(dāng)前資源分配詳細情況,包括:各種資源
16、的總數(shù)量(all)、系統(tǒng)目前各種資源可用的數(shù)量、各進程已經(jīng)得到的資源數(shù)量、各進程還需要的資源量,在顯示分配情況函數(shù)(void showdata(); )中實現(xiàn)。 4.4.6、簽名模塊:用于程序結(jié)束時顯示程序版權(quán)聲明簽名等,在簽名函數(shù)(void sign(); )中實現(xiàn)。94.54.5 程序運行結(jié)果顯示程序運行結(jié)果顯示10114.64.6、各算法流程圖、各算法流程圖 開始開始清除所有進程清除所有進程“能運行完成能運行完成”的標(biāo)志的標(biāo)志系統(tǒng)剩余資源數(shù)與系統(tǒng)剩余資源數(shù)與“能運行完能運行完”標(biāo)志為標(biāo)志為 0 的進程尚需資源數(shù)的進程尚需資源數(shù)比較,找出一個系統(tǒng)能滿足要求的進程。比較,找出一個系統(tǒng)能滿足要
17、求的進程。對申請者預(yù)分配對申請者預(yù)分配找到找到?設(shè)置該進程設(shè)置該進程“能運行完能運行完”標(biāo)志標(biāo)志并假設(shè)它歸還全部資源。并假設(shè)它歸還全部資源。檢查是否有檢查是否有“能運行能運行完完”標(biāo)志尚未設(shè)置的進標(biāo)志尚未設(shè)置的進程。程。有有?分配不安全分配不安全不能分配不能分配Y分配安全分配安全進行實際分配進行實際分配N結(jié)束結(jié)束124.74.7、源程序清單、源程序清單#include #include #include #include #include using namespace std;/=定義全局變量=const int x=50,y=100; /定義常量,便于修改int Availablex; /
18、各種資源可利用的數(shù)量int Allocationyy; /各進程當(dāng)前已分配的資源數(shù)量int Maxyy; /各進程對各類資源的最大需求數(shù)int Needyy; /還需求矩陣int Requestx; /申請各類資源的數(shù)量int Workx; /工作向量,表示系統(tǒng)可提供給進程繼續(xù)運行所需的各類資源數(shù)量int Finishy; /表示系統(tǒng)是否有足夠的資源分配給進程,0 為否,非 0 為是int py; /存儲安全序列int i,j;int n,m; /n 為進程的數(shù)量,m 為資源種類數(shù)int l=0,counter=0;/=數(shù)字判斷函數(shù)=int shuzi(int sz) /輸入數(shù)據(jù)并判斷是否為數(shù)
19、字 char *temp; temp=new char; /臨時指針,存放輸入字符 int len; /存儲取字符的長度 sz=0 ; /清零 char s; / do /輸入賭注,只能輸入數(shù)字 cintemp; len=strlen(temp); /取字符長度 for(int i=0; ilen; i+) s= *(temp+i); if(s9) cout 笨蛋,輸錯了! 你輸入的是數(shù)字嗎?! nn; cout請重新輸入:; break; 13 while(s9); for(int i=0; ilen; i+) /輸入字符串轉(zhuǎn)化為整形數(shù)字 int t=1; for(int j=1; jlen
20、-i; j+) t*=10; sz+=(*(temp+i)-48)*t; return sz;/=系統(tǒng)初始化函數(shù)=void chushihua() /=系統(tǒng)初始化輸入= cout% 程序開始,系統(tǒng)初始化輸入 %endl; /endl cout=endlendl; cout請輸入進程的數(shù)量: ;/從此開始輸入有關(guān)數(shù)據(jù) n=shuzi(n); cout請輸入資源種類數(shù): ; m=shuzi(m); coutendlendl請輸入各種資源可利用的數(shù)量( m 種): endl; coutendl; for (j=0; jm; j+) cout 輸入資源 j 可利用的數(shù)量 Availablej: ; A
21、vailablej=shuzi(Availablej); Workj=Availablej; /初始化 Workj coutendl; cout請輸入各進程當(dāng)前已分配的資源數(shù)量 Allocationnm: endlendl; for (i=0; in; i+) for (j=0; jm; j+) cout 請輸入進程 i 當(dāng)前已分配的資源 j 數(shù)量: ; Allocationij=shuzi(Allocationij); coutendl; Finishi=0;/初始化 Finishi coutendlendl;14 cout請輸入各進程對各類資源的最大需求數(shù) Maxnm: endlendl;
22、 for (i=0; in; i+) for (j=0; jm; j+) cout 請輸入進程 i 對資源 j=Allocationij) Needij = Maxij-Allocationij; /計算還需求量 else Needij=0;/最大需求量小于已分配量時還需求量為 0,即此類資源已足夠不需再申請 coutendl; coutendl% 初始化完成! %endl;/=安全性算法函數(shù)=void safe() l=0; for (i=0; in;) /i+ if (Finishi=0) /尋找 Finishi=0 的進程 條件一 counter=0; /記數(shù)器 /* 算法一: for
23、(j=0; j=Needij) /可用大于等于需求 counter=counter+1;/記數(shù) if(counter=m) */ /算法二: for (j=0; j=Needij); /可用大于等于需求 else counter=1; break; if(counter!=1) /進程的每類資源量都符合條件 Workj=Needij 條件二 pl=i; /存儲安全序列15 Finishi=1; /標(biāo)志為可分配 for (j=0; j=Needij i= -1; /從第一個進程開始繼續(xù)尋找滿足條件一二的進程 i+; /for 循環(huán)繼續(xù)尋找 /=顯示分配情況函數(shù) =void showdata()
24、/函數(shù) showdata,輸出當(dāng)前資源分配情況 int i,j; /局部變量 int Ally; /各種資源的總數(shù)量 int l2; /局部變量 l1, cout=endlendl; cout% 系統(tǒng)當(dāng)前狀態(tài)如下:%endlendl; cout% 各種資源的總數(shù)量(all):endl; for (j=0; jm; j+) cout 資源j: ; Allj=Availablej; /初始化 先賦值加上可利用量 for (i=0; in; i+) Allj+=Allocationij; /再加上每個進程已分配量計算 J 類資源總量 coutAllj ; if (j+1)%5=0 ) coutend
25、l; /每行顯示五個 & j!=0 coutendlendl; cout% 系統(tǒng)目前各種資源可用的數(shù)為(available):endl; for (j=0; jm; j+) cout 資源j: Availablej ; if(j+1)%5=0) coutendl; /每行最多顯示五個 & j!=0 16 coutendlendl; cout% 各進程已經(jīng)得到的資源量(allocation): endl; / l1=0; /歸零 for(i=0; i=m/5; i+) /設(shè)計每行最多顯示五種資源 for (j=i*5; ji*5+5 & jm; j+) cout 資源j;
26、 coutendl; for(l2=0; l2n; l2+) cout進程l2:; for (j=i*5; ji*5+5 & jm; j+) coutAllocationl2j ; coutendl; coutendl; cout% 各進程還需要的資源量(need):endl; /l1=0; for(i=0; i=m/5; i+) /設(shè)計每行顯示五種資源 for (j=i*5; ji*5+5 & jm; j+)cout 資源j; coutendl; for(l2=0; l2n; l2+) cout進程l2:; for (j=i*5; ji*5+5 & jm; j+)co
27、utNeedl2j ; coutendl; coutendl; cout=endl; coutendl; system(pause); / 暫停/=簽名函數(shù) =void sign() system(cls); / 清屏 coutendlendlendlendlendlendl; couttt =endl; couttt = =endl;17 couttt = 本程序由劉新宇制作 =endl; couttt = 謝謝你的使用 =endl; couttt = 版權(quán)沒有,隨便復(fù)制 =endl; couttt = =endl; couttt = 衡陽師院 12.5 =endl; couttt = =e
28、ndl; couttt =endl; coutendlendlendlendlendlendlendlendlendl; / getch(); /等待鍵盤輸入,不返回任何值,用于設(shè)置程序運行界面 system(pause);/暫停 比較兩種方式 /* 經(jīng)過在不同的編輯器中調(diào)試發(fā)現(xiàn),不同的調(diào)試器對函數(shù)執(zhí)行的順序有差別 如在此處使用 getch() 和 system(pause) 函數(shù)時,在 visual c+6.0 中先執(zhí)行此函數(shù)再顯示, 而在 dev-c+ 中則按順序執(zhí)行 對此問題我在很多地方搜索查找均未找到滿意的答案,本次換用調(diào)試器才發(fā)現(xiàn)理解-4.29 本次調(diào)試格式時,將換行命令 n 改為
29、endl 時,發(fā)現(xiàn) system(pause) 函數(shù)執(zhí)行變?yōu)轫樞?執(zhí)行,由此領(lǐng)悟到 n 命令和 system(pause)調(diào)用了一樣系統(tǒng)函數(shù),在調(diào)用的順序上system(pause) 優(yōu)先所以它就先執(zhí)行了 查找了一下相關(guān)幫助: 在 OSTREAM.H 中有這樣的一個 inline 函數(shù): inline _CRTIMP ostream& _cdecl endl(ostream& _outs) return _outs n flush; 也就是說 endl= return _outs n flush; endl 除了寫n進外,還調(diào)用 flush 函數(shù),刷新緩沖區(qū),把緩沖區(qū)里的數(shù)據(jù)寫
30、入文件或屏幕, 如果考慮效率就用n */ coutttt ;/=銀行家算法函數(shù)=void bank() cout=endlendl; cout% 以下開始為進程進行資源分配申請 %endlendl; /=申請資源= int k=0;/用于輸入進程編號 bool r=false; / 初值為假,輸入 Y 繼續(xù)申請則置為真 do18 /輸入請求 cout請輸入申請資源的進程編號(輸入 0-n-1之間): ; k=shuzi(k); coutn-1) /輸入異常處理 coutendl您輸入了錯誤的進程號,請重新輸入!endl; coutendl請輸入申請資源的進程編號(輸入 0-n-1之間): ;
31、k=shuzi(k); coutendl; coutendl請輸入該進程申請各類資源的數(shù)量: endl; for (j=0; jm; j+) do /dowhile 循環(huán)判斷申請輸入的情況 cout進程 k 申請資源j的數(shù)量:; Requestj=shuzi(Requestj); coutNeedkj) /申請大于需求量時出錯,提示重新輸入(貸款數(shù)目不允許超過需求數(shù)目) cout申請大于需要量!endl; cout您申請資源j的數(shù)量為Requestj,大于進程k對該資源需求量Needkj。endl; cout請重新輸入!Availablej) /申請大于可利用量, 應(yīng)該阻塞等待 coutn 沒
32、有那么多資源,目前可利用資源j數(shù)量為Availablej,本次申請不成功,進程等待!Needkj); /RequestjAvailablej| /改變 Avilable、Allocation、Need 的值 for (j=0; jm; j+) Availablej = Availablej-Requestj;19 Allocationkj = Allocationkj+Requestj; Needkj = Needkj-Requestj; Workj = Availablej; /判斷當(dāng)前狀態(tài)的安全性 safe(); /調(diào)用安全性算法函數(shù) if (ln) l=0; coutn 當(dāng)前狀態(tài)不安全,
33、不予分配!endl; /恢復(fù)數(shù)據(jù) for (j=0; jm; j+) Availablej = Availablej+Requestj; Allocationkj = Allocationkj-Requestj; Needkj = Needkj+Requestj; Workj = Availablej; for (i=0; in; i+) Finishi=0; /進程置為未分配狀態(tài) else l=0; coutn 申請資源成功!endl;/= /* /如果該進程所有需要的資源都已申請到,即 NEEDkj均為零,則進程可以執(zhí)行,執(zhí)行完后需釋放其所有擁有的資源 /算法一: for(j=0;jm;j
34、+) if(Needkj=0) l=l+1; if(l=m) /此處借用 l 做下計數(shù)器 for (j=0;jm;j+) /釋放該進程的所有資源 Availablej=Availablej+Maxkj; Allocationkj=0; l=0; /歸零 */算法二: (相對第一種算法節(jié)省時間) for(j=0; jm; j+) if(Needkj=0);20 else /有一種資源還沒全部申請到,則該進程不可執(zhí)行,不能釋放擁有的資源 l=1; /置 l 為 1,作為判斷標(biāo)志 break; if(l!=1) /進程可以執(zhí)行,則釋放該進程的所有資源 for (j=0; jm; j+) Availa
35、blej=Availablej+Allocationkj; Allocationkj=0; cout該進程已得到所有需求資源,執(zhí)行后將釋放其所有擁有資源!endl; l=0; /歸零/= coutn 安全的狀態(tài)!endl; cout安全序列為: ; coutendl進程(p0); /輸出安全序列,考慮顯示格式,先輸出第一個 Finish0=0; for (i=1; in; i+) cout進程(pi); Finishi=0; /所有進程置為未分配狀態(tài) coutendlendl; showdata(); /顯示當(dāng)前狀態(tài) ppp: /申請大于可利用量, 應(yīng)該阻塞等待,結(jié)束本次資源申請,GOTO 語
36、句跳轉(zhuǎn)至此 coutendl是否繼續(xù)申請資源(y/n) ?; char* b=new char; /輸入 y/n,判斷是否繼續(xù)申請 b; coutendl; cout=endlendl; coutendl; if(*b=y|*b=Y) r=true;21 else r=false; /輸入非 Y 則令 R =false sign(); /調(diào)用簽名函數(shù) while (r=true);int main() system(color 06f); /設(shè)置當(dāng)前窗口的背景色和前景色 0 = 黑色 8 = 灰色 coutendlendl; couttt=endl; couttt| |endl; couttt| 模擬銀行家算法 |endl; couttt| |endl; couttt| 作者:lxy |endl; couttt| |endl; couttt=endlendlendlendl; chushihua(); /初始化函數(shù)調(diào)用
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專題6.1 數(shù)列的概念(原卷版)-2024年高考數(shù)學(xué)一輪復(fù)習(xí)精講精練寶典(新高考專用)
- 2022年北京市初三一模道德與法治試題匯編:富強與創(chuàng)新章節(jié)綜合
- 瀝青混凝土破除施工方案
- 專題02 陸地和海洋-2025年中考地理一輪復(fù)習(xí)知識清單(背誦版)
- 共同經(jīng)營投資合同范例
- 企業(yè)投資入股合同范例
- 多元文化教育的創(chuàng)新嘗試計劃
- 管理者如何應(yīng)對市場變化計劃
- 通過表彰激發(fā)學(xué)生品德向上精神計劃
- 社團活動中的領(lǐng)導(dǎo)與管理實踐計劃
- 2024年重慶鈊渝金融租賃股份有限公司招聘筆試沖刺題(帶答案解析)
- 歷史人物孫中山介紹完整版課件
- 高考數(shù)學(xué)總復(fù)習(xí)第八章平面解析幾何教案
- 熱食類食品制售操作流程
- Module1Unit1Touchandfeel單元整體(教學(xué)設(shè)計)-滬教牛津版(深圳用)英語四年級下冊
- 信息系統(tǒng)運行維護技術(shù)規(guī)范
- (正式版)QBT 5976-2024 制漿造紙行業(yè)綠色工廠評價要求
- 國家自然科學(xué)基金重大項目立項建議書
- (高清版)DZT 0282-2015 水文地質(zhì)調(diào)查規(guī)范(1:50000)
- 嬰幼兒二便,三浴等
- 文物古跡保護遺址環(huán)境和安全遠程監(jiān)控系統(tǒng)
評論
0/150
提交評論