版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、操作系統(tǒng)實驗實驗四 銀行家算法學(xué)號 1115107047姓名 吳煒?biāo)砂嗉?1 電子 B華僑大學(xué)電子工程系1、銀行家算法和安全性檢查算法原理操作系統(tǒng)的銀行家算法: 當(dāng)進程首次申請資源時, 要測試該進程對資源的最 大需求量,如果系統(tǒng)現(xiàn)存的資源可以滿足它的最大需求量則按當(dāng)前的申請量分配 資源,否則就推遲分配。 當(dāng)進程在執(zhí)行中繼續(xù)申請資源時, 先測試該進程本次申 請的資源數(shù)是否超過了該資源所剩余的總量。 若超過則拒絕分配資源, 若能滿足 則按當(dāng)前的申請量分配資源,否則也要推遲分配。1、程序流程描述。進程 i 發(fā)出請求資源申請,(1) 如果 Request j=needi,j,轉(zhuǎn)向步驟 (2),否則認為
2、出錯,因為他所需要的資 源數(shù)已經(jīng)超過它所宣布的最大值。(2) 如果: Request ij=availablei,j ,轉(zhuǎn)向步驟 (3) ,否則提示尚無足夠資源, 進程 i 需等待。(3) 系統(tǒng)試探著將資源分配給申請的進程(有預(yù)先寄存操作) ,并修改下面數(shù) 據(jù)結(jié)構(gòu)中的數(shù)值: Availablei,j= Availablei,j- Request j ; Allocationij= Allocationij+ Request j ; needij= needij- Request j ;(4) 試分配后,執(zhí)行安全性檢查,調(diào)用 check()函數(shù)檢查此次資源分配后系統(tǒng) 是否處于安全狀態(tài)。若安全,才
3、正式將資源分配給進程,并修改系統(tǒng)狀態(tài);否則 本次試探分配作廢,恢復(fù)原來的資源分配狀態(tài),讓該進程等待。(5) 用 do while 循環(huán)語句,實現(xiàn)輸入字符 y/n 控制是否進行進一步的資源 申請。安全性檢查算法(子程序) :(1) 設(shè)置兩個向量: Work(它表示系統(tǒng)可提供給進程繼續(xù)運行所需的各類資 源數(shù)目)在執(zhí)行安全性算法開始時, Work= Available。 Finish(它表示系統(tǒng)是否 有足夠的資源分配給進程)初始化, Finishi=false ;當(dāng)有足夠的資源分配給進程 時,再令 Finishi=true 。(2) 在進程中查找符合以下條件的進程: 條件 1:Finishi=fal
4、se ; 條件 2: needij=Workj 若找到,則執(zhí)行步驟 (3)否則,執(zhí)行步驟 (4)(3) 當(dāng)進程獲得資源后,可順利執(zhí)行,直至完成,并釋放出分配給它的資源,故應(yīng)執(zhí)行: Workj= Workj+ Allocationij ; Finishi=true ; goto step (2);(4) 如果所有的 Finishi=true 都滿足,則表示系統(tǒng)處于安全狀態(tài),否則,處 于不安全狀態(tài)。流程圖:嘗試分配資源由于 print 函數(shù)只是把所有信息按矩陣輸出,比較簡單,這里就不寫 流程圖了。2、程序及注釋#include #include #include # define m 50# de
5、fine false 0# define true 1int no1; / 進程數(shù)int no2; / 資源數(shù)int r;int allocationmm, maxmm,needmm, availablem;char name1m, name2m;/定義全局變量 void main()void check(); void print();void shoudon(); int i,j,p=0,q=0; char c;int s;int requestm,allocation1mm,need1mm,available1m,fm;int mx54=0,0,1,2,1,7,5,0,2,3,5,6,0
6、,6,5,2,0,6,5,6;int an54=0,0,1,2,1,0,0,0,1,3,5,4,0,6,3,2,0,0,1,4;int ann54=0,0,1,2,1,4,2,0,2,3,5,6,0,6,5,2,0,6,5,6;printf(*n);printf(*sf 銀行家算法演示*n);printf(*n);printf(n1. 演示報告給定系統(tǒng) 1.);printf(n2. 演示報告給定系統(tǒng) 2.( P1提出需要( 0、4、2、0)個資源) );printf(n3. 演示手動輸入系統(tǒng) .);printf(n0. 退出程序 .);printf(n 請選擇( 03 ):);scanf(%d
7、,&s);switch(s)case 1:no1=5; no2=4;for(i=0;ino1;i+)for(j=0;jno2;j+)maxij=mxij;allocationij=anij;break;case 2:no1=5; no2=4; for(i=0;ino1;i+) for(j=0;jno2;j+) maxij=mxij; allocationij=annij; break;case 3:shoudon();break;case 0:printf(n thanks for you watching! n);exit(0);/* 退出程序 */default:printf(n 請輸入有
8、效指令 n); break; /* 提示輸入無效提示 */ for(i=0;ino1;i+)for(j=0;jno2;j+)needij=maxij-allocationij; /根據(jù)輸入的兩個數(shù)組計算出 need 矩陣的值printf( 請輸入 Available 矩陣 n); for(i=0;ino2;i+) scanf(%d,&availablei);print(); check();if(r=1)doq=0;p=0;printf(n 請輸入請求資源的進程號 for(j=0;j=no1)printf( 輸入錯誤,請重新輸入: n); continue;else break;printf(
9、n 請輸入該進程所請求的資源數(shù) requestj:n);for(j=0;jno2;j+)scanf(%d,&requestj);for(j=0;jneedij) p=1; / 判斷請求是否超過該進程所需要的資源數(shù) if(p) printf( 請求資源超過該進程資源需求量,請求失??! n); else for(j=0;javailablej) / 判斷請求是否超過可用資源數(shù) q=1;if(q)printf( 沒有做夠的資源分配,請求失?。?n);else / 請求滿足條件for(j=0;jno2;j+)available1j=availablej; allocation1ij=allocatio
10、nij;need1ij=needij; / 寄存 (原已分配的資源數(shù)、仍需要的資源數(shù)、 可用的資源數(shù))availablej=availablej-requestj;allocationij+=requestj;needij=needij-requestj;/ 系統(tǒng)嘗試把資源分配給請求的進程check(); /檢測分配后的安全性if(r=1)for(j=0;jno2;j+) fj=allocation1ij+requestj;if(fj=maxij)allocationij=0;else allocationij=fj;availablej=available1j+allocation1ij-a
11、llocationij; / 改寫 (已分配的資源 數(shù)、仍需要的資源數(shù)、可用的資源數(shù))needij=need1ij-requestj;else/如果分配后系統(tǒng)不安全for(j=0;jno2;j+)/ 還原 (已分配的資源數(shù)、仍需availablej=available1j; allocationij=allocation1ij; needij=need1ij;要的資源數(shù)、可用的資源數(shù))print();/顯示相關(guān)信息printf( 返回分配前資源數(shù) n);/判斷是否繼續(xù)進行資源分配printf(n 你還要繼續(xù)分配嗎? Y or N ?n); c=getche();while(c=y|c=Y);/
12、手動輸入void shoudon() int i,j;printf( 請輸入進程總數(shù) :n); scanf(%d,&no1);printf( 請輸入資源種類數(shù) :n); scanf(%d,&no2);printf( 請輸入 Max 矩陣 :n); for(i=0;ino1;i+) for(j=0;jno2;j+)scanf(%d,&maxij);/ 輸入已知進程最大資源需求量printf( 請輸入 Allocation 矩陣 :n);for(i=0;ino1;i+)for(j=0;jno2;j+)scanf(%d,&allocationij);/輸入已知的進程已分配的資源數(shù)return;/安全
13、算法函數(shù) void check() int k,f,v=0,i,j;int workm,am; int finishm;/安全標(biāo)志/ 初始化進程均沒得到足夠資源數(shù),未完成r=1;for(i=0;ino1;i+) finishi=false;for(i=0;ino2;i+)worki=availablei;k=no1;dofor(i=0;ino1;i+)if(finishi=false)f=1;for(j=0;jworkj) f=0;if(f=1) 的資源數(shù)的進程/worki 表示可提供進程繼續(xù)運行的各類資源數(shù)/找到還沒有完成且需求數(shù)小于可提供進程繼續(xù)運行 finishi=true; av+=i
14、;/標(biāo)記完成/記錄安全序列號for(j=0;j0);f=1;for(i=0;ino1;i+)if(finishi=false) f=0; break; if(f=0)/判斷是否所有的進程都完成/未完成/若有進程沒完成,則為不安全狀態(tài)printf( 系統(tǒng)處在不安全狀態(tài)! );r=0; elseprintf(n 系統(tǒng)當(dāng)前為安全狀態(tài),安全序列為: n); for(i=0;ino1;i+)printf(p%d ,ai); /輸出安全序列 /顯示函數(shù)void print() int i,j; printf(n);printf(資源分配情況*n);printf( 進程名 /號碼| Max| Allocat
15、ion |Need |n);for (i = 0; i no1; i+) ,i,i);printf( p%d/%dfor (j = 0; j no2; j+) printf(%d ,maxij);for (j = 0; j no2; j+) printf( %d,allocationij); for (j = 0; j no2; j+)printf( %d,needij); printf(n);printf(n);printf( 各類資源可利用的資源數(shù)為 :);for (j = 0; j no2; j+)printf( %d,availablej); printf(n);3、運行結(jié)果以及結(jié)論。現(xiàn)在系統(tǒng)中 A、B、C、D 4 類資源分別還剩 1、5、2、0個,請按銀行家算法回 答:1、現(xiàn)在系統(tǒng)是否處于安全狀態(tài)? 是,且有安全序列 0、2、3 、4、1。2、如果現(xiàn)在進程 P1提出需要( 0、4、2、0)個資源的請求,系統(tǒng)能否滿足它的 請求?可以,安全序列仍為 0、2、 3 、4、1。運行截圖:主界面:由于
溫馨提示
- 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. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度個人公司股權(quán)代持變更合同3篇
- 2025年度綠色建筑材料采購與施工合同范本4篇
- 2025年度個人二手房居住權(quán)買賣及環(huán)保裝修材料使用合同4篇
- 2025年度高端美容設(shè)備集中采購合同2篇
- 2025年度個人房屋抵押貸款合同變更協(xié)議2篇
- 二零二五年度智能農(nóng)機具租賃服務(wù)合同模板4篇
- 2025年度寵物健康保險及運輸服務(wù)一體化合同3篇
- 門面出租合同模板
- 二零二五年度充電樁充電技術(shù)升級改造合同3篇
- 主播簽約合同:線下押金模式
- 成長小說智慧樹知到期末考試答案2024年
- 紅色革命故事《王二小的故事》
- 海洋工程用高性能建筑鋼材的研發(fā)
- 蘇教版2022-2023學(xué)年三年級數(shù)學(xué)下冊開學(xué)摸底考試卷(五)含答案與解析
- 英語48個國際音標(biāo)課件(單詞帶聲、附有聲國際音標(biāo)圖)
- GB/T 6892-2023一般工業(yè)用鋁及鋁合金擠壓型材
- 冷庫安全管理制度
- 2023同等學(xué)力申碩統(tǒng)考英語考試真題
- 家具安裝工培訓(xùn)教案優(yōu)質(zhì)資料
- 在雙減政策下小學(xué)音樂社團活動有效開展及策略 論文
- envi二次開發(fā)素材包-idl培訓(xùn)
評論
0/150
提交評論