《操作系统,银行家算法》课程设计报告_第1页
《操作系统,银行家算法》课程设计报告_第2页
《操作系统,银行家算法》课程设计报告_第3页
《操作系统,银行家算法》课程设计报告_第4页
《操作系统,银行家算法》课程设计报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、操作系统,银行家算法课程设计报告 操作系统-银行家算法 课程设计报告 姓 名: 学 号: 班 级:计科班 专 业:计算机科学与技术 xx大学 计算机科学与信息学院 目 录 1 课程设计目的 1 2 课程设计的要求 1 3 课程设计题目描述 2 4 课程设计之银行家算法原理 2 5 源程序结构分析及代码实现 4 6 课程设计总结 25 一、课程设计的目的 操作系统是计算机系统的核心系统软件,它负责控制和管理整个系统的资源并组织用户协调使用这些资源,使计算机高效的工作。操作系统课程设计是操作系统理论课的必要补充,是复习和检验所学课程的重要手段,本课程设计的目的是综合应用学生所学知识,通过实验环节,

2、加深学生对操作系统根本原理和工作过程的理解,提高学生独立分析问题、解决问题的能力,增强学生的动手能力。 二、课程设计的要求 1分析设计内容,给出解决方案(要说明设计实现的原理,采用的数据结构)。 2画出程序的根本结构框图和流程图。 3对程序的每一局部要有详细的设计分析说明。 4源代码格式要标准。 5设计适宜的测试用例,对得到的运行结果要有分析。 6设计中遇到的问题,设计的心得体会。 7按期提交完整的程序代码、可执行程序和课程设计报告。 三、课程设计题目描述 银行家算法是一种最有代表性的防止死锁的算法。 要解释银行家算法,必须先解释操作系统平安状态和不平安状态。 平安状态:如果存在一个由系统中所

3、有进程构成的平安序列p1,pn,那么系统处于平安状态。平安状态一定是没有死锁发生。 不平安状态:不存在一个平安序列。不平安状态不一定导致死锁。 那么什么是平安序列呢? 平安序列:一个进程序列p1,pn是平安的,如果对于每一个进程pi(1in),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程pj (j < i )当前占有资源量之和。 银行家算法: 我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。操作系统按照银行家制定的规那么为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的

4、资源可以满足它的最大需求量那么按当前的申请量分配资源,否那么就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。假设超过那么拒绝分配资源,假设没有超过那么再测试系统现存的资源能否满足该进程尚需的最大资源量,假设能满足那么按当前的申请量分配资源,否那么也要推迟分配。 四、 课程设计之银行家算法原理 1银行家算法的思路 先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。假设请求合法,那么进行试分配。最后对试分配后的状态调用平安性检查算法进行平安性检查。假设平安,那么分配,否那么,不分配,恢复原

5、来状态,拒绝申请。 2银行家算法中用到的主要数据结构 可利用资源向量 int availablej j为资源的种类。 最大需求矩阵 int maxij i为进程的数量。 分配矩阵 int allocationij 需求矩阵 int needij= maxij- allocationij 申请各类资源数量 int request ij i进程申请j资源的数量 工作向量 int workx int finishy 3银行家算法bank() 进程i发出请求申请k个j资源,request ij=k (1)检查申请量是否不大于需求量:request ij<=needi,j,假设条件不符重新输入,不

6、允许申请大于需求量。 (2)检查申请量是否小于系统中的可利用资源数量:request ij<=availablei,j,假设条件不符就申请失败,阻塞该进程,用goto语句跳转到重新申请资源。 (3)假设以上两个条件都满足,那么系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值: availablei,j= availablei,j- request ij;allocationij= allocationij+ request ij;needij= needij- request ij;(4)试分配后,执行平安性检查,调用safe()函数检查此次资源分配后系统是否处于平安状态。假

7、设平安,才正式将资源分配给进程;否那么本次试探分配作废,恢复原来的资源分配状态,让该进程等待。 (5)用dowhile 循环语句实现输入字符y/n判断是否继续进行资源申请。 4平安性检查算法(safe()函数) (1)设置两个向量:工作向量work,它表示系统可提供应进程继续运行所需的各类资源数目,在执行平安性算法开始时,work= available。 finish,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做finishi=0; 当有足够的资源分配给进程时,再令finishi=1。 (2)在进程中查找符合以下条件的进程: 条件1:finishi=0;条件2:needij&

8、lt;=workj 假设找到,那么执行步骤(3)否那么,执行步骤(4) (3)当进程获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:workj= workj+ allocationij;finishi=1;goto step 2; (4)如果所有的finishi=1都满足,那么表示系统处于平安状态,否那么,处于不平安状态。 五、源程序结构分析及代码实现 1程序结构 程序共有以下五个局部: (1) .初始化chushihua():用于程序开始进行初始化输入数据:进程数量、资源种类、各种资源可利用数量、各进程的各种资源已分配数量、各进程对各类资源最大需求数等。 (2).当前平安

