急需第四大题的银行家算法解题过程程

1、 理解银行家算法
2、 掌握进程安全性检查的方法与资源分配的方法。

二、实验内容与基本要求

编制模拟银行家算法的程序并以下面給出的例子验证所编写的程序的正确性。

现在系统中A、B、C、D 4类资源分别还剩1、5、2、0个请按银行家算法回答:
1、 现在系统是否处于安全状態?
2、 如果现在进程P1提出需要(0、4、2、0)个资源的请求系统能否满足它的请求?

1、 银荇家算法和安全性检查算法原理


  银行家算法最初级原为银行系统设计以确保银行在发放现金贷款时,不会发生不能满足所有客户需要的情况在OS设计中,也可以用它来避免死锁
  为实现银行家算法,每个新进程在进入系统时它必须申明在运行过程中鈳能需要的每种资源类型的最大单元数目,其数目不应超过系统所拥有的资源总量当某一进程请求时,系统会自动判断请求量是否小于進程最大所需同时判断请求量是否小于当前系统资源剩余量。若两项均满足则系统试分配资源并执行安全性检查算法。

  安全性检查算法用于检查系统进行资源分配后是否安全若安全系统才可以执行此次分配;若不安全,则系统不执行此次分配
  安全性检查算法原理为:在系统试分配资源后,算法从现有进程列表寻找出一个可执行的进程进行执行执行完成后回收进程占用资源;进而寻找下一个可执行进程。当进程需求量大于系统可分配量时进程无法执行。当所有进程均可执行则产生一个安全执行序列,系統资源分配成功若进程无法全部执行,即无法找到一条安全序列则说明系统在分配资源后会不安全,所以此次分配失败




cout<<"输入要申请的资源的进程号:(第一个进程号为0,第二个进程号为1依此类推)\n";

4、 运行结果以及结论

图示为題目所给定的条件下的程序运行结果。可看出在现有分配情况下该系统安全。

下图为P1提出请求后,程序的运行结果可知,系统仍然咹全所以系统可以满足请求。

1. 什么是线程进程和线程的关系昰什么?

答:线程可定义为进程内的一个执行单位或者定义为进程内的一个可调度实体。在具有多线程机制的操作系统中处理机调度嘚基本单位不是进程而是线程。一个进程可以有多个线程而且至少有一个可执行线程。

(1)线程是进程的一个组成部分(2)进程的多个线程都茬进程的地址空间活动。(3)资源是分给进程的而不是分给线程的,线程在执行中需要资源时系统从进程的资源分配额中扣除并分配给它。(4)处理机调度的基本单位是线程线程之间竞争处理机,真正在处理机上运行的是线程(5)线程在执行过程中,需要同步

2. 同步机制应遵循嘚准则是什么?答:有以下四条准则:空闲让进、忙则等待、有限等待、让权等待

3. 进程通信有那三种基本类型?答:基于共享存储器的通信、基于消息传递系统的通信和基于管理文件的通信

4. 对临界区管理的要求是什么?

答:对临界区管理的要求是:(1)当有若干个进程偠求进入它们的临界区时应在有限的时间内使一个进程进入临界区,进程之间不应相互等待而使谁都不能进入临界区(2)每次只允许┅个进程进入临界区内。

(3)进程在临界区内逗留应在有限的时间范围内

5. 设有n个进程共享一个互斥段,对于如下两种情况使用信号量信号量的值的变化怎样?

(1)如果每次只允许一个进程进入互斥段

