读书笔记-现代操作系统-6死锁-6.5死锁避免
2016-07-13 15:26
253 查看
6.5 死锁避免
系统判断分配资源是否安全,并且只能在保证安全的条件下分配资源。6.5.1 资源轨迹图
当在t点时系统必须做出正确的判断,应该将一部分程序挂起以避免产生死锁
6.5.2 安全状态和不安全状态
安全状态如果没有死锁状态,而且即使所有进程突然请求对资源的最大需求,也仍然存在某种调度次序能够使得每个进程运行完毕,则该状态是安全的。
如果线程可以通过仔细的调度避免死锁,所有状态时安全的,
需要区别的是不安全状态并不是死锁状态。
从安全状态出发,系统能够保证所有进程都能完成,而从不安全状态吃饭,就没有这样的保证。
从个人的理解看:
不安全状态有可能进入死锁状态但是不一定进入,是处于安全状态和死锁状态之间的情况。
关键点就是安全状态对所有资源的都突然请求最大资源也是可以科学调度后完成的,不安全状态所有进程同时请求最大资源后是无法完成调度的,但是未必所有资源都会同时产生最大资源请求,而死锁是已经发生了请求资源互斥而休眠的的情况。
6.5.3 单个资源的银行家算法
算法要做的判断是对请求的满足是否会导致进入不安全的状态,如果是则拒绝请求,如果不是则予以分配。银行家算法就是对每一个请求,进行检测,先执行需要资源最少的进程,完成后资源返回资源池,不断进行直到所有进程都完成或者有无法完成的进程
6.5.4 多个资源的银行家算法
检测一个状态是否安全的算法:1. 查找仍然需要资源矩阵中年是否有一行,其没有被满足的资源均小于或等于A。如果不存在,那么系统将死锁。
2. 如果找到这样的行,可以假设它所获得的资源并运行结束,该进程标记为终止,并将其资源返还给向量A。
3. 重复以上两步。
实际中很少使用,因为无法判断进程需要多少资源。
相关文章推荐
- 应用领航:盘点那些年我们一起追过的OS
- 无奇不有!盘点各国自己开发的操作系统
- 只需十分钟,结果大不同 |《深度思考》
- 《洋葱阅读法》读书笔记
- C#线程间不能调用剪切板的解决方法
- 可自定义oem的萝卜家园 Ghost XP 新春装机版 V200801 下载
- C#线程同步的三类情景分析
- C#获取进程或线程相关信息的方法
- 简单对比C#程序中的单线程与多线程设计
- C#停止线程的方法
- C#子线程更新UI控件的方法实例总结
- C#线程队列用法实例分析
- C#实现判断操作系统是否为Win8以上版本
- C++使用CriticalSection实现线程同步实例
- 基于C++实现的线程休眠代码
- VB读取线程、句柄及写入内存的API代码实例
- C#网络编程基础之进程和线程详解
- C#通过Semaphore类控制线程队列的方法
- C#多线程处理多个队列数据的方法
- C#实现线程安全的简易日志记录方法