第六章 并发进程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
“操作系统概论”习题解答之并发进程
第6章习题解答
1、什么叫并发进程?
答:在多道程序设计系统中,作为单个作业可以同时执行,而每一个作业又需要有多个进程的协作来完成。因此,系统会同时存在着许多进程,在单处理器的情况下,这些进程轮流的占用处理器,即一个进程的工作没有全部完成之前,另一个进程就开始工作,我们说这些可同时执行的进程具有并发性,并且把可同时执行的进程称为“并发进程”。
2、临界区是怎样定义?对临界区的管理应符合哪些要求?
答:并发进程中与共享变量有关的程序段称为“临界区”。对若干个并发进程共享某一变量的相关临界区的管理有三点要求:
①、一次至多一个进程能够进入临界区,当有进程在临界区执行时,其它想进入临界区执行的进程必须等待。
②、不能让一个进程无限制的在临界区执行,即任何一个进入临界区的进程必须有限的时间内退出临界区。
③、不能强迫一个进程无限期等待进入它的临界区,即有进程退出临界区时应让一个等待进入临界区的进程进入它的临界区执行。
3、采用PV操作作为同步机制时,假定与某共享变量相关的信号量S的值可在[-1,1]之间,问S的初值是哪个值?当S=-1,S=0,S=l时它们各自的物理含义是什么?
答:S的初值是 1.
S=-l,表示有一个进程在等待进入临界区执行。
S=0,表示已有一个进程在临界区执行,这时若有进程想进入临界区则必须等待。
S=l,表示无进程在临界区执行,若有进程想进入临界区则可以立即进入。
4、A、B两个火车站之间是单轨连接的,现有许多列车同时到A站,需经A站到达B站,列车出B站后又可分路行驶(如图6-6)。为保证行车安全,请问应如何调度列车?请用PV 操作作为工具设计一个能实现你的调度方案的自动调度系统。
答:当A、B两站之间无列车停驶时,可让到达A站的一列车进人A、B站之间行驶。
当A、B站之间有列车在行驶时,则到达A站者必须在站外等待。
当有列车到达B站后,让等在A站外的一列车进入。
用一个信号量S来控制到达A站的列车能否进入A、B站之间的单轨道行驶,S的初始值为l。列车到达A站后,先执行P(S),若无列车在A、B站之间行驶,则执行P(S)后立即进人单轨道行驶,到达B站后,执行V(S),可释放一个等待进入的列车进入行驶。若A、B站之间已有列车在行驶,则执行P(S)后就等待,直到行驶者到了B站执行V(S)后释放一个欲进入者。
5、今有三个进程R、M、P,它们共享一个缓冲区。R负责从输入设备读信息,每次读出一个记录,并把它存放在缓冲区中。M对缓冲区中的记录加工。P把加工后的记录打印输出。读入的记录经加工并取走后,缓冲区中又可存放下一个记录。请用PV操作作为同步机制写出它们并发执行时能正确工作的程序。
答:三个进程共用一个缓冲区,他们必须同步工作,可定义三个信号量:
S1:表示是否可把读人的记录放到缓冲区,初始值为1。
S2:表示是否可对缓冲区中的记录加工,初始值为0。
S3:表示记录是否加工好,可以输出,初始值也为0。
三个进程可如下设计:
begin
S1,S2,S3:semaphore;
S1:=l;S2:=S3:=0;
cobegin
process R
begin
L1:读记录;
P(S1);
记录存入缓冲区;
V(S2);
goto L1;
end;
process M
begin
L2:P(S2);
加工记录;
V(S3);
goto L2;
end;
process P
begin
L3:P(S3);
输出加工后的记录;
V(S1);
goto L3;
end;
coend;
end.
6、现有4个进程R1,R2,W1,W2,它们共享可以存放一个数的缓冲器B。进程R1每次把从磁盘上读入的一个数存到缓冲器B中,供进程W1打印输出。进程R2每次把从键盘上读一个数存到缓冲器B中,供进程W2打印输出。当一个进程把数存放到缓冲器后,在该数还没有被打印输出之前不准任何进程再向缓冲器中存数。当一个进程已把缓冲器中的数打印输出后,在缓冲器中还没有存入一个新数之前不准任何进程加快从缓冲区中取数打印。怎样用PV操作使这四个进程在并发执行时能协调地工作?
答:这四个进程实际上是两个生产者 R1,R2和两个消费者 W1,W2。各自生成不同的
产品供各自的消费对象去消费,他们共享一个的缓冲器。由于缓冲器只能存放一个数,所以,R1和R2在存放数时必须互斥。而R1和W1、R2和W2之间存在同步。为了协调它们的工作可定义三个信号量:
S:表示能否把数存人缓冲器B,初始值为1.
S1:表示R1是否已向缓冲器存入从磁盘上读入的一个数,初始值为0.
S2:表示R2是否已向缓冲器存入从键盘上读入的一个数,初始值为0.
begin
S,S1,S2:semaphore;
S:=1;S1:=S2:=0;
cobegin
process R1
xl :integer
begin
L1:从磁盘读一个数;
x1:=读入的数;
P(S);
B:=xl;
V(S1);
goto L1;
end;
process R2
x2:integer;
begin
L2:从键盘盘读一个数;x2:=读入的数;
P(S);
B:=x2;
V(S2);
goto L2;
end;
process W1
y:integer;
begin
L3:P(S1);
y:=B;
V(S);
打印y中的数;
goto L3;
end;
process W2
z:integer
begin
L4:P(S2);
z:=B;
V(S);