版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
銀行家算法設(shè)計(jì)試驗(yàn)報(bào)告一.題目分析銀行家算法:我們能夠把操作系統(tǒng)看做是銀行家,操作系統(tǒng)管理的資源相稱于銀行家管理的資金,進(jìn)程向操作系統(tǒng)祈求資源相稱于客戶向銀行家貸款。操作系統(tǒng)按銀行家制定的規(guī)則為進(jìn)程分派資源,當(dāng)進(jìn)程初次申請(qǐng)資源時(shí),要測(cè)試該進(jìn)程尚需求的資源量,若是系統(tǒng)現(xiàn)存的資源能夠滿足它尚需求的資源量,則按目前的申請(qǐng)量來分派資源,否則就推遲分派。當(dāng)進(jìn)程在執(zhí)行中繼續(xù)申請(qǐng)資源時(shí),先測(cè)試該進(jìn)程申請(qǐng)的資源量是否超出了它尚需的資源量。若超出則拒絕分派,若沒有超出則再測(cè)試系統(tǒng)尚存的資源是否滿足該進(jìn)程尚需的資源量,若滿足即可按目前的申請(qǐng)量來分派,若不滿足亦推遲分派。2.基本要求:(1)能夠輸入某系統(tǒng)的資源以及T0時(shí)刻進(jìn)程對(duì)資源的占用及需求情況的表項(xiàng),以及T0時(shí)刻系統(tǒng)的可利用資源數(shù)。(2)對(duì)T0時(shí)刻的進(jìn)行安全性檢測(cè),即檢測(cè)在T0時(shí)刻該狀態(tài)是否安全。(3)進(jìn)程申請(qǐng)資源,用銀行家算法對(duì)其進(jìn)行檢測(cè),分為如下三種情況:A.所申請(qǐng)的資源不小于其所需資源,提示分派不合理不予分派并返回B.所申請(qǐng)的資源未不小于其所需資源,但不小于系統(tǒng)此時(shí)的可利用資源,提示分派不合理不予分派并返回。C.所申請(qǐng)的資源未不小于其所需資源,亦未不小于系統(tǒng)此時(shí)的可利用資源,預(yù)分派并進(jìn)行安全性檢查:a.預(yù)分派后系統(tǒng)是安全的,將該進(jìn)程所申請(qǐng)的資源予以實(shí)際分派并打印后返回。b.與分派后系統(tǒng)進(jìn)入不安全狀態(tài),提示系統(tǒng)不安全并返回。(4)對(duì)輸入進(jìn)行檢查,即若輸入不符合條件,應(yīng)當(dāng)報(bào)錯(cuò)并返回重新輸入。3.目標(biāo):依照設(shè)計(jì)題目標(biāo)要求,充足地分析和了解題目,論述系統(tǒng)的要求,明確程序要求實(shí)現(xiàn)的功效以及限制條件。明白自己需要用代碼實(shí)現(xiàn)的功效,清楚編寫每部分代碼的目標(biāo),做到有的放矢,有條理不遺漏的用代碼實(shí)現(xiàn)銀行家算法。二.概要設(shè)計(jì)1.算法思緒:先對(duì)用戶提出的祈求進(jìn)行合法性檢查,即檢查祈求是否不小于需要的,是否不小于可利用的。若祈求合法,則進(jìn)行預(yù)分派,對(duì)分派后的狀態(tài)調(diào)用安全性算法進(jìn)行檢查。若安全,則分派;若不安全,則拒絕申請(qǐng),恢復(fù)到本來的狀態(tài),拒絕申請(qǐng)。2.安全性算法步驟(1)設(shè)置兩個(gè)變量①剩余資源變量盤p[]。它表示系統(tǒng)可提供進(jìn)程繼續(xù)運(yùn)行所需要的各類資源數(shù)目,執(zhí)行安全算法開始時(shí),p[N]=S[N]②標(biāo)識(shí)數(shù)組C[]。它表示系統(tǒng)是否有足夠的資源分派給進(jìn)程,使之運(yùn)行完成,開始時(shí)先做C[i]=’F’,當(dāng)有足夠資源分派給進(jìn)程時(shí),令C[i]=’T’。(2)從進(jìn)程集合中找到一個(gè)能滿足下述條件的進(jìn)程:①C[i]=’F’②Q[][]<=p[]如找到,執(zhí)行步驟(3);否則,執(zhí)行步驟(4)。(3)當(dāng)進(jìn)程T取得資源后,可順利執(zhí)行,直至完成,并釋放出分派給它的資源,故應(yīng)執(zhí)行:p[]=p[]+R[][];C[i]=’T’;轉(zhuǎn)向步驟(2)。(4)假如所有進(jìn)程的C[i]=’T’,則表示系統(tǒng)處在安全狀態(tài);否則,系統(tǒng)處在不安全狀態(tài)。3.進(jìn)程祈求算法步驟(1)假如Request[][]<=Q[],則轉(zhuǎn)向步驟(2);否則,以為犯錯(cuò),因?yàn)樗枰馁Y源數(shù)已超出它所宣布的最大值。(2)假如Request[][]<=p[][],則轉(zhuǎn)向步驟(3);否則,表示系統(tǒng)中尚無足夠的資源,進(jìn)程必須等候。(3)系統(tǒng)試探把要求的資源分派給進(jìn)程Tt(t從1開始),并修改下面數(shù)據(jù)結(jié)構(gòu)中的數(shù)值:
p[j]=p[j]-Request[t-1][j];
R[t-1][j]=R[t-1][j]+Request[t-1][j];
Q[t-1][j]=Q[t-1][j]-Request[t-1][j];(4)系統(tǒng)執(zhí)行安全性算法,檢查本次資源分派后,系統(tǒng)是否處在安全狀態(tài)。4.重要用到的數(shù)據(jù)結(jié)構(gòu):最大需求矩陣Max[N][N]已分派矩陣R[N][N]仍需求矩陣Q[N][N]=Max[N][N]-R[N][N]可利用資源向量p[N]申請(qǐng)各類資源向量Request[N]工作向量work[],C[N](7)各類資源總數(shù)S[N];5.程序模塊:voidmain()系統(tǒng)的主函數(shù),用來顯示資源的分派情況和提示信息,同時(shí)用Main函數(shù)來調(diào)用其他子程序。intcheck();安全性檢查函數(shù),用來檢查是否有安全序列,假如存在則返回一個(gè)‘1’給主函數(shù),否則返回‘0’。intjudge();進(jìn)程祈求函數(shù),用來進(jìn)行資源祈求,分為手動(dòng)的和隨機(jī)申請(qǐng)。同時(shí)對(duì)申請(qǐng)的資源進(jìn)行判斷,檢查申請(qǐng)是否有效,假如有效則返回一個(gè)‘1’給主函數(shù),否則返回‘0’。三.流程圖1.銀行家算法Main()函數(shù)流程圖2.安全性檢查算法check()函數(shù)流程圖調(diào)用check()函調(diào)用check()函數(shù)p[]=S[]C[]=’F’Q[i][j]<=p[j]C[i]=’F’?p[j]=p[j]+R[i][j]C[i]=’T’YN所有進(jìn)程的C[i]==’T’?l=m?YN輸出安全序列,并打印出目前資源分派情況輸出提示:系統(tǒng)不安全調(diào)用結(jié)束j=n?YN進(jìn)程祈求算法judge()函數(shù)流程圖四.運(yùn)行成果及闡明輸入進(jìn)程總數(shù),資源總類,每類資源總數(shù);然后輸入已分派矩陣,最大需求矩陣,系統(tǒng)會(huì)求出尚需矩陣并且在屏幕上輸出;然后系統(tǒng)調(diào)用check()安全檢查函數(shù)進(jìn)行安全檢查,會(huì)在屏幕上輸出系統(tǒng)是否安全,若安全,則會(huì)輸出安全序列;接著系統(tǒng)調(diào)用judge()祈求分派函數(shù),屏幕上提示輸入要申請(qǐng)資源的序列號(hào)和要申請(qǐng)的各類資源數(shù),輸入以后,系統(tǒng)會(huì)進(jìn)行判斷要申請(qǐng)的資源數(shù)是否小于剩余資源數(shù),是否小于或等于最大需求數(shù),若都小于,系統(tǒng)會(huì)進(jìn)行安全檢查,若安全,系統(tǒng)就會(huì)進(jìn)行資源分派。運(yùn)行成果如下:五、總結(jié)通過這次的課程設(shè)計(jì),我了解掌握了銀行家算法,學(xué)會(huì)模擬實(shí)現(xiàn)資源分派,同時(shí)通過編寫和調(diào)試一個(gè)系統(tǒng)分派資源的簡(jiǎn)單模擬程序,觀測(cè)到了死鎖產(chǎn)生的條件,并使用適當(dāng)?shù)乃惴?,有效的預(yù)防和防止死鎖的發(fā)生。雖然操作系統(tǒng)是此前學(xué)的,再接觸時(shí)遺忘了許多,不過通過老師的講解,同學(xué)的協(xié)助,自己也仔細(xì)地看了這次課程設(shè)計(jì)的試驗(yàn)指引,撿回了許多東西,對(duì)于銀行家算法的設(shè)計(jì)、編寫的思緒變得清楚。通過幾天重復(fù)的閱讀試驗(yàn)指引,仔細(xì)的思考出現(xiàn)的問題,重復(fù)推敲、測(cè)試與修改,終于能完滿的完成課程設(shè)計(jì)任務(wù)。課程設(shè)計(jì)的時(shí)間雖然不長(zhǎng),但帶了給我知識(shí),也帶給了我戰(zhàn)勝困難、完成任務(wù)的歡樂。希望以后有更多的機(jī)會(huì)接觸此類的課程設(shè)計(jì)。附:程序清單#defineN100#include<stdio.h>intT[N];intS[N];/*各類資源總數(shù)*/intp[N];/*剩余資源數(shù)*/charC[N];intR[N][N];/*已分派矩陣*/intQ[N][N];/*尚需分派矩陣*/intMAX[N][N];/*最大需求矩陣*/intcheck();intjudge();main(){intsum,i,j,n,m;printf("請(qǐng)輸入進(jìn)程總數(shù):");scanf("%d",&m);printf("請(qǐng)輸入資源總類數(shù):");scanf("%d",&n);printf("請(qǐng)輸入每類資源總數(shù):");for(j=0;j<n;j++){scanf("%d",&S[j]);}printf("請(qǐng)輸入已分派資源矩陣:\n");for(i=0;i<m;i++){for(j=0;j<n;j++)scanf("%d",&R[i][j]);/*已分派矩陣*/}printf("請(qǐng)輸入最大需求資源矩陣:\n");for(i=0;i<m;i++){for(j=0;j<n;j++)scanf("%d",&MAX[i][j]);/*最大需求矩陣*/}printf("尚需分派資源矩陣為:\n");printf("進(jìn)程名");for(j=0;j<n;j++)printf("R%d\t",j+1);printf("\n");for(i=0;i<m;i++){printf("T%d\t",i+1);for(j=0;j<n;j++){Q[i][j]=MAX[i][j]-R[i][j];printf("%d\t",Q[i][j]);/*尚需分派矩陣*/}printf("\n");}check(m,n);judge(m,n);}intcheck(intm,intn)/*安全檢查函數(shù)*/{inti,j,k,l=0;for(j=0;j<n;j++){p[j]=S[j];for(i=0;i<m;i++)p[j]=p[j]-R[i][j];}for(i=0;i<m;i++)C[i]='F';for(i=0;i<m;i++){if(C[i]=='T')continue;else{for(j=0;j<n;j++){if(p[j]<Q[i][j])break;}if(j==n){C[i]='T';for(k=0;k<n;k++)p[k]+=R[i][k];T[l++]=i;i-=1; }elsecontinue;if(l==m){printf("系統(tǒng)是安全的\n");printf("安全序列是:\n");for(i=0;i<l;i++){printf("T%d",T[i]+1);if(i!=l-1)printf("-->"); }printf("\n");return1;}}}}intjudge(intm,intn)/*進(jìn)程祈求函數(shù)*/{inti,j,t;intRequest[N][N];charch;while(1){printf("輸入要申請(qǐng)的資源的進(jìn)程號(hào)(1~%d):",m);scanf("%d",&t);printf("輸入進(jìn)程所祈求的各資源的數(shù)量:");for(j=0;j<n;j++)scanf("%d",&Request[t-1][j]);for(j=0;j<n;j++) {if(Request[t-1][j]>Q[t-1][j]) {printf("你輸入的祈求數(shù)超出進(jìn)程的需求量!\n");return0; }if(Request[t-1][j]>p[j]) {printf("你輸入的祈求數(shù)超出系統(tǒng)有的資源數(shù)!\n");return0; } }for(j=0;j<n;j++) {p[j]-=Request[t-1][j];R[t-1][j]+=Request[t-1][j];Q[t-1][j]-=Request[t-1][j]; }if(check)printf("同意分派祈求!\n");else {printf("你的祈求被拒絕!\n");for(j=0;j<n;j++) {p[j]+=Request[t-1][j];R[t-1][j]-=Request[t-1][j];Q[t-1][j]+=Request[t-1][j]; }for(i=0;i<m;i++)C[i]='F';printf("你還想再次祈求分派嗎?是請(qǐng)按y/Y,否請(qǐng)按n/N,再確定\n");while(1) {ch=getch()
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 三清三拆施工合同范例
- 家電搬運(yùn)服務(wù)合同范例
- 酒廠商品購(gòu)銷合同范例
- 公司租車協(xié)議 合同范例
- 個(gè)人借款合同范例一
- 網(wǎng)上合同范例查詢
- 醫(yī)學(xué)應(yīng)聘合同范例
- 簡(jiǎn)易工程采購(gòu)合同范例
- 欄桿簡(jiǎn)易合同范例
- 公司車間房屋維修合同范例
- 新課標(biāo)(水平三)體育與健康《籃球》大單元教學(xué)計(jì)劃及配套教案(18課時(shí))
- GB/T 45076-2024再生資源交易平臺(tái)建設(shè)規(guī)范
- 10.2《師說》課件 2024-2025學(xué)年統(tǒng)編版高中語文必修上冊(cè)
- 2024年度企業(yè)重組與債務(wù)重組協(xié)議3篇
- 2024年公交車開通儀式講話例文(4篇)
- 年高考新課標(biāo)I卷語文試題講評(píng)課件
- 《三 采用合理的論證方法》教學(xué)設(shè)計(jì)統(tǒng)編版高中語文選擇性必修上冊(cè)
- 2024-2025學(xué)年語文二年級(jí)上冊(cè) 部編版期末測(cè)試卷 (含答案)
- 職業(yè)技術(shù)學(xué)院無人機(jī)應(yīng)用技術(shù)專業(yè)人才培養(yǎng)方案
- 神經(jīng)病學(xué)第九版腦梗死
- 2024-2030年中國(guó)膏劑(膏方)行業(yè)競(jìng)爭(zhēng)狀況及營(yíng)銷前景預(yù)測(cè)報(bào)告版
評(píng)論
0/150
提交評(píng)論