计算机操作系统教程:死锁与饥饿-期末复习大纲

  1. ​死锁

    1. 两个及以上的进程,由于竞争资源或者彼此通信造成的一种阻塞现象,若无外力作用,都无法推进下去。

    2. 两个及以上并发进程在请求资源时,永远得不到资源,发生的无限期等待。除非有其他的干预。

    3. 参加死锁的进程至少有两个占有资源;死锁严重地影响系统资源的利用率。

    4. 死锁进程都处于等待态,一定发生了循环等待。

    5. 死锁的类型

      1. 竞争资源
        1. 同种资源

        2. 不同种资源

      2. 进程通信:循环等待消息
      3. 其他原因:After You
    6. 死锁的必要条件(资源竞争引起的)

      1. 资源独占,一个资源同时只能分给一个进程

      2. 不可剥夺,资源申请者不能夺取资源

      3. 保持申请,占有资源后还能申请新资源,申请时不释放占有资源

      4. 循环等待,等待其他资源

      5. 当每类资源只有一个实例时,coffman条件是充要条件

    7. 资源分配图

      1. 一个点和边构成的二元组,点包含进程和资源,边包含分配边和申请边(定义5-2)。申请边指向方框,分配边来自某一圆点。

      2. 如果每类资源只有一个实例,则环路是死锁的充要条件。否则,环路是死锁的必要条件。

      3. 约简:①寻找一个没有请求边的点,②去除它的分配边,③寻找所有请求边可以被满足的进程,把请求边改成分配边,④重复直到没有请求边。

      4. 死锁定理:死锁的充要条件是资源分配图不可完全约简。

  2. 死锁的处理

    1. 静态预防(不让死锁发生)

      1. 按某种协议限制活动,实现简单,但进程违反约束仍会死锁。

        1. 预先分配策略
          1. 进程一次性申请所有需要的资源。破坏了“保持申请”。

          2. 资源利用率低,进程无法预知它需要的全部资源(分支不同资源不同)。

        2. 有序分配策略
          1. 设R为资源的集合,对每个资源分配一个整数,进程只能按照编号从小到大申请资源。若先需要大资源,后需要小资源,则可先占有小资源。破坏“循环等待”。

          2. 分配编号时,按照大多数进程使用的资源的次序来编号,先使用者排前面。

          3. 分配编号困难,按编号申请增加了进程负担,可能增加进程对资源的占有时间。

    2. 动态避免(不让死锁发生)

      1. 提高了资源的利用率,增加了系统开销。

      2. 对命令进行实时监测,拒绝不安全的命令。

      3. 安全:所有进程都能依次进行,对每一个进程以后需要的资源数量不大于系统当前的剩余量,和所有序列号在前的进程当前的占有量之和。

      4. 不安全的状态不一定是死锁状态,某个安全的序列不一定是最后的执行序列。

      5. 银行家算法
        1. 判断需求的资源是否满足要求,分配后安全则继续,否则收回资源。

        2. n个进程及其最大的资源需求量需要事先预知。

        3. 判断的是顺序执行的次序,不能够判断交叉执行的次序。

        4. 变量:系统可用资源,进程所需最大资源量(常数,确定困难),进程占有的资源量,进程尚需的资源量,进程当前申请的资源量。

        5. 算法5-1

        6. 算法5-2

        7. 例5-4

    3. 检测

      1. 检测算法与银行家算法基本相同。

        1. 检测时,忽略不占有资源的进程。

        2. 死锁检测结果为下一步恢复提供准确的信息。

        3. 例5.6

      2. 检测时刻的关键因素
        1. 死锁发生的频率

          1. 频率较高,检测频率也高,开销增加,影响系统执行效率。

        2. 死锁涉及的进程数

        3. 死锁发生迹象(如进程等待时间过久)

      3. 检测时刻
        1. 进程等待时检测:开销大

        2. 定时检测

        3. 资源利用率降低时检测:死锁使可运行的进程数降低

          1. 在CPU利用率降低到某一界限时检测

        4. 交互式任务无响应

    4. 恢复

      1. 系统重新启动
      2. 终止进程
        1. 撤销所有参加死锁的进程:代价高,如撤销不占有资源的进程

        2. 逐一撤销参加死锁的进程

      3. 剥夺资源
        1. 剥夺死锁进程的部分或全部资源

        2. 逐步剥夺

        3. 一次剥夺

      4. 进程回退
        1. 让参加死锁的进程回退到未发生死锁的某个点处

        2. 开销大

          1. 保存快照代价大

          2. 消除影响困难

          3. 可能发生饥饿

    5. 鸵鸟算法

      1. 对死锁视而不见
  3. 有关问题的讨论

    1. 如果系统还知道进程有关资源的活动序列,则存在充要算法,然而这一般是不可能的。

    2. 由于消耗性资源(如消息)的存在,死锁的处理会变得更加困难。

      1. 处理通信死锁的技术:超时

    3. 当占有内存的进程无法进行时,不让该进程等待,而是为其分配外存空间。

  4. 饥饿与饿死

    1. 可能只涉及一个进程,等待会被释放,但不会分配给自己的资源。

    2. 即使系统没有发生死锁,某些进程也可能因不公平的资源分配策略而长时间等待,即无限延迟。

    3. 定义5.5

    4. 忙式等待的进程可能被饿死,忙式等待下的饥饿进程称为活锁。活锁可能解除。

    5. 解决方式:改进资源分配算法,考虑公平性和系统效率。

  5. 可复用资源死锁的静态分析

    1. 同种组合资源:相同类型的子资源构成的组合资源。

    2. 算法5-4

    3. 例5-7

    4. 同种组合资源死锁的必要条件:死锁进程所需的资源总量≥实例数+总进程数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值