网站大量收购独家精品文档,联系QQ:2885784924

计算机操作系统PV原语分析.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机操作系统PV原语分析

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) 描述一个既没有两邻座同时吃饭,又没有人饿死(永远拿不到筷子)的算法。 (3) 在什么情况下,5 个哲学家全部吃不上饭? 解答: (1)、设信号量c[0]~c[4],初始值均为1,分别表示i号筷子被拿(i=0,1,2,3,4), send(i):第i个哲学家要吃饭 begin P(c[i]); P(c[i+1 mod 5]); eat; V(c[i+1 mod 5]); V(c[i]); End; 该过程能保证两邻座不同时吃饭,但会出现5个哲学家一人拿一只筷子,谁也吃不上饭的死锁情况. (2)、解决的思路如下:让奇数号的哲学家先取右手边的筷子,让偶数号的哲学家先取左手边的筷子.这样,任何一个哲学家拿到一只筷子之后,就已经阻止了他邻座的一个哲学家吃饭的企图,除非某个哲学家一直吃下去,否则不会有人会饿死. send(i):第i个哲学家要吃饭 Begin If i mod 2==0 then { P(c[i]),P(c[i+1 ]mod 5)) eat; V(c[i],c[i+1 mod 5]) } Else { P(c[i+1 mod 5]) P(c[i]) Eat V(c[i+1 mod 5]) V(c[i]) } 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操作对于每一个进程来说,都只能进行一次,而且

文档评论(0)

kaiss + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档