操作系统实验—银行家算法.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统实验—银行家算法

用银行家算法和随机算法实现资源分配 一、需求分析 为了了解系统的资源分配情况,假定系统的任何一种资源在任一时刻只能被一个进程使用。任何进程已经占用的资源只能由进程自己释放,而不能由其他进程抢占。当进程申请的资源不能满足时,必须等待。因此,只要资源分配算法能保证进程的资源请求,且不出现循环等待,则系统不会出现死锁。 要求编写系统进行资源调度的程序。一个是随机动态地进行资源分配的模拟程序,即只要系统当前剩余资源满足进程的当前请求,就立即将资源分配给进程,以观察死锁产生情况;一个是采用银行家算法,有效地避免死锁的产生。 二、概要设计 1、系统的主要功能 采用银行家算法,有效地避免死锁的产生。 2、运行环境要求 WINDOWS VC 3、实验内容概述 模拟进程的资源分配算法,了解死锁的产生和避免的方法。 三、详细设计 要求 设计3~4个并发进程,共享系统的10个同类不可抢占的资源。各进程动态进行资源的申请和释放。 用银行家算法和随机算法分别设计一个资源分配程序,运行这两个程序,观察系统运行情况,并对系统运行的每一步情况进行显示。 提示 (1)初始化这组进程的最大资源请求和依次申请的资源序列。把各进程已占用和需求资源情况记录在进程控制块中。假定进程控制块的格式如图所示,其中进程的状态有:就绪、等待和完成。当系统不能满足进程的资源请求时,进程处于等待态。资源需求总量表示进程运行过程中队资源的总的需求量。 进程名 状态 当前申请量 资源需求总量 已占资源量 能执行完标志 已占资源量表示进程目前已经得到但还未归还的资源量。因此,进程在以后还需要的剩余资源量等于资源需求总量减去已占资源量。显然每个进程的资源需求总量不应超过系统拥有的资源总量。 (2)银行家算法分配资源的原则是:当某个进程提出资源请求时,假定先分配资源给它,然后查找各进程的剩余请求,检查系统的剩余资源量是否由于进程的分配而导致系统死锁。若能,则让进程等待,否则,让进程的假分配变为真分配。 ①查找各进程的剩余请求,检查系统的剩余资源量是否能满足其中一进程。如果能,则转②②将资源分配给所选的进程,这样,该进程已获得资源量最大请求,最终能运行完。标记这个进程为终止进程,并将其占有的全部资源归还给系统。 重复第①步和第②步,直到所有进程都标记为终止进程,或直到一个死锁发生。若所有进程都标记为终止进程,则梯田的初始状态是安全的,否则为不安全的。若安全,则正式将资源分配给它,否则,假定的分配作废,让其等待。 ③由于银行家算法可以避免死锁,为了观察死锁现象的发生,要求采用两个算法:银行家算法和随机算法。随机算法的分配原则是:当进程申请资源时,如果系统现存资源数能满足 进程的当前申请量,就把资源分配给进程,否则,让其等待。这样,随机算法可能引起死锁。 一资源分配模拟算法总框图 四、源代码 #include iostream #includevector #includefstream using namespace std; const int TASK_RUNNING=0; const int TASK_SUCCEED=1; const int TASK_WAITTING=2; const int TASK_RLength=10; int Rcs-left=RLength; ofstream ff(result.txt); class pcb { public: int p_pid; int p_stat; int p_apply; int p_occupy; bool p_issuc; int p_require; pcb(int id, int require) { p_pid=id; p_require=require; p_stat=TASK-RUNNING; p_occupy=0; p_issuc=false; p_apply=0; } friend ostream operator(ostreamcout,const pcbp) { contp.p_pidtp.p_stat\tp.p_require\tp.p_occupyendl; return cout; } }; void rand (vectorintresource,vectorpcbpgrp); void banker(vectorintresource,vectorpcbpgrp); int main() vectorintresource; vectorpcbpgrp; vectorint::iterator r; vectorpcb::iterator p; c

文档评论(0)

kaiss + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档