操作系统-第二章【中】

目录

前言

进程的互斥

互斥的定义

上锁和开锁原语

信号量机制

信号量的概念

P、V操作原语

定义在信号量S上的P(S)原语操作

定义在信号量S上的V(S)原语操作

进程的同步

同步的定义

用P、V操作原语实现进程的同步

P、V操作使用实例

生产者-消费者问题(进程间通信IPC问题之一)

前言

操作系统【第一章】_单用户单任务操作系统-CSDN博客

操作系统-第二章【上】-CSDN博客

进程的互斥

在多道系统环境中,由于进程共享资源和进程合作,使得并发执行的多个进程间可能产生互斥或同步的相互制约关系,为此设立了进程的“互斥”与“同步”机制

互斥的定义

对于某个系统资源,一个进程正在使用它,另外一个想使用它的进程就必须等待,而不能同时使用

进程互斥是多道程序系统中进程之间存在的一种源于资源共享的制约关系,也称间接制约关系,这种限定进程只能互斥地访问的资源称为临界资源

所谓临界资源,指一次允许一个进程使用的资源

  • 例如,共享的变量或者表格、打印机等

进程中访问临界资源的那段程序代码称为“临界区”或“临界段”,使用同一临界资源的不同进程中的临界区称为“同类临界区

临界区的使用原则:“空则让进,忙则等待,等则有限,等则让权

  • 当临界区空闲时,必须让一个要求进入临界区的进程立即进入
  • 当临界区已有进程时,其它试图进入临界区的进程必须等待
  • 对于要求进入临界区的进程,应在有限的时间内使之进入,避免“死等”
  • 等待进入临界区的进程必须立即释放CPU,避免“忙等”

上锁和开锁原语

上锁与开锁用一个锁变量W来表示某种临界资源的状态,W=0表示资源空闲可用,W=1表示资源已被占用

进程进入临界区访问临界资源应该测试W的值,若W=1返回重新测试,若W=0,置W=1,当进程用完临界资源退出临界区时,重新置W=0

信号量机制

信号量机制分为:“经典的整型信号量”、“记录型信号量”、“信号量集机制

记录型信号量机制:由一个记录型的信号量以及定义在信号量上的两个原语P操作和V操作组成(记录型信号量机制在现代计算机操作系统广泛使用)

信号量的概念

信号量,也称信号灯,是表示某类资源实体与进程队列有关的整型变量,其值只能通过P、V操作来改变。

也可以把信号量定义为一个确定的二元组(S,Q),S是个具有非负初值的整型变量,Q是个初始状态为空的队列。即信号量类型是复合类型,其中一个分量是整型变量S,另一个分量是进程的等待队列指针Q

信号量整型变量S的值的物理含义:

  • 当S >= 0时,表示某类可用资源的数目,或者说表示可以执行P操作而不会被阻塞的进程的数目
  • 当S < 0时,其绝对值表示信号量S的阻塞队列中的进程数

P、V操作原语

定义在记录型信号量上的P、V操作是专门对于信号量的整型变量值进行减1、加1操作的原语

定义在信号量S上的P(S)原语操作

算法描述:

  • S减1
  • 若S >= 0,则调用P(S)的进程正常返回
  • 否则,调用者进程调用阻塞原语Block(Q),把自己插入到阻塞队列Q中

定义在信号量S上的V(S)原语操作

算法描述:

  • S加1
  • 若S > 0,则调用V(S)的进程正常返回
  • 否则,调用者进程调用唤醒原语Wakeup(Q),把信号量S的阻塞队列Q中的队首进程移出并唤醒,返回

  • 每执行一次P(S)操作,可理解为进程请求一个单位的S类资源
  • 每执行一次V(S)操作,可理解为进程释放一个单位的S类资源

进程的同步

合作者进程(比如父子进程)之间具有同步制约关系,这实际上是一种合作进程在独自并发执行过程中在某些确定的时序点上“你等我,我也等你”的同步约束

同步的定义

指:“两个或多个进程合作完成一个任务,在某些确定的时序点上必须相互协调

即:“一个进程的执行依赖于另一个进程--其合作伙伴的消息,当一个进程到达某确定点而没有得到合作伙伴发来的消息时必须等待,直到收到消息,才能继续执行

进程同步也称“直接制约关系

用P、V操作原语实现进程的同步

对同一个信号量的P、V操作分别出现在一个进程和它的合作伙伴的代码中。

而且P、V操作的出现位置是各个合作进程中确定的时序点,即一个生产者进程在完成了前趋的生产任务后,应立即给合作伙伴----消费者进程发送消息,这要执行V操作

而后继的消费者进程在消费前,应该执行对同一个信号量的P操作

一般来说,用P、V操作实现进程的同步时,合作进程间需要收发几条消息相应地就设置几个信号量,而且这些同步信号量的初值一般都为,表示消息尚未产生

解答进程同步问题的步骤:

  • 分析题目设计的进程间的制约关系
  • 设置信号量(信号量个数、初值、物理含义)
  • 添加P、V操作至适当处

P、V操作使用实例

生产者-消费者问题(进程间通信IPC问题之一)

问题描述:

一组生产者进程通过一个具有n个缓冲区的缓冲池循环不断地向一组消费者进程提供产品,怎样才能正确描述这两类进程?

分析:

  • 生产者-消费者之间的同步关系表现为:缓冲池中所有缓冲区均装满产品,生产者必须等待消费者提供空缓冲区;缓冲池中所有缓冲区全为空时,消费者必须等待生产者提供满缓冲区;这是两个“等信号”的操作,可以用两个P操作来实现,由于两个P操作所等的对象不一样,所以对应有两个V操作。每当消费者从装有产品的满缓冲区取走产品时,应该给生产者发一个信号,高速它已有一个空缓冲区;每当生产者把产品放入空缓冲区时,应该给消费者发一个信号,告诉它已有一个满缓冲区
  • 生产者-消费者之间还有互斥关系,由于缓冲区是临界资源,所以任何进程在缓冲区进行存取操作时都必须和其他进程互斥进行,这可以设一个公用的初值为1的互斥信号量,以保证同时只有一个进程进入临界区。

解答:

  • 同步信号量empty,初值为n,表示消费者已把缓冲池中所有产品取走,有n个空缓冲区可用
  • 同步信号量full,初值为0,表示生产者尚未把产品放入缓冲池,有0个满缓冲区可用
  • 互斥信号量mutex,初值为1,保证同时只有一个进程能够进入临界区,访问缓冲池

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是洋洋a

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

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

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

打赏作者

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

抵扣说明:

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

余额充值