操作系统课程设计银行家算法.docx
- 文档编号:10533249
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:11
- 大小:375.99KB
操作系统课程设计银行家算法.docx
《操作系统课程设计银行家算法.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计银行家算法.docx(11页珍藏版)》请在冰豆网上搜索。
操作系统课程设计银行家算法
一、课程设计的目的
操作系统是计算机系统的核心系统软件,它负责控制和管理整个系统的资源并组织用户协调使用这些资源,使计算机高效的工作。
《操作系统课程设计》是《操作系统》理论课的必要补充,是复习和检验所学课程的重要手段,本课程设计的目的是综合应用学生所学知识,通过实验环节,加深学生对操作系统基本原理和工作过程的理解,提高学生独立分析问题、解决问题的能力,增强学生的动手能力。
二、课程设计的要求
1.分析设计内容,给出解决方案(要说明设计实现的原理,采用的数据结构)。
2.画出程序的基本结构框图和流程图。
3.对程序的每一部分要有详细的设计分析说明。
4.源代码格式要规范。
5.设计合适的测试用例,对得到的运行结果要有分析。
6.设计中遇到的问题,设计的心得体会。
7.按期提交完整的程序代码、可执行程序和课程设计报告。
三、银行家算法
1、银行家算法
银行家算法是一种最有代表性的避免死锁的算法。
要解释银行家算法,必须先解释操作系统安全状态和不安全状态。
安全状态:
如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。
安全状态一定是没有死锁发生。
不安全状态:
不存在一个安全序列。
不安全状态不一定导致死锁。
那么什么是安全序列呢?
安全序列:
一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj(j
银行家算法:
我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。
操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。
当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。
若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。
2、银行家算法的思路
先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。
若请求合法,则进行试分配。
最后对试分配后的状态调用安全性检查算法进行安全性检查。
若安全,则分配,否则,不分配,恢复原来状态,拒绝申请。
3、银行家算法中用到的主要数据结构
可利用资源向量intAvailable[j]j为资源的种类。
最大需求矩阵intMax[i][j]i为进程的数量。
分配矩阵intAllocation[i][j]
需求矩阵intneed[i][j]=Max[i][j]-Allocation[i][j]
申请各类资源数量intRequesti[j]i进程申请j资源的数量
工作向量intWork[x]intFinish[y]
4、银行家算法bank()
进程i发出请求申请k个j资源,Requesti[j]=k
(1)检查申请量是否不大于需求量:
Requesti[j]<=need[i,j],若条件不符重新输入,不允许申请大于需求量。
(2)检查申请量是否小于系统中的可利用资源数量:
Requesti[j]<=available[i,j],若条件不符就申请失败,阻塞该进程,用goto语句跳转到重新申请资源。
(3)若以上两个条件都满足,则系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值:
Available[i,j]=Available[i,j]-Requesti[j];
Allocation[i][j]=Allocation[i][j]+Requesti[j];
need[i][j]=need[i][j]-Requesti[j];
(4)试分配后,执行安全性检查,调用safe()函数检查此次资源分配后系统是否处于安全状态。
若安全,才正式将资源分配给进程;否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。
(5)用do{…}while循环语句实现输入字符y/n判断是否继续进行资源申请。
5、安全性检查算法(safe()函数)
(1)设置两个向量:
工作向量Work,它表示系统可提供给进程继续运行所需的各类资源数目,在执行安全性算法开始时,Work=Available。
Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。
开始时先做Finish[i]=0;当有足够的资源分配给进程时,再令Finish[i]=1。
(2)在进程中查找符合以下条件的进程:
条件1:
Finish[i]=0;
条件2:
need[i][j]<=Work[j]
若找到,则执行步骤(3)否则,执行步骤(4)
(3)当进程获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:
Work[j]=Work[j]+Allocation[i][j];
Finish[i]=1;
gotostep2;
(4)如果所有的Finish[i]=1都满足,则表示系统处于安全状态,否则,处于不安全状态。
四、进程调度算法
1、进程调度算法
通过优先权法和轮转算法的模拟加深对进程概念和进程调度过程的理解,掌握进程状态之间的切换,同时掌握进程调度算法的实现方法和技巧。
2、进程调度的基本思想
(1)当系统空闲(就绪队列为空)时,系统运行闲逛进程,否则运行其他进程,发生变迁1(就绪→运行)。
(2)在运行进程(包括闲逛进程)的过程中,可能发生变迁2(运行→阻塞),即将运行进程插入到阻塞队列(闲逛进程不能被阻塞),可能有其他新的进程创建PCB,还可能唤醒阻塞队列中的某些进程PCB,发生变迁3(阻塞→就绪),即从阻塞队列中移出并插入就绪队列中。
(3)时间片运行结束后,若进程累计占用CPU时间大于等于进程需要运行的时间,则进程执行结束,释放其PCB。
若进程累计占用CPU时间小于进程需要运行时间,发生变迁4(运行→就绪),即将当前运行的进程插入就绪队列中。
3、程序流程图
(1)动态优先权的进程调度算法模拟流程(请同学们补充)
(2)轮转法进程调度算法模拟流程
4、设计思路
(1)用C语言或C++语言来实现对n个进程采用优先权优先算法以及轮转算法的进程调度。
(2)每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:
1)进程标识ID,其中0为闲逛进程,用户进程的标识数为1,2,3…。
2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,标识数越大,优先级越高。
3)进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4。
4)进程总共需要运行时间Alltime,利用随机函数产生。
5)进程状态,0-就绪态;1-运行态;2-阻塞态。
6)队列指针next,用来将多个进程控制块PCB链接为队列。
(3)优先数改变的原则
1)进程在就绪队列中每呆一个时间片,优先数增加1。
2)进程每运行一个时间片,优先数减3。
(4)在调度前,系统中拥有的进程数PCB_number由键盘输入,经初始化后,所有的进程控制块PCB链接成就绪队列。
(5)为了清楚地观察诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来,参照输出格式如图1、2、3所示:
图1优先权优先调度算法
图2优先权优先调度算法
图3优先权优先调度算法
轮转调度算法的运行结果如图1-4、1-5所示。
图4轮转调度算法的运行结果
图5轮转调度算法的运行结果
五、内存分配
1、基本思路
在存储管理中要解决内存的分配与回收的问题。
现在普遍使用较灵活的可变分区的管理技术。
动态分区存储管理是给内存中的进程划分适当大小的存储区,以连续存储各进程的程序和数据,使各进程能并发地执行。
动态分区原则:
存储空间的划分是在装入作业时进行的。
从可用的自由存储空间内,划出一个大小正好等于作业大小的存储区,并分配给这一作业。
图6内存分配变化过程
图7动态分区时的分配与回收
对于请求表中要求内存长度,分配程序从可用表和自有链中找出合适的空闲区。
分配空间区之后,更新可用表或自由链。
进程或作业释放内存资源时,和相邻的空间区进行链合并,更新可用表或自由链。
2、内存分配算法
最先适应法:
按照某种次序依次检查各个空闲区,把第一个找到能容纳申请要求的内存区分配给申请者。
空闲区按地址顺序从小到大登记。
最佳适应算法:
按照某一从大到小次序依次检查所有的空间区,把能容纳申请要求的一个最接近尺寸且大于或等于作业大小的分区给申请的作业。
最坏适应算法:
将空闲区按其大小递减的顺序组成空闲区可用表或自由链当用户作业或进程申请一个空闲区时,先检查空闲区可用表或自由链的第一个空闲可用区的大小是否大于或等于所要求的内存长度,若可用表或自由链的第一个项所有空闲区长度小于申请,则失败,否则从空闲区可用表或自由链分配相应的空间给用户,然后修改和调整空闲区可用表或自由链。
3、具体要求
要求模拟分区存储管中动态分区法,实现分区分配的三种算法:
最先适应法,最佳适应法和最坏适应法。
运行时可任选一种算法。
系统应能显示内存分配的状态和参数变化情况。
对于一个给定的作业序列,比较用哪种算法最好,能满足所有作业的要求,使它们都能分配到内存空间。
4、分区说明表和空闲区队列
分区说明表将系统中内存所有分区的分配情况记录下来,包括如下基本信息:
分区号,分区长度,分区起始地址,分配状态等。
空闲区队列将系统中所有空闲块组织起来,形成一个队列。
队列有以下几种组织方法,对应不同的分区分配算法。
(1)空闲区按照首地址递增组成空闲区队列。
适用于首次适应算法。
(2)空闲区按照大小递增组成空闲区队列。
适用于最佳适应算法。
(3)空闲区按照大小递减组成空闲区队列。
适用于最坏适应算法。
5、分区表说明
分配状态为1表示已经分配,为0表示还没有分配。
6、空闲区分配的三种分配算法
首次适应算法:
要求空闲区按其首址递增的次序组织空闲区队列。
当用户申请大小为SIZE存储空间时,分配程序从空闲区队列的第一个表目开始查询,直到首次找到大小等于或大于SIZE空闲区。
并从该区中划分大小为SIZE的分区给用户,余下的部分仍作为一个空闲区留在空闲区队列中,并修改其首址和大小。
最佳适应算法:
要求空闲区按空闲区从小到大的次序组成空闲区队列,当进程申请大小为SIZE的一个存储区时,系统从空闲区队列的第一个表目开始查询,当找到第一个满足要求的空闲区时,从该区中划分大小为SIZE的分区给用户,余下的部分仍作为一个空闲区留在空闲区队列中,修改其首址和大小,并按空闲区从小到大的顺序重新调整空闲区队列。
最坏适应算法:
最坏适应算法要求空闲区按空闲区从大到小的次序组成空闲区队列,当进程申请大小为SIZE的一个存储区时,系统取出空闲区队列的第一个表目,如果其大小小于SIZE,则系统没有能满足用户要求的空闲区存在,否则从该区中划分大小为SIZE的分区给用户,余下的部分仍作为一个空闲区留在空闲区队列中,修改其首址和大小,并按空闲区大到小顺序重新调整空闲区队列。
7、首次适应算法流程图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 银行家 算法