操作系统_进程同步算法习题精选概要1.pptVIP

操作系统_进程同步算法习题精选概要1.ppt

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

【例题1】 【例题2】 1.用P、V操作解决下图之同步问题 提示:分别考虑对缓冲区S和T的同步,再合并考虑 解: 设置四个信号量Sin=1,Sout=0,Tin=1,Tout=0; 【例题3】 桌上有一空盘,最多允许存放一只水果。爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果。 试用P、V操作实现爸爸、儿子、女儿三个并发进程的同步。 【例题4】 有一个仓库,可以存放A和B两种产品,但要求: (1) 每次只能存入一种产品(A或B) (2) -N<A产品数量-B产品数量<M。 其中,N和M是正整数。试用P、V操作描述产品A与B的入库过程。 解: 分析:设两个同步信号量Sa、Sb,其中: Sa表示允许A产品比B产品多入库的数量,初值为M-1。 Sb表示允许B产品比A产品多入库的数量,初值为N-1。 设互斥信号量mutex,初值为1。 例题5 ? 进程A1、A2,… An1通过m个缓冲区向进程B1、B2、… Bn2不断发送消息。发送和接收工作遵循下列规则: (1) 每个发送进程一次发送一个消息,写入一个缓冲区,缓冲区大小等于消息长度。 (2) 对每个消息,B1,B2,… Bn2都须各接收一次,读入各自的数据区内。 (3) m个缓冲区都满时,发送进程等待,没有可读消息时,接收进程等待。 试用P、V操作组织正确的发送和接收工作。 解: 先将问题简化: 设缓冲区的大小为1 有一个发送进程A1 有二个接收进程B1、B2 设有信号量Sin[1] 、Sin[2] 初值为1 设有信号量Sout[1] 、Sout[2] 初值为0 A1: while (1) { P(Sin[1]); P(Sin[2]); 将数据放入缓冲区 V(Sout[1]); V(Sout[2]); } 向目标前进一步: 设缓冲区的大小为m 有一个发送进程A1 有二个接收进程B1、B2 设有信号量Sin[1] 、Sin[2] 初值为m 设有信号量Sout[1] 、Sout[2] 初值为0 A1: while (1) { P(Sin[1]); P(Sin[2]); P(mutex); 将数据放入缓冲区 V(mutex); V(Sout[1]); V(Sout[2]); } 到达目标 设缓冲区的大小为m 有n1个发送进程A1….An1 有n2个接收进程B1…Bn2 设有n2个信号量Sin[n2] 初值均为m 设有n2个信号量Sout[n2] 初值均为0 Aj: while (1) { for(i=1;i=n2;i++) P(Sin[i]); P(mutex); 将数据放入缓冲区 V(mutex); for(i=1;i=n2;i++) V(Sout[2]); } * 进程同步算法习题课 司机进程: while(1) { 启动车辆 正常驾驶 到站停车 }… 售票员进程: while(1) { 关门 售票 开门 }… 用P、V操作解决司机与售票员的问题 分析: 为保证车辆行驶安全,售票员必须关好车门,然后通知司机启动车辆,在行驶过程中售票员不能打开车门,待车到站停稳后,司机通知售票员才能打开车门,如此不断重复。为此,须设置两个信号量S1,S2用来控制司机和售票员的行为,初值都为0。 解: 算法如下: 司机进程: while(1) { P(S1) 启动车辆 正常驾驶 到站停车 P(S2) }… 售票员进程: while(1) { 关门 P(S1) 售票 P(S2) 开门 }… get copy put s t get: while(1) { P(Sin); 将数放入S; V(Sout); } copy: while(1) { P(Sout); P (Tin); 将数从S取出放入T; V (Tout); V(Sin); } put: while(1) { P(Tout); 将数从T取走; V(Tin); } 思考题: 如果S和T是由多个缓冲区组成的缓冲池,上述算法将如何修改? 分析: 设置一个信号量S表示空盘子数,一个信号量So表示盘中桔子数,一个信号量Sa表示盘中苹果数,初值分别为1,0,0。 解: 算法如下: Father() { while(1) { P(S);

文档评论(0)

yaocen + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档