




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上銀行家算法模擬【開發(fā)語言及實現(xiàn)平臺或?qū)嶒灜h(huán)境】C+/C#Microsoft Visual Studio 6.0/ Microsoft Visual Studio .NET 2003【實驗?zāi)康摹浚?)進(jìn)一步理解利用銀行家算法避免死鎖的問題;(2)在了解和掌握銀行家算法。(3)理解和掌握安全序列、安全性算法【實驗內(nèi)容】(1)編寫安全性算法;(2)編寫銀行家算法,并編制銀行家算法通用程序,將調(diào)試結(jié)果顯示在計算機(jī)屏幕上,再檢測和筆算的一致性。【實驗原理】一、安全狀態(tài)指系統(tǒng)能按照某種順序如<P1,P2,Pn>(稱為<P1,P2,Pn>序列為安全序列),為
2、每個進(jìn)程分配所需的資源,直至最大需求,使得每個進(jìn)程都能順利完成。 二、銀行家算法假設(shè)在進(jìn)程并發(fā)執(zhí)行時進(jìn)程i提出請求j類資源k個后,表示為Requestij=k。系統(tǒng)按下述步驟進(jìn)行安全檢查:(1)如果RequestiNeedi則繼續(xù)以下檢查,否則顯示需求申請超出最大需求值的錯誤。(2)如果RequestiAvailable則繼續(xù)以下檢查,否則顯示系統(tǒng)無足夠資源,Pi阻塞等待。(3)系統(tǒng)試探著把資源分配給進(jìn)程Pi,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值: Availablej=Availablej-Requestij; Allocationi,j=Allocationi,j+Requestij; Needi,
3、j=Needi,j-Requestij;(4)系統(tǒng)執(zhí)行安全性算法,檢查此次資源分配后,系統(tǒng)是否處于安全狀態(tài)。若安全,才正式將資源分配給進(jìn)程Pi,以完成本次分配;否則, 將本次的試探分配作廢,恢復(fù)原來的資源分配狀態(tài),讓進(jìn)程Pi等待。三、安全性算法(1)設(shè)置兩個向量: 工作向量Work: 它表示系統(tǒng)可提供給進(jìn)程繼續(xù)運(yùn)行所需的各類資源數(shù)目,它含有m個元素,在執(zhí)行安全算法開始時,Work=Available; Finish: 它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運(yùn)行完成。開始時先做Finishi=false; 當(dāng)有足夠資源分配給進(jìn)程時, 再令Finishi=true。(2)從進(jìn)程集合中找到一個能
4、滿足下述條件的進(jìn)程: Finishi=false; Needi,jWorkj; 若找到, 執(zhí)行步驟(3), 否則,執(zhí)行步驟(4)。(3)當(dāng)進(jìn)程Pi獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:Ø Workj=Worki+Allocationi,j;Ø Finishi=true;Ø go to step 2; (4)如果所有進(jìn)程的Finishi=true都滿足, 則表示系統(tǒng)處于安全狀態(tài);否則,系統(tǒng)處于不安全狀態(tài)。【實驗步驟】(1)參考圖1-1所示流程圖編寫安全性算法。NY所有finish都為true?輸出安全序列NYN存在Finishi =fa
5、lse&&Needij<= Availablej初始化Work和FinishFinishi=true,Workj=Workj+ Allocationij所有進(jìn)程都找完了?Y開始 圖1-1 安全性算法流程圖輸出系統(tǒng)不安全(2)編寫統(tǒng)一的輸出格式。 每次提出申請之后輸出申請成功與否的結(jié)果。如果成功還需要輸出變化前后的各種數(shù)據(jù),并且輸出安全序列。(3)參考圖1-2所示流程圖編寫銀行家算法。結(jié)束 否是申請失敗。以上分配作廢,恢復(fù)原來的分配狀態(tài):Availablej = Availablej + RequestijAllocationij= AllocationijRequesti
6、jNeedij = Needij+RequestijNYNYRequestij> Needij出錯返回:return(error)Requestij> Availablej出錯返回:(進(jìn)程阻塞)return(error)Availablej = Availablej RequestijAllocationij= Allocationij + RequestijNeedij = Needij Requestij假定分配:輸入初始參數(shù)(資源分配及請求情況)開始 假定分配之后,系統(tǒng)安全嗎?申請成功。輸出各種數(shù)據(jù)的變化圖1-2銀行家算法流程圖(4)編寫主函數(shù)來循環(huán)調(diào)用銀行家算法。【實驗思考
7、】(1)在編程中遇到了哪些問題?你是如何解決的?答:編程的過程中,在實現(xiàn)安全性算法和銀行家算法的問題上遇到了困難,比如進(jìn)程使用字母表示,如何識別進(jìn)程和進(jìn)程與程序聯(lián)系在一起的問題,一直阻礙著我,后來結(jié)合將所學(xué)知識我通過for循環(huán)語句將輸入的字母先進(jìn)行判斷再與整型數(shù)據(jù)對應(yīng),然后再將進(jìn)程與程序聯(lián)系在一起,從而解決了問題。(2)在安全性算法中,為什么不用變量Available,而又定義一個臨時變量work?答:定義一個臨時變量work是為了防止在不安全的情況下破壞數(shù)據(jù)原值,這樣就能使程序更加安全。【源代碼】#include <iostream.h>#include <string.h
8、>#define M 3 /資源的種類數(shù)#define N 5 /進(jìn)程的個數(shù)void output(int iMaxNM,int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN); /統(tǒng)一的輸出格式bool safety(int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN);bool banker(int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN);void main()int i,j;/當(dāng)前可用每類
9、資源的資源數(shù)int iAvailableM=3,3,2;/系統(tǒng)中N個進(jìn)程中的每一個進(jìn)程對M類資源的最大需求int iMaxNM=7,5,3,3,2,2,9,0,2,2,2,2,4,3,3;/iNeedNM每一個進(jìn)程尚需的各類資源數(shù)/iAllocationNM為系統(tǒng)中每一類資源當(dāng)前已分配給每一進(jìn)程的資源數(shù)int iNeedNM,iAllocationNM=0,1,1,2,0,0,3,0,2,2,1,1,0,0,2;/進(jìn)程名char cNameN='a','b','c','d','e'bool bExitFlag=tr
10、ue; /退出標(biāo)記char ch; /接收選擇是否繼續(xù)提出申請時傳進(jìn)來的值bool bSafe; /存放安全與否的標(biāo)志/計算iNeedNM的值for(i=0;i<N;i+)for(j=0;j<M;j+)iNeedij=iMaxij-iAllocationij;/輸出初始值output(iMax,iAllocation,iNeed,iAvailable,cName);/判斷當(dāng)前狀態(tài)是否安全bSafe=safety(iAllocation,iNeed,iAvailable,cName);/是否繼續(xù)提出申請while(bExitFlag)cout<<"n"
11、<<"繼續(xù)提出申請?ny為是;n為否。n"cin>>ch;switch(ch) case 'y': /cout<<"調(diào)用銀行家算法"bSafe=banker(iAllocation,iNeed,iAvailable,cName);if (bSafe) /安全,則輸出變化后的數(shù)據(jù)output(iMax,iAllocation,iNeed,iAvailable,cName);break; case 'n': cout<<"退出。n" bExitFlag=fal
12、se; break; default: cout<<"輸入有誤,請重新輸入:n"/輸出void output(int iMaxNM,int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN)int i,j;cout<<"nt Max tAllocationt Need t Available"<<endl;cout<<"tA B CtA B CtA B Ct A B C"<<endl;for(i=0;i<N;i+
13、)cout<<cNamei<<"t"for(j=0;j<M;j+)cout<<iMaxij<<" "cout<<"t"for(j=0;j<M;j+)cout<<iAllocationij<<" "cout<<"t"for(j=0;j<M;j+)cout<<iNeedij<<" "cout<<"t"cout&l
14、t;<" "/Available只需要輸出一次if (i=0)for(j=0;j<M;j+)cout<<iAvailablej<<" "cout<<endl;/安全性算法,進(jìn)行安全性檢查;安全返回true,并且輸出安全序列,不安全返回false,并輸出不安全的提示;bool safety(int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN)int i,j,flag,x=0;char NameN;int WorkM;bool FinishN; f
15、or(j=0;j<M;j+)Workj=iAvailablej; for(i=0;i<N;i+) Finishi=false;while(true) flag=0; for(i=0;i<N;i+) if(Finishi=false && Work0>=iNeedi0 && Work1>=iNeedi1 && Work2>=iNeedi2) for(j=0;j<M;j+)Workj+= iAllocationij ; Finishi=true; flag+; Namex+=cNamei; for(i=0;i
16、<N;i+) if(Finishi=false)i=i; break;if(i=5) cout<<"n"cout<<"安全序列為:"for(x=0;x<N;x+)cout<<Namex<<" "cout<<"n"return true;if(flag=0)cout<<"無安全序列" return false; return true;/安全返回true,不安全返回falsebool banker(int iAll
17、ocationNM,int iNeedNM,int iAvailableM,char cNameN)int iMaxNM=7,5,3,3,2,2,9,0,2,2,2,2,4,3,3;int i,j,RequestM,checkM;bool f=true;char x; while(f) cout<<"請輸入進(jìn)程名:" cin>>x; for(i=0;i<N;i+) if (cNamei=x) i=i; break; if (i=5) cout<<"n您輸入的進(jìn)程名有誤!請重新輸入" else f=false; c
18、out<<"請輸入各資源數(shù)量:" for(j=0;j<M;j+)cin>>Requestj;for(j=0;j<M;j+) checkj=Requestj+iAllocationij;for(j=0;j<M;j+) if(iMaxij-checkj)<0) cout<<"n資源申請超過最大需求量!n" return false; for(j=0;j<M;j+) if(iAvailablej-Requestj)<0) cout<<"n不能滿足進(jìn)程!n" return false; for(j=0;j<M;j+) iAvailablej-=Requestj; iAllocationij+=Requestj; iNeedij-=Requestj; safety(iAllocation,iNeed,iAvailable,cName); return true;【實驗結(jié)果與分析】【實驗思考及總結(jié)】操作系統(tǒng)的基本特征是并發(fā)與共享。系統(tǒng)允許多個進(jìn)
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校晾衣間管理制度
- 學(xué)校精準(zhǔn)化管理制度
- 學(xué)校近出入管理制度
- 學(xué)生奶公司管理制度
- 孵化園公司管理制度
- 安全告知牌管理制度
- 安全附加件管理制度
- 完善實訓(xùn)室管理制度
- 寶鋼吸煙區(qū)管理制度
- 實驗室家具管理制度
- 2025年高考江蘇卷物理真題(解析版)
- 2025年重慶市中考化學(xué)試卷真題(含標(biāo)準(zhǔn)答案)
- 2024年北京市初中學(xué)業(yè)水平考試語文試卷及答案
- 電力行業(yè)電力運(yùn)行維護(hù)與故障處理知識題庫
- 醫(yī)院檢驗科實驗室生物安全程序文件SOP
- 合伙公司管理制度規(guī)定辦法
- 混凝土護(hù)欄技術(shù)交底
- 發(fā)動機(jī)裝調(diào)工:高級發(fā)動機(jī)裝調(diào)工試題及答案
- 藥物臨床試驗的倫理審查課件
- EHS目標(biāo)與指標(biāo)管理一覽表
- L等級考試LTE無線網(wǎng)絡(luò)優(yōu)化L3
評論
0/150
提交評論