操作系統(tǒng)課程設(shè)計(jì)60644new_第1頁(yè)
操作系統(tǒng)課程設(shè)計(jì)60644new_第2頁(yè)
操作系統(tǒng)課程設(shè)計(jì)60644new_第3頁(yè)
操作系統(tǒng)課程設(shè)計(jì)60644new_第4頁(yè)
操作系統(tǒng)課程設(shè)計(jì)60644new_第5頁(yè)
已閱讀5頁(yè),還剩13頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、銀行家算法課程設(shè)計(jì) 班 級(jí):110613學(xué) 號(hào):110613120姓 名:袁超課程設(shè)計(jì)的主要內(nèi)容和要求(包括原始數(shù)據(jù)、技術(shù)參數(shù)、設(shè)計(jì)要求、工作量要求等) 技術(shù)參數(shù): Windows XP系統(tǒng),VC+6.0開發(fā)工具。設(shè)計(jì)要求: 1 設(shè)計(jì)銀行家算法的核心數(shù)據(jù)結(jié)構(gòu)、安全性檢查算法;2 畫出銀行家算法流程圖;3 編程實(shí)現(xiàn)算法功能;4 編寫課程設(shè)計(jì)說明書。 工作量要求:完成以上設(shè)計(jì)要求中的所有算功能介紹我設(shè)計(jì)的銀行家算法實(shí)現(xiàn)系統(tǒng)是一個(gè)進(jìn)程動(dòng)態(tài)請(qǐng)求資源的模擬系統(tǒng),實(shí)現(xiàn)系統(tǒng)為進(jìn)城隨機(jī)產(chǎn)生請(qǐng)求資源的數(shù)量,系統(tǒng)通過資源安全性檢查,檢查是否滿足安全要求。若安全,則才分配資源;不安全時(shí),系統(tǒng)恢復(fù)申請(qǐng)前的狀態(tài);只有當(dāng)

2、進(jìn)程滿足全部的資源需求時(shí),該進(jìn)程執(zhí)行結(jié)束,釋放所占的資源。 內(nèi)容介紹我設(shè)計(jì)的銀行家算法系統(tǒng)主要實(shí)驗(yàn)對(duì)進(jìn)程資源的動(dòng)態(tài)分配,對(duì)進(jìn)程尚需的資源再分配,直到進(jìn)程已獲得全部的所需資源時(shí),系統(tǒng)收回對(duì)該進(jìn)程的分配的所有資源。在系統(tǒng)每次分配時(shí),都要通過安全性的檢查,只有在安全的狀態(tài)下,系統(tǒng)才會(huì)給進(jìn)程分配資源,否則,恢復(fù)到原來的進(jìn)程狀態(tài)。設(shè)計(jì)目的通過銀行家算法設(shè)計(jì)與實(shí)現(xiàn),可以加深學(xué)生對(duì)死鎖的理解,掌握死鎖的預(yù)防、避免、檢測(cè)和解除的基本原理,重點(diǎn)掌握死鎖的避免方法銀行家算法。使學(xué)生初步具有研究、設(shè)計(jì)、編制和調(diào)試操作系統(tǒng)模塊的能力。 設(shè)計(jì)要求系統(tǒng)在進(jìn)行資源分配的過程中,允許進(jìn)程動(dòng)態(tài)的申請(qǐng)資源,為了避免發(fā)生死鎖,在分

