




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上武漢理工大學華夏學院課程設(shè)計報告書課程名稱: 操作系統(tǒng)原理 題 目: 編程序模擬銀行家算法 系 名: 信息工程系 專業(yè)班級: 軟件1121 姓 名: 鐘偉 學 號: 指導教師: 蘇永紅 2014年 6 月 13 日武漢理工大學華夏學院信息工程系課 程 設(shè) 計 任 務 書課程名稱: 操作系統(tǒng)原理課程設(shè)計 指導教師: 蘇永紅 班級名稱: 軟件1121 開課系、教研室: 軟件與信息安全 一、課程設(shè)計目的與任務操作系統(tǒng)課程設(shè)計是操作系統(tǒng)原理課程的后續(xù)實踐課程,旨在通過一周的實踐訓練,加深學生對理論課程中操作系統(tǒng)概念,原理和方法的理解,加強學生綜合運用操作系統(tǒng)原理、Linux系
2、統(tǒng)、C語言程序設(shè)計技術(shù)進行實際問題處理的能力,進一步提高學生進行分析問題和解決問題的能力,包含系統(tǒng)分析、系統(tǒng)設(shè)計、系統(tǒng)實現(xiàn)和系統(tǒng)測試的能力。學生將在指導老師的指導下,完成從需求分析,系統(tǒng)設(shè)計,編碼到測試的全過程。二、課程設(shè)計的內(nèi)容與基本要求1、課程設(shè)計題目 編程序模擬銀行家算法2、課程設(shè)計內(nèi)容本課程設(shè)計要求在Linux操作系統(tǒng),GCC編譯環(huán)境下開發(fā)。銀行家算法是避免死鎖的一種重要方法,本實驗要求用用c/c+語言在Linux操作系統(tǒng)環(huán)境下編寫和調(diào)試一個簡單的銀行家算法程序。加深了解有關(guān)資源申請、避免死鎖等概念,并體會和了解死鎖和避免死鎖的具體實施方法。思想:將一定數(shù)量的資金供多個用戶周轉(zhuǎn)使用,當
3、用戶對資金的最大申請量不超過現(xiàn)存資金時可接納一個新客戶,客戶可以分期借款,但借款總數(shù)不能超過最大的申請量。銀行家對客戶的借款可以推遲支付,但是能夠使客戶在有限的時間內(nèi)得到借款,客戶得到所有的借款后能在有限的時間內(nèi)歸還。用銀行家算法分配資源時,測試進程對資源的最大需求量,若現(xiàn)存資源能滿足最大需求就滿足當前進程的申請,否則推遲分配,這樣能夠保證至少有一個進程可以得到所需的全部資源而執(zhí)行到結(jié)束,然后歸還資源,若OS能保證所有進程在有限的時間內(nèi)得到所需資源則稱系統(tǒng)處于安全狀態(tài)。 3、設(shè)計報告撰寫格式要求:1設(shè)計題目與要求 2 設(shè)計思想 3系統(tǒng)結(jié)構(gòu) 4 數(shù)據(jù)結(jié)構(gòu)的說明和模塊的算法流程圖 5 使用說明書(
4、即用戶手冊):內(nèi)容包含如何登錄、退出、讀、寫等操作說明6 運行結(jié)果和結(jié)果分析(其中包括實驗的檢查結(jié)果、程序的運行情況)7 自我評價與總結(jié) 8 附錄:程序清單,注意加注釋(包括關(guān)鍵字、方法、變量等),在每個模塊前加注釋;三、課程設(shè)計步驟及時間進度和場地安排本課程設(shè)計將安排在第17周, 教育技術(shù)中心。具體安排如下:第一天,下發(fā)任務書,學生查閱資料第二天,系統(tǒng)設(shè)計和原型開發(fā)第三,四天 系統(tǒng)功能實現(xiàn)第五天,系統(tǒng)調(diào)試 測試 打包和驗收周次星期一星期二星期三星期四星期五第17周第1-8節(jié)第1-8節(jié)第1-8節(jié)第1-8節(jié)第1-8節(jié)地點現(xiàn)教241現(xiàn)教241現(xiàn)教241現(xiàn)教241現(xiàn)教241四、課程設(shè)計考核及評分標準
5、課程設(shè)計考核將綜合考慮學生考勤和參與度,系統(tǒng)設(shè)計方案正確性,系統(tǒng)設(shè)計和開發(fā)效果以及課程設(shè)計報告書的質(zhì)量。具體評分標準如下:設(shè)置六個評分點(1)設(shè)計方案正確,具有可行性、創(chuàng)新性; 25分(2)系統(tǒng)開發(fā)效果較好; 25分(3)態(tài)度認真、刻苦鉆研、遵守紀律; 10分(4)設(shè)計報告規(guī)范、課程設(shè)計報告質(zhì)量高、參考文獻充分 20分(5)課程設(shè)計答辯概念清晰,內(nèi)容正確 10分(6)課程設(shè)計期間的課堂考勤、答疑與統(tǒng)籌考慮。 10分 按上述六項分別記分后求和,總分按五級記分法記載最后成績。優(yōu)秀(10090分),良好(8089分),中等(7079分),及格(6069分),不及格(059分)目錄1設(shè)計題目與要求1.
6、1設(shè)計題目 編程序模擬銀行家算法1.2實驗要求 本實驗要求用用c/c+語言在Linux操作系統(tǒng)環(huán)境下編寫和調(diào)試一個簡單的銀行家算法程序。加深了解有關(guān)資源申請、避免死鎖等概念,并體會和了解死鎖和避免死鎖的具體實施方法。2 設(shè)計思想將一定數(shù)量的資金供多個用戶周轉(zhuǎn)使用,當用戶對資金的最大申請量不現(xiàn)存資金時可接納一個新客戶,客戶可以分期借款,但借款總數(shù)不能超過最大的申請量。銀行家對客戶的借款可以推遲支付,但是能夠使客戶在有限的時間內(nèi)得到借款,客戶得到所有的借款后能在有限的時間內(nèi)歸還。用銀行家算法分配資源時,測試進程對資源的最大需求量,若現(xiàn)存資源能滿足最大需求就滿足當前進程的申請,否則推遲分配,這樣能夠
7、保證至少有一個進程可以得到所需的全部資源而執(zhí)行到結(jié)束,然后歸還資源,若OS能保證所有進程在有限的時間內(nèi)得到所需資源則稱系統(tǒng)處于安全狀態(tài)。3實驗環(huán)境系統(tǒng)平臺:LINUX開發(fā)語言:C 開發(fā)工具:PC機一臺4數(shù)據(jù)結(jié)構(gòu)的說明和模塊的算法流程圖4.1死鎖避免: 定義::系統(tǒng)設(shè)計時確定資源分配算法,保證不發(fā)生死鎖。具體的做法是破壞產(chǎn)生死鎖的四個必要條件之一 4.1.1破壞“不可剝奪”條件 在允許進程動態(tài)申請資源前提下規(guī)定,一個進程在申請新的資源不能立即 得到滿足而變?yōu)榈却隣顟B(tài)之前,必須釋放已占有的全部資源,若需要再重新申請 4.1.2破壞“請求和保持”條件 要求每個進程在運行前必須一次性申請它所要求的所有
8、資源,且僅當該進 程所要資源均可滿足時才給予一次性分配 4.1.3破壞“循環(huán)等待”條件 采用資源有序分配法: 把系統(tǒng)中所有資源編號,進程在申請資源時必須嚴格按資源編號的遞增次 、序進行,否則操作系統(tǒng)不予分配。4.2安全狀態(tài)與不安全狀態(tài) 安全狀態(tài): 如果存在一個由系統(tǒng)中所有進程構(gòu)成的安全序列P1,Pn,則系統(tǒng)處于安全狀態(tài)。一個進程序列P1,Pn是安全的,如果對于每一個進程Pi(1in),它以后尚需要的資源量不超過系統(tǒng)當前剩余資源量與所有進程Pj (j < i )當前占有資源量之和,系統(tǒng)處于安全狀態(tài) (安全狀態(tài)一定是沒有死鎖發(fā)生的) 不安全狀態(tài):不存在一個安全序列,不安全狀態(tài)一定導致死鎖。4
9、.3數(shù)據(jù)結(jié)構(gòu):(1)可利用資源向量Available是個含有m個元素的數(shù)組,其中的每一個元素代表一類可利用的資源數(shù)目。如果Availablej=K,則表示系統(tǒng)中現(xiàn)有Rj類資源K個。(2)最大需求矩陣Max這是一個n×m的矩陣,它定義了系統(tǒng)中n個進程中的每一個進程對m類資源的最大需求。如果Maxi,j=K,則表示進程i需要Rj類資源的最大數(shù)目為K。(3)分配矩陣Allocation這也是一個n×m的矩陣,它定義了系統(tǒng)中每一類資源當前已分配給每一進程的資源數(shù)。如果Allocationi,j=K,則表示進程i當前已分得Rj類資源的 數(shù)目為K。(4)需求矩陣Need。這也是一個n&
10、#215;m的矩陣,用以表示每一個進程尚需的各類資源數(shù)。如果Needi,j=K,則表示進程i還需要Rj類資源K個,方能完成其任務。Needi,j=Maxi,j-Allocationi,j4.4安全性檢查算法4.4.1設(shè)置兩個工作向量Work=AVAILABLE;FINISH4.4.2從進程集合中找到一個滿足下述條件的進程,F(xiàn)INISH=false;NEED<=Work;如找到,執(zhí)行(3);否則,執(zhí)行(4)4.4.3設(shè)進程獲得資源,可順利執(zhí)行,直至完成,從而釋放資源。Work+=ALLOCATION;Finish=true;GOTO 24.4.4如所有的進程Finish= true,則表示
11、安全;否則系統(tǒng)不安全。4.5程序流程圖5 使用說明書 5.1首先在終端中使用vi編輯器建立c的源文件5.2然后使用gcc編輯器編譯生成可執(zhí)行文件5.3使用命令./當前名字,來執(zhí)行6運行結(jié)果和結(jié)果分析 6.1輸入6.2輸出6.3結(jié)果分析這次的設(shè)計數(shù)據(jù)是通過一道實際的題目來體現(xiàn)銀行家算法避免死鎖的問題,先用銀行家算法給其中一個進程分配資源,看它所請求的資源是否大于它的需求量,才和系統(tǒng)所能給的資源相比較.讓進程形成一個安全隊列,看系統(tǒng)是否安全.再利用安全性算法檢查此時系統(tǒng)是否安全。 7自我評價與總結(jié)在本次實驗中我們使用了liunx變成環(huán)境,讓我們更加系統(tǒng)深入的了解了liunx,gcc編程思路和思想,
12、同時讓我更加深刻的了解銀行家算法,了解死鎖的避免和預防,對操作系統(tǒng)對資源的申請和釋放有了更加深刻的理解,同時在編程過程中積極的向老師同學請教問題與他們一起探討在系統(tǒng)中存在的問題和漏洞。深入了解了銀行家算法的資源申請和資源分配的過程及原則。保證系統(tǒng)處于安全狀態(tài)。 經(jīng)過本周的課程設(shè)計,我對操作系統(tǒng)的掌握又進了一步,收獲了很多知識。 ,終于我了由于對 c 語言不夠熟練,在試驗過程中,進行了反復的修改和調(diào)試,解銀行家算法的基本原理,并且在此次的課程設(shè)計中我又復習了一下 c 語言,加深了對它的了解,而且在課程設(shè)計的過程中我們同樣學會了如何簡單的操作與使用 Linux 操作系統(tǒng),學習到了許多 Linux
13、操作系統(tǒng)中常用的一些密令。 這次的設(shè)計數(shù)據(jù)是通過一道實際的題目來體現(xiàn)銀行家算法避免死鎖的問題,先用銀行家算法給其中一個進程分配資源,看它所請求的資源是否大于它的需求量,才和系統(tǒng)所能給的資源相比較.讓進程形成一個安全隊列看系統(tǒng)是否安全.再利用安全性算法檢查此時系統(tǒng)是否安全。 操作系統(tǒng)的基本特征是并發(fā)與共享。系統(tǒng)允許多個進程并發(fā)執(zhí)行,并且共享系統(tǒng)的軟、硬件資源。為了最大限度的利用計算機系統(tǒng)的資源,操作系統(tǒng)應采用動態(tài)分配的策略,但是這樣就容易因資源不足,分配不當而引起“死鎖”。而我本次課程設(shè)計就是得用銀行家算法來避免“死鎖”。銀行家算法就是一個分配資源的過程,使分配的序列不會產(chǎn)生死鎖。此算法的中心思
14、想是:按該法分配資源時,每次分配后總存在著一個進程,如果讓它單獨運行下去,必然可以獲得它所需要的全部資源,也就是說,它能結(jié)束,而它結(jié)束后可以歸還這類資源以滿足其他申請者的需要。 通過這次實驗,我體會到銀行家算法的重要性,銀行家算法是避免死鎖的主要方法,其思路在很多方面都非常值得我來學習借鑒。通過這次實踐,我知道,要做一個課程設(shè)計,如果知識面只是停留在書本上,是不可能把課成設(shè)計完全地做好。在課程設(shè)計中,很多C語言的知識都忘了,每次的課程設(shè)計中都能將以前的知識順便再復習一遍,課程設(shè)計是給了我們一個機會去動手和主動復習,同時也是提醒我們應該注重平時的積累。從課程設(shè)計以后還是要多多的動手,在實踐中體會
15、理論知識,才能吸取經(jīng)驗教訓。經(jīng)過這次實驗訓練,我對這門課程有了更好的了解。8附錄:源程序清單#include<iostream.h>#include<string.h>#include<stdio.h>#define False 0#define True 1int Max100100=0;/各進程所需各類資源的最大需求int Avaliable100=0;/系統(tǒng)可用資源char name100=0;/資源的名稱int Allocation100100=0;/系統(tǒng)已分配資源int Need100100=0;/還需要資源int Request100=0;/請求
16、資源向量int temp100=0;/存放安全序列int Work100=0;/存放系統(tǒng)可提供資源int p100=0;int q100100=0;int z100100=0;int M=100;/作業(yè)的最大數(shù)為100int N=100;/資源的最大數(shù)為100int gg=1;void showdata()/顯示資源矩陣 int i,j; cout<<endl<<"此時刻的資源分配情況為:"<<endl; cout<<" Max Allocation Need Avaliable"<<endl;
17、 cout<<"進程名 " for(j=0;j<4;j+) for(i=0;i<N;i+) cout<<namei<<" " cout<<" " cout<<endl; for(i=0;i<M;i+) cout<<" "<<i<<" " for(j=0;j<N;j+) cout<<Maxij<<" " cout<<&quo
18、t; " for(j=0;j<N;j+) cout<<Allocationij<<" " cout<<" " for(j=0;j<N;j+) cout<<Needij<<" "if(i=0) cout<<" " for (j=0;j<N;j+) cout<<Avaliablej<<" "/輸出分配資源 cout<<endl; int changdata(int
19、i)/進行資源分配 int j;for (j=0;j<M;j+) /pj=Avaliablej; Avaliablej=Avaliablej-Requestj; /qij=Allocationij; Allocationij=Allocationij+Requestj; /zij=Needij; Needij=Needij-Requestj;return 1;int safe()/安全性算法int i,d,k=0,m,h,s,apply,Finish100=0;int j;int flag=0;for(i=0;i<N;i+)Worki=Avaliablei;cout<<
20、endl<<" 安全性檢查 "<<endl;cout<<" Work Need Allocation Work+Allocation Finish"<<endl;cout<<"進程名 "for(h=0;h<4;h+) for(s=0;s<N;s+) cout<<names<<" " cout<<" " cout<<endl;for(i=0;i<M;i+) apply=0;
21、 for(j=0;j<N;j+) if (Finishi=False&&Needij<=Workj) apply+; if(apply=N) cout<<" "<<i<<" " for(d=0;d<N;d+) cout<<Workd<<" " cout<<" "for(d=0;d<N;d+)cout<<Needid<<" " cout<<"
22、 "for(d=0;d<N;d+)cout<<Allocationid<<" " cout<<" " for(m=0;m<N;m+) Workm=Workm+Allocationim; cout<<Workm<<" " /變分配數(shù) Finishi=True; tempk=i;cout<<" " cout<<"true"<<" " cout<<end
23、l;i=-1; k+; flag+; for(i=0;i<M;i+) if(Finishi=False) for(j=0;j<N;j+)Avaliablej=Avaliablej+Requestj; Allocationij=Allocationij-Requestj; Needij=Needij+Requestj; cout<<endl<<"系統(tǒng)進入不安全狀態(tài)!此時系統(tǒng)不分配資源!"<<endl;/不成功系統(tǒng)不安全 return 0; cout<<endl<<"此時系統(tǒng)是安全的!"
24、<<endl;/如果安全,輸出成功 cout<<"安全序列為:"for(i=0;i<M;i+)/輸出運行進程數(shù)組 cout<<tempi; if(i<M-1) cout<<"->" cout<<endl; return 0;void share()/利用銀行家算法對申請資源對進行判定char ch;int i=0,j=0;ch='y'cout<<endl<<"請輸入要求分配的資源進程號(0-"<<M-1&l
25、t;<"):" cin>>i;/輸入須申請的資源號cout<<endl<<"請輸入進程 "<<i<<" 申請的資源:"<<endl;for(j=0;j<N;j+) cout<<namej<<":" cin>>Requestj;/輸入需要申請的資源 for (j=0;j<N;j+) if(Requestj>Needij)/判斷申請是否大于需求,若大于則出錯 cout<<end
26、l<<"進程 "<<i<<"申請的資源大于它需要的資源" cout<<" 分配不合理,不予分配!"<<endl; ch='n' break; else if(Requestj>Avaliablej)/判斷申請是否大于當前資源,若大于則 /出錯 cout<<endl<<"進程"<<i<<"申請的資源大于系統(tǒng)現(xiàn)在可利用的資源" cout<<" 分配出
27、錯,不予分配!"<<endl; ch='n' break; if(ch='y') changdata(i);/根據(jù)進程需求量變換資源 showdata();/根據(jù)進程需求量顯示變換后的資源 safe();/根據(jù)進程需求量進行銀行家算法判斷 int main()/主函數(shù) int t=1,i,j,number,choice,m,n,flag;char ming;cout<<"*銀行家算法的設(shè)計與實現(xiàn)*"<<endl;cout<<endl<<"請首先輸入系統(tǒng)可供資源種類
28、的數(shù)量:"cin>>n;N=n;for(i=0;i<n;i+) cout<<"資源"<<i+1<<"的名稱:" cin>>ming; namei=ming; cout<<"資源的數(shù)量:" cin>>number; Avaliablei=number;cout<<endl;cout<<"請輸入作業(yè)的數(shù)量:"cin>>m;M=m;cout<<endl<<"請輸入各進程的最大需求量("<<m<<"*"<<n<<"矩陣)Max:"<<endl;for(i=0;i<m;i+) for(j=0;j<n;j+) cin>>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中醫(yī)按摩養(yǎng)生師承合同
- 拆除工程合同履行及施工許可證辦理承包合同范本
- 茶葉電商平臺入駐與營銷合作合同
- 吞咽治療護理
- 房產(chǎn)代持協(xié)議書(婚姻財產(chǎn)分割版)
- 和人有關(guān)的課件
- 撤資協(xié)議書標準模板
- 車貸抵押擔保業(yè)務專屬合同模板
- 城市出租車經(jīng)營權(quán)承包合作協(xié)議范本
- 高端汽車定制生產(chǎn)與售后服務協(xié)議
- 道路工程質(zhì)量通病防治監(jiān)理細則
- 籃球運球課件教學
- 科學實驗教育講座模板
- 機化性肺炎治療方案
- 醫(yī)院用電安全知識培訓
- 世界各國及其首都英文譯名Excel
- GB/T 44289-2024農(nóng)村公共法律服務基本規(guī)范
- GB/T 30819-2024機器人用諧波齒輪減速器
- 2024秋期國家開放大學《可編程控制器應用實訓》一平臺在線形考(形成任務1)試題及答案
- 古詩詞誦讀《臨安春雨初霽》課件+2023-2024學年統(tǒng)編版高中語文選擇性必修下冊
- 護理核心制度搶救制度
評論
0/150
提交評論