博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
现代操作系统读书笔记--第6章 死锁
阅读量:3740 次
发布时间:2019-05-22

本文共 743 字,大约阅读时间需要 2 分钟。

在很多应用中,需要一个进程排他性地访问若干种资源而不是一种,容易造成死锁。

死锁也有可能发生在机器之间。
加锁过程也会产生死锁。
所以,软硬件都有可能死锁。

6.1 资源

需要排他性使用的对象称为资源,可以是硬件设备或是一组信息,简单来说,资源就是随着时间推移,必须能够获得、使用以及释放地任何东西。

6.1.1 可抢占资源和不可抢占资源

可抢占资源:可以从拥有它的进程中抢占而不会产生任何副作用,如打印机和内存资源
不可抢占资源:在不引起相关地计算失败地情况下,无法把它从占有它的进程处抢占过来(如刻盘),和死锁有关
资源是否可抢占取决于上下文环境
使用一个资源要做的事:
(1)请求资源
(2)使用资源
(3)释放资源

6.1.2 资源获取

对于数据库系统中记录这类资源,由用户进程来管理使用,使用信号量(初始化为1)或者互斥信号量。down获取资源,up释放资源
这里写图片描述
编码上地风格细微差别就可能造成死锁
这里写图片描述

6.2 死锁简介

死锁地规范定义:如果一个进程集合中地每个进程都在等待只能由该进程集合中地其他进程才能引发的时间,那么,该进程集合就是死锁
最常见的死锁:资源死锁

6.2.1 资源死锁的条件

(1)互斥条件
(2)占有和等待条件
(3)不可抢占条件
(4)环路等待条件
通过破坏上述条件就可以预防死锁

6.2.2 死锁建模

方形代表资源,圆形代表进程
这里写图片描述
这里写图片描述
串行运行(不会有死锁,但是效率低,只有计算而无IO时比较高效)、轮换法(操作包括IO和计算)
资源分配图中出现环路证明有死锁,反之没有
处理死锁的策略:
(1) 忽略该问题
(2)检测死锁并恢复
(3)仔细对资源进行分配,动态地避免死锁。
(4)通过破坏引起死锁的四个必要条件之一,防止死锁的产生。

6.3 鸵鸟算法

假装没发生

你可能感兴趣的文章
JZ1.二维数组的查找
查看>>
3.无重复字符的最长子串
查看>>
JZ3. 从尾到头打印链表
查看>>
String 类
查看>>
什么是接口
查看>>
IO基本概念
查看>>
Java高级篇之进程
查看>>
Java高级篇之集合框架
查看>>
类加载机制
查看>>
反射技术
查看>>
了解jdk1.8版本一些新的特性
查看>>
Java高级篇之网络通讯
查看>>
浅谈篇之线程池
查看>>
Lambda 表达式
查看>>
Java高级篇之Object 类
查看>>
字符串函数MySQL
查看>>
8个SQL讲解优化
查看>>
MySQL实战续(一)
查看>>
MySQL实战续(二)
查看>>
安装Elastic和kibana
查看>>