3、配資源前要進(jìn)行安全性檢查,若此次分配不會(huì)導(dǎo)致系統(tǒng)進(jìn)入不安全狀態(tài),便將資源分配給進(jìn)程,否則,進(jìn)程等待。設(shè)計(jì)一個(gè)進(jìn)程動(dòng)態(tài)請(qǐng)求資源的模擬系統(tǒng),實(shí)現(xiàn)隨機(jī)產(chǎn)生進(jìn)程請(qǐng)求資源的數(shù)量;資源安全性檢查算法;資源的分配算法;以及輸出顯示每次請(qǐng)求的結(jié)果和系統(tǒng)資源的狀態(tài)設(shè)計(jì)思想 開始時(shí),輸入當(dāng)前進(jìn)程資源的狀態(tài)以及整個(gè)系統(tǒng)的資源使用情況,即進(jìn)行初始化安全性檢查;如果是不安全狀態(tài),重新初始化系統(tǒng);否則,給進(jìn)程分配資源,并使用銀行家算法進(jìn)行檢測(cè),輸出當(dāng)前系統(tǒng)的狀態(tài)和安全序列;如果是安全狀態(tài),系統(tǒng)繼續(xù)從等待隊(duì)列中提取等待進(jìn)程進(jìn)行檢查,并且再分配所需的資源,當(dāng)所需的資源已經(jīng)滿足進(jìn)程所需資源時(shí),便釋放所占的資源;如果是不安全狀態(tài)

4、,進(jìn)程恢復(fù)到原先的狀態(tài)。 程序流程圖程序流程圖包括:主程序流程圖和各功能模塊的流程圖。主程序流程圖如下圖:圖2 主程序模塊圖各功能模塊的流程圖:簡(jiǎn)略的展示部分函數(shù)模塊的流程圖,我采用簡(jiǎn)潔的敘述算法的流程過程,實(shí)際的應(yīng)用參照程序清單,以下為:銀行家算法的流程圖,安全性檢查算法流程圖,釋放資源算法流程圖等。 銀行家算法的流程圖:圖3 銀行家算法安全性檢查算法流程圖圖4 安全檢查算法 釋放資源算法流程圖圖5釋放資源算法 實(shí)驗(yàn)運(yùn)行結(jié)果 實(shí)驗(yàn)結(jié)果達(dá)到了實(shí)驗(yàn)要求和預(yù)期的結(jié)果,實(shí)驗(yàn)運(yùn)行結(jié)果截圖如下: 圖7 初始化資源信息圖7為剛開始執(zhí)行程序時(shí)進(jìn)程數(shù)和資源種類確定,以及系統(tǒng)可利用資源的初始化。圖8 系統(tǒng)給進(jìn)程

5、隨機(jī)分配資源圖8系統(tǒng)給進(jìn)程0、1隨機(jī)分配資源,顯示所需的資源數(shù)。 圖9 隨機(jī)分配資源后進(jìn)程信息圖9為進(jìn)程隨機(jī)分配資源后信息的顯示包括:進(jìn)程狀態(tài),還需資源,已分配資源,最大資源,可利用資源。圖10 安全檢查圖10為安全信息檢查,輸出安全序列號(hào)。 圖11 進(jìn)程再申請(qǐng)資源圖11為給進(jìn)程0再次分配資源,當(dāng)滿足所需資源時(shí),進(jìn)程執(zhí)行完,釋放系統(tǒng)所占的資源。圖12 分配資源超過可利用資源圖12 分配資源超過可利用資源,系統(tǒng)處于不安全狀態(tài),本次申請(qǐng)作廢,恢復(fù)原來的資源分配狀態(tài)。 總 結(jié) 遇到的問題由于使用進(jìn)程編程較少,所以也遇到了一些問題,無論是哪種算法或問題首先要有自己的思路,接下來就是通過語(yǔ)言的實(shí)現(xiàn)。遇到

6、的最大的問題就是不了解銀行家算法和安全性算法,所以剛開始無從下手,還有問題就是編譯調(diào)試中的問題。 解決方法我通過網(wǎng)上和圖書館查閱相關(guān)的資料,對(duì)這兩種算法有了初步的了解,然后提出自己的設(shè)計(jì)思路,確定采用單鏈表的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn),對(duì)于一些自己模糊和不清楚自己又解決不了的問題那就問老師和同學(xué)。收獲體會(huì) 通過這次實(shí)驗(yàn),讓我更加全面的復(fù)習(xí)C語(yǔ)言,也讓我加深了操作系統(tǒng)的知識(shí),知道了系統(tǒng)給進(jìn)程分配資源時(shí)解決死鎖的方法,對(duì)安全算法和銀行家算法有了一定的了解。以前的自己C語(yǔ)言的編程還是有些基礎(chǔ),也做了大量的編程題,所以,編程不是主要的問題。主要的問題就是對(duì)于操作系統(tǒng)系統(tǒng)分配資源的不熟悉,以及試驗(yàn)中所遇到的算法的了解

