操作系统——死锁

注意区分两个概念
死锁(Deadlock):指进程之间无休止地相互等待
饥饿(Starvation):指一个进程无休止地等待

在多道程序系统中,虽然可借助于多个程序的并发执行来改善系统的资源利用率,提高系统吞吐量,但可能引发死锁(因为上面也提到了死锁是进程间无休止地相互等待)

产生死锁的原因

1、竞争资源
2、进程间推进顺序非法

产生死锁的必要条件

①互斥条件:进程对所分配到的资源进行排他性使用
②请求和保持条件:进程已经保持了至少一个资源,又提出新的资源请求,而新请求资源被其他进程占有只能造成自身进程阻塞,但对自己已获得的其他资源保持不放,必然影响其他进程。
③不剥夺条件:进程已获得的资源未使用完之前不能被剥夺,只能在使用完时由自己释放。
④环路等待条件

处理死锁的基本方法

事先预防:
①预防死锁
    设置限制条件,破坏四个必要条件的一个或几个,预防发生死锁。
    较易实现。限制条件的严格也会导致系统资源利用率和系统吞吐量降低。
②避免死锁
    不须事先限制,破坏四个必要条件,而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。
    这种事先加以较弱限制的方法,实现上有一定难度,但可获较高的资源利用率及系统吞吐量,目前在较完善的系统中,常用此方法来避免发生死锁。

事后处理:
③检测死锁。
    允许系统运行过程中发生死锁,但通过系统检测机构可及时的检测出,能精确确定与死锁有关的进程和资源;然后采取适当的措施,从系统中将已发生的死锁清除掉。
④解除死锁。
    与死锁检测配套的一种措施。
    常用的实施方法:撤销或挂起一些进程,以便回收一些资源并将他们分配给已阻塞进程,使之转为就绪以继续运行。
    死锁的检测与解除措施,有可能使系统获得较好的资源利用率和吞吐量(死锁几率不一定很高),但在实现上难度也最大。

预防死锁的方法

资源的排他性无法更改,需要在其他三个条件上入手

1.破坏“请求保持条件”:所有进程开始运行之前,必须一次性申请所需的全部资源(AND信号量集)—算法简单、易于实现、安全。但缺点是资源浪费严重、进程会延迟运行。

2.破坏“不剥夺条件”:允许进程先运行,当提出的新的要求不被满足时必须释放它自己保持的全部资源,以后需要时再次重新申请,----实现起来较为复杂且代价大,可能出现反复申请和释放等情况。

3.破坏“环路等待条件”:有序设置资源,将所有资源按类型进行线性排队,赋予不同序号,所有进程必须严格按照序号进行资源请求。----与前两种相比资源利用率和吞吐量明显改善,但是资源编号限制新设备的增加,应用中的使用设备顺序与规定的顺序并不协调,限制了用户编程自由。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 死锁定义 死锁建模-- 资源分配图 处理死锁鸵鸟算法检测并恢复死锁检测死锁恢复利用抢占利用回滚杀死进程死锁避免资源...
    mbinary阅读 4,266评论 0 1
  • 1. 基础知识 1.1、 基本概念、 功能 冯诺伊曼体系结构1、计算机处理的数据和指令一律用二进制数表示2、顺序执...
    yunpiao阅读 10,888评论 1 22
  • 死锁的概念 死锁的定义 在多道程序系统中,由于多个进程的并发执行,改善了系统资源的利用率并提高了系统的处理能力。然...
    CodeKing2017阅读 5,434评论 0 4
  • 我就是我,走自己的路别人管不了。 我很有自信,因为我已足够优秀,别人做不好的事我可以做好,甚至别人做不到的事我可以...
    肆舞阅读 1,560评论 1 0
  • 爱情并不伟大 两个人,一场梦 牵手,亲吻,睡觉 哦,或许也不高尚 我喜欢你的心?你心在何处 你喜欢我? 如果我是阿...
    木子又二土阅读 2,662评论 0 1