习题5答案word文档良心出品Word文档格式.docx

上传人:b****5 文档编号:18785804 上传时间:2023-01-01 格式:DOCX 页数:11 大小:35.02KB
下载 相关 举报
习题5答案word文档良心出品Word文档格式.docx_第1页
第1页 / 共11页
习题5答案word文档良心出品Word文档格式.docx_第2页
第2页 / 共11页
习题5答案word文档良心出品Word文档格式.docx_第3页
第3页 / 共11页
习题5答案word文档良心出品Word文档格式.docx_第4页
第4页 / 共11页
习题5答案word文档良心出品Word文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

习题5答案word文档良心出品Word文档格式.docx

《习题5答案word文档良心出品Word文档格式.docx》由会员分享,可在线阅读,更多相关《习题5答案word文档良心出品Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

习题5答案word文档良心出品Word文档格式.docx

d.让权等待.

5.8试从物理概念上说明信号量P、V操作的含义。

P(S)表示申请一个资源,S.value>

0表示有资源可用,其值为资源的数目;

S.value=0表示无资源可用;

S.value<

0,则|S.value|表示S等待队列中的进程个数。

V(S)表示释放一个资源,信号量的初值应该大于等于0。

5.9由V操作唤醒的进程是否一定能够直接进入运行状态?

否。

一般来说,唤醒是将进程状态由等待状态变成就绪状态,而就绪进程何时获得处理机则是由系统的处理机调度策略确定的。

如果采用抢占式优先级调度算法,并且被唤醒的进程是当前系统中优先级最高的进程,那么该进程将被调度执行,其状态变成运行态。

如果该进程不是系统中优先级最高的进程或系统采用其它调度算法,那么该进程不会被调度执行,其状态将维持在就绪态。

5.10我们为某临界区设置一把锁W,当W=1时,表示关锁;

W=0时,表示锁打开。

试写出开锁原语和关锁原语,并利用它们去实现互斥。

开锁原语:

voidunlock(W)

{W=0;

}

关锁原语:

voidlock(W)

{while(W==1){};

W=1;

}

利用开关锁原语实现互斥:

semaphoreW=0;

main()

{cobegin

Pn()/*并发的进程P1、P2、……Pn*/

{lock(W);

临界区;

unlock(W);

其余部分;

}

……

coend}

5.11试写出相应的程序来描述图5.8所示的前趋图。

(a)设6个同步信号量f1、f2、f3、f4、f5、f6分别表示进程S1、S2、S3、S4、S5、S6是否执行完成,其初值均为0。

这7个进程的同步描述如下:

主程序如下:

semaphorefl=f2=f3=f4=f5=f6=0;

S1();

S2();

S3();

S4();

S5();

S6();

S7();

各个进程的语句形式如下:

voidS1()

{

V(f1);

voidS2()

P(f1);

V(f2);

voidS3()

V(f3);

voidS4()

P(f2);

V(f4);

voidS5()

V(f5);

voidS6()

P(f3);

V(f6);

voidS7()

P(f4);

P(f5);

P(f6);

……}

(b)另一种做法:

设7个同步信号量f2、f3、f4、f5、f6、f7、f8分别表示进程S2、S3、S4、S5、S6、S7、S8是否可以开始执行,其初值均为0。

semaphoref2=f3=f4=f5=f6=f7=f8=0;

主程序:

略(类似a)

这8个进程的语句形式如下:

V(f7);

V(f8);

P(f7);

voidS8()

P(f8);

5.12在生产者一消费者问题中,如果缺少了V(full)或V(empty),对执行结果会有何影响?

生产者可以不断地往缓冲池送消息,如果缓冲池满,会覆盖原有数据,造成数据混乱。

而消费者始终因P(full)操作将消费进程直接送入进程链表进行等待,无法访问缓冲池,造成无限等待。

5.13在生产者一消费者问题中,如果将两个P操作即P(full)和P(mutex)互换位置;

或者是将V(full)和V(mutex)互换位置,结果会如何?

a.容易造成死锁。

b.从逻辑上来说应该是一样的。

5.14画图说明管程由哪几部分组成?

为什么要引入条件变量?

图略。

因为调用wait原语后,使进程等待的原因有多种,为了区别它们,引入了条件变量。

5.15设S1和S2为两个信号灯变量,下列八组P、V操作哪些可以同时进行?

