如何用信息量机制实现进程互斥、进程同步和前驱关系

在这之前大家可以参考一下这篇文章《操作系统》-信号量机制的初识对信息量进制有个大致的了解

信号量进制实现进程互斥
实现进程互斥时可以分为以下几个步骤:
1、分析并发进程关键活动,划分临界区(如:对临界资源打印机的访问就应放在临界区)
2、设置互斥信号量mutex,初值为0(信号量mutex表示“进入临界区的名额”)
3、在进入区P(mutex)——申请资源
4、在退出区V(mutex)——释放资源
在这里插入图片描述
在这里插入图片描述
注意:不同的临界资源需要设置不同的互斥信息量
P、V操作必须成对出现。缺少P操作会导致临界资源不能被互斥访问,缺少V操作会导致资源被访问后无法被释放,等待进程永不会被唤醒


信息量机制实现进程同步
进程同步:让各并发进程按照要求有序的地推进
比如说在实现过程中进程1必须比进程2先访问临界资源,这种各进程按一定要求推进就是进程同步,让本来异步并发的进程互相配合、有序推进
实现进程同步可以分为以下几个步骤:
1、分析什么地方需要进程同步关系,必须一前一后地执行两个操作(或两句代码)
2、设置同步信号量S,初始值为0
3、在“前操作”之后执行V(S)
4、在“后操作”之前执行P(S)
在这里插入图片描述
在这里插入图片描述
理解
信号量S代表某种资源,刚开始是没有这种资源的。P2要使用这种资源就会被锁在P(S)操作这里,直到P1被执行后V(S)将S的数量加1后P2才能被执行。
若先执行到 V(S) 操作,则 S++ 后 S=1。之后当执行到 P(S) 操作时,由于 S=1,表示有可用资源,会执行 S–,S 的值变回 0,P2 进程不会执行 block 原语,而是继续往下执行代码4。
若先执行到 P(S) 操作,由于 S=0,S-- 后 S=-1,表示此时没有可用资源,因此P操作中会执行 block 原语,主动请求阻塞。之后当执行完代码2,继而执行 V(S) 操作, S++,使 S 变回 0,由于此时有进程在该信号量对应的阻塞队列中,因此会在 V操作中执行 wakeup 原语,唤醒 P2 进程。这样 P2 就可以继续执行 代码4 了


信息量机制实现前驱关系
什么是实现前驱关系举个例子
例:进程 P1 中有句代码 S1,P2 中有句代码 S2 ,P3中有句代码S3 …… P6 中有句代码 S6。这些代码要求按如下前驱图所示的顺序来执行:
在这里插入图片描述
其实每一对前驱关系都是一个进程同步关系(需要保证一前一后),因此实现前驱关系可以分为以下步骤:
1、要为每一对前驱关系设置一个同步信息量
2、在“前操作”之后对相应的同步信息量执行V操作
3、在“后操作”之前对相应的同步信息量执行P操作

内容回顾:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

电脑小白路过

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

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

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

打赏作者

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

抵扣说明:

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

余额充值