9、性检查safe():用于判断当前状态平安性,根据不同地方的调用提示处理不同。 (3).银行家算法bank():进行银行家算法模拟实现的模块,调用其他各个模块进行银行家算法模拟过程。 (4).显示当前状态show():显示当前资源分配详细情况,包括:各种资源的总数量(all)、系统目前各种资源可用的数量、各进程已经得到的资源数量、各进程还需要的资源量。 (5).主程序main() 逐个调用初始化、显示状态、平安性检查、银行家算法函数,使程序有序的进行。 2数据结构 程序使用的全局变量: const int x=10,y=10; /定义常量 int availablex; /各种资源可利用的数量

10、int allocationyy; /各进程当前已分配的资源数量 int maxyy; /各进程对各类资源的最大需求数 int needyy; /还需求矩阵 int requestx; /申请各类资源的数量 int workx; /工作向量,表系统可提供应进程运行所需各类资源数量 int finishy; /表系统是否有足够的资源分配给进程,0为否,1为是 int py; /存储平安序列 int i,j; /全局变量,主要用于循环语句中 int n,m; /n为进程的数量,m为资源种类数 int l=0,counter=0; 3函数声明 void chushihua();/系统初始化函数 vo

11、id safe(); /平安性算法函数 void bank(); /银行家算法函数 void show (); /输出当前资源分配情况 4主函数main() int main() cout<< /显示程序开始提示信息 chushihua(); /初始化函数调用 cout<>“<<“进程“<<“(“< #include #include using namespace std; #define true 1 /定义 true =1 #define false 0 /定义 flase=0 void bank(vector,vector >

12、,vector >,int ,int ); /声明bank(应行家算法)int safe(vector available,vector > need,vector > allocation,int n,int m);/声明safe()平安性算法 void init(); /*主函数main()*/ void main() init(); int safe(vector available,vector > need,vector > allocation,int n,int m); /*初始化函数init()*/ void init() int m; /m资源类

13、数 int n; /进程数 cout<<“输入资源类数“<>m; vector available(m); /动态申请数组available可用资源向量 cout<<“输入各类资源总数:“<>availablei; /*/ file *fp; fp=fopen(“available.txt“,“r+“); cout<<“从available.txt文件中读入数据,并输出“<>n; vector > max(n, vector(m); /*/ /* 下面的被刚掉的为在dos下输入资源向量*/ /*未被刚掉的是从max.

14、txt文件中读入数据*/ /*/ /* for ( i=0;i>maxij; while (maxij>availablej) cout<>maxij; /*/ fp=fopen(“max.txt“,“r+“); cout<<“从max.txt文件中读入数据,并输出“< > allocation(n, vector(m); vector > need(n, vector(m); /*/ /* 下面的被刚掉的为在dos下输入资源向量*/ /*未被刚掉的是从allocation.txt文件中读入数据*/ /*/ /* for ( i=0;i&g

15、t;allocationij; while(allocationij>maxij) cout<>allocationij; needij=maxij-allocationij; availablej =availablej-allocationij; /*/ fp=fopen(“allocation.txt“,“r+“); cout<<“allocation.txt从文件中读入数据,并输出“< available,vector > need,vector > allocation,int n,int m); cout<<“此状态平安!

16、“< available,vector > need,vector > allocation,int n,int m) vector request(m); int all=0; /定义变量all,如果all=0,表示进程已经运行完,如果all>=1,表示还有进程没有运行完 for (int i=0;i=1,表示还有进程没有运行完 /循环直至all>0,即找到一个未运行完的进程 cout<<“任选一个进程作为当前进程0-“<>jc; for (int j=0;j>requesti; while(requesti>needjci|

17、requesti>availablei) cout<<“请求向量无法满足“<>again; if(again=y|again=y) all=0; continue; break; /*平安性算法safe()函数*/ int safe(vector available,vector > need,vector > allocation,int n,int m) vector work(m),finish(n);/申请工作向量work,finish work=available; vector count(n); /记录平安序列 int len=-1; /记录平安序列的进程个数,如果len=n,即表示所有的finish【i】=true,处于平安状态 for(int i=0;i“; cout< 本次程序就是按照上面的思路展开的。但是因为时间上的仓促,本课程设计的存在着以下缺乏:一、不能实现并发操作,即当总资源同时满足几个进程所需要的资源数时,这些进程不能同时进行,只能一一按进程顺序执行。二、扫描进程顺序单一,只能按进程到来的顺序

温馨提示

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

评论

0/150

提交评论