02326操作系统第4章课后思考题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、何谓之与时间有关的错误?举例说明之。

并发进程执行时一定会产生与时间有关的错误吗?为什么。

与时间有关的错误是指两个程序都以各自的速度交叉着运行,同时访问共享信息导致的错误。

比如程序A对共享变量p执行+1操作后,休眠一秒输出变量p,程序B对共享变量p执行减1操作后,休眠一秒输出变量p。

导致的结果就会和想象中的不相同。

并发程序不一定都导致时间相关的错误,我们可以对共享变量加锁来解决这个问题
2、什么是临界区,什么是相关临界区,对相关临界区的使用规则?系统中某些资源一次只允许一个进程使用,则这类资源被称为临界资源,而在进程中访问临界资源的程序被称为临界区。

多个进程涉及到同一个临界资源的临界区被称为相关临界区。

使用规则:(1)只能选择一个进程进入临界区,其他进程必须等待。

(2)不能强迫一个进程无限的等待进入他的临界区
(3)任何一个进程在进入临界区后都要在有限的时间内退出临界区。

3、若使用P、V操作管理某一组相关临界区,其信号量S的值在【-1,1】之间变化,当S=-1,s=0,S=1时,他们各自的物理含义是什么?当S=-1,临界区已满,且有一个进程正在等待
当S=0,临界区已满
当S=1, 临界区为空
4、两个并发执行的进程A和B的程序如下:
进程A:
While(true){
N = N+5;
};
进程B:
While(true){
打印N的值;
N = 0;
};
其中,N为整数,初值为4,若进程A先执行3次循环后,进程A 和进程B又并发执行了一个循环,请写出可能出现的打印值。

答:可能出现的打印值:19,0,24。

因为N初值为4,若进程A先执行了三个循环,此时N的值为19。

当进程A和进程B并发执行时可能会有如下两种执行次序,即进程A先执行一次循环,然后再进程B执行一次循环,此时打印的是正确值24,执行后N中的值为0。

但若进程B先执行一次循环,然后再进程A执行一次循环,则打印的值是19,执行后N中的值是0。

这是错误的,即发生了与时间有关的错误。

用P、操作进行管理,使进程A和B并发时不会出现与时间有关的错误的程序如下:(S为互斥信号量,初值为1),
进程A 进程B
while(1){ while(1){
P(S); P(S);
N=N+5; 打印N的值;
V(S); N=0;
} V(S);
};
5、a,b两点之间有一段单行车道,现在设计一个自动管理系统,管理规则如下:允许同方向的车同时驶入ab段,但另一方向的车必须在ab段外等待,当ab之间无车辆在行驶时,到达a点(或者b点)的车辆可以进入ab段,但不能从a点或者b点同时驶入,当某方向在ab段行驶的车辆驶出了ab段且同方向无车辆进入ab段的时候,应让另一方等待的车辆进入ab段行驶,请编写程序,使用PV操作实现对ab段的正确管理以保证行驶安全。

a() //a点
{
While(true)
{
//准备驶入
P(ab)
P(empty)
//驶出
V(empty)
V(ab)
}
}
b() //b点
{
While(true)
{
//准备驶入
P(ab)
P(empty)
//驶出
V(empty)
V(ab)
}
}
6. 今有三个进程R、M、P,它们共享一个缓冲区B。

R负责从输入设备读信息,每次读出一个记录并把它存放在缓冲区B中:M在缓冲区加工读入的记录;P把加工后的记录打印输出。

输入的记录经加工输出后,缓冲区中又可存放下一个记录。

请用P、V操作为同步机构写出他们并发执行时能正确工作的程序。

