《操作系统》课程设计报告(银行家算法).doc_第1页
《操作系统》课程设计报告(银行家算法).doc_第2页
《操作系统》课程设计报告(银行家算法).doc_第3页
《操作系统》课程设计报告(银行家算法).doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统课程设计报告(银行家算法)一、 课程设计题目(题目2)银行家算法二、课程设计目的本课程设计的主要目的是用操作系统中所学的高级语言编写一个银行家算法的通用程序,并用这个程序检测思考题中所给状态的安全性,以进一步了解银行家算法,进而能灵活的用银行家算法来判断系统的安全性。三、课程设计要求下列状态是否安全?(三个进程共享12个同类资源)进程 已分配资源数 最大需求数 1 1 4 2 4 4 3 5 8 (状态a) 1 1 4 2 4 6 3 6 8 (状态b)考虑下列系统状态:分配矩阵 最大需求矩阵 可用资源矩阵0 0 1 2 0 0 1 2 1 5 2 01 0 0 0 1 7 5 0 1 3 5 4 2 3 5 60 6 3 2 0 6 5 2 0 0 1 4 0 6 5 6 问系统是否安全?若安全就给出所有的安全序列。若进程2请求(0 4 2 0),可否立即分配? 四、系统分析报告 设requesti是进程 的请求向量,如果Requesetj=K,表示进程Pi 需要K个Rj 类型的资源。当Pi 发出资源请求后,系统按下述步骤进行检查:(1) 如果Requesetij=Needi,j,便转向步骤2,否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。(2) 如果Requesetij=Availablej,便转向步骤(3);否则,表示尚不足够资源,Pi须等待。(3) 系统试探着把资源分配给进程Pi,并修改下面的数据结构中的数值: Availablej:= Availablej- Requestij; Allocationi,j:= Allocationi,j+ Requestij; Needi.j:= Needi.j- Requestij;系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全, 才正式将资源分配给进程Pi ,以完成本次分配,否则,将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待。五、系统设计报告根据对系统的分析,可以用DijKstra的银行家算法对该系统进行设计,安全性算法的描述如下:(1) 设置两个向量:工作向量Work:它表示系统可提供给进程继续运行所需的各类资源的数目,它含有m个元素,在执行安全算法开始时,Work:=Available;Finish:它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finishi:=false;当有足够的资源分配给进程时,再令Finishi:=true。(2) 从进程集合中找到一个能满足下述条件的进程: Finishi=fales;NeedI,j=Wookj;找到,执行步骤(3),否则,执行步骤(4)。(3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行: Worki:=Worki+AllocationI,j; Finishi;=true; Go to step2;(4)如果所有进程的Finishi=true都满足,则表示系统处于安全状态;否则,系统处于不安全状态。六、系统模块说明 、可利用资源向量 它是个含有m个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配制的该类全部可用资源数目。其数值随该类资源的分配和回收动态的改变。如果Availablej=k表示系统中现有Rj类资源k个。、最大需求矩阵Max 这是一个n*m矩阵,它定义了系统中n个进程中每一个进程对m类资源的最大需求。如果Max(i、j )=k,表示进程I需要Rj类资源的最大数目为k。 、分配矩阵Allocation 这是一个n*m矩阵,它定义了系统中每一类资源当前已分配给每一个进程的资源数。如果Allocation(i、j )=k,表示进程I当前已分得Rj类资源的数目为k。 、需求矩阵Need 这是一个n*m矩阵,用以表示每一个进程尚需的各类资源数,如果Need(i、j )=k,表示进程I还需要Rj类资源k个,方能完成其任务。 七、实验程序清单方能完成其任务。#include #define N 5#define M 3#define true 1#define false 0int MaxNM,AllNM,NeedNM;int AvaM,FinishN;int Ava1M,All1NM;void init() register int i,j; for(i=0;iN;i+) Finishi=-1; for(i=0;iN;i+) printf(Please input P%ds max resouce.n,i); for(j=0;jM;j+) scanf(%d,&Maxij); for(i=0;iN;i+) printf(Please input P%ds allocation resoure.n,i); for(j=0;jM;j+) scanf(%d,&Allij);All1ij=Allij; printf(Please input available resoure.n); for(i=0;i=b) return 1; else return 0;void initNeed() register i,j; for(i=0;iM;i+) for(j=0;jN;j+) Needji=Maxji-Allji;void show( int MaxNM) register int i,j; for(i=0;iN;i+) for(j=0;jM;j+) printf(%5d, Maxij); printf(n); int CmpAN(int i) int j,aM; for(j=0;jM;j+) aj=0; aj=cmp(Avaj,Needij); if(a0&a1&a2) return true; else return false;int SFinish(int i) register int j=0; while(Finishj!=-1) if(i=Finishj) return false; else j+; return true;void Dijkstra() register int i,j,k,m,n,e=0,t=0,r=0; for(k=0;kM;k+) for(i=0;iN;i+) m=SFinish(i);n=CmpAN(i);if(m&n) for(j=0;jM;j+)Avaj+=Allij;Finishe+=i;/*if*/*for*/for(i=0;iN;i+) t+=i; r+=Finishi; if(t=r) printf(The safe queue is); for(i=0;iN;i+) printf(P%d ,Finishi);Finishi=-1; printf(n);elseprintf(Sorry ,Dont find.n);for(i=0;iN;i+)Finishi=-1;for(i=0;iM;i+) Avai=Ava1i;for(j=0;jN;j+)Allji=All1ji;initNeed();main() int i,m,requestM; char ch; init(); printf(This Max arrayn); show(Max); printf(This Allocate arrayn); show(All); initNeed(); Dijkstra(); printf(Do You want set a request(Y/N):); scanf(n%c,&ch); if(ch=Y|ch=y) P: printf(Please input the process id:n); scanf(%d,&m); printf(Please input the request resoure.n); for(i=0;iM;i+) scanf(%d,&requesti); for(i=0;iM;i+) Avai-=requesti; Allmi+=requesti; Needmi-=requesti;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论