- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)