没有合适的资源?快使用搜索试试~ 我知道了~
计算机操作系统之PV原语分析及计算.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 167 浏览量
2023-03-28
21:40:46
上传
评论
收藏 92KB DOCX 举报
温馨提示
试读
11页
。。。
资源推荐
资源详情
资源评论
操作系统课程之 PV 原语
PV 原语通过操作信号量来处理进程间的同步与互斥的问题。其核心就是一段不
可分割不可中断的程序。
信号量的概念 1965 年由著名的荷兰计算机科学家 Dijkstra 提出,其基本思路是
用一种新的变量类型( semaphore )来记录当前可用资源的数量。有两种实现方式:
1)semaphore 的取值必须大于或等于 0。0 表示当前已没有空闲资源,而正数表示
当前空闲资源的数量; 2) semaphore 的取值可正可负,负数的绝对值表示正在等
待进入临界区的进程个数。
信号量是由操作系统来维护的,用户进程只能通过初始化和两个标准原语(
P、
V 原语)来访问。初始化可指定一个非负整数,即空闲资源总数。
P 原语:P 是荷兰语 Proberen (测试)的首字母。为阻塞原语,负责把当前进程
由运行状态转换为阻塞状态,直到另外一个进程唤醒它。操作为:申请一个空闲资源
(把信号量减 1),若成功,则退出;若失败,则该进程被阻塞;
V 原语:V 是荷兰语 Verhogen (增加)的首字母。为唤醒原语,负责把一个被
阻塞的进程唤醒,它有一个参数表,存放着等待被唤醒的进程信息。操作为:释放一
个被占用的资源(把信号量加 1),如果发现有被阻塞的进程,则选择一个唤醒之。
具体 PV 原语对信号量的操作可以分为三种情况:
1)把信号量视为一个加锁标志位,实现对一个共享变量的互斥访问。
实现过程:
P(mutex); // mutex 的初始值为 1 访问该共享数据 ;
V(mutex);
非临界区
2)把信号量视为是某种类型的共享资源的剩余个数,实现对一类共享资源的访
问。
实现过程:
P(resource); // resource 的初始值为该资源的个数 N 使用该资源;
V(resource); 非临界区
3)把信号量作为进程间的同步工具
实现过程:
临界区 C1;
P(S);
V(S);
临界区 C2;
哲学家问题 PV 原语程序
2009年 03 月 10 日 星期二 21:29
设有 5 个哲学家,共享一张放有五把椅子的桌子,每人分得一把椅子。但是,桌
子上总共只有 5 支筷子,在每人两边分开各放一支。哲学家们在肚子饥饿时才试
(1) 只有拿到两支筷子时,哲学家才能吃饭。
(2) 如果筷子已在他人手上,则该哲学家必须等待到他人吃完之后才能拿到筷
子。
(3) 任一哲学家在自己未拿到两支筷子吃饭之前,决不放下自己手中的筷子。
试:
(1) 描述一个保证不会出现两个邻座同时要求吃饭的通信算法。
(2) 描述一个既没有两邻座同时吃饭,又没有人饿死(永远拿不到筷子)的算
法。
(1)、设信号量 c[0]~c[4],初始值均为 1,分别表示 i 号筷子被拿(i=0,1,2,3,4),
send(i):第 i 个哲学家要吃饭
该过程能保证两邻座不同时吃饭,但会出现 5 个哲学家一人拿一只筷子,谁也吃
不上饭的死锁情况.
(2)、解决的思路如下:让奇数号的哲学家先取右手边的筷子,让偶数号的哲学
家先取左手边的筷子.这样,任何一个哲学家拿到一只筷子之后,就已经阻止了他
邻座的一个哲学家吃饭的企图,除非某个哲学家一直吃下去,否则不会有人会饿
死.
V(c[i+1 mod 5])
End
PV 原语实现互斥与同步
2008年 09 月 19 日 星期五 17:28
PV 原语的含义
P 操作和 V 操作是不可中断的程序段,称为原语。PV 原语及信号量的概念都
是由荷兰科学家 E.W.Dijkstra 提出的。信号量 sem 是一整数,sem 大于等于零时
代表可供并发进程使用的资源实体数,但 sem 小于零时则表示正在等待使用临界
区的进程数。
P 原语操作的动作是:
(1)sem 减 1;
(2)若 sem 减 1 后仍大于或等于零,则进程继续执行;
(3)若 sem 减 1 后小于零,则该进程被阻塞后进入与该信号相对应的队列中,
然后转进程调度。
V 原语操作的动作是:
(1)sem 加 1;
(2)若相加结果大于零,则进程继续执行;
(3)若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,
然后再返回原进程继续执行或转进程调度。
PV 操作对于每一个进程来说,都只能进行一次,而且必须成对使用。在 PV
原语执行期间不允许有中断的发生。
用 PV 原语实现进程的互斥
由于用于互斥的信号量 sem 与所有的并发进程有关,所以称之为公有信号量。
公有信号量的值反映了公有资源的数量。只要把临界区置于 P(sem)和 V(sem)之
间,即可实现进程间的互斥。就象火车中的每节车厢只有一个卫生间,该车厢的
所有旅客共享这个公有资源:卫生间,所以旅客间必须互斥进入卫生间,只要把
卫生间放在 P(sem)和 V(sem)之间,就可以到达互斥的效果。以下例子说明进程的
互斥实现。
例 1
生产围棋的工人不小心把相等数量的黑子和白子混装载一个箱子里,现要用
自动分拣系统把黑子和白子分开,该系统由两个并发执行的进程组成,功能如下:
(1)进程 A 专门拣黑子,进程 B 专门拣白子;
(2)每个进程每次只拣一个子,当一个进程在拣子时不允许另一个进程去拣
子;
分析:
第一步:确定进程间的关系。由功能(2)可知进程之间是互斥的关系。
第二步:确定信号量及其值。由于进程 A 和进程 B 要互斥进入箱子去拣棋子,
箱子是两个进程的公有资源,所以设置一个信号量 s,其值取决于公有资源的数
目,由于箱子只有一个,s 的初值就设为 1。
实现:
begin
s:semaphore;
s:=1;
剩余10页未读,继续阅读
资源评论
คิดถึง643
- 粉丝: 3880
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功