文章目录
- 信号量机制
- 总览
- 信号量机制
- 整型信号量
- 记录型信号量
- 例子
- 记录型信号量小结
- 小结
- 用信号量实现进程互斥,同步,前驱关系
- 总览
- 信号量机制实现进程互斥
- 信号量机制实现进程同步
- 进程同步
- 信号量实现进程同步
- 信号量机制实现前驱关系
- 小结
信号量机制
总览
信号量机制
wait:进入区的操作
signal:退出区的操作
整型信号量
wait:检查当前的资源是否足够,不够则卡住循环,够则信号量减少一个
signal:信号量加一个
检查和上锁一气呵成,所以不会出现未及时上锁而切换进程导致其他进程通过检查进入临界区的情况
记录型信号量
例子
首先要进行P0进程的wait,value的初始值是2
然后wait后value的值为1,P0进程开始使用得到的打印机资源。然后进程切换到P1,然后P1要执行wait
然后wait后value的值为0,P1进程开始使用得到的打印机资源。此时value为0资源分配完,然后进程再切换到P2,准备执行wait
然后wait后value的值为-1,此时小于0,意味着此时无法使用资源,此时会使用block函数使得P2进程挂到信号量的等待队列里
此时由于进程P2进入阻塞态,CPU转而为P3进程服务,然后wait后值为-2小于零,所以也会执行block,然后P3挂入等待队列队尾
接下来CPU为P0服务,假设此时P0进程使用完打印机,执行signal原语,value值加一个,此时如果value值依然小于等于0,那么会执行wakeup,唤醒等待队列中队头的进程。然后进等到程切换时,CPU会切换到P2
此时P2可以开始使用打印机资源,使用完后再执行signal,此时value+1,然后唤醒等待队列队头进程,P3进程由阻塞态变为就绪态
此时如果进程切换到P1,此时P1使用完打印机会执行signal,此时value大于0,所以不会唤醒
然后进程切换到P3,使用完打印机后,然后value值+1,不会唤醒
记录型信号量小结
自我阻塞:主动放弃CPU的使用权
记录型信号量通过P操作(wait/申请)和V操作(signal/释放)实现系统资源的申请和释放。以下是这两种操作的具体实现机制:
- 资源申请(P操作/Wait操作):当一个进程需要使用某个资源时,它会执行P操作来申请该资源。在执行P操作时,进程会检查信号量的值。如果信号量的值大于0,表示有可用的资源,进程将进入临界区,并将信号量的值减1。如果信号量的值为0,表示没有可用资源,进程不能立即进入临界区,而是会被阻塞,放入等待队列中,直到信号量的值变为正数。
- 资源释放(V操作/Signal操作):当一个进程完成了对资源的使用,并准备退出临界区时,它会执行V操作来释放资源。这个操作会将信号量的值加1,表示增加了一个可用资源。同时,如果有其他进程因为资源不足而被阻塞在等待队列中,系统会选择其中一个或多个进程解除阻塞,允许它们继续执行。
小结
block:value<0
wakeup:value<=0
用信号量实现进程互斥,同步,前驱关系
总览
信号量机制实现进程互斥
缺少P:没有P,没有限制,那么不会互斥访问
信号量机制实现进程同步
进程同步
信号量实现进程同步
信号量机制实现前驱关系
前驱:及当前事件的发生必须要指向该事件的所有事件都发生完才行