答:三个进程共用一个缓冲区B,他们必须同步工作,可定义三个信号量:
S1:表示是否可把读人的记录放到缓冲区,初始值为1.
S2:表示是否可对缓冲区中的记录加工,初始值为0.
S3:表示记录是否加工好,可以输出,初始值也为0.
三个进程可如下设计:
While(1){ //读记录;
P(S1);
记录存入缓冲区;
V(S2);
};
While(1){ //加工记录;
P(S2);;
P(S3)
加工记录;
V(S3);
V(S1);
};
While(1){ //取记录;
P(S3)
输出加工后的记录;
V(S1);
};
7.
要求:当发车时间到,售票员关好车门后,司机才能启动车辆,售票员开始售票;当到站后,司机停车后,售票员才能打开车门,乘客下车,站牌乘客上车。

设置两个信号量:
S1:判断是否到站
S2:判断是否可以离站
司机:售票员:
While(1){ while(1){
正常行驶到站,P(S1);
停车开车门
V(S1); 售票、关车门
P(S2); V(S2);
离开车站};
};
9.
10、设有两个优先级相同的进程P1,P2,如下所示,信号量S1,S2的初值都为0,试问P1,P2并发执行后,X,Y,Z的值各是多少?
进程P1:
Y =1;
Y = y+2;
V(S1);
Z = y+1;
P(s2);
Y = z+y;
进程P2:
X=1;
X = x+1;
P(s1);
X = x+y;
V(s2);
Z = x+z;
x=5,y=7,z=9;
12.
读者的动作有两个,一是填表进入阅览室,这时要考虑阅览室里是否有座位;一是读者阅读完毕,离开阅览室,这时的操作要考虑阅览室里是否有读者。

读者在阅览室读书时,由于没有引起资源的变动,不算动作变化。

算法的信号量有三个:
seats——表示阅览室是否有座位(初值为100,代表阅览室的空座位数);
readers——表示阅览室里的读者数,初值为0;用于互斥的mutex,
初值为1。

读者进入阅览室的动作描述getin:while(TRUE){
P (seats); /*没有座位则离开*/
P(mutex)/*进入临界区*/
填写登记表;
进入阅览室读书;
V(mutex)/*离开临界区*/
V(readers)
}
读者离开阅览室的动作描述getout:while(TRUE){
P(readers)/*阅览室是否有人读书*/ P(mutex)/*进入临界区*/
消掉登记;
离开阅览室;
V(mutex)/*离开临界区*/
V(seats)/*释放一个座位资源*/ };
13.
为了控制两个进程依次使用输入设备进行输入,需分别设置三个信号量S1、S2,其中S1的初值为1,S2初值为0。

使用上述信号量后,两个进程不会同时使用输入设备,故不必再为输入设备设置互斥信号量。

另外,还需设置信号量Sb、Sy、来分别表示数据b是否已经输入,以及y是否已计算完成,它们的初值均为0。

三个进程的动作可描述为:P1:
P(S1);
从输入设备输入数据a;
V(S2);
P(Sb);
x=a+b;
P(Sy);
使用打印机打印出x、y的结果;
P2:
P(S2);
从输入设备输入数据b;
V(Sb);
y=a*b;
V(Sy);
14. 进程间有哪几种通信方式?各有什么特点?各种方式分别适用于那些情况?
解决进程间的大量信息通信的问题有三类方案:共享内存、消息机
制、以及通过共享文件进行通信,及管道通信。

共享内存:在互相通讯的进程之间设有一个公共内存区,一组进程向该公共内存中写,另一组进程从公共内存中读,通过这种方式实现两组进程间的信息交换。

消息机制:是用于进程间通信的高级通信原语之一。

(1) 消息缓冲通信:利用内存中公共消息缓冲区实现进程之间的信息交换。

消息缓冲区是由:消息长度、消息正文、发送者、消息队列指针组成的数据结构。

(2) 信箱通信:为了实现进程间的通信,可以设立一个通信机构——信箱,以发送信件以及接受回答信件为进程间通信的进本方式。

一个信箱的接口可以由信箱说明和信箱体两部分组成。

信箱说明有如下的数据结构:可存信件数,已有信件数。

管道通信:所谓管道,就是连接两个进程之间的一个打开的共享文件,专用于进程之间进行数据通信。

管道通信的基础是文件系统。

相关文档
最新文档