学习笔记——同步、通信与死锁(2)
2016-12-26 10:27
309 查看
所用教材为:操作系统教程(第5版) 费翔林 骆斌编著
管程
基本概念
(1)管程:用少量信息和对该资源所执行的操作表征资源,忽略它们的内部结构和实现细节(2)定义:把表征某种资源的一个数据结构和实现资源管理的相关过程一并成为管程。
一个管程定义了一个数据结构和能为并发进程所执行的一组操作,这组操作能同步进程和改变管程中的数据。
(3)属性:共享性、安全性、互斥性
管程和进程的比较
1、管程定义的是公用数据结构;而进程定义的是私有数据结构;2、管程把共享变量上的同步操作集中起来;而临界区却分散在每个进程中;
3、管程是为管理共享资源而建立的;进程主要是为占有系统资源和实现系统并发性而引入的;
4、管程是被欲使用共享资源的进程所调用的,管程和调用它的进程不能并行工作;而进程之间能并行工作,并发性是其固有特性;
5、管程是语言或操作系统的成分,不必创建或撤销;而进程有生命周期,由创建而产生至撤销便消亡。
进程通信
概念:
同步和通信
(1)并发进程之间的交互必须满足两个基本要求:同步和通信(2)互斥:进程竞争资源时实施,是一种特殊的同步
(3)进程同步是一种进程通信,通过信号量在进程之间建立联系,相互协调运行和协同工作
(4)进程通信(IPC):进程之间互相交换信息
进程需要通信的情况
(1)共享资源(2)协同工作
(3)并发控制
(4)进程通知
(5)数据传递
进程间通信的方式
(1)信号通信机制(稍较低级)
1、软中断:不必由硬件产生中断源而引发的中断2、信号是一种软中断机制
3、中断机制与信号机制进行类比
4、进程处理信号的方法分为3类:
忽略信号、捕获信号、执行缺省操作
(2)管道通信机制
管道的实质:一个共享文件,基本上可借助与文件系统的机制实现(3)消息传递通信机制(高级通信方式)
消息和消息传递机制
一个正在执行的进程可在任何时刻向另一个正在执行的进程发送消息;一个正在执行的进程也可在任何时刻向正在执行的另一个进程请求消息
消息传递机制紧密地与进程的阻塞和释放相联系
基本的消息传递原语send(),receive()
直接通信:
send(P,消息):把一个消息发送给进程Preceive(Q,消息)从进程Q接收一个消息
间接通信:
send(A,信件):把一封信件(消息)传送到信箱Areceive(A,信件):从信箱A接收一封信件(消息)
间接通信的实现:
发送信件、接收信件
消息传递机制解决进程互斥问题
消息传递机制解决生产者-消费者问题
(4)信号量通信机制
(5)共享内存通信机制
(6)网络通信机制
操作系统并发问题解决方案小结
操作系统并发问题解决方案 | 原语类型 | 采用策略 | 同步机制 | 适用场合 | 方向 |
高级通信原语 | 采用“消息传递” “共享内存” “共享文件”策略 | 消息队列、 共享内存、 管道通信 | 解决并发进程通信、同步和互斥问题。适用于面向语句的高级程序设计。 | 上 自 底 向 上 底 | |
低级通信原语 | 采用“阻塞/唤醒+集中临界区”(1次测试)策略 | 管程 | 解决并发进程同步和互斥问题,不能传递消息。适用于面向语句的高级程序设计。 | ||
采用“阻塞/唤醒+分散临界区”(1次测试)策略 | 信号量和PV操作 | 解决并发进程同步和互斥问题,不能传递消息。适用于面向指令的低级程序设计。 | |||
采用“忙式等待”(反复测试)策略 | 关中断、对换、测试并建立、peterson算法、dekker算法 | 解决并发进程互斥问题,不能传递消息。适用于面向指令的低级程序设计。 |
死锁
死锁产生
一、核心:资源竞争
二、产生原因:
(1)进程推进顺序不当(2)PV操作使用不妥
(3)同类资源分配不均
(4)对某些资源的使用未加限制
三、死锁定义
如果在一个进程集合中的每个进程都在等待只能由该集合中的其他一个进程才能引发的事件,则称一组进程或系统此时发生死锁。死锁:指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再向前推进。
四、产生死锁因素:
(1)系统拥有的资源数量(2)资源分配策略
(3)进程对资源的使用要求
(4)并发进程的推进顺序
死锁防止
一、死锁的四个必要条件
(1)互斥条件(2)请求和保持条件
(3)不剥夺条件
(4)环路等待条件
二、死锁防止(破坏4个必要条件之一即可)
(1)破坏第一个条件:互斥条件
使资源科同时访问而非互斥访问(2)破坏第二个条件:请求和保持条件
静态分配资源摒弃请求条件:进程在整个运行期间,不再提出资源要求
摒弃保持条件:等待期间进程不占有任何资源
(3)破坏第三个条件:不剥夺条件
采用剥夺式调度方法允许进程还未执行完成时释放已占有的资源
(4)破坏第四个条件:循环等待条件
对资源进行编号,按序申请使用死锁避免
安全状态:避免死锁的关键
避免死锁的关键:让系统在动态分配资源的过程中,不要进入不安全状态。银行家算法避免死锁
优点:
(1)提高了资源利用率(2)系统总是处于安全状态
缺点:
(1)被分配的每类资源的数量是固定不变的(2)用户数保持固定不变
(3)要求用户事先说明其最大资源要求
死锁检测和解除
死锁检测
利用进程-资源分配图死锁定理: 系统为死锁状态的充分条件是:当且仅当该状态的进程-资源分配图是不可完全简化的。
死锁解除
重新启动
撤销进程
剥夺资源
进程回退
相关文章推荐
- 学习笔记——同步、通信与死锁(1)
- Android(java)学习笔记70:同步中的死锁问题以及线程通信问题
- RT-Thread_manual 学习笔记(四)--任务间同步及通信
- 内功修炼之操作系统学习(三:同步、通信及死锁)
- iOS学习笔记-103.多线程02——线程状态、同步、通信
- 9. 多线程 Part 3 同步与死锁 --- 学习笔记
- Linux进程通信---学习笔记(二)
- Windows Workflow Foundation (wwf) 在宿主中使用参数与实例通信 --学习笔记(二)
- 孙鑫VC学习笔记:第十七讲 (三) 用命名管道实现进程间的通信
- Linux进程通信----学习笔记(一)
- Udp通信 暑期学习笔记(三)
- windows via c/c++ 学习笔记(二) 内核同步
- 孙鑫VC学习笔记:第十七讲 用匿名管道实现进程间的通信
- OpenCV学习笔记(6)基于 VC+OpenCV+DirectShow 的多个摄像头同步工作
- flex学习笔记6-----数据通信HTTPService
- 小五思科技术学习笔记之VTP和三层交换Vlan通信 推荐
- Java 死锁的实现 -Java学习笔记(28)
- 孙鑫VC学习笔记:第十七讲 用剪贴板实现进程间的通信
- 孙鑫VC学习笔记:第十七讲 (一) 用剪贴板实现进程间的通信
- SilverLight学习笔记--实际应用(一)(4):手把手建立一个Silverlight应用程序之同步数据校验1