现代操作系统在之死锁

来源:互联网 发布:重大数据研判 编辑:程序博客网 时间:2024/05/01 17:58

资源

我们把具有排他性使用的对线称为资源。资源是随着时间推移,必然能获得使用以及释放了东西。

资源分为两类:可抢占和不和抢占。

当一个进程请求资源失败时,它通常会处于一个循环中:请求资源,休眠,在请求。虽然这个进程没有被阻塞,但是也没有做任何有价值的工作。


死锁概述

如果一个进程集合中的每个进程躲在等待只能由该进程集合中的其他进程才能引发的事件,那么,该进程集合就是死锁的。

死锁的四个必要条件:
  1. 互斥条件
  2. 占有和等待条件
  3. 不可抢占条件
  4. 环路等待条件
如果所有进程都不执行IO操作,那么最短作业优先调度会比轮换调度优越,所以在这种情况下,串行可能是最优的。
如果所有进程操作包含IO和计算,那么轮转法回事一种合适的调度算法。

鸵鸟算法


死锁和死锁恢复

系统并不试图到死锁产生,而是允许死锁发送,当检测到死锁后,采取措施进行恢复。


从死锁中恢复
  1. 利用抢占恢复(要求资源本身允许抢占)
  2. 利用回滚恢复(将状态写入文件以备重启)
  3. 通过杀死进程恢复(数据库可能不允许这样)


死锁避免

安全状态和不安全状态的区别:从安全状态出发,系统能跟狗保证所有进程都能完成, 而不安全状态则没有这样的保证

不安全状态不是死锁,死锁意味着进程进程都锁死不能执行,而不安全状态则可以运行一段时间。

不安全状态不一定会引起死锁,但是不安全状态可能会导致死锁。


死锁预防

破坏互斥条件

假脱机目录
一般将守护进程设计哼在完整的输出文件就绪后才开始打印

破坏占有和等待资源

一次申请所有资源,如果不能,则停止。效率不高

破坏不可抢占条件

通过虚拟化方式进行抢占,并只允许假脱机打印机向磁盘输出,并只允许守护进程访问真正的物理打印机。
但是对于大容量磁盘,消耗所有资源一般是不可能的。
不是所有资源都可以虚拟化


破坏环路等待条件

对资源进行编号,只允许升序或降序请求

升级版:不允许请求比当前占有资源低的资源


其他问题 

两阶段加锁

一次锁一个记录,若第一段加锁成功,则开始蝶儿阶段,完成更新后释放锁。第一阶段没有做实际的工作。


通信死锁

进程A向进程B发送请求消息,然后阻塞直至B恢复。假设请求信息糗事,A将阻塞以等待恢复。而B会阻塞的等待一个向其发送命令的请求,因此发生死锁,这种情况称为通信死锁。

一种方法可以用来中断通信死锁——超时

活锁

通过轮询代替阻塞,只是没有阻塞而已


饥饿

没有出现死锁,但是某进程也无法获得资源