并发——死锁与饥饿

  1. 不存在一个可以解决所有类型死锁的有效策略!!!

  2. 操作系统中死锁检测、预防和避免方法的小结
    在这里插入图片描述

  3. 死锁的条件:
    死锁有3个必要条件:
    a. 互斥。一次只有一个进程可以使用一个资源。其他进程不能访问已分配给其他进程的资源。
    b. 占有且等待。当一个进程等待其他进程时,继续占有已分配的资源。
    c. 不可抢占。不能强行抢占已占有的资源。
    备注: 以上3个条件在很多情况下这些条件都是合乎要求的。例如,为确保结果的一致性和数据库的完整性,互斥是非常有必要的。同理,不能随意的进行资源的抢占。比如,当涉及数据资源时,必须提供回滚回复机制(rollback recovery mechanism)以支持资源抢占,这样才能把进程和它的资源恢复到以前适当的状态,使得进程最终可以重复它的动作。
    以上3个条件只是死锁存在的必要条件,但不是充分条件。对死锁的产生,还需要第四个条件:即条件d
    d. 循环等待。存在一个封闭的进程链,使得每个进程至少占有此链中下一个进程所需要的一个资源。
    第四个条件实际上是前三个条件的潜在结果,即假设前3个条件存在,可能发生的一系列事件会导致不可解的循环等待。这个不可解的循环等待实际上就是死锁的定义。条件4中列出的训话等待之所以是不可解的,是因为前面3个条件的存在。因此,这四个条件连在一起构成了死锁的充分必要条件。

  4. 死锁避免方法(参考“银行家算法”):
    (1) 如果一个进程的请求会导致死锁,则不启动此进程。
    (2) 如果一个进程增加的资源请求会导致死锁,则不允许此分配。
    死锁避免的优点:它不需要死锁预防中的抢占和回滚进程,并且比死锁预防的限制要少。
    死锁避免的缺点(限制):
    a. 必须事先声明每个进程请求的最大资源。
    b. 考虑的进程必须是无关的,即他们执行的顺序必须没有任何同步要求的限制。
    c. 分配的资源数目必须是固定的。
    d. 在占有资源时,进程不能退出。

  5. 死锁预防策略是非常保守的,他们通过限制访问资源和进程上强加约束来解决死锁问题。死锁检测策略则完全相反,它不限制访问或约束进程行为。对于死锁检测(deadlock detection)来说,只要可能,被请求的资源就被授权给进程。操作系统周期性地执行一个算法检测前面提到“循环等待条件”。
    在每次资源请求时检测死锁的优点:
    a. 它可以尽早地检测死锁情况
    b. 由于此方法基于系统状态的逐渐变化情况,因此算法相对比较简单。
    缺点:这种频繁的检查会耗费相当多的处理器时间。

  6. 死锁恢复:一旦检测到死锁,就需要某种策略以恢复死锁。以下按复杂度递增的顺序列出了可能的方法:
    (1) 取消所有的死锁进程。不管怎样,这时操作系统最常用的方法。
    (2) 把每个死锁进程回滚到前面的定义的某些检查点,并且重新启动所有进程。这要求操作系统中构造回滚和重启机制。 该方法的风险是:原来的死锁可能会再次发生。但是,并发进程的不确定性通常保证不会发生这种情况。
    (3) 连续取消死锁进程,直到不再存在死锁。选择取消进程的顺序采用最小代价原则。在每次取消后,必须重新调用检测方法,以测试死锁是否还存在。
    (4) 连续抢占资源,直到不存在死锁。该方法和(3)一样,需要使用一种基于代价的选择方法。并且在每次抢占资源后重新调用检测方法。一个资源被抢占进程必须回滚到得到这个资源之前的状态。
    对于(3)和(4),选择原则可以采用下面的一种:
    a. 目前为止,消耗的处理器时间最少。
    b. 目前为止,产生的输出最少。
    c. 预计剩下的时间最长。
    d. 目前为止,分配的资源总量最少。
    e. 优先级最低。

  7. 一种综合的死锁策略:我们将资源分为以下几类,并根据相应的资源类型,采用相应的策略。
    (1) 可交换空间:通过要求一次性分配所有请求的资源来预防死锁,就像占有且等待预防策略一样。如果知道最大存储需求(通常情况下都知道),则这个策略是合理的。死锁避免也是可能的。
    (2) 进程资源:对于这类资源,死锁避免策略常常是有效的,这是因为进程可以事先声明它们将需要的这类资源。采用资源排序的预防策略也是有可能的。
    (3) 内存:对于内存,基于抢占的预防是最合适的策略。当一个进程被抢占后,它仅仅被换到外存,释放空间以解决死锁。
    (4) 内部资源:可以使用基于资源排序的预防策略。

小结:
死锁是指一组争用系统资源或互相通信的进程被阻塞的现象。阻塞是永久地,除非操作系统采取某些非常的行动,如杀死一个或多个进程,或者强迫一个或多个进程进行回滚。死锁可能涉及可重用资源或可消耗资源。可重用资源是指不会因为使用而被耗尽或销毁的资源,如I/O通道或一块内存区域。可消耗资源是指当被一个进程获得时就销毁的资源,这类资源的例子有消息或I/O缓冲区中的消息。
处理死锁通常有3中方法:预防、检测、避免。死锁预防通过确保死锁的一个必要条件不会满足,保证不会发生死锁。如果操作系统总是同一资源请求,则需要死锁检测。操作系统必须周期性地检查死锁,并采取行动打破死锁。死锁避免设计分析新的资源请求,以确定它是否会导致死锁,并且只有当不可能死锁时才同一请求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值