• 操作系统(3.5)--死锁概述


    目录

    资源问题 

    可重用性资源和消耗性资源

    可抢占性资源和不可抢占性资源

    计算机系统中的死锁 

    1.竞争不可抢占性资源

    2.竞争可消耗资源产生死锁

    3.进程推进顺序不当引发死锁

    死锁的定义、必要条件和处理方法

    死锁的定义

    产生死锁的必要条件

    处理死锁的基本方法


    资源问题 

    可重用性资源和消耗性资源

    可重用性资源,性质如下:

    • (1)不允许多个进程共享;
    • (2)必须按照一定的顺序:①请求资源;②使用资源;③释放资源。
    • (3)单元数目是相对固定的;

    可消耗性资源,性质如下:

    • (1)单元数目是不断变化的;
    • (2)可动态增加;
    • (3)可动态消耗;

    可抢占性资源和不可抢占性资源

    可把系统中的资源分成两类,

    1)一类是可抢占性资源,是指某进程在获得这类资源后,该资源可以再被其他进程或系统抢占。

    2)一类是不可抢占性资源,当系统把这类资源分配给某进程后,再不能强行收回,只能在进程用完后自行释放

    CPU和主存均属于可抢占性资源。 磁带机、打印机等属于不可抢占性资源。

    计算机系统中的死锁 

    1.竞争不可抢占性资源

    系统中所拥有的不可抢占性资源其数量不足以满足多个进程运行的需要,使得进程在运行过程中,会因争夺资源而陷入僵局。

    例如:系统中有两个进程P1和P2,它们都准备写两个文件F1和F2,而这两者都属于可重用和不可抢占性资源。进程P1先打开F1,然后再打开文件F2;进程P2先打开文件F2,后打开F1:

    2.竞争可消耗资源产生死锁

    m1,m2,m3是可消耗资源,P1一方面产生消息m1,利用send(p2, m1)原语将它发送给P2;另一方面,它又要求从P3接收消息m3。而进程P2一方面产生消息m2,利用send(p3, m2)原语将它发送给P3;另一方面,它又需要接收进程P1所产生的消息m1。类似地,进程P3也产生消息m3,利用send(p1, m3)原语将它发送给P1,而它又要求从进程P2接收其所产生的消息m2。

    这三个进程都可以先将消息发送给下一个进程,相应地它们也都能够接收到从上一个进程发来的消息,因此三个进程可以顺利地运行下去,而不会发生死锁。但若改成三个进程都先执行receive 操作,后执行send操作则这三个进程就会永远阻塞在它们的receive操作上,等待一条永远不会 发出的消息,于是发生了死锁。

    3.进程推进顺序不当引发死锁

    进程推进顺序合法

    进程推进顺序非法

    死锁的定义、必要条件和处理方法

    死锁的定义

    如果一组进程中的每个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程是死锁的。

    产生死锁的必要条件

    虽然进程在运行过程中可能发生死锁,但死锁的发生也必须具备一定的条件。死锁的发生必须同时具备下列四个必要条件。

    (1)互斥条件:指进程对所分配到的资源进行排它性使用即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求该资源,则请求者只能等待,直至占有该资源的进程用毕释放。

    (2) 请求和保持条件:指进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。

    (3) 不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。

    (4)环路等待条件:指在发生死锁时,必然存在一个进程一一资源的环形链,即进程集合{P0,P,P,... P.}中的Po正在等待一个P1占用的资源; P1 正在等待P2占用的资源,.... Pn正在等待已被P0占用的资源。

    处理死锁的基本方法

    (1)预防死锁。这是一种较简单和直观的事先预防的方法。该方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或几个条件,来预防发生死锁。

    (2)避免死锁。该方法同样是属于事先预防的策略,但它并不须事先采取各种限制措施去破坏产生死锁的四个必要条件,而是在资源的动态分配过程中,用某种方.法去防止系统进入不安全状态,从而避免发生死锁。这种方法只需事先施加较弱的限制条件,便可获得较高的资源利用率及系统吞吐量,但在实现.上有一定的难度。目前在较完善的系统中常用此方法来避免发生死锁。

    (3)检测死锁。这种方法并不须事先采取任何限制性措施,也不必检查系统是否已经进入不安全区,而是允许系统在运行过程中发生死锁。但可通过系统所设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源;然后,采取适当措施,从系统中将已发生的死锁清除掉。

  • 相关阅读:
    深度学习常用函数
    芯片科普 |ATE测试如何入门?ATE测试的工作内容和要求?
    从零用VitePress搭建博客教程(5) - 如何自定义页面模板、给页面添加独有的className和使页面标题变成侧边目录?
    k8s集群StatefulSets的Pod调度查询丢失问题?
    瑞芯微 | 如何固定以太口地址为指定ip?
    Unity编辑器扩展之自定义Inspector面板
    leetcode 332. 重新安排行程
    解决“本地计算机上的 mysql 服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止”
    2023年MySQL实战核心技术第一篇
    (2023 最新版)IntelliJ IDEA 下载安装及配置教程
  • 原文地址:https://blog.csdn.net/weixin_53197693/article/details/131150387