进程互斥
概念
进程互斥指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。
我们把一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备(比如摄像头、打印机)都属于临界资源。此外还有许多变量、数据、内存缓冲区等都属于临界资源
对临界资源的访问,必须互斥地进行
- 进入区
- 临界区
- 退出区
- 剩余区
为了禁止两个进程同时进入临界区,需遵循以下准则
- 空闲让进
- 忙则等待
- 有限等待
- 让权等待
软件实现
进入区设置并检查一些标志 来标明是否有进程在临界区中,若已有进程在临界区,则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志
单标志法
单进程完成后让权给下一个进程
违背空闲让进
双标志先检查法
检查有没有别的在临界,没有就标志上锁
违背忙则等待,因为检查后上锁可能出现进程切换
双标志后检查法
先检查法反过来,先上锁再检查
违背空闲让进和有限等待,可能会饥饿死
Peterson算法
后检查+争抢的时候轮流让权
硬件实现
- 开/关中断指令
- TSL指令
- Swap指令
信号量
上述方法都有缺陷,不能实现让权等待
为了更好的解决进程互斥与同步的问题,我们引入信号量机制
信号量即为一个变量,用于表示系统中资源的数量
同时我们还有一对原语: 进入原语wait(S),退出原语signal(S),简化为P(S),V(S) [1]
这里分为整数型信号量和记录型信号量
记录型信号量在整数型的基础上加入了阻塞队列机制
- 整数型信号量
- 记录型信号量: 引入队列
源自荷兰语wait和signal的首字母 ↩︎