


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、操作系統(tǒng)-銀行家算法課程設(shè)計報告姓名:趙又廷學(xué)號:012646234班級:05計科12班專業(yè):西安工業(yè)大學(xué)計算機科學(xué)與信息學(xué)院目錄1課程設(shè)計目的12課程設(shè)計的要求13課程設(shè)計題目描述24課程設(shè)計之銀行家算法原理25源程序結(jié)構(gòu)分析及代碼實現(xiàn)46課程設(shè)計總結(jié)25一、課程設(shè)計的目的操作系統(tǒng)是計算機系統(tǒng)的核心系統(tǒng)軟件,它負(fù)責(zé)控制和管理整個系統(tǒng)的資源并組織用戶協(xié)調(diào)使用這些資源,使計算機高效的工作。操作系統(tǒng)課程設(shè)計是操作系統(tǒng)理論課的必要補充,是復(fù)習(xí)和檢驗所學(xué)課程的重要手段,本課程設(shè)計的目的是綜合應(yīng)用學(xué)生所學(xué)知識,通過實驗環(huán)節(jié),加深學(xué)生對操作系統(tǒng)基本原理和工作過程的理解,提高學(xué)生獨立分析問題、解決問題的能力
2、,增強學(xué)生的動手能力、課程設(shè)計的要求1分析設(shè)計內(nèi)容,給出解決方案(要說明設(shè)計實現(xiàn)的原理,采用的數(shù)據(jù)結(jié)構(gòu))。2畫出程序的基本結(jié)構(gòu)框圖和流程圖。3對程序的每一部分要有詳細(xì)的設(shè)計分析說明。4源代碼格式要規(guī)范。5設(shè)計合適的測試用例,對得到的運行結(jié)果要有分析。6設(shè)計中遇到的問題,設(shè)計的心得體會。7按期提交完整的程序代碼、可執(zhí)行程序和課程設(shè)計報告。三、課程設(shè)計題目描述銀行家算法是一種最有代表性的避免死鎖的算法。要解釋銀行家算法,必須先解釋操作系統(tǒng)安全狀態(tài)和不安全狀態(tài)。安全狀態(tài):如果存在一個由系統(tǒng)中所有進(jìn)程構(gòu)成的安全序列P1,Pn,則系統(tǒng)處于安全狀態(tài)。安全狀態(tài)一定是沒有死鎖發(fā)生。不安全狀態(tài):不存在一個安全序
3、列。不安全狀態(tài)不一定導(dǎo)致死鎖。那么什么是安全序列呢?安全序列:一個進(jìn)程序列P1,Pn是安全的,如果對于每一個進(jìn)程Pi(1<i<n),它以后尚需要的資源量不超過系統(tǒng)當(dāng)前剩余資源量與所有進(jìn)程Pj(j<i)當(dāng)前占有資源量之和。銀行家算法:我們可以把操作系統(tǒng)看作是銀行家,操作系統(tǒng)管理的資源相當(dāng)于銀行家管理的資金,進(jìn)程向操作系統(tǒng)請求分配資源相當(dāng)于用戶向銀行家貸款。操作系統(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)程已占
4、用的資源數(shù)與本次申請的資源數(shù)之和是否超過了該進(jìn)程對資源的最大需求量。若超過則拒絕分配資源,若沒有超過則再測試系統(tǒng)現(xiàn)存的資源能否滿足該進(jìn)程尚需的最大資源量,若能滿足則按當(dāng)前的申請量分配資源,否則也要推遲分配。四、課程設(shè)計之銀行家算法原理1.銀行家算法的思路先對用戶提出的請求進(jìn)行合法性檢查,即檢查請求的是不大于需要的,是否不大于可利用的。若請求合法,則進(jìn)行試分配。最后對試分配后的狀態(tài)調(diào)用安全性檢查算法進(jìn)行安全性檢查。若安全,則分配,否則,不分配,恢復(fù)原來狀態(tài),拒絕申請。2. 銀行家算法中用到的主要數(shù)據(jù)結(jié)構(gòu)可利用資源向量intAvailablejj為資源的種類。最大需求矩陣intMaxiji為進(jìn)程的
5、數(shù)量。分配矩陣intAllocationij需求矩陣intneedij=Maxij-Allocationij申請各類資源數(shù)量intRequestiji進(jìn)程申請j資源的數(shù)量工作向量intWorkxintFinishy3. 銀行家算法bank()進(jìn)程i發(fā)出請求申請k個j資源,Requestij=k檢查申請量是否不大于需求量:Requestij<=needi,j,若條件不符重新輸入,不允許申請大于需求量。檢查申請量是否小于系統(tǒng)中的可利用資源數(shù)量:Requestij<=availablei,j,若條件不符就申請失敗,阻塞該進(jìn)程,用goto語句跳轉(zhuǎn)到重新申請資源。(3) 若以上兩個條件都滿足
6、,則系統(tǒng)試探著將資源分配給申請的進(jìn)程,并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:Availablei,j=Availablei,j-Requestij;Allocationij=Allocationij+Requestij;needij=needij-Requestij;試分配后,執(zhí)行安全性檢查,調(diào)用safe()函數(shù)檢查此次資源分配后系統(tǒng)是否處于安全狀態(tài)。若安全,才正式將資源分配給進(jìn)程;否則本次試探分配作廢,恢復(fù)原來的資源分配狀態(tài),讓該進(jìn)程等待。用dowhile循環(huán)語句實現(xiàn)輸入字符y/n判斷是否繼續(xù)進(jìn)行資源申請。4. 安全性檢查算法(safe()函數(shù))設(shè)置兩個向量:工作向量Work,它表示系統(tǒng)可提供給進(jìn)程繼
7、續(xù)運行所需的各類資源數(shù)目,在執(zhí)行安全性算法開始時,Work=Available。Finish,它表示系統(tǒng)是否有足夠的資源分配給進(jìn)程,使之運行完成。開始時先做Finishi=O;當(dāng)有足夠的資源分配給進(jìn)程時,再令Finishi=1。(2) 在進(jìn)程中查找符合以下條件的進(jìn)程:條件1:Finishi=0;條件2:needij<=Workj若找到,則執(zhí)行步驟否則,執(zhí)行步驟(4)當(dāng)進(jìn)程獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行:Workj=Workj+Allocationij;Finishi=1;gotostep2;如果所有的Finishi=1都滿足,則表示系統(tǒng)處于安全狀態(tài),否
8、則,處于不安全狀態(tài)。五、源程序結(jié)構(gòu)分析及代碼實現(xiàn)1.程序結(jié)構(gòu)程序共有以下五個部分:(1) .初始化chushihua():用于程序開始進(jìn)行初始化輸入數(shù)據(jù):進(jìn)程數(shù)量、資源種類、各種資源可利用數(shù)量、各進(jìn)程的各種資源已分配數(shù)量、各進(jìn)程對各類資源最大需求數(shù)等。(2) .當(dāng)前安全性檢查safe():用于判斷當(dāng)前狀態(tài)安全性,根據(jù)不同地方的調(diào)用提示處理不同。(3) .銀行家算法bank():進(jìn)行銀行家算法模擬實現(xiàn)的模塊,調(diào)用其他各個模塊進(jìn)行銀行家算法模擬過程。(4) .顯示當(dāng)前狀態(tài)show():顯示當(dāng)前資源分配詳細(xì)情況,包括:各種資源的總數(shù)量(all)、系統(tǒng)目前各種資源可用的數(shù)量、各進(jìn)程已經(jīng)得到的資源數(shù)量、
9、各進(jìn)程還需要的資源量。(5).主程序main()逐個調(diào)用初始化、顯示狀態(tài)、安全性檢查、銀行家算法函數(shù),使程序有序的進(jìn)行2數(shù)據(jù)結(jié)構(gòu)程序使用的全局變量:constintx=10,y=10;/定義常量intAvailablex;/intAllocationyy;/intMaxyy;/intNeedyy;/intRequestx;/各種資源可利用的數(shù)量各進(jìn)程當(dāng)前已分配的資源數(shù)量各進(jìn)程對各類資源的最大需求數(shù)還需求矩陣申請各類資源的數(shù)量intWorkx;/intFinishy;/intpy;/inti,j;/intn,m;n工作向量,表系統(tǒng)可提供給進(jìn)程運行所需各類資源數(shù)量表系統(tǒng)是否有足夠的資源分配給進(jìn)程,
10、0為否,1為是存儲安全序列全局變量,主要用于循環(huán)語句中為進(jìn)程的數(shù)量,m為資源種類數(shù)intl=0,counter=0;3函數(shù)聲明voidchushihua();voidsafe();voidbank();/voidshow();4.主函數(shù)main()/系統(tǒng)初始化函數(shù)/安全性算法函數(shù)銀行家算法函數(shù)/輸出當(dāng)前資源分配情況intmain()coutvv/顯示程序開始提示信息chushihua();/初始化函數(shù)調(diào)用cout«endl«endl;/=判斷當(dāng)前狀態(tài)的安全性=safe();/安全性算法函數(shù)調(diào)用if(lvn)cout<v"n當(dāng)前狀態(tài)不安全,無法申請,程序退出!
11、!"<<endl;cout«endl;system("pause");sign();/調(diào)用簽名函數(shù)return0;/break;elseinti;/局部變量l=0;cout<<"n安全的狀態(tài)!"<<endl;coutvv"安全序列為:";cout«endl«"進(jìn)程"vv"("vvp0vv")"/輸出安全序列,考慮顯示格式,先輸出第一個for(i=1;i<n;i+)cout<<&quo
12、t;=>>"<<"進(jìn)程"vv"("vvpivv")"for(i=0;i<n;i+)Finishi=0;/所有進(jìn)程置為未分配狀態(tài)cout«endl«endl;bank();/銀行家算法函數(shù)調(diào)用return0;操作系統(tǒng)銀行家算法流程圖:UZZ7初始化函數(shù)chushihua(T始輸入進(jìn)程的數(shù)量輸入資源種類數(shù)輸入個資源當(dāng)前可用資源數(shù)輸入各進(jìn)程當(dāng)前已分配的資源數(shù)結(jié)輸出提示:輸入有誤,請重新輸入初始化函數(shù)chushihua()»提出請求束Requ銀Sj行家函數(shù)輸入各進(jìn)程對各類資
13、源的最大需求Error;Error;BLEiREQUESTiv=NEEDiREQUESTiv=AVAILA安全性算法Safe()開始Work=AVAILABLE;#inelude<vector>#include<iomanip>usingnamespacestd;#defineTRUE1II#defineFALSE0II定義TRUE=1定義FLASE=Ovoidbank(vector<int>,vector<vector<int>>,vector<vector<int>>,int,int);II聲明bank(應(yīng)
14、行家算法)intsafe(vector<int>Available,vector<vector<int>>Need,vector<vector<int>>Allocation,intn,intm);聲明safe()安全性算法voidinit();主函數(shù)main()voidmain()init();intsafe(vector<int>Available,vector<vector<int>>Need,vector<vector<int>>Allocation,intn,int
15、m);初始化函數(shù)init()*voidinit()intm;m資源類數(shù)intn;/進(jìn)程數(shù)cout«"輸入資源類數(shù)"<<endl;cin»m;vectorvint>Available(m);/動態(tài)申請數(shù)組Available可用資源向量cout«"輸入各類資源總數(shù):"<<endl;I*/*下面的被剛掉的為在DOST輸入資源向量*/*未被剛掉的是從Available.txt文件中讀入數(shù)據(jù)*/*/*/for(inti=0;i<m;i+)coutvv"輸入RYvivv"類資源總數(shù)
16、:";cin>>Availablei;/*/FILE*fp;fp=fopen("Available.txt","r+");coutvv"從Available.txt文件中讀入數(shù)據(jù),并輸出"<<endl;for(inti=0;i<m;i+)fscanf(fp,"%d",&Available);cout<<Availableivv't'fclose(fp);cout<<"n輸入進(jìn)程數(shù)"<<endl;c
17、in»n;vectorvvector<int>>Max(n,vector<int>(m);I*/*下面的被剛掉的為在DOST輸入資源向量*/*未被剛掉的是從Max.txt文件中讀入數(shù)據(jù)*/*/*for(i=0;i<n;i+)coutvv"輸入進(jìn)程"<<i<<"的最大需求向量"for(intj=O;j<m;j+)coutvv"輸入需要R"vvjvv"類資源的最大數(shù)目"cin>>Maxij;while(Maxij>Availa
18、blej)coutvvjvv"類資源最大需求超過該類資源總量,重新輸入cin>>Maxij;/*/fp=fopen("Max.txt","r+");coutvv"從Max.txt文件中讀入數(shù)據(jù),并輸出"<<endl;for(i=O;i<n;i+)for(intj=O;j<m;j+)fscanf(fp,"%d",&Maxij);cout«Maxijvv""cout«endl;fclose(fp);cout«&quo
19、t;輸入已分配的Allocation"«endl;vectorvvector<int>>Allocation(n,vector<int>(m);vectorvvector<int>>Need(n,vector<int>(m);I*/*下面的被剛掉的為在DOST輸入資源向量*/*未被剛掉的是從Allocation.txt文件中讀入數(shù)據(jù)*/*/*for(i=0;i<n;i+)coutvv"輸入為進(jìn)程"<<i<<"的分配向量"for(intj=O;j&
20、lt;m;j+)coutvv"輸入分配R"VVjVV"類資源的數(shù)目"cin>>Allocationij;while(Allocationij>Maxij)重新輸入coutvvj+1v<"類資源最大需求超過該類需求資源總量,Needij=Maxij-Allocationij;Availablej=Availablej-Allocationij;/*/fp=fopen("Allocation.txt","r+");cout<<"Allocation.txt從文件中
21、讀入數(shù)據(jù),并輸出"<<endl;for(i=0;i<n;i+)for(intj=O;j<m;j+)fscanf(fp,"%d",&Allocationij);Needij=Maxij-Allocationij;/在初始化Max時,同時初始化Need數(shù)組Availablej=Availablej-Allocationij;/在初始化Max時,同時修改Available數(shù)組cout«Allocationij«''cout«endl;fclose(fp);intsafe(vector<i
22、nt>Available,vector<vector<int>>Need,vector<vector<int>>Allocation,intn,intm);cout«"此狀態(tài)安全!"<<endl;bank(Available,Need,Allocation,n,m);調(diào)用銀行家算法bank()函數(shù)銀行家算法bank()函數(shù)/*voidbank(vector<int>Available,vector<vector<int>>vector<int>Requ
23、est(m);intall=0;/定義變量all,如果all=0,表示進(jìn)程已經(jīng)運行完,如果all>=1,表示還有進(jìn)程沒有運行完for(inti=0;i<n;i+)for(intj=0;j<m;j+)all+=Needij;if(0=all)coutvv"所有進(jìn)程已經(jīng)運行完,結(jié)束"<<endl;exit(0);intjc;任選一個進(jìn)程charagain;all=0;重新初始化all,while(1)while(all=0)all=0;/如果all=0,表示進(jìn)程已經(jīng)運行完,如果all>=1,表示還有進(jìn)程沒有運行完/循環(huán)直至all>0,即
24、找到一個未運行完的進(jìn)程coutvv"任選一個進(jìn)程作為當(dāng)前進(jìn)程0-"vvn-1<<endl;cin>>jc;for(intj=0;j<m;j+)all+=Needjcj;if(O=all)coutvv"此進(jìn)程已經(jīng)運行,重新輸入"<<endl;coutvv"輸入該進(jìn)程的請求向量"<<endl;for(i=0;i<m;i+)cin>>Requesti;while(Requesti>Needjci|Requesti>Availablei)coutvv"
25、;請求向量無法滿足"<<endl;break;/系統(tǒng)試探著把資源分配給該進(jìn)程/for(i=0;i<m;i+)Availablei=Availablei-Requesti;Allocationjci=Allocationjci+Requesti;Needjci=Needjci-Requesti;intbb=0;次資源分配后,系統(tǒng)是否處安全狀態(tài)if(仁=bb)cout«"系統(tǒng)成功分配資源"<<endl;elsecoutvv"系統(tǒng)未能成分配資源,收回預(yù)分配資源"<<endl;for(i=0;i<
26、;m;i+)Availablei=Availablei+Requesti;Allocationjci=Allocationjci-Requesti;Needjci=Needjci+Requesti;coutvv"您還想再次請求分配嗎?是請按y/Y,否請按其它鍵"<<endl;cin>>again;if(again=二'y'|again=二'Y')all=0;continue;break;安全性算法safe()函數(shù)intsafe(vector<int>Available,vector<vector<
27、;int>>vector<int>Work(m),Finish(n);Work=Available;vector<int>count(n);/intlen=-1;/申請工作向量work,finish記錄安全序列記錄安全序列的進(jìn)程個數(shù),如果len=n,即表示所有的finish【i】=true,處于安全狀態(tài)for(inti=0;i<m;i+)Finishi=FALSE;for(i=0;i<n;i+)intneeded=1;for(intj=0;j<m;j+)if(Needij<=Workj)needed=needed*TRUE;elsen
28、eeded=needed*FALSE;if(Finishi=FALSE)&&needed=1)for(j=0;j<m;j+)Workj=Workj+Allocationij;Finishi=TRUE;len=len+1;countlen=i;i=-1;if(len=n-1)coutvv"系統(tǒng)是安全的"<<endl;coutvv"安全序列"<<endl;for(i=0;i<=len;i+)cout«counti;if(i!=len)cout<<"->"cout«endl;returnTRUE;elsereturnFALSE;returnFALSE;coutvv"系統(tǒng)是不安全的"<<endl;運行結(jié)果:1.初始化結(jié)果2檢測系統(tǒng)資源分配是否安全結(jié)果:"
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 爆破合同范本2015
- 2025年合金鑄球段合作協(xié)議書
- 財務(wù)管理外包合同(2篇)
- 二零二五年度經(jīng)濟糾紛全面解除與保障協(xié)議
- 二零二五年度餐館服務(wù)員職業(yè)傷害保險保障合同
- 二零二五年度影視演員現(xiàn)場安全監(jiān)督與管理合同
- 二零二五年度夫妻共同應(yīng)對子女叛逆與心理輔導(dǎo)協(xié)議書
- 二零二五年度新能源汽車股東個人合作協(xié)議書及充電樁建設(shè)
- 二零二五年度酒店客房租賃與裝修改造合同
- 2025年度美容美發(fā)返傭金合作協(xié)議
- 靜脈采血最佳護(hù)理實踐相關(guān)知識考核試題
- 檢驗檢測中心檢驗員聘用合同
- 腰椎后路減壓手術(shù)
- 商場扶梯安全培訓(xùn)
- 《全科醫(yī)學(xué)概論》課件-以家庭為單位的健康照顧
- 自來水廠安全施工組織設(shè)計
- 《跟單信用證統(tǒng)一慣例》UCP600中英文對照版
- 《醫(yī)院應(yīng)急培訓(xùn)》課件
- 提高教育教學(xué)質(zhì)量深化教學(xué)改革措施
- 招標(biāo)代理機構(gòu)遴選投標(biāo)方案(技術(shù)標(biāo))
- 證件使用協(xié)議書(2篇)
評論
0/150
提交評論