哪些不能同时进行?

为什么?

(1)P(S1),P(S2)

(2)P(S1),V(S2)

(3)V(S1),P(S2)(4)V(S1),V(S2)

(5)P(S1),P(S1)(6)P(S2),V(S2)

(7)V(S1),P(S1)(8)V(S2),V(S2)

能同时进行的包括:

(1)、

(2)、(3)、(4)。

这些操作涉及不同信号量,属于关于不同组共享变量的临界区。

不能同时进行的包括:

(5)、(6)、(7)、(8)。

这些操作涉及相同的信号量,属于关于同一组共享变量的临界区。

5.16对于生产者—消费者问题,假设缓冲区是无界的,试用信号灯与PV操作给出解法。

由于是无界缓冲区,所以生产者不会因得不到缓冲区而被阻塞,不需要对空缓冲区进行管理,可以去掉在有界缓冲区中用来管理空缓冲区的信号量及其PV操作。

Semaphoremutex_in=1;

Semaphoremutex_out=1;

Semaphoreempty=0;

intin=0,out=0;

生产者活动:

while

(1){

producenextproduct;

P(mutex_in);

Addtheproducttobuffer[in];

in++;

V(mutex_in);

V(empty);

消费者活动:

P(empty);

P(mutex_out);

Taketheproductfrombuffer[out];

out++;

V(mutex_out);

5.17试用信号灯与PV操作实现司机与售票员之间的同步问题。

设公共汽车上有一个司机和一个售票员,其活动如下图所示.

司机的活动P1:

While

(1)

{启动车辆;

正常行车;

到站停车;

售票员的活动P2:

{关车门;

售票;

开车门;

为了安全起见,显然要求:

(1)关车门后方能启动车辆;

(2)到站停车后方能开车门。

定义两个信号量,一个信号量start表示是否允许司机启动车辆,另一个信号量open表示是否允许售票员开车门。

初始状态是车停在始发站,车门开着,等待乘客上车。

因此,两个信号量的初值都是0。

semaphorestart=0;

semaphoreopen=0;

司机的活动P1:

while

(1)

{P(start);

启动车辆;

正常行车;

到站停车;

V(open);

售票员的活动P2:

while

(1)

{关车门;

V(start);

售票;

P(open);

开车门;

5.18考虑一个理发店,只有一个理发师,只有N张可供顾客等待理发的椅子,如果没有顾客,则理发师睡觉;

如果有一顾客进入理发店发现理发师在睡觉,则把他叫醒,试用信号量设计一个协调理发师和顾客的程序。

题目中要求描述理发师和顾客的行为,因此需要两类进程Barber()和Customer()分别描述理发师和顾客的行为。

当理发师睡觉时顾客进来需要唤醒理发师为其理发,当有顾客时理发师为其理发,没有的时候理发师睡觉,因此理发师和顾客之间是同步的关系,由于每次理发师只能为一个人理发,且可供等侯的椅子有限只有n个,即理发师和椅子是临界资源,所以顾客之间是互斥的关系。

引入3个信号量和一个控制变量:

1)控制变量waiting记录等候理发的顾客数,初值均为0;

2)信号量customers记录等候理发的顾客数,并用作阻塞理发师进程,初值为0;

3)信号量barbers记录正在等候顾客的理发师数,并用作阻塞顾客进程,初值为0;

4)信号量mutex用于互斥,初值为1.

PV操作代码如下:

intwaiting=0;

//等候理发的顾客数

intchairs=n;

//为顾客准备的椅子数

semaphorecustomers=0,barbers=0,mutex=1;

barber()

{

while(TRUE);

//理完一人,还有顾客吗?

P(cutomers);

//若无顾客,理发师睡眠

P(mutex);

//进程互斥

waiting=waiting-1;

//等候顾客数少一个

V(barbers);

//理发师去为一个顾客理发

V(mutex);

//开放临界区

cut-hair();

//正在理发

customer()

{

P(mutex);

//进程互斥

if(waiting<

chairs)

{waiting=waiting+1;

//等候顾客数加1

V(customers);

//必要的话唤醒理发师

V(mutex);

P(barbers);

//无理发师,顾客坐着养神

get-haircut();

//一个顾客坐下理发/

}

else

//人满了,走吧!

5.19进程之间有哪些基本的通信方式?

它们分别有什么特点?

适用于哪些场合?

进程通信根据交换信息量的多少分为高级通信和低级通信。

低级通信一般只传送一个或几个字节的信息,以达到控制进程执行速度的作用(如PV操作);

高级通信则要传送大量数据,目的不是为了控制进程的执行速度,而是为了交换信息。

高级进程通信方式有很多种,大致可归并为三类:

共享存储器、管道文件和消息传递。

共享存储器:

在内存种分配一片空间作为共享存储区。

需要进行通信的进程把它附加到自己的地址空间中,不需要时则把它取消。

管道文件:

它是连接两个命令的一个打开文件。

一个命令向该文件中写入数据,为写者;

另一个命令从该文件中读出数据,为读者。

消息传递:

它以消息为单位在进程间进行数据交换。

5.20试比较进程间的低级通信工具与高级通信工具。

用户用低级通信工具实现进程通信很不方便,因为其效率低,通信对用户不透明,所有的操作都必须由程序员来实现。

而高级通信工具则可弥补这些缺陷,用户可直接利用操作系统所提供的一组通信命令,高效地传送大量的数据。

5.21试用信箱通信方式解决生产者-消费者问题。

在本题解决方案中,使用了两个信箱mayproduce和mayconsume,两个信箱的大小均为N,即其中最多可以存放N条消息。

当生产者生产了数据时,它将数据作为消息发送到信箱mayconsume,只要该信箱中有一条消息,消费者就可以开始消费。

信箱mayproduce最初填满了空消息,空消息的条数等于信箱的容量与mayconsume信箱中消息条数之差(其作用类似于用信号量机制解决生产者一消费者问题中的empty)。

当生产者向消费者发送一条消息时,mayproduce信箱中的消息条数减少,mayconsume信箱中的消息条数增加;

当消费者接收一条消息时,mayconsume信箱中的消息条数减少,而mayproduce信箱中的消息条数增加。

系统中的消息总条数保持不变。

constintcapacity=N;

/*N为信箱容量*/

null=...;

/*这里“...”为空消息*/

inti;

main()/*主程序*/

create_mailbox(mayproduce);

/*创建信箱mayproduce*/

create_mailbox(mayconsume);

for(i=1;

i<

=capacity;

i++)

send(mayproduce,null);

cobegin

producer();

consumer();

coend

}

producer()/*生产者进程*/

messagepmsg;

/*message为消息类型*/

while(true)

receive(mayproduce,pmsg);

/*等待空消息*/

pmsg=produce();

/*生产一条消息*/

send(mayconsume,pmsg);

consumer()/*消费者进程*/

messagecmsg;

receive(mayconsume,cmsg);

consume(cmsg);

/*取出一条消息供消费*/

5.22在消息传递通信方式下:

(1)发送进程和接收进程在通信过程中可以采用哪3种同步方式?

(2)试以下面给出的发送进程和接收进程(将接收到的数据存入S)为例,说明当接收进程执行到标号为L2的语句时,采用这3种同步方式,X的值可能各是多少?

发送进程P:

M=10;

L1:

sendMTOQ;

L2:

M=20;

GotoLl;

接收进程Q:

S=-100;

receiveSfromP;

X=S+1;

(1)发送进程阻塞,接收进程阻塞。

发送进程不阻塞,接收进程阻塞。

发送进程不阻塞,接收进程也不阻塞。

(2)在第1种同步方式下,无论进程P还是Q都必须等到对方执行完标号为L1的语句后才可往下执行,S的值一定为M的初值10,所以X只能为11。

在第2种同步方式下,如果进程P先执行到标号为L1的语句,由于无需阻塞,仍可往下执行,而进程Q在执行到标号为L1的语句时,可能进程P尚未来得及向Q发出第2条消息,也可能进程P已经向Q发出了多条消息。

在前一种情况下,S的值为10;

在后一种情况下,S的值为20,故X的值可能为11或21。

在第3种同步方式下,如果进程P先执行到标号为L1的语句,由于无需阻塞,仍可往下执行,而进程Q在执行到标号为L1的语句时,可能进程P尚未来得及向Q发出第1条消息,也可能进程P已经向Q发出了一条或多条消息。

在前一种情况下,S的值为—100;

在中间一种情况下,S的值为10;

在后一种情况下,S的值为20。

故X的值可能为-99、11或21。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1