计算机操作统习题作业.doc

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

进程A1,A2,…,An通过一个缓冲区向进程B1,B2,…Bm不断地发送消息。发送和接收工作遵循如下规则: (1)每个发送进程一次发送一个消息,写入一个缓冲区,缓冲区大小等于消息长度; (2)对每一个消息,B1,B2,…,Bm都须各接收一次,读入各自的数据区; (3)缓冲区满时,发送进程等待;没有可读的消息时,接收进程等待。 试用P,V操作组织正确的发送和接收工作。(说明信号量的意义) 分析:本题是生产者-消费者问题的一个变形。在生产者-消费者问题中,生产者和消费者公用一组缓冲区,每一个缓冲区只需写一次、读一次;而这个问题中,每一个缓冲区只写一次,但需读m次。在解题的过程中,可以把一组缓冲区看做m组缓冲区。这样一来,每一个生产者需要同时写m个缓冲区组中相应的m个缓冲区,而每一个消费者只需读自己对应的那组缓冲区中对应的单元。生产者须在m个缓冲区都为空时方可写入。这样,就可以用m组信号量(avail,full)来实现这一流程。 设公用信号量mutex保证生产者进程和消费者进程之间的互斥,设信号量avail[1…m]为生产者进程的私用信号量,信号量full[1…m]为消费者进程的私用信号量。信号量mutex表示可用有界缓冲区的个数,初值为1;信号量avail[i](1≤i≤m)表示有界缓冲区组中的第i个缓冲区的空单元数,初值为m;信号量full[i](1≤i≤m)表示有界缓冲区中的第i个缓冲区的非空单元数,初值为0。 send(m): begin local i i←1; repeat P(avail[i]); until i=m P(mutex); 把数据m送入缓冲区中某个单元; i←1; repeat V(full[i]); until i=m V(mutex); end receive(m,i): begin P(full[i]); P(mutex); 取出缓冲区中某个单元的数据m V(avail[i]); V(mutex); end 练习1: 假定系统有3个并发进程Read,Process,Print,他们共享缓冲区B1和B2。 进程Read负责从输入设备读信息,每读一条记录,就把他放入缓冲区B1;进程Process从缓冲区B1取出记录,加工后存入缓冲区B2;进程Print则将B2中的记录打印输出。缓冲区B1和B2每次只能存放一个记录。要求三个进程协调完成任务,使打印出来的记录与读入记录的个数和次序完全一样,请使用P,V操作,写出他们的并发程序。 本题中,三进程之间存在同步的关系。设4个私用信号量SR、SP1、SP2、ST。SR是进程Read的私用信号量,表示B1缓冲区中空缓冲单元的个数,初值为1;SP1和SP2是进程Process的私用信号量,SP1表示B1缓冲区中满缓冲单元的个数,初值为0,SP2表示B2缓冲区中空缓冲单元的个数,初值为1;ST是进程Print的私用信号量,表示B2缓冲区中满缓冲单元的个数,初值为0。 Read(): begin local x repeat 接收来自输入设备上的一个记录 x←接收的一个记录 P(SR) B1←x V(SP1) until 进程结束 end Process(): begin local y repeat P(SP1) y=B1 V(SR) 加工y P(SP2) B2=y V(ST) until 进程结束 end Print(): begin local z repeat P(ST) z=B2 V(SP2) 打印z until 进程结束 end 练习2: 有3个并发进程in, outA和outB共享一个缓冲区buf(容量为1)。规定: 进程in负责将读入数据放到buf中。 进程outA仅当在buf中有数据且数据为奇数时,outA才可从buf取数据打印,并使buf为空;进程outB仅当在buf中有数据且数据为偶数时,outB才可从buf取数据打印,并使buf为空; 试用P,V操作实现三个进程可正确执行的并发程序。 提示:这是一个同步问题,可以设3个私用信号量。 练习3: 桌上有一只盘子,只能容纳一个水果,每次只能放入或取出一个水果。现在有许多苹果和橘子。一家四口各行其职:父亲负责取苹果,然后将苹果放入盘中,并重复这两个动作;母亲负责取橘子,然后将橘子放入盘中,并重复这两个动作;一个儿子负责从盘中取橘子,然后吃掉橘子,并重复这两个动作;一个女儿负责从盘中取苹果,然后吃掉苹果。请用P,V操作实现父亲,母亲,儿子和女儿之间同步与互斥关系。

文档评论(0)

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

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

1亿VIP精品文档

相关文档