7、不夠,致使在編程中出現(xiàn)了一些錯(cuò)誤,之后,通過借閱圖書館的書籍,查閱相關(guān)的資料,弄懂了算法的含義,解決了相關(guān)的問題,讓我收獲不少。程序清單#include#include#include#define MaxResource 10 / 最大系統(tǒng)資源類#define NULL 0struct pcb /定義進(jìn)程控制塊PCB int pid; /進(jìn)程標(biāo)號(hào) int MaxMaxResource;/ 表示某個(gè)進(jìn)程對(duì)某類資源的最大需求 int AllocationMaxResource;/ 表示某個(gè)進(jìn)程已分配到某類資源的個(gè)數(shù) int NeedMaxResource;/ 表示某個(gè)進(jìn)程尚需要某類資源的個(gè)數(shù) i

8、nt markMaxResource; /在使用FreeRecourse是以確定是否釋放資源 pcb *next; ;void Initialize(pcb *&head,int m,int n, int AvailableMaxResource)/初始化進(jìn)程資源值int i,j=0;void AddPcb(pcb *&head,pcb node);pcb node; printf(t*請(qǐng)輸入%d進(jìn)程的%d個(gè)最大資源數(shù)*tn,n,m);do node.pid=j;printf(請(qǐng)輸入第 %d個(gè)進(jìn)程最大需求資源數(shù):n,node.pid); for(i=0;im;i+) scanf(%d,&nod

9、e.Maxi);printf(系統(tǒng)給進(jìn)程%d隨機(jī)分配資源數(shù)為:n ,node.pid);for(i=0;im;i+) node.Allocationi=rand()%node.Maxi;printf(%10d,node.Allocationi);Availablei=Availablei-node.Allocationi; printf(n);printf(進(jìn)程%d還所需的資源數(shù)為:n,node.pid);for(i=0;im;i+) node.Needi=node.Maxi-node.Allocationi;printf(%10d,node.Needi); for(i=0;im;i+)nod

