admin管理员组文章数量:1130349
王道考研笔记
- 2.3.3 信号量机制
- 一、整型信号量
- 二、记录型信号量
- 2.3.4 用信号量机制实现进程互斥、同步、前驱关系
- 一、实现进程互斥
- 二、实现进程同步
- 三、实现进程的前驱关系
- 2.3.5 经典问题
- 一、生产者-消费者问题
- 1、问题描述
- 2、分析问题
- 3、代码实现
- 4、思考:是否可以改变P、V操作的顺序
- 二、多生产者-多消费者问题
- 1、问题描述
- 2、分析问题
- 3、代码实现
- 4、思考
- 三、吸烟者问题
- 1、问题描述
- 3、代码实现
- 四、读者-写者问题
- 1、问题描述
- 2、分析问题
- 3、读优先代码实现
- 4、写优先代码实现
- 五、哲学家进餐问题
- 1、问题描述
- 2、分析问题
2.3.3 信号量机制
用户进程可以通过使用操作系统提供的一对原语【wait(S)和signal(S)】来对信号量进行操作,从而很方便实现了进程互斥、进程同步。
信号量其实就是一个变量(可以是一个整数,也可以是更复杂的记录型变量),可以用一个信号量来表示系统中某种资源的数量,比如:系统中只有一台打印机,就可以设置一个初值为1的信号量
wait、signal原语简称P、V操作
一、整型信号量
二、记录型信号量
当资源分配完之后进程需要进入等待队列
进入等待队列的进程使用资源
PV操作
2.3.4 用信号量机制实现进程互斥、同步、前驱关系
一、实现进程互斥
二、实现进程同步
三、实现进程的前驱关系
2.3.5 经典问题
一、生产者-消费者问题
1、问题描述
2、分析问题
同步:生产者跟消费者
缓冲区满时,生产者要等待消费者取走产品
缓冲区空时,消费者要等待生产者放入产品
互斥:对缓冲区的访问要互斥地进行(mutex)
3、代码实现
4、思考:是否可以改变P、V操作的顺序
二、多生产者-多消费者问题
1、问题描述
2、分析问题
互斥:
对缓冲区(盘子)的访问要互斥地进行
同步:
爸爸放完苹果才能女儿才吃
妈妈放完橘子后,儿子才能取橘子
盘子空时,爸爸或妈妈才能放水果
初始化,确定好信号量的定义,一开始这个信号量定义有多少就设为多少,例如plate定义为盘子能放多少个水果,因为盘子一开始最多就可以放1,初始化设置为1
3、代码实现
4、思考
(1)信号量mutex可以去掉吗,本题条件时是可以的,因为缓冲区大小为1,盘子只能放一个水果,在任何时刻,apple、orange、plate三个同步信号量中最多只有一个是1,因此在任何时刻,最多只有一个进程的P操作不会被阻塞,并顺利地进入临界区。
(2)如果盘子的容量为n大于1的话,信号量mutex不能去掉,不然会导致两个进程写入缓冲区的数据相互覆盖的情况,而且信号量plate要初始化为n。
三、吸烟者问题
1、问题描述
本质上这题属于“生产者-消费者”问题,详细来说就是“可生产多种产品的单生产者-多消费者”。
生产产品
组合一:纸+胶水
组合二:烟草+胶水
组合三:烟草+纸
同步关系
桌子上有组合一,抽烟者A取走东西
桌子上有组合二,抽烟者B取走东西
桌子上有组合三,抽烟者C取走东西
各抽烟者发出取完信号,供应者将下一组合放到桌子上
互斥关系
对缓冲区(桌子)互斥访问
3、代码实现
这里之所以没有互斥信号量,原因跟上一题一样。所以如果缓冲区为n(>1)的话,要设置信号量mutex初始化为1
四、读者-写者问题
1、问题描述
2、分析问题
3、读优先代码实现
4、写优先代码实现
五、哲学家进餐问题
1、问题描述
2、分析问题
王道考研笔记
- 2.3.3 信号量机制
- 一、整型信号量
- 二、记录型信号量
- 2.3.4 用信号量机制实现进程互斥、同步、前驱关系
- 一、实现进程互斥
- 二、实现进程同步
- 三、实现进程的前驱关系
- 2.3.5 经典问题
- 一、生产者-消费者问题
- 1、问题描述
- 2、分析问题
- 3、代码实现
- 4、思考:是否可以改变P、V操作的顺序
- 二、多生产者-多消费者问题
- 1、问题描述
- 2、分析问题
- 3、代码实现
- 4、思考
- 三、吸烟者问题
- 1、问题描述
- 3、代码实现
- 四、读者-写者问题
- 1、问题描述
- 2、分析问题
- 3、读优先代码实现
- 4、写优先代码实现
- 五、哲学家进餐问题
- 1、问题描述
- 2、分析问题
2.3.3 信号量机制
用户进程可以通过使用操作系统提供的一对原语【wait(S)和signal(S)】来对信号量进行操作,从而很方便实现了进程互斥、进程同步。
信号量其实就是一个变量(可以是一个整数,也可以是更复杂的记录型变量),可以用一个信号量来表示系统中某种资源的数量,比如:系统中只有一台打印机,就可以设置一个初值为1的信号量
wait、signal原语简称P、V操作
一、整型信号量
二、记录型信号量
当资源分配完之后进程需要进入等待队列
进入等待队列的进程使用资源
PV操作
2.3.4 用信号量机制实现进程互斥、同步、前驱关系
一、实现进程互斥
二、实现进程同步
三、实现进程的前驱关系
2.3.5 经典问题
一、生产者-消费者问题
1、问题描述
2、分析问题
同步:生产者跟消费者
缓冲区满时,生产者要等待消费者取走产品
缓冲区空时,消费者要等待生产者放入产品
互斥:对缓冲区的访问要互斥地进行(mutex)
3、代码实现
4、思考:是否可以改变P、V操作的顺序
二、多生产者-多消费者问题
1、问题描述
2、分析问题
互斥:
对缓冲区(盘子)的访问要互斥地进行
同步:
爸爸放完苹果才能女儿才吃
妈妈放完橘子后,儿子才能取橘子
盘子空时,爸爸或妈妈才能放水果
初始化,确定好信号量的定义,一开始这个信号量定义有多少就设为多少,例如plate定义为盘子能放多少个水果,因为盘子一开始最多就可以放1,初始化设置为1
3、代码实现
4、思考
(1)信号量mutex可以去掉吗,本题条件时是可以的,因为缓冲区大小为1,盘子只能放一个水果,在任何时刻,apple、orange、plate三个同步信号量中最多只有一个是1,因此在任何时刻,最多只有一个进程的P操作不会被阻塞,并顺利地进入临界区。
(2)如果盘子的容量为n大于1的话,信号量mutex不能去掉,不然会导致两个进程写入缓冲区的数据相互覆盖的情况,而且信号量plate要初始化为n。
三、吸烟者问题
1、问题描述
本质上这题属于“生产者-消费者”问题,详细来说就是“可生产多种产品的单生产者-多消费者”。
生产产品
组合一:纸+胶水
组合二:烟草+胶水
组合三:烟草+纸
同步关系
桌子上有组合一,抽烟者A取走东西
桌子上有组合二,抽烟者B取走东西
桌子上有组合三,抽烟者C取走东西
各抽烟者发出取完信号,供应者将下一组合放到桌子上
互斥关系
对缓冲区(桌子)互斥访问
3、代码实现
这里之所以没有互斥信号量,原因跟上一题一样。所以如果缓冲区为n(>1)的话,要设置信号量mutex初始化为1
四、读者-写者问题
1、问题描述
2、分析问题
3、读优先代码实现
4、写优先代码实现
五、哲学家进餐问题
1、问题描述
2、分析问题
版权声明:本文标题:《操作系统》信号量机制 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://it.en369.cn/jiaocheng/1760285210a2851453.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。


发表评论