版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、石家莊經(jīng)濟學(xué)院實習(xí)報告(學(xué) 院)系: 信息工程學(xué)院 專 業(yè): 計算機科學(xué)與技術(shù)姓 名: 江丹 班 級: 專接本2班 學(xué) 號: 511109030201 指導(dǎo)教師: 張有華 2012年 6 月 25 日操作系統(tǒng)課程實習(xí)報告學(xué)號:511109030201 姓名:江丹 起迄日期:2012/6/172012/6/25指導(dǎo)教師:張有華 實習(xí)地點:206室實習(xí)題目:本實習(xí)中共有兩個實習(xí)題。第一題:用銀行家算法實現(xiàn)資源分配。要求:(1) 設(shè)計一個3個并發(fā)進程共享10個同類資源的系統(tǒng),進程可動態(tài)地申請資源和釋放資源,系統(tǒng)按各進程的申請動態(tài)地分配資源。(2) 設(shè)計用銀行家算法和隨機分配算法,實現(xiàn)資源分配的兩個資
2、源分配程序,應(yīng)具有顯示或打印各進程依次要求申請的資源數(shù)以及依次分配資源的情況。(3) 確定一組各進程依次申請資源數(shù)的序列,在相同的情況下分別運行上述兩種資源分配程序,觀察運行結(jié)果。第二題:用按序分配策略實現(xiàn)資源分配。要求:(1) 設(shè)計一個3個進程共享10個資源的系統(tǒng),進程可動態(tài)地申請資源和釋放資源,系統(tǒng)按各進程的申請動態(tài)地分配資源。(2) 設(shè)計用按序分配算法實現(xiàn)資源分配的資源分配程序,應(yīng)具有顯示或打印各進程依次要求申請的資源號以及依次分配資源地情況。(3) 確定兩組各進程依次要求申請的資源號,要求其中的一組中各進程按序地申請資源,另一組中各進程申請資源不受序號限制,分別運行上述設(shè)計的資源分配程
3、序,觀察運行結(jié)果。1 實習(xí)內(nèi)容運用隨機分配算法、銀行家算法、按需分配策略進行資源分配,檢查各種算法資源分配的安全性。2 實習(xí)目的多個進程動態(tài)地共享系統(tǒng)的資源可能會產(chǎn)生死鎖現(xiàn)象。死鎖的產(chǎn)生,必須同時滿足四個條件,第一個是互斥條件,即一個資源每次只能由一個進程占用;第二個為等待條件,即一個進程請求資源不能滿足時,它必須等待,但它仍繼續(xù)保持已得到的所有其它資源;第三個是非出讓條件,任何一個進程不能搶占另一個進程已經(jīng)獲得且未釋放的資源;第四個為循環(huán)等待條件,系統(tǒng)中存在若干個循環(huán)等待的進程,即其中每一個進程分別等待它前一個進程所持有的資源。防止死鎖的機構(gòu)只須確保上述四個條件之一不出現(xiàn),則系統(tǒng)就不會發(fā)生死
4、鎖。在實習(xí)中假定系統(tǒng)中任一資源在每一時刻只能則由一個進程使用,任何進程不能搶占它進程正在使用的資源,當(dāng)進程得不到資源時必須等待。因此只要資源分配策略能保證進程不出現(xiàn)循環(huán)等待,則系統(tǒng)就不會發(fā)生死鎖。本實習(xí)要求學(xué)生編寫和調(diào)試一個系統(tǒng)動態(tài)分配資源的簡單模擬程序,觀察死鎖產(chǎn)生的條件,并采用適當(dāng)?shù)乃惴?,有效地防止和避免死鎖的發(fā)生。3 實習(xí)步驟第一步:首先先看書,理解銀行家算法、隨機分配算法及按需分配算法原理,確定整體的代碼思路,確定流程圖。第二步:分析并修改流程圖,檢查其中的邏輯錯誤。第三步:從細節(jié)上分析,各部分功能的代碼實現(xiàn)。第四步:運行并查看結(jié)果,這里主要查看各個資源對資源的占有和申請情況。以及按照
5、自己隨機的輸入三組數(shù)字,選擇各種算法,檢驗其分配的安全性,會不會產(chǎn)生死鎖。第一題的設(shè)計思路及運行結(jié)果:3.13.7部分3.1需求分析本次實驗是在預(yù)輸入三個進程的基礎(chǔ)上初始化,通過選擇算法,來檢測各種算法的分配的安全性。3.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計與說明定義進程結(jié)構(gòu)體:typedef struct pcbworkint pid;char state10;int cur_count;/當(dāng)前申請量int dem_count;/資源需求總量int alr_count;/已占資源量 int need_count;/還需要的資源量struct PCB *next;pcb;定義系統(tǒng)資源結(jié)構(gòu)體:typedef str
6、uct sys_resint cur_count_sum;/當(dāng)前申請總量int sys_res_sum;/系統(tǒng)資源量struct sys_res *next;res;3.3 算法設(shè)計第一部分:初始化三個進程 /初始化當(dāng)前各個資源申請量printf(請輸入各個進程的當(dāng)前申請量n);printf(進程號t當(dāng)前申請量t最大資源需求n);while(ipid,&p-cur_count,&p-dem_count);p-next=NULL;if(head=NULL)head=p;elseq-next=p;q=p;i+;第二部分:檢測系統(tǒng)資源量夠不夠進程申請if(res1.sys_res_sum=sum)r
7、es1.cur_count_sum=sum;printf(系統(tǒng)資源量滿足進程申請資源總量!);elseprintf(輸入數(shù)據(jù)有錯,請重新輸入!);p=head;i=0;while(ialr_count=0; p-need_count=p-dem_count;strcpy(p-state,就緒);p=p-next;i+; 第三部分:進行循環(huán)選擇:當(dāng)輸入數(shù)字大于等于0.5時,執(zhí)行隨即分配算法;當(dāng)輸入數(shù)字小于0.5時執(zhí)行銀行家算法,并給出每個算法的執(zhí)行結(jié)果-即有沒有出現(xiàn)死鎖,還是安全執(zhí)行完畢。這里分別調(diào)用兩個函數(shù):random()和banker()p=head;printf(n開始判斷執(zhí)行隨即分配算
8、法,還是銀行家算法:n);while(!fabs(n-0.0)=0.5就執(zhí)行隨即分配算法if(n=0.5)printf(您當(dāng)前選用的是隨機分配算法!);random(head,res1);elseprintf(您當(dāng)前選用的是銀行家分配算法!);banker(head,res1);/執(zhí)行執(zhí)行銀行家算法本程序用C語言實現(xiàn),將隨機分配算法和銀行家算法分別封裝到函數(shù)中,運用了循環(huán)內(nèi)執(zhí)行if-else語句的方式,進行隨機分配算法和銀行家算法之間的切換選擇。3.4下面是本程序流程圖:資源分配模擬程序總流程圖圖3.4.1-1資源分配模擬程序總流程圖圖3.4.1-2隨機分配算法流程圖圖3.4.1-3銀行家算法
9、流程圖3.5 程序?qū)崿F(xiàn)及運行結(jié)果分析隨機分配算法運行結(jié)果如下:圖3.5.1-1隨機分配算法結(jié)果圖結(jié)果分析: 起初程序輸入3個進程(進程id、資源申請量、資源最大需求量) 輸入大于0.5的數(shù),讓程序首先進行隨機分配算法。隨機分配算法的主要思想是:對當(dāng)前處于就緒狀態(tài)的進程,依次分配資源,能分配多少分配多少,即按順序滿足初次的各個進程初次的申請請求。進行循環(huán)操作,直到某一個進程的最大資源需求量沒有得到滿足,那么它以后的進程申請也將得不到滿足,該組分配將進入死鎖! 死鎖的表現(xiàn):某些進程一直得不到滿足,與其他進程產(chǎn)生了互斥請求,結(jié)果,誰也沒有得到資源。未完成的進程之間一直處于資源的爭奪中,卻一直都不能占
10、有,且釋放。由圖可知,隨機分配算法產(chǎn)生了死鎖!銀行家算法運行結(jié)果如下:圖3.5.1-2銀行家算法結(jié)果圖結(jié)果分析: 起初程序輸入3個進程(進程id、資源申請量、資源最大需求量) 輸入小于0.5的數(shù),讓程序執(zhí)行隨銀行家算法。銀行家算法思想與隨機分配算法的思想類似。區(qū)別在于:系統(tǒng)掌握每個進程對資源的最大需求量,當(dāng)進程要求申請資源時,系統(tǒng)就測試該進程尚需資源的最大量,如果系統(tǒng)中現(xiàn)存的資源數(shù)大于或等于該進程尚需的最大量時,則就滿足進程的當(dāng)前申請。 可以看到,各個進程的資源以占有量=本進程的以占有量+系統(tǒng)資源釋放資源量 由上面結(jié)果可以看出當(dāng)前銀行家算法沒有產(chǎn)生死鎖!3.6 程序源代碼第一題-代碼:參見文件
11、夾LAB01_1(源代碼所在的文件夾鏈接)3.7 程序運行結(jié)果 程序運行結(jié)果見圖(圖3.4.1-1、圖3.4.1-2、圖3.4.1-3)這里第一題測試用例為三個進程:分別為:進程號當(dāng)前申請量最大資源需求135233322第二題的設(shè)計思路及運行結(jié)果:4.14.74.1需求分析本次實驗是在預(yù)輸入三個進程的基礎(chǔ)上初始化,通過選擇算法,來檢測各種算法的分配的安全性。4.2 數(shù)據(jù)結(jié)構(gòu)設(shè)計與說明定義進程結(jié)構(gòu)體:struct/定義進程結(jié)構(gòu)體int Pid; /進程號 int P_state; /狀態(tài)int num; /該進程所需資源總量int have; /該進程已占有資源數(shù)量int Waiting_num
12、;/當(dāng)前等待資源號int pre_num; /上次申請資源號PCBN;定義系統(tǒng)資源結(jié)構(gòu)體:struct/定義資源結(jié)構(gòu)體int r_id;/資源idint r_state;/資源狀態(tài)resourceM;4.3 算法設(shè)計第一部分:初始化三個進程和資源結(jié)構(gòu)體 初始化三個進程:/初始化當(dāng)前各個資源申請量,這里以數(shù)組的結(jié)構(gòu)體數(shù)組的形式初始化 printf(請輸入每個進程所需要的資源總數(shù)n); /對進程進行初始化 printf(n); printf(進程編號 所需資源總數(shù)n); for (i=0;iN;i+) PCBi.Pid=i+1;/數(shù)組從0開始,但編序號為了可觀性更好從1開始,所以為i+1 prin
13、tf(%d ,PCBi.Pid); PCBi.P_state=Ready;/進程初始態(tài)為就緒態(tài) PCBi.pre_num=0;/上次申請資源號,當(dāng)前等待資源號初始值都設(shè)置為0 PCBi.Waiting_num=0; scanf(%d,&PCBi.num); PCBi.have=0;/已占有資源數(shù)為0 初始化資源: /對資源進行初始化 for (i=0;iM;i+) resourcei.r_id=i+1; /初始化資源號從1開始 resourcei.r_state=0;/資源的狀態(tài)初始化為0 printf(執(zhí)行按序分配算法n); order(); 第二部分:寫按需分配算法首先:這里運用了whil
14、e循環(huán)+內(nèi)部選擇的方法。從頭挑選處于就緒狀態(tài)的進程,先判斷各個資源有沒有被進程占用,如果占用了,則在資源中將資源的狀態(tài)值賦予這個進程的進程號。開始的時候,默認任何資源都未被進程占用!if (PCBj.P_state=Ready) /進程為就緒狀態(tài),分配資源printf(現(xiàn)在為%d號進程分配資源 :n,j+1);printf(%d號進程現(xiàn)擁有資源:,j+1);for (i=0;iM;i+) /如果某一進程占有了某一資源時,則這個資源的r_state賦值這個進程的進程號。if (resourcei.r_state=j+1)/通過循環(huán)查找,該進程所占有的所有資源。(判斷所有資源的r_state是否為
15、當(dāng)前進程號)printf(%d ,resourcei.r_id);其次:判斷是否有違按序分配。while (sign(M+1-sign) /當(dāng)還需要的資源數(shù)大于可以分配的資源數(shù)時,如果其余資源都不能釋放,則可能發(fā)生死鎖/要求重新輸入,申請其它資源。printf(你輸入的資源序號可能導(dǎo)致死鎖,請申請其他資源。n);printf(請輸入你想要分配的資源號1 %d :n,M);scanf(%d,&sign);最后:分配資源,修改資源狀態(tài)和進程上一次申請資源號printf(%d號資源成功被分配給%d號進程n,sign,j+1);PCBj.pre_num=sign;/分配成功后,將資源號賦給此進程上次申
16、請資源號。PCBj.have+;/進程已占有資源數(shù)加1resourcesign-1.r_state=j+1;/將進程號賦值給所分配資源的r_state if (PCBj.num=PCBj.have)/當(dāng)進程的總需求量等于已占有資源量時,進程運行完畢。 printf(%d號進程已經(jīng)運行完畢,該進程將終止,該進程所占有的資源將被釋放n,j+1);PCBj.P_state=Finished;/進程的狀態(tài)設(shè)置為完成態(tài)。 for (i=0;iM;i+)/通過for循環(huán)將此進程所占有的資源釋放。 if (resourcei.r_state=j+1) resourcei.r_state=0; 第三部分:主函
17、數(shù)調(diào)用order()函數(shù)。order();本程序用C語言實現(xiàn),主要運用了循環(huán)內(nèi)執(zhí)行if-else語句的方式。4.4下面是本程序流程圖:資源按序分配模擬程序流程圖圖3.4.1-3銀行家算法流程圖圖4.4.1-1按序分配算法流程圖4.5 程序?qū)崿F(xiàn)及運行結(jié)果分析按序分配算法運行結(jié)果如下:圖4.5.1-1按序分配算法結(jié)果圖圖4.5.1-2按序分配算法結(jié)果圖結(jié)果分析: 起初程序輸入3個進程(為每個進程定下所需資源數(shù)) 循環(huán)為每個進程輸入資源號,一直循環(huán)下去。第二次循環(huán)的時候,條件約束為每次輸入的需要分配的資源號絕對不能小于上次已為該進程分配的資源號。并顯示輸出,該進程已經(jīng)占有的資源號。如果該進程已經(jīng)占有
18、了(例如5號資源),那么其他的進程如果再申請5號資源,提示繼續(xù)申請的話,可能產(chǎn)生死鎖!讓其他進程放棄申請已經(jīng)被占用了的資源號。 如果其他進程一直申請已被占用資源號,程序?qū)⑦M入死鎖,必須強制退出。如果程序正常分配資源結(jié)束的話,程序結(jié)束,自動退出。4.6 程序源代碼第二題-代碼:參見文件夾LAB01_1(源代碼所在的文件夾鏈接)4.7 程序運行結(jié)果 程序運行結(jié)果見圖(圖4.5.1-1、圖4.5.1-2)這里按序分配算法的測試用例如下圖:5 實習(xí)總結(jié)1、本次實驗過程中,通過此次題目,資源分配一些基本的預(yù)防死鎖的算法:隨機分配算法、銀行家算法、按需分配算法。2、實驗中出現(xiàn)的問題:對結(jié)構(gòu)體指針數(shù)組的操作出現(xiàn)了幾次非常嚴重的錯誤,在老師的幫助下,自己努力查資料,終于得以解決。對單鏈表操作、malloc動態(tài)分配內(nèi)存空間
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工過程中的安全隱患排查方案
- 《機械制造工藝》課件-機械表面加工質(zhì)量及其對零件使用性能的影響
- 燃氣表計校驗及維護計劃
- 橋梁施工流程優(yōu)化方案
- 環(huán)境數(shù)據(jù)共享平臺
- 土石方土體變形監(jiān)測
- 施工材料檢驗與取樣方案
- (2025年版)慢性髓細胞性白血病中國診斷與治療指南解讀課件
- 虛擬現(xiàn)實培訓(xùn)系統(tǒng)開發(fā)
- 鋼結(jié)構(gòu)桿件受力分析
- 模擬智能交通信號燈課件
- 合肥市軌道交通集團有限公司招聘筆試題庫及答案2025
- 《智慧水電廠建設(shè)技術(shù)規(guī)范》
- 2.3《河流與湖泊》學(xué)案(第2課時)
- 工地臨建合同(標(biāo)準(zhǔn)版)
- GB/T 46275-2025中餐評價規(guī)范
- 2025至2030供水產(chǎn)業(yè)行業(yè)項目調(diào)研及市場前景預(yù)測評估報告
- 2025年6月大學(xué)英語四級閱讀試題及答案
- 神經(jīng)內(nèi)外科會診轉(zhuǎn)診協(xié)作規(guī)范
- 高中詩歌手法鑒賞考試題
- 2025年及未來5年中國幽門螺桿菌藥物行業(yè)市場調(diào)查研究及發(fā)展戰(zhàn)略規(guī)劃報告
評論
0/150
提交評論