李建伟版实⽤操作系统第⼆版最新习题3进程同步与通信李建伟版实⽤操作系统第⼆版最新习题 3 进程同步与通信
⼀、选择题
题号1 2 3 4 5 6 7 8 9 10
答案A D D C B C A B A A
题号11 12
答案D C
⼆、综合题
1、答:临界资源也称独占资源、互斥资源,它是指某段时间内只充许⼀个进程使⽤的资源。⽐如打印机等硬件资源,以及只能互斥使⽤的变量、表格、队列等软件资源。各个进程中访问临界资源的、必须互斥执⾏的程序代码段称为临界区,各进程中访问同⼀临界资源的程序代码段必须互斥执⾏。
为防⽌两个进程同时进⼊临界区,可采⽤软件解决⽅法或同步机构来协调它们。但是,不论是软件算法还是同步机构都应遵循下述准则:
①空闲让进。②忙则等待。③有限等待。④让权等待。
2、答:忙等待意味着⼀个进程正在等待满⾜⼀个没有闲置处理器的严格循环的条件。因为只有⼀个CPU 为多个进程服务,因此这种等待浪费了CPU 的时钟。
其他类型的等待:与忙等待需要占⽤处理器不同,另外⼀种等待则允许放弃处理器。如进程阻塞⾃⼰并且等待在合适的时间被唤醒。忙等可以采⽤更为有效的办法来避免。例如:执⾏请求(类似于中断)机制以及PV 信号量机制,均可避免“忙等待”现象的发⽣。
3、答:
在⽣产者—消费者问题中,Producer 进程中P(empty)和P(mutex)互换先后次序。先
执⾏P(mutex),假设成功,⽣产者进程获得对缓冲区的访问权,但如果此时缓冲池已满,没有空缓冲区可供其使⽤,后续的P(empty)原语没有通过,Producer 阻塞在信号量empty 上,⽽此时mutex 已被改为0,没有恢复成初值1。切换到消费者进程后,Consumer 进程执⾏P(full)成功,但其执⾏P(mutex)时由于Producer 正在访问缓冲区,所以不成功,阻塞在信号量mutex 上。⽣产者进程和消费者进程两者均⽆法继续执⾏,相互等待对⽅释放资源,会产⽣死锁。
在⽣产者和消费者进程中,V 操作的次序⽆关紧要,不会出现死锁现象。
4、答:
5、答:
设信号量sp ⽤于控制对盘⼦的互斥操作,信号量sg1 ⽤于计数,表⽰盘⼦中的苹果数⽬,信号量sg2 ⽤于计数,表⽰盘⼦中的桔⼦数⽬。
Semaphore sp=1,sg1=0,sg2=0
dad()
{
while(1)
{ prepare an apple;
p(sp);
put an apple on the plate;
v(sg2);}
}
mom()
{
while(1)
{prepare an orange;
p(sp);
put an orange on the plate;
v(sg1);}
}
son()
{
while(1)
{
p(sg1);
take an orange from the plate; v(sp);
eat the orange;
}
}
daughter()
{
while(1)
{
p(sg2);
take an apple from the plate; v(sp);
eat the apple;
}
}
6、答:
本题是⽣产者-消费者问题的⼀个扩展,P1 是⽣产者,⽣产的产品分为两种,P2、P3 是消费者,分别消费这两种产品。
(1)缓冲区是⼀互斥资源,每次只允许⼀个进程进⼊,所以设互斥信号量mutex,其初始值为1。
(2)P1、P2 因为奇数的放置与取⽤⽽同步,设该信号量为odd,初始值为0;P1、P3 因为偶数的放置与取⽤⽽同步,设该信号量为even,初始值为0,P1、P2、P3 因为共享缓冲区,设同步信号量为empty,初始值为N。
semaphore mutex=1,odd=0,even=0,empty=N
main()
cobegin{
Process P1
while(true)
{ number=produce();
P(empty);
P(mutex);
put();
V(mutex);
if number%2==0
V(even);
else
V(odd);
}
Process P2
进程间通信信号while(true)
{ P(odd);
P(mutex);
getodd();
V(mutex);
V(empty);
countodd();
}
Process P3
while(true)
{ P(even);
P(mutex);
geteven();
V(mutex);
V(empty);
counteven();
}
}coend
7、答:
Semaphore max; //初始n+1,表⽰理发店可以容纳的总⼈数Semaphore chair; //初始n,空闲的椅⼦
Semaphore barber; //初始1,表⽰理发椅空闲Semaphore finished; //初始0,表⽰⼀次理发结束Semaphore ready; //初始0,表⽰客⼈准备就绪Customer:
While(1)
{
wait(max);
wait(chair);
wait(barber);
signal(chair);
signal(ready);
… barbered…
wait(finished);
signal(max);
}
Barber:
While(1)
{
wait(ready);
… barbering…
signal(finished);
signal(barber);
}
8、答:
本题是⽣产者-消费者问题的变形。两个⽣产车间为⽣产者进程,分别⽣产A、B 两种配将;装配车间为消费者,把A、B 两种产品组装成产品。F1 和F2 为容量是10 的缓冲池,需互斥访问。
逐⼀分析本题中需要同步和互斥的地⽅,定义信号量及其初值:
(1)mutex1 ⽤于货架F1 的互斥访问,初值为1;
(2)mutex2 ⽤于货架F2 的互斥访问,初值为1;
(3)empty1 和full1 ⽤于⽣产A 零件车间和装配车间之间的同步制约关系。F1 最多
可以放10 个A 零件,所以empty1 为10;开始时F1 中没有A 零件,full1 的初值为0。(4)empty2 和full2 ⽤于⽣产B 零件车间和装配车间之间的同步制约关系。F2 最多
可以放10 个A 零件,所以empty2 为10;开始时F2 中没有B 零件,full2 的初值为0。
A 车间的⼯作过程的伪代码描述为:
while(1){
⽣产⼀个产品A;
P(empty1);
P(mutex1);
将产品A 存放到货架F1 上;
V(mutex1);
V(full1);
}
B 车间的⼯作过程的伪代码描述为:
while(1){
⽣产⼀个产品B;
P(empty2);
P(mutex2);
将产品B 存放到货架F2 上;
V(mutex2);
V(full2);
}
装配车间的⼯作过程伪代码描述为:
while(1){
P(full1);
P(mutex1);
从货架F1 上取⼀个A 产品;
V(mutex1);
V(empty1);
P(full2);
P(mutex2);
从货架F2 上取⼀个B 产品;
V(mutex2);
V(empty2);
将取得的A 产品和B 产品⾃组装成产品;
}
9、答:
本题中中共有三类进程,他相当于机房管理员进程guard,学⽣进程student 和教师进程teacher。相应的信号量和各个进程描述如下:
semaphore computer=2m; /*对应于计算机的资源信号量*/
semaphore student=0; /*对应于欲进⼊机房的学⽣*/
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论