10、e.marki=0;printf(n);AddPcb(head,node);j+;while(jnext=NULL;if(head=NULL)head=p;else last=head;while(last-next!=NULL)last=last-next;last-next=p;void ShowPcb(pcb *head,int *avail,int m) /顯示進(jìn)程初始化的資源值pcb *p=NULL; int j;p=head;if(p=NULL)printf(當(dāng)前沒有進(jìn)程,請(qǐng)重新輸入進(jìn)程!n); exit(0);elseprintf(進(jìn)程號(hào) 最大資源值 已分配資源 還需資源 可利用

11、的資源 狀態(tài)nn);while(p!=NULL)printf(p%d,p-pid);for(j=0;jMaxj,p-Allocationj,p-Needj,availj);if(p-markj)printf( 已執(zhí)行n);else printf( 等待n);p=p-next;pcb *Seek(pcb *head,int pid)/查找進(jìn)程在鏈表中的位置pcb *p=NULL;p=head;if(p=NULL)printf(沒有進(jìn)程,進(jìn)程鏈表空!n);return p;elsewhile(p!=NULL)if(p-pid=pid)break; elsep=p-next;if(NULL=p)pr

12、intf(沒有這個(gè)進(jìn)程!n);return p;else return p;void FreeResource(pcb *&head,int AvailableMaxResource,int m)/若進(jìn)程所需資源已全部分配,則釋放該進(jìn)程占據(jù)的全部系統(tǒng)資源pcb *p=NULL;int i;p=head;if(!p)printf(沒有進(jìn)程,請(qǐng)先初始化進(jìn)程!);else for(i=0;iNeedi=NULL)&(p-marki=NULL)printf(進(jìn)程%d的第%d個(gè)已經(jīng)執(zhí)行完,釋放所占系統(tǒng)資源!n,p-pid,i);Availablei+=p-Allocationi;p-marki=1;pc

13、b *Application(pcb *head,int *request,int *avail,int m) /再次給進(jìn)程分配資源 int pid,i;pcb *p=NULL;printf(請(qǐng)輸入進(jìn)程pid號(hào): n);printf(p);scanf(%d,&pid);p=Seek(head,pid);if(p=NULL)printf(沒有這個(gè)進(jìn)程!n);return p;printf(請(qǐng)輸入給該進(jìn)程再次分配的資源數(shù): n);for(i=0;im;i+)scanf(%d,&requesti);for(i=0;ip-Needi)printf(分配進(jìn)程的資源數(shù)超過最大資源數(shù)!n);return N

14、ULL;for(i=0;iavaili)printf(分配進(jìn)程的資源數(shù)超過可利用的資源數(shù)!n);return NULL;for(i=0;iAllocationi=p-Allocationi + requesti;p-Needi=p-Needi - requesti;FreeResource(p,avail,m);return p;pcb *Reasonable(pcb *head,int *finish,int *work,int m,int n) /找到當(dāng)前安全可執(zhí)行的進(jìn)程返回int i=0,j=0,count=0;pcb *p=NULL;while(1)if(finishi!=-1) p=

15、Seek(head,finishi);if(p!=NULL)for(j=0;jNeedjworkj)break;else continue;if(j=m)return p;/p進(jìn)程安全else i+; else i+; if(i=n)return NULL; void Alter(pcb *p,int* work,int* finish,int recordMaxResource,int m) /修改相關(guān)進(jìn)程的資源值int i;for(i=0;ipidi=worki;worki=worki+p-Allocationi;finishp-pid=-1; int SafetyCheck(pcb *h

16、ead,int *avail,int *safety,int RecordMaxResource,int m,int n) /進(jìn)程安全性算法int *work=NULL;int *finish=NULL; pcb *p=NULL;pcb *pro=NULL;int i,count=0;work=(int*)malloc(m*sizeof(int);finish=(int*)malloc(n*sizeof(int);p=head;for(i=0;ipid;p=p-next;i+; i=0;while(countpid; i+;elseprintf(當(dāng)前的系統(tǒng)處于不安全狀態(tài)!n);break;if

17、(count=n)printf(當(dāng)前系統(tǒng)處于安全狀態(tài),存在一個(gè)安全序列 :n);for(i=0;i,safetyi); printf(n); free(finish);free(work);finish=NULL;work=NULL;if(count=n)return 1; else return 0; void ReturnSource(pcb *p,int *request,int *avail,int m) /若試分配失敗,則恢復(fù)試分配前的資源狀態(tài)int i; for(i=0;iAllocationi-=requesti;p-Needi+=requesti;availi+=request

18、i; void main()int n,m; char ch;int i,flag=0; int AvailableMaxResource=0;int RequestMaxResource=0;int RecordMaxResourceMaxResource=0;int SafetyMaxResource=0; /記錄安全序列pcb *head,*process;head=NULL;process=NULL;printf(請(qǐng)輸入進(jìn)程數(shù):n);scanf(%d,&n); printf(請(qǐng)輸入資源數(shù):n);scanf(%d,&m);if(mMaxResource)printf(請(qǐng)輸入資源數(shù)超過系統(tǒng)最大資源數(shù),請(qǐng)重新輸入!n); scanf(%d,&m);printf(請(qǐng)輸入系統(tǒng)總共可利用的資源數(shù)值:n);for(i=0;im;i+)scanf(%d,&Availablei);Initialize(head,m,n,Available);printf(系統(tǒng)為進(jìn)程分配資源如下表:n)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論