操作系统原理(ch3).ppt

* * 银行家算法的特点 允许互斥、部分分配和不可抢占,可提高资源利用率; 要求事先说明最大资源要求,在现实中很困难; * * 3.8.4 死锁的检测 保存资源的请求和分配信息,利用某种算法对这些信息加以检查,以判断是否存在死锁。 死锁检测算法主要是检查是否有循环等待。 * * 3.8.4 死锁检测时刻 考虑因素: 死锁发生频度; 死锁影响进程。 1. 等待时检测: 发现早,恢复代价小,开销大(overhead)。 2. 定时检测: 3. 资源(eg. CPU)利用率下降时检测。 * * 死锁恢复 强制性地从系统中撤消进程并剥夺它们的资源给剩下的进程使用。 撤消进程的原则: 进程的优先数; 重新启动它并运行到当前撤消点所需的代价; 作业的外部代价:即与此进程相关的作业类型都可以有其相应的固定撤消代价。 挂起和解挂机构: 从被挂起进程那里强占资源以解除死锁。 * * 鸵鸟算法 视而不见 工程师观点(考虑死锁发生的频率,危害,处理代价) 死锁发生频率其它故障引起的系统瘫痪的频率 死锁处理constant overhead 危害 数学家观点 必须处理,无论代价如何 目前系统实际如此 Eg. UNIX proc结构 解决死锁的方法比较 返回本节 * * 补充题:哲学家就餐问题 五个哲学家围坐在一个园桌周围,每个哲学家面前都有一盘通心面,由于面条很滑,所以要两把叉子才能夹住。相邻两个盘子间有一把叉子,餐桌如下图。 哲学家就餐问题 哲学家的生活包括两种活动:即吃面条和思考。当哲学家觉得饿时,他就试图分两次去取他左边和右边的叉子,每次拿一把,不分先后次序,如果成功,他就开始吃面条,吃完后放下叉子,继续思考。 在什么情况下所有哲学家都吃不上面条? 答案:当五位哲学家同时饥饿而各自拿起左边的叉子时,当他们再试图去拿右边的叉子时,都将因无叉子可拿而无限期地等待。 * * 哲学家就餐问题 解决方案一:至多只允许四位哲学家同时去拿左边的叉子。 解决方案二:让偶数编号的哲学家拿左边的叉子,然后再去拿右边的叉子;而奇数号哲学家则相反。 算法如何实现? * * 哲学家就餐问题方案一算法 Program dining-philosophers; Var fork:array[0..4] of semaphore(:=1); room :semaphore (:=4); i: integer; Procedure philosopher (i: integer); begin repeat think; /*哲学家正在思考*/ P(room); /*第5位哲学家将被阻塞在room信号队列*/ P( fork [i]); /*取其左边的筷子*/ P (fork[i+1]mod 5); /*取其右边的筷子*/ eat; V (fork[i+1]mod 5); V (fork [i]); V (room); forever; end; begin Co-begin philosopher(0); philosopher(1); philosopher(2); philosopher(3); philosopher(4); Co-end end. * * 哲学家就餐问题方案二算法 Philosopher[i] Begin if i mod 2==0 then begin P( fork [i]); P(fork[i+1]mod 5); eat V( fork [i]); V(fork[i+1]mod 5); end else begin P(fork[i+1]mod 5); P( fork [i]); eat V(fork[i+1]mod 5); V( fork [i]); end end * * 其他典型进程同步/互斥问题 读者--写者问题 有两组并发进程:读者与写者,共享一个文件,要求:1)允许多个读者同时执行读操作;2)任一写者出现后,新的读者与写者均被拒绝;3)写者在完成写操作之前不允许其他读

文档评论(0)

1亿VIP精品文档

相关文档