操作系统笔记七(死锁)

死锁
一种阻塞的进程持有一种资源等待获取另一个进程所占有的一个资源
多个进程在一起,都需要资源,才会造成死锁
9.2 系统模型
需求方:进程
介绍一下 资源:
在一个时间内只能一个进程使用且不能被删除
进程获得资源,后来释放由其他进程重用
资源都包括哪些呢,比如处理器,I/O,主副存储器,设备和数据结构,如文件,数据库和信号量
假如每个进程拥有一个资源并请求其他资源,死锁可能发生
介绍:对资源的使用
假如接收消息阻塞的话可能会发生死锁
在R和P的图中有环就可能发生死锁,但是,也有可能不锁,因为如果相同资源掌握在其他进程手中,他们迟早会被释放掉,一旦释放给环中进程用就不会死锁
那么总结一下结论:
如果图中不包含循环===即没有死锁
如果图中包含循环= =1 如果每个资源类只有一个实例,那么死锁
2.如果每个资源类有几个实例,可能死锁
死锁特征
死锁的四个必要非充分条件
互斥:在一个时间只能有一个进程使用资源
持有并等待:进程手里持有至少一个资源而且在等到其他进程手里的资源
无抢占:一个资源只能被进程资源释放掉,不准抢
循环:图中P和R之间存在循环

死锁处理办法
11.5 死锁预防和死锁避免
就是打破我们上节说的4种情况
到底怎么样避免呢
需要系统具有一些额外的先验信息提供:最简单最有效的模式是要求每个进程声明它可能需要的每个类型资源的最大数目
死锁避免算法动态检查资源分配状态,以确保永远不会有一个环形等待状态
安全状态:当一个进程请求可用资源,系统必须判断立即分配是否能使系统处于安全状态(存在安全序列)

如果系统处于安全状态 则无死锁
如果系统处于不安全状态, 则可能出现死锁
避免死锁:确保系统永远不会进入不安全状态
11.6 银行家算法
这是一种通用的死锁避免算法
相当于银行放贷要评估保证能收回来,进程资源分配
计算步骤未懂

11.7 死锁检测和死锁恢复
把资源分配图换成等待图,如果有环就死锁
其实死锁检测算法主要来调试程序(开发阶段),而非真正死锁检测
死锁恢复方法: 终止所有的死锁进程,在一个时间内终止一个进程直到死锁解除,
其实现在死锁的方法多半是鸵鸟办法,假装不知道

11.8 IPC概述(进程间通信)
为什么要通信? 因为 在保证进程相对独立性的前提下,为了协作
直接通信: 通信链路的属性:自动建立链路,一条链路恰好只对应一对通信进程,每对进程之间只有一个链路存在,链路可以是单向,但通常为双向
间接通信:定向从消息队列接收消息:只有它们共享一个消息队列,进程才能够通信
通信链路的属性:只有进程共享一个共同的消息队列,才建立链路,链路可以与许多进程相关联,每对进程也可以共享多个链路,链路可以是单向或双向
进程间通信还可以分为阻塞的与非阻塞
阻塞被认为是同步,非阻塞被认为是异步的

11.9 信号,管道,消息队列和共享内存
发送接收如果有缓存,可方便
队列的消息被附加到链路,可以是以下3方式之一:
0容量:发送方必须等待接收方
有限容量:发送方必须等待,如果队列满咯
无限容量:发送方完全不用等待

管道
想要把多个程序组合起来,实现大功能:所以就想将一个程序的输出做下一命令的输入,这就是管道
shell:
创建管道
为ls创建一个进程,设置stdout为管道写端
为more创建一个进程,设置stdin为管道读端
为存在父子关系的进程间进行数据传递的机制

消息队列
没有父子关系的也可
可以实现多个不相干的进程来传递数据

共享内存
是一种直接数据传递,不是间接
每个进程都有地址空间,在每个中,明确地设置了共享内存段
不好的地方:必须同步数据访问
实现方式:就是之前讲的内存管理,就是把同一块物理内存映射到不同的进程的相同或不同的地址空间里去,这样一来,通过虚地址访问不同进程的共享内存虚地址时,其实访问的是同一块地址空间

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值