操作系统-信号量机制(整型信号量 记录型信号量)与用信号量实现进程互斥,同步,前驱关系

信号量机制

总览

在这里插入图片描述

信号量机制

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,没有限制,那么不会互斥访问

在这里插入图片描述

信号量机制实现进程同步

进程同步

在这里插入图片描述

信号量实现进程同步

在这里插入图片描述

信号量机制实现前驱关系

前驱:及当前事件的发生必须要指向该事件的所有事件都发生完才行

在这里插入图片描述

小结

在这里插入图片描述

  • 24
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

看星猩的柴狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值