(2)如果每次最多允许m个进程(m

答:(1)信号量的初值为1。信号量的變化范围是10,-1…,-(n-1)

(2)信号量的初值为m。信号量的变化范围是m,m-1,…,1,0,…,-(n-m)

6. 何为死锁?产生死锁的原因和必要条件是什么

此题答案為:答:(1)死锁是指多个进程因竞争资源而造成的一种僵持状态。若无外力作用这些进程都将永远处于阻塞状态,不能再运行下去

(2)产生死锁的原因有:资源不足、进程推进次序不当。

(3)产生死锁的必要条件有:互斥条件、请求和保持条件、环路等待条件

7. 比较彡种解决死锁的方法?

此题答案为:答:比较三种解决死锁的方法:

(1)预防死锁方法,主要是破坏产生死锁的必要条件该方法是最容易實现的,但系统资源利用率较低

(2)避免死锁方法,比较实用的有银行家算法(Banker Algorithm)该算法需要较多的数据结构,实现起来比较困难泹资源利用率最高。

(3)检测死锁方法是基于死锁定理设计的定期运行该算法对系统的状态进行检测,发现死锁便予以解除其中,需偠比较一下各咱死锁解除方案的代价找到代价最小的方案。该方法最难实现资源利用率较高。

8. 预防死锁方法是破坏产生死锁的必要条件?

此题答案为:答:(1)摈弃请求和保持条件采用静态分配方案,一次性地分配给进程所请求的全部资源进程运行过程中不可再请求噺资源。

(2)摈弃不剥夺条件采用动态分配方案,进程运行中可以请求新资源若进程请求资源不能满足时,就应使其释放已占有的资源

(3)摈弃环路等待条件。采用动态分配方案要求进程请求资源时,按资源序号递增(或递减)顺序提出(4)摈弃不可剥夺条件。利用Spooling系统将独享设备改造成共享设备

9. I/O控制方式有几种?分别适用何种场合

此题答案为:答:I/O控制方式共有四种:

(1)程序I/O方式,又称莋"忙-等"方式该方式执行一个循环程序,反复查询外设状态如果外设"忙碌"则循环查询直到查得外设状态为"闲置"时止。该方式适用于机内沒有中断机构得场合

死锁产生的现场:当A进程P S2信号量洏B进程P S1信号量时就会产生死锁由于S2信号量须要B进程释放,而S1信号量须要A进程释放因此两个进程都在等相互的资源,造成死锁

 死锁产苼的条件:

相互排斥条件:进程要求对所分配的资源进行排它性控制,即在一段时间内某资源仅为进程所占用(信号量s1 s2为相互排斥的信号量,仅仅能被一个进程占用)

请求和保持条件:当进程因请求资源而堵塞时对已获得的资源保持不放。(A进程在获取s2堵塞时一直占用s1)

不可剥夺条件:进程已获得的资源在未使用完之前,不能剥夺仅仅能在使用完时由自己释放。(s1仅仅能由A进程释放s2仅仅能由B进程释放)

环路等待条件:在发生死锁时,必定存在一个进程--资源的环形链(A B 进程都是环形链路)

银行家算法是避免死锁的一种重要方法,防止死锁的机构仅仅能确保上述四个条件之中的一个不出现则系统就不会发生死锁。通过这个算法能够用来解决生活中的实际问题洳银行贷款等。

程序实现思路银行家算法顾名思义是来源于银行的借贷业务一定数量的本金要应多个客户的借贷周转,为了防止银行加資金无法周转而倒闭对每一笔贷款,必须考察其能否限期归还在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用必须保证得到的资源的进程能在有限的时间内归还资源,以供其它进程使用资源假设资源分配不得到就会发生进程循環等待资源,则进程都无法继续运行下去的死锁现象

把一个进程须要和已占有资源的情况记录在进程控制中,假定进程控制块PCB当中“状態”有就绪态、等待态和完毕态当进程在处于等待态时,表示系统不能满足该进程当前的资源申请“资源需求总量”表示进程在整个運行过程中总共要申请的资源量。显然,每一个进程的资源需求总量不能超过系统拥有的资源总数, 银行算法进行资源分配能够避免死锁.


1.初始化算法流程图:


2.银行家算法流程图:


 3.安全性算法流程图:


1.设进程i提出请求Request[n]则银行家算法按例如以下规则进行推断。

(3)如果进程i的申请已获批准于是改动系统状态:

(4)系统运行安全性检查,如安全则分配成立;否则试探险性分配作废,系统恢复原状进程等待。

(2)从進程集合中找到一个满足下述条件的进程

(3)设进程获得资源,可顺利运行直至完毕,从而释放资源

(4)如全部的进程Finish =true,则表示安全;否则系统不安全

如果有M个进程N类资源,则有例如以下数据结构:

如果有M个进程N类资源则有例如以下数据结构:


银行家算法的模拟实现”是本学期操作系统课程唯一的课程设计。在设计此程序的过程中我遇到过很多问题,也学到了非常多东西本程序的设计实现主要是用C++语言实現,通过对程序算法的设计优化、输出显示的格式设计、输入过程中的异常处理等一些设计过程中的问题的考虑解决在C++学习上也有了非瑺大的进步。程序设计过程中開始遇到的最大的问题是算法的结构设计问题课本上仅仅给了设计要求及简单的算法,要真正实现还须要栲虑非常多方面在算法的数据结构设计上考虑了非常长时间。在程序设计中先后參考了非常多网络资料也參考了一些别人写的的程序,综合这些算法思想和自己的思路对程序做了非常好的设计方式对一些算法的优越性等也作了一些考虑。此外考虑最多的就是异常错误處理的设计一个好的程序必须能在各种环境下都有其对应的处理方式,至少能应对一些常见的可能发生的错误比方一般的要求输入为數字时,假设输入了一个非数字字符程序就会马上出错无法继续执行,本程序针对这个问题设计了一个shuzi();函数进行处理处理方式为:接受键盘输入的字符为字符串,然后对字符串的每一个字符进行推断是否为数字假设有非数字字符出现则提示出错并要求又一次输入。又洳在推断是否继续时要求输入Y/N时按一般的方式,假设输入为多个字符则多余的字符会保存在缓冲区,到下次要求输入时输入而导致出錯对此问题设计处理方式为接受输入字符保存为串然后仅仅取其首字符进行推断。还有非常多类似的错误处理还有在设置程序的显示優化时,发现暂停函数在不同的情况下执行顺序不同如此等等。在课程设计过程中遇到了很多问题也向同宿舍的同学做了一些请教一起讨论,也因此从他们身上学到了很多东西


我要回帖

更多关于 银行家算法解题过程 的文章

 

随机推荐