目录
一、同步互斥
二、互斥的实现方法
2.1软件实现
2.1.1单标志法
2.1.2双标志先检查
2.1.3双标志后检查
2.1.4Petersons算法
2.2硬件实现
2.2.1 TestAndSet指令
2.2.2 Swap指令
三、信号量机制
3.1整形变量
3.2 记录型变量
3.3用信号量实现进程互斥、同步、前驱关系
3.3.1互斥
3.3.2同步
3.3.3前驱关系
四、同步和互斥经典问题
4.1 生产者-消费者问题
4.2多生产多消费问题
4.3 吸烟者问题
4.4 读写者问题
4.5 哲学家进餐问题
五、管程
六、死锁
6.1死锁产生得必要条件
6.2发生死锁的时候
七、死锁的处理策略
7.1预防死锁 静态策略
7.2 避免死锁(银行家算法)动态策略
7.3 死锁得检测和解除
死锁得检测
死锁得解除
一、同步互斥
二、互斥的实现方法
2.1软件实现
2.1.1单标志法
两个进程在访问完临界区后会使用临界区的权限转交给另一个进程,也就是说每个进程进入临界区的权限只能被另一个进程赋予
只能轮流使用
2.1.2双标志先检查
2.1.3双标志后检查
2.1.4Petersons算法
2.2硬件实现
中断屏蔽方法:利用“开/关中断指令”实现
关中断-》临界区-》开中断
2.2.1 TestAndSet指令
简称TS或TSL
2.2.2 Swap指令
三、信号量机制
信号量其实就是一个变量(可以是一个整数,也可以是复制的记录型变量),可以用一个信号量表示系统中某种资源数量
一对原语:wait(s)和signal(s),简称P(s),V(s)
3.1整形变量
表示系统中某种资源的数量
3.2 记录型变量
3.3用信号量实现进程互斥、同步、前驱关系
3.3.1互斥
3.3.2同步
并发进程要求有序的推进
3.3.3前驱关系
四、同步和互斥经典问题
实现互斥P操作一定要早实现同步P操作后
4.1 生产者-消费者问题
4.2多生产多消费问题
4.3 吸烟者问题
4.4 读写者问题
4.5 哲学家进餐问题
五、管程
管程是一种特殊的软件模块,有这些部分组成:
1.局部于管程的共享数据结构说明
2.对该数据结构进行操作的一组过程
3.对局部于管程的共享数据结构设置初始值语句
4.管程有一个名字
基本特征:
1.局部于管程的数据只能被局部于管程的过程访问
2.一个进程只有通过调用管程内的过程才能进入管程访问共享数据
3.每次仅允许一个进程在管程内执行某个内部过程
用管程解决生产者消费者问题
六、死锁
死锁:多个进程竞争资源造成的一种僵局(相互等待),若无外力作用,这些进程是无法向前推进的
饥饿:由于长期得不到想要资源,某进程无法向前推进现象。
死循环:某进程执行过程中一直跳不出某个循环得现象。
6.1死锁产生得必要条件
1.互斥条件:只有对必须互斥使用得资源的争抢才会导致死锁
2.不剥夺条件:进程所获得的资源在未完成之前,不能由其他进程强行夺走,只能主动释放
3.请求和保存条件:进程已经保持了至少一个资源,但又提出新资源请求,而该资源又被其他进程占有,此时进程阻塞又对已有资源保持不放
4.循环等待条件:存在一种进程资源的循环等待链,链中的每一个进程已获得的资源同时被下一个资源请求
6.2发生死锁的时候
七、死锁的处理策略
7.1预防死锁 静态策略
破坏互斥条件:SPOOLing技术、
破坏不剥夺条件:1.得不到资源,就释放全部资源,以后要就重新请求 2.系统协助,直接剥夺其他资源自己使用
破坏请求和保持条件:静态分配法:进程运行前一次申请完所需得全部资源,资源未满足前不让它投入使用,一旦投入使用就一直归它所有 资源利用率低,可能饥饿
破坏循环等待条件:顺序资源分配法:
7.2 避免死锁(银行家算法)动态策略
7.3 死锁得检测和解除
死锁得检测
死锁得解除
1.资源剥夺法:挂起某些死锁进程,并抢占它得资源,将这些资源分配给其他死锁进程,但防止给i去得长期得不到资源而饥饿
2.撤销进程法:强制撤销部分、甚至全部死锁进程,并剥夺这些进程得资源,简单但代价大,有些进程运行很长时间接近结束,被终止就功亏一篑,还得从头再来
3.进程回退法:让一个或多个死锁进程回退到足以避免死锁的地步,操作系统就要记录信息设置还原点