




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、西安文理學院軟件學院計算機操作系統(tǒng)設計題目: 銀行家算法的實現(xiàn) 學生學號: 專業(yè)班級: 學生姓名: 學生成績: 目 錄1摘要32設計思想43系統(tǒng)分析43.1 整個銀行家算法的思路43.2 算法用到的主要數(shù)據(jù)結構和C+語言說明43.2.1可利用資源向量43.2.2最大需求矩陣43.2.3已分配矩陣43.2.4還需求矩陣53.2.5申請各類資源數(shù)量53.3 銀行家算法主程序53.3.1系統(tǒng)初始化53.3.2安全性算法53.3.3檢索用戶53.3.4檢查用戶請求53.3.5進行資源的預分配53.3.6系統(tǒng)調用安全性檢查算法53.4 安全性檢查算法53.4.1設置兩個臨時變量53.4.2在進程中查找符
2、合以下條件的進程63.4.3如果查找成功則存儲安全序列并進行資源的模擬回收64函數(shù)調用關系74.1 程序流程圖74.2 程序模塊劃分84.2.1字符判斷模塊84.2.2程序初始化模塊84.2.3當前安全性檢查模塊84.2.4銀行家算法模塊84.2.5顯示分配模塊85.數(shù)據(jù)結構分析85.1定義全局變量85.2函數(shù)聲明95.3主函數(shù)結構95.4各模塊含義105.4.1整個銀行家算法的思路105.4.2算法用到的主要數(shù)據(jù)結構和C語言說明105.4.3銀行家算法105.4.4安全性檢查算法106. 程序測試結果127心得體會148主要參考文獻15附錄:部分源程序代碼161摘要銀行家算法是一種最有代表性
3、的避免死鎖的算法,在避免死鎖方法中允許進程動態(tài)的申請資源,但系統(tǒng)在進行資源分配之前,應先計算此次分配資源的安全性,若分配不會導致系統(tǒng)進入不安全狀態(tài),則分配,否則等待。為實現(xiàn)銀行家算法,系統(tǒng)必須設置若干數(shù)據(jù)結構。所以通過編寫一個模擬動態(tài)資源分配的銀行家算法程序,進一步深入理解死鎖、產生死鎖的必要條件、安全狀態(tài)等重要概念,并掌握避免死鎖的具體實施方法。關鍵詞:資源,分配,死鎖,狀態(tài)2設計思想 我們可以把操作系統(tǒng)看做是銀行家,操作系統(tǒng)管理的資源相當于銀行家管理的資金,進程向操作系統(tǒng)請求分配資源相當于用戶向銀行家貸款。為保證資金的安全,銀行家規(guī)定:(1)當一個顧客對資金的最大需求量不超過銀行家現(xiàn)有的資
4、金是就可接納該顧客;(2)顧客可以分期貸款,但貸款的總數(shù)不能超過最大需求量;(3)當銀行家現(xiàn)有的資金不能滿足顧客尚需的貸款數(shù)額時,對顧客的貸款可推遲支付,但總能使顧客在有限的時間里得到貸款;(4)當顧客得到所需的全部資金后,一定能在有限的時間里歸還所有的資金。操作系統(tǒng)按照銀行家制定的規(guī)則為進程分配資源,當進程首次申請資源是,要測試該進程對資源的最大需求量,如果系統(tǒng)現(xiàn)存的資金可以滿足它的最大需求量,則按當前的申請量分配資源,否則就推遲分配。當進程在執(zhí)行中繼續(xù)申請資源時,先測試該進程已占有的資源數(shù)與本次申請的資源數(shù)之和是否超過了該進程對資源的最大需求量。若超過了最大需求量則拒絕分配資源,若沒有則再
5、測試系統(tǒng)現(xiàn)存的資源能否滿足該進程尚需的最大資源量,若能滿足則按當前的申請量分配資源,否則也要延遲分配。3系統(tǒng)分析3.1 整個銀行家算法的思路 先對用戶提出的請求進行合法性檢查,再進行預分配,利用安全性檢查算法進行安全性檢查。3.2 算法用到的主要數(shù)據(jù)結構和C+語言說明3.2.1可利用資源向量 int AvailableM M為資源的類型。3.2.2最大需求矩陣 int MaxNM N為進程的數(shù)量。3.2.3已分配矩陣 int AllocationNM 3.2.4還需求矩陣 int NeedNN3.2.5申請各類資源數(shù)量int Requestx; int Workx;int Finishy; /
6、是否有足夠的資源分配給進程,0為否,非0為是3.3 銀行家算法主程序3.3.1系統(tǒng)初始化調用函數(shù)chushihua(),輸入進程數(shù)量,資源種類,各資源可用數(shù)量,各進程已分配、最大需求各資源數(shù)量等3.3.2安全性算法調用函safe()檢查當前資源分配狀態(tài)。3.3.3檢索用戶用bank()函數(shù),輸入用戶的請求三元組(I,J,K),為進程I申請K個J類資源。3.3.4檢查用戶請求檢查用戶請求是否小于還需求量,條件是K=NEEDI,J。如果條件不符則提示重新輸入,即不允許索取大于需求量。檢查用戶的請求是否小于系統(tǒng)中的可利用資源數(shù)量,條件是K=AVALIABLEI,J。如果條件不符則申請失敗,阻塞該進程
7、,重新進行進程動態(tài)資源申請(使用goto語句跳轉)3.3.5進行資源的預分配 AVALIBLEIJ= AVALIBLEIJ-K; ALLOCATIONIJ= ALLOCATIONIJ+K; NEEDIJ=NEEDIJ-K; 3.3.6系統(tǒng)調用安全性檢查算法safe()函數(shù)進行檢查,如果檢查不安全,則進行回收,進程資源申請失敗進入等待。否則不用回收,并檢查該進程是否已獲得所有需要資源,如是則進行其擁有資源釋放,語句如下:Availablej=Availablej+Allocationkj; Allocationkj=0; 3.4 安全性檢查算法3.4.1設置兩個臨時變量 FINISHN記錄進程模
8、擬執(zhí)行的結束狀態(tài),初值為0,如果可以模擬執(zhí)行結束,則可設為1。 WORKM記錄模擬執(zhí)行中資源的回收情況,初值為AVAILABLEM的值。3.4.2在進程中查找符合以下條件的進程 條件1:FINISHI=0 條件2:NEEDIJ=WORKJ 3.4.3如果查找成功則存儲安全序列并進行資源的模擬回收 FINISHI=1 WORKJ=WORKJ+ALLOCATIONIJ;4函數(shù)調用關系4.1 程序流程圖開始請輸入資源數(shù)請輸入各類資源可利用的數(shù)請輸入當前資源可利用的數(shù)量請輸入當前可分配的資源數(shù)量請輸入當前已分配的資源數(shù)請輸入進程對資源的最大需求數(shù)量Max資源數(shù)提示錯誤系統(tǒng)當前狀態(tài)統(tǒng)計結束4.2 程序模
9、塊劃分4.2.1字符判斷模塊判斷輸入的字符是否為數(shù)字,如果不是則提示出錯并重新輸入,主要處理輸入為非數(shù)字時程序出現(xiàn)運行錯誤現(xiàn)象。此模塊功能由數(shù)字判斷函數(shù)( int shuzi(int sz); )實現(xiàn)。4.2.2程序初始化模塊用于程序開始進行初始化輸入數(shù)據(jù):進程數(shù)量、資源種類、各種資源可利用數(shù)量、各進程的各種資源已分配數(shù)量、各進程對各類資源最大需求數(shù)等。此模塊功能在系統(tǒng)初始化函數(shù)(void chushihua(); )中實現(xiàn)。4.2.3當前安全性檢查模塊用于判斷當前狀態(tài)安全性,根據(jù)不同地方的調用提示處理不同,在安全性算函數(shù)(void safe(); )中實現(xiàn)。4.2.4銀行家算法模塊進行銀行家
10、算法模擬實現(xiàn)的模塊,調用其他各個模塊進行銀行家算法模擬過程,在銀行家算法函數(shù)(void bank();)中實現(xiàn)。4.2.5顯示分配模塊顯示當前資源分配詳細情況,包括:各種資源的總數(shù)量(all)、系統(tǒng)目前各種資源可用的數(shù)量、各進程已經得到的資源數(shù)量、各進程還需要的資源量,在顯示分配情況函數(shù)(void showdata(); )中實現(xiàn)。4.2.6簽名模塊:用于程序結束時顯示程序版權聲明簽名等,在簽名函數(shù)(void sign(); )中實現(xiàn)。5.數(shù)據(jù)結構分析5.1定義全局變量const int x=50,y=100; /定義常量,便于修改int Availablex; /各種資源可利用的數(shù)量int
11、Allocationyy; /各進程當前已分配的資源數(shù)量int Maxyy; /各進程對各類資源的最大需求數(shù)int Needyy; /還需求矩陣int Requestx; /申請各類資源的數(shù)量int Workx; /工作向量,表系統(tǒng)可提供給進程運行所需各類資源數(shù)量int Finishy; /表系統(tǒng)是否有足夠的資源分配給進程,0為否,1為是int py; /存儲安全序列int i,j; /全局變量,主要用于循環(huán)語句中int n,m; /n為進程的數(shù)量,m為資源種類數(shù)int l=0,counter=0;5.2函數(shù)聲明int shuzi(int sz); /數(shù)字判斷函數(shù),還可使用 void shuz
12、i(int& sz); 方式void chushihua(); /系統(tǒng)初始化函數(shù)void safe(); /安全性算法函數(shù)void bank(); /銀行家算法函數(shù)void showdata(); /函數(shù)showdata,輸出當前資源分配情況void sign(); /簽名函數(shù)5.3主函數(shù)結構int main()system(color 06f); /設置當前窗口的背景色和前景色 cout /顯示程序開始提示信息 chushihua(); /初始化函數(shù)調用 coutendlendl; showdata(); /輸出初始化后的狀態(tài) /=判斷當前狀態(tài)的安全性= safe(); /安全性算法函數(shù)調用
13、 if (ln) coutn當前狀態(tài)不安全,無法申請,程序退出!endl; coutendl; system(pause); sign(); /調用簽名函數(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) coutendlendl; bank(); /銀行家算法函數(shù)調用return 0
14、; 5.4各模塊含義5.4.1整個銀行家算法的思路 先對用戶提出的請求進行合法性檢查,再進行預分配,利用安全性檢查算法進行安全性檢查。5.4.2算法用到的主要數(shù)據(jù)結構和C語言說明 (1)可利用資源向量 INT AVAILABLEM M為資源的類型; (2)最大需求矩陣 INT MAXNM N為進程的數(shù)量; (3)已分配矩陣 INT ALLOCATIONNM; (4)還需求矩陣 INT NEEDNN; (5)申請各類資源數(shù)量int Requestx; (6)工作向量 int Workx。 (7)int Finishy; /表示系統(tǒng)是否有足夠的資源分配給進程,0為否,非0為是5.4.3銀行家算法
15、(1)系統(tǒng)初始化。輸入進程數(shù)量,資源種類,各進程已分配、還需求各資源數(shù)量,各資源可用數(shù)量等。 (2)輸入用戶的請求三元組(I,J,K),為進程I申請K個J類資源。 (3)檢查用戶的請求是否小于還需求的數(shù)量,條件是 K=NEEDI,J。如果條件不符則提示重新輸入,即不允許索取大于需求量。 (4)檢查用戶的請求是否小于系統(tǒng)中的可利用資源數(shù)量,條件是K=AVALIABLEI,J。如果條件不符則申請失敗,阻塞該進程,重新進行進程動態(tài)資源申請(使用goto語句)。 (5)進行資源的預分配,語句如下: AVALIBLEIJ= AVALIBLEIJ-K; ALLOCATIONIJ= ALLOCATIONIJ
16、+K; NEEDIJ=NEEDIJ-K;(6)系統(tǒng)調用安全性檢查算法(safe()函數(shù))進行檢查,如果檢查通過,則不回收,否則進行回收,進程資源申請失敗進入等待。5.4.4安全性檢查算法 (1)設置兩個臨時變量 FINISHN記錄進程模擬執(zhí)行的結束狀態(tài),初值為0,如果可以模擬執(zhí)行束,則可設為1,也可設其它非零值以表示執(zhí)行的先后次序。 WORKM記錄模擬執(zhí)行中資源的回收情況,初值為AVAILABLEM的值。 (2)在進程中查找符合以下條件的進程 條件1:FINISHI=0 條件2:NEEDIJ=WORKJ. (3)如果查找成功則進行資源的模擬回收,語句如下 WORKJ=WORKJ+ALLOCAT
17、IONIJ; FINISHI=1 或查找到的順序號.(4)、如果查找不成功,則檢查所有進程的FINISH,如果有一個為0,則系統(tǒng)不為0,返回不成功標志。否則返回成功標志。6. 程序測試結果程序調試圖如下所示:顯示資源最大需求數(shù)界面資源管理界面需要資源數(shù)量界面7心得體會 在設計此程序的過程中,我遇到過許多問題,也學到了很多東西。本程序的設計實現(xiàn)主要是用C+語言實現(xiàn),通過對程序算法的設計優(yōu)化、輸出顯示的格式設計、輸入過程中的異常處理等一些設計過程中的問題的考慮解決,在C+學習上也有了很大的進步。程序設計過程中開始遇到的最大的問題是算法的結構設計問題,課本上只給了設計要求及簡單的算法,要真正實現(xiàn)還需
18、要考慮很多方面。在算法的數(shù)據(jù)結構設計上考慮了很長時間。在程序設計中先后參考了很多網絡資料,也參考了一些別人寫的的程序,綜合這些算法思想和自己的思路對程序做了很好的設計方式,對一些算法的優(yōu)越性等也作了一些考慮。此外考慮最多的就是異常錯誤處理的設計。一個好的程序必須能在各種環(huán)境下都有其相應的處理方式,至少能應對一些常見的可能發(fā)生的錯誤。比如一般的要求輸入為數(shù)字時,如果輸入了一個非數(shù)字字符,程序就會立即出錯無法繼續(xù)運行,本程序針對這個問題設計了一個shuzi();函數(shù)進行處理,處理方式為:接受鍵盤輸入的字符為字符串,然后對字符串的每個字符進行判斷是否為數(shù)字,如果有非數(shù)字字符出現(xiàn)則提示出錯并要求重新輸
19、入。又如在判斷是否繼續(xù)時要求輸入Y/N時,按一般的方式,如果輸入為多個字符,則多余的字符會保存在緩沖區(qū),到下次要求輸入時輸入而導致出錯,對此問題設計處理方式為接受輸入字符保存為串然后只取其首字符進行判斷。還有很多類似的錯誤處理。還有在設置程序的顯示優(yōu)化時,發(fā)現(xiàn)暫停函數(shù)在不同的情況下執(zhí)行順序不同,如此等等。在課程設計過程中遇到了許多問題,也向同宿舍的同學做了一些請教一起討論,也因此從他們身上學到了許多東西。8主要參考文獻1. 湯子瀛,哲鳳屏.計算機操作系統(tǒng).西安電子科技大學學出版社.2. 王清,李光明.計算機操作系統(tǒng).冶金工業(yè)出版社.3.孫鐘秀等. 操作系統(tǒng)教程. 高等教育出版社4.曾明. Li
20、nux操作系統(tǒng)應用教程. 陜西科學技術出版社. 5. 張麗芬,劉利雄.操作系統(tǒng)實驗教程. 清華大學出版社.6. 孟靜,操作系統(tǒng)教程原理和實例分析. 高等教育出版社7. 周長林,計算機操作系統(tǒng)教程. 高等教育出版社8. 張堯學,計算機操作系統(tǒng)教程,清華大學出版社9. 任滿杰,操作系統(tǒng)原理實用教程,電子工業(yè)出版社附錄:部分源程序代碼#include #include #include #include #include /=定義全局變量=const int x=50,y=100; /定義常量,便于修改int Availablex; /各種資源可利用的數(shù)量int Allocationyy; /各進程
21、當前已分配的資源數(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ù)聲明int shuzi(int sz); /數(shù)字判斷函數(shù) 或者使用 void shuzi(int& sz); 方式void chushihua()
22、; /系統(tǒng)初始化函數(shù)void safe(); /安全性算法函數(shù)void bank(); /銀行家算法函數(shù)void showdata(); /函數(shù)showdata,輸出當前資源分配情況void sign(); /簽名函數(shù) /=數(shù)字判斷函數(shù)=int shuzi(int sz) /輸入數(shù)據(jù)并判斷是否為數(shù)字 char *temp; temp=new char; /臨時指針,存放輸入字符 int len; /存儲取字符的長度 sz=0 ; /清零 char s; / do /輸入賭注,只能輸入數(shù)字 / gets(temp); /getline(cin,temp) cintemp; len=strlen(
23、temp); /取字符長度 for(int i=0;ilen;i+) s= *(temp+i); if(s9) cout 請輸入數(shù)字 nn; cout請重新輸入:; break; while(s9); for(int i=0;ilen;i+) /輸入字符串轉化為整形數(shù)字 int t=1; for(int j=1;jlen-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請輸入進
24、程的數(shù)量: ;/從此開始輸入有關數(shù)據(jù) n=shuzi(n); cout請輸入資源種類數(shù): ; m=shuzi(m); coutendlendl請輸入各種資源可利用的數(shù)量( m 種): endl; coutendl; for (j=0; jm; j+) cout 輸入資源 j 可利用的數(shù)量Availablej: ; Availablej=shuzi(Availablej); Workj=Availablej; /初始化Workj / coutendl; /system(cls); /清屏 coutendl; cout請輸入各進程當前已分配的資源數(shù)量Allocationnm: endlendl;
25、for (i=0; in; i+) for (j=0; jm; j+) cout 請輸入進程 i 當前已分配的資源 j 數(shù)量: ; Allocationij=shuzi(Allocationij); / coutendl; coutendl; Finishi=0;/初始化Finishi /break; coutendlendl; cout請輸入各進程對各類資源的最大需求數(shù)Maxnm: endlendl; for (i=0; in; i+) for (j=0; jm; j+) cout 請輸入進程 i 對資源 j=Allocationij) / Needij = Maxij-Allocation
26、ij; /計算還需求量 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 (j=0; j=Needij) /可用大于等于需求 counter=counter+1;/記數(shù) if(counter=m)*/ /算法二: for (j=0; j=Needij); /可用大于等于
27、需求 else counter=1; break; if(counter!=1) /進程的每類資源量都符合條件Workj=Needij 條件二 pl=i; /存儲安全序列 Finishi=1; /標志為可分配 for (j=0; j=Needij i= -1; /從第一個進程開始繼續(xù)尋找滿足條件一二的進程 i+; /for循環(huán)繼續(xù)尋找 /=顯示分配情況函數(shù) =void showdata() /函數(shù)showdata,輸出當前資源分配情況 int i,j; /局部變量 int Ally; /各種資源的總數(shù)量 int l2; /局部變量 l1, cout=endlendl; cout% 系統(tǒng)當前狀態(tài)
28、如下:%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 ) coutendl; /每行顯示五個 & j!=0 coutendlendl; cout% 系統(tǒng)目前各種資源可用的數(shù)為(available):endl; for (j=0;jm;j+) cout 資源j: Availablej ; if
29、(j+1)%5=0) coutendl; /每行最多顯示五個 & j!=0 coutendlendl; cout% 各進程已經得到的資源量(allocation): endl; / l1=0; /歸零 for(i=0;i=m/5;i+) /設計每行最多顯示五種資源 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+)coutAllocationl2j ; coutendl; coutendl; cout% 各進程還需要的資源量(need):end
30、l; /endl /l1=0; for(i=0;i=m/5;i+) /設計每行顯示五種資源 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+)coutNeedl2j ; coutendl; coutendl; cout=endl; coutendl; system(pause); / 暫停/=簽名函數(shù) =void sign() system(cls); / 清屏 coutendlendlendlendlendlendl; couttt =end
31、l; couttt = =endl;couttt = 謝謝你的使用 =endl; couttt = =endl;couttt =endl; coutendlendlendlendlendlendlendlendlendl; / getch(); /等待鍵盤輸入,不返回任何值,用于設置程序運行界面 system(pause);/暫停 比較兩種方式/* 經過在不同的編輯器中調試發(fā)現(xiàn),不同的調試器對函數(shù)執(zhí)行的順序有差別 如在此處使用 getch() 和 system(pause) 函數(shù)時,在visual c+6.0中先執(zhí)行此函數(shù)再顯示, 而在dev-c+ 中則按順序執(zhí)行 對此問題我在很多地方搜索查找
32、均未找到滿意的答案,本次換用調試器才發(fā)現(xiàn)理解-4.29 本次調試格式時,將換行命令 n 改為 endl 時,發(fā)現(xiàn) system(pause) 函數(shù)執(zhí)行變?yōu)轫樞?執(zhí)行,由此領悟到 n 命令和system(pause)調用了一樣系統(tǒng)函數(shù),在調用的順序上system(pause) 優(yōu)先所以它就先執(zhí)行了查找了一下相關幫助: 在OSTREAM.H中有這樣的一個inline函數(shù): inline _CRTIMP ostream& _cdecl endl(ostream& _outs) return _outs n flush; 也就是說 endl= return _outs n flush; endl除了寫
33、n進外,還調用flush函數(shù),刷新緩沖區(qū),把緩沖區(qū)里的數(shù)據(jù)寫入文件或屏幕, 如果考慮效率就用n */ / coutl; coutttt ;/=銀行家算法函數(shù)=void bank() cout=endlendl; cout% 以下開始為進程進行資源分配申請 %endlendl; /=申請資源= int k=0;/用于輸入進程編號 bool r=false; / 初值為假,輸入Y繼續(xù)申請則置為真 do /輸入請求 cout請輸入申請資源的進程編號(輸入0-n-1之間): ; k=shuzi(k); coutn-1) /輸入異常處理 coutendl您輸入了錯誤的進程號,請重新輸入!endl; co
34、utendl請輸入申請資源的進程編號(輸入0-n-1之間): ; 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請重新輸入!Avai
35、lablej) /申請大于可利用量, 應該阻塞等待? ? coutn沒有那么多資源,目前可利用資源j數(shù)量為Availablej,本次申請不成功,進程等待!Needkj); /RequestjAvailablej| /改變Avilable、Allocation、Need的值 for (j=0; jm; j+) Availablej = Availablej-Requestj; Allocationkj = Allocationkj+Requestj; Needkj = Needkj-Requestj; Workj = Availablej; /判斷當前狀態(tài)的安全性 safe(); /調用安全性算
36、法函數(shù) if (ln) l=0; coutn當前狀態(tài)不安全,不予分配!endl; /恢復數(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 / system(cls); l=0; coutn申請資源成功!endl;/=/* /如果該進程所有需要的資源都已申請到,即NEEDkj均為零,則進程可以執(zhí)行,執(zhí)行完后需釋放其所有擁有的資源 /算法一: for(j=0;jm;j+) 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); else /有一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 荒山土地開采合同范本
- 鋼架玻璃安裝合同范本
- 挖土機合同范本
- 臨沂沃爾沃購車合同范本
- 廢棄機油回收合同范本
- 出售環(huán)衛(wèi)用車合同范本
- 養(yǎng)護用品供貨合同范例
- 08施工合同范例
- 代理招標協(xié)議合同范例
- 代理廚具用品合同范例
- 急診與災難醫(yī)學知到智慧樹章節(jié)測試課后答案2024年秋廣西中醫(yī)藥大學
- 安寧療護服務流程的質量評估指標
- 2023年內蒙古自治區(qū)高等職業(yè)院校對口招收中等職業(yè)學校畢業(yè)生單獨考試中職英語試卷
- 新蘇教版一年級下冊數(shù)學第一單元第10課《復習(2)》課件
- 改建3萬噸大米加工項目可行性研究報告
- 二十屆中央紀律檢查委員會四次會測試題及參考答案
- 2024年江西司法警官職業(yè)學院高職單招數(shù)學歷年參考題庫含答案解析
- 2024年海洋知識競賽題庫及答案(共140題)
- 綿陽市高中2022級(2025屆)高三第二次診斷性考試(二診)語文試卷(含答案)
- 柴油安全知識培訓課件
- 歡樂購物街 第2課時 買賣我做主課件2024-2025人教版一年級數(shù)學下冊
評論
0/150
提交評論