Please enable JavaScript.
Coggle requires JavaScript to display documents.
ch5_part2 - Coggle Diagram
ch5_part2
实现互斥
互斥锁
会造成系统忙等,浪费了CPU资源
适用于多处理器系统等预计只会短时间占有锁的系统
实现必须使用原子操作
严格轮转
效率很低
一个进程不能连续进入关键部分两次,违反了进步原则
禁用中断:当一个进程在执行它的关键部分时禁止上下文切换;实施:提供一个新的系统调用
在多处理器系统上不那么可行而且牺牲了性能
Peterson's solution
不存在轮转,不同进程之间互相谦让
但是可能会引起忙等以致于优先级倒置,高优先级进程一直处于忙等
信号量
表示资源的状态和数量
二进制表示,类似于互斥锁
计数信号量:控制有限数量的资源
实现:两个原子操作
down:减少计数
up:增加计数
问题
忙等:解决:将进程阻断而不是忙于等待,将进程放入等待的队列中
原子性操作:解决:禁用上下文切换
禁用上下文切换会牺牲性能,所以关键部分代码应该尽可能地短
原子操作:up和down是不可分割的,并且如果有两个进程同时启动原子操作时只有一个进程能够执行成功
如果原子操作顺利返回,那么必定有值被更改
如果原子操作被终止了,那么不会有任何改变
四个要求
进步:不能有一个在运行非关键部分的进程可以阻塞其它进程执行关键部分
不以速度为限制因素:解决方法不能基于CPU的运行速度
互斥:没有两个进程可以同时执行它们的关键部分
每个进程的等待是有限的:不应该存在一个为了进入关键部分而一直在等待的进程
抢占式内核与非抢占式内核
抢占式:回应更快,更适合于实时编程
非抢占式:基本不会发生竞争情况
Mutual exclusion:相互排斥,实现后即可防止竞争情况的出现但是会影响并行计算的性能
关键部分:正在执行访问共享对象的代码段
阻碍其它进程进入关键部分的是进程的入口而不是进程的关键部分