当前位置:首页 > 操作系统实验指导书
实验二 资源分配(4学时)
一、实验目的
多个进程动态地共享系统的资源可能会产生死锁现象。死锁的产生,必须同时满足四个条件,第一个是互斥条件,即一个资源每次只能由一个进程占用;第二个为等待条件,即一个进程请求资源不能满足时,它必须等待,但它仍继续保持已得到的所有其它资源;第三个是非出让条件,任何一个进程不能抢占另一个进程已经获得且未释放的资源;第四个为循环等待条件,系统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持有的资源。防止死锁的机构只须确保上述四个条件之一不出现,则系统就不会发生死锁。
在实验中假定系统中任一资源在每一时刻只能则由一个进程使用,任何进程不能抢占它进程正在使用的资源,当进程得不到资源时必须等待。因此只要资源分配策略能保证进程不出现循环等待,则系统就不会发生死锁。
本实验要求学生编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用适当的算法,有效地防止和避免死锁的发生。
二、实验类型
设计型。
三、预习内容
预习课本资源分配有关内容,包括死锁发生条件及防止避免死锁的方法。
四、实验要求与提示
本实验中共有两个实验题。
第一题:用银行家算法实现资源分配。要求:
(1) 假定系统中有五个进程{P0, P1, P2, P3, P4}和三类资源{A, B, C},各种资源的数量分别为10、5、7,在T0时刻的资源分配情况如图所示。
8
利用银行家算法设计系统,进程可动态地申请资源和释放资源,系统按各进程的申请动态地分配资源。
(2) 设计用银行家算法和随机分配算法,实现资源分配的两个资源分配程序,应具有显示或打印各进程依次要求申请的资源数以及依次分配资源的情况。
(3) 确定一组各进程依次申请资源数的序列,在相同的情况下分别运行上述两种资源分配程序,观察运行结果。
[提示]:
(1) 银行家算法,顾名思义是来源于银行的借贷业务,一定数量的本金要应付多个客户的借贷周转,为了防止银行因资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。在操作系统中研究资源分配策略时也有类似的问题,系统中有限的资源要供多个进程使用,必须保证得到资源的进程能在有限的时间内归还资源,以供其它进程使用资源。如果资源分配不得当,就会发生进程循环等待资源,各进程都无法继续执行下去的死锁现象。
银行家算法分配资源的原则是:系统掌握每个进程对资源的最大需求量,当进程要求申请资源时,系统就测试该进程尚需资源的最大量,如果系统中现存的资源数大于或等于该进程尚需的最大量时,则就满足进程的当前申请。这样可以保证至少有一个进程可能得到全部资源而执行到结束,然后归还它所占用的全部资源供其它进程使用。银行家算法破坏了产生死锁的第四个条件,即不可能产生循环等待,从而可以避免死锁的发生。
(2) 把各进程需要和已占用资源的情况记录在进程控制块中,假定进程控制块PCB的格式如表1。其中“状态”有就绪态、等待态和完成态。当进程处于
9
等待态时,表示系统不能满足该进程当前的资源申请。“资源需求总量”表示进程在整个执行过程中总共要申请的资源量。“已占资源量”表示进程目前已经得到但还未归还的资源量。因此,进程在以后还需要的最大资源量等于资源需求总量减去已占有资源量。显然,每个进程的资源需求总量不能超过系统拥有的资源总数。
表1 PCB格式
进程号 状 态 当前申请量 资源需求总量 已占资源量
(3) 为了观察死锁现象的发生,了解用银行算法进行资源分配可以避免死锁,故在模拟程序中采用两种资源分配算法:银行算法和随机算法。随机算法的分配原则是:当进程申请资源时,如果系统中现存资源数能满足进程的当前资源申请
图1 资源分配模拟程序总流程
10
量,就把资源分配给该进程,否则就置进程为等待态。用随机算法分配资源可能会产生死锁。资源分配模拟程序总流程见图1。
随机分配算法流程见图2。
图2 随机分配算法模拟流程
11
共分享92篇相关文档