操作系统Chap3.3 信号量与PV操作.pptVIP

  1. 1、本文档共71页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

信号量解决理发师问题(3)

cobeginprocessbarber(){while(true){P(customers);//有顾客吗?若无顾客,理发师睡眠P(mutex);//若有顾客时,进入临界区waiting--;//等候顾客数少一个V(barbers);//理发师准备为顾客理发V(mutex);//退出临界区cut_hair();//理发师正在理发(非临界区) }}信号量解决理发师问题(3)

processcustomer_i(){P(mutex);//进入临界区if(waitingCHAIRS){//有空椅子吗waiting++;//等候顾客数加1V(customers);//唤醒理发师V(mutex);//退出临界区P(barbers);//理发师忙,顾客坐下等待get_haircut();//否则顾客坐下理发}elseV(mutex);//人满了,走吧!}coend信号量解决理发师问题(3)

cobeginprocessbarber(){while(true){P(customers);//有顾客吗?若无顾客,理发师睡眠P(mutex);//若有顾客时,进入临界区waiting--;//等候顾客数少一个V(barbers);//理发师准备为顾客理发V(mutex);//退出临界区cut_hair();//理发师正在理发(非临界区) }}信号量分类

信号量按其用途分为?公用信号量: //初值设为1,用于实现进程互斥?私有信号量: //初值设为0,多数用于并发进程同步信号量按其取值分为?二元信号量:?一般信号量:一般信号量(1)设s为一个记录型数据结构,一个分量为整形量value,另一个为信号量队列queue,P和V操作原语定义:P(s);将信号量s减去l,若结果小于0,则调用P(s)的进程被置成等待信号量s的状态。V(s):将信号量s加1,若结果不大于0,则释放一个等待信号量s的进程。2.3.2进程的状态和转换

进程三态模型及其状态转换

运行态就绪态等待态选中落选出现等待事件等待事件结束P(s)操作V(s)操作P(s)操作V(s)操作一般信号量(2)typedefstructsemaphore{ intvalue;//信号量值 structpcb*list;//信号量队列指针};voidP(semaphores){ s.value--;//信号量值减1 if(s.value0)//若信号量值小于0,执行P操作的进程W(s.list);//调用W(s.list)阻塞自己,被置成等待信号}voidV(semaphores){ s.value++;//信号量值加1if(s.value=0)//若信号量值小于等于0,则调用R(s.list),R(s.list);//从信号量s队列中释放一个等待信号量s的进}//程并置成就绪态,自己则继续执行。其中W(s.list)和R(s.list)是操作系统基本系统调用,W(s.list)表示把调用过程的进程置成等待信号量s的状态,并移入s信号量队列,同时释放CPU,转向进程调度;R(s.list)表示释放一个等待信号量s的进程,从信号量s队列中移出一个进程,置成就绪态并移入就绪队列,执行V操作的进程继续执行,或转向进程调度。一般信号量(3)推论1:若信号量s为正值,则该值等于在封锁进程之前对信号量s可施行的P操作数、亦等于s所代表的实际还可以使用的物理资源数推论2:若信号量s为负值,则其绝对值等于登记排列在该信号量s队列之中等待的进程个数、亦即恰好等于对信号量s实施P操作而被封锁起来并进入信号量s队

文档评论(0)

趁早学习 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档