操作系统习题2(含答案)(2)

2019-08-03 10:22

该资源的并发进程同时进入临界区。 进程间的同步是指:异步环境下的一组并发进程因直接制约相互发送消息而进行相互合作、相互等待,是各进程按一定的速度执行的过程。

7什么是临界区和临界资源?进程进入临界区的调度原则是什么? 答:临界资源——一次仅允许一个进程使用的资源 临界区——在每个进程中访问临界资源的那段程序 一个进程进入临界区的调度原则是:

① 如果有若干进程要求进入空闲的临界区,一次仅允许一个进程进入

② 任何时候,处于临界区内的进程不可多于一个。如已有进程进入自己的临界区,则其他所有试图进入临界区的进程必须等待

③ 进入临界区的进程要在有限的时间内退出,以便让其他进程能及时进入自己的临界区

④ 如果进程不能进入自己的临界区,则应让出cpu,避免进程出现“忙等”现象.

8简述信号量的定义和作用。P,V操作原语是如何定义的?

答:信号量一般是由两个成员组成的数据结构,其中一个成员是整型变量,表示该信号量的值,它与相应资源的使用情况有关;另一个是指向PCB的指针。当多个进程都等待同一信号量时,它们就排成一个队列,由信号量的指针项指出该队列的队首。(2分)

信号量通常可以简单反映出相应资源的使用情况,它与P、V操作原语一起使用可实现进程的同步和互斥。(1分)

P,V操作原语有如下定义。

P(S)顺序执行下述两个动作(1分): ⑴信号量的值减1,即S=S-1; ⑵如果S>=0,则该进程继续执行。

如果S<0,则把该进程的状态置为阻塞态,把相应的PCB连入该信号量队列的末尾,并放弃处理机,进行等待(直到其他进程在S上执行V操作,把它释放出来为止)。

V(S)顺序执行下述两个动作(1分): ⑴S值加1,即S=S+1;

⑵如果S>0,则该进程继续运行;

如果S<=0,则释放信号量队列上的第一个PCB所对应的进程(把阻塞态改为就绪态),执行V操作的进程继续运行。

9什么是线程?它与进程有什么关系?

答:线程是进程中实施调度和分派的基本单位。 线程和进程之间有如下关系:

① 一个进程可以有多个线程,但至少有一个线程;而一个线程只能在一个进程的地址空间内活动。

② 资源分配给进程,同一进程的所有线程共享该进程的所有资源。 ③ 处理机分给线程,即真正在处理机上运行的是线程。

④ 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办

法实现同步。

10什么是管程?它由哪几部分组成?有什么基本特性? 答:一个管程定义了一个数据结构和能为并发进程在其上执行的一组操作,这组操作能同步进程和改变管程中的数据。

一个管程由四个部分组成,它们是管程名称、局部与管程的共享数据的说明、对数据进行操作的一组过程和对该共享数据赋初值的语句。 管程具有以下特性:

① 管程内部的局部数据变量只能被管程内定义的过程所访问,不能被管程外面声明的过程直接访问

② 进程要想进入管程,必须调用管程内的某个过程

③ 一次只能有一个进程在管程内执行,而其余调用该管程的进程都被挂起,等待该管程成为可用的。就是说,管程自身能有效地实现互斥。

综合题

1如下图所示的工作模型中,有三个进程p0,p1,p2和三个缓冲区B0,B1,B2. 进程之间借助于相邻缓冲区进行消息传递:每个进程每次从缓冲区中取一条消息,经加工处理后送入另一个缓冲区中,三个缓冲区分别可存放3,2,2个消息。初始时,仅缓冲区0有一个消息。试用P、V操作写出三个进程之间的同步及互斥流程。 答:这是一个生产者/消费者问题,而且每个进程既是生产者,也是消费者。(2’) 为此,应设置6个信号量:B0S1,B0S2,B1S1,B1S2,B2S1,B2S2,分别代表B0,B1,B2中是否有空缓冲和有数据。

B0S1,B0S2,B1S1,B1S2,B2S2:semaphore;

B0S1=2;B0S2=1;B1S1=2;B1S2=0;B2S1=2;B2S2=0; (2’) Cobegin (`6’=2’*3) P0 P1 P2 begin begin begin P(B0S2) P(B1S2) P(B2S2) 从B0取一个数据 从B1取一个数据 从B2取一个数据 V(B0S2) V(B1S1) V(B2S1) 加工 加工 加工 P(B1S1) P(B2S1) P(B0S1) 将加工结果送B1 将加工结果送B2 将加工结果送B0 V(B1S2) V(B2S2) V(B0S2) end end end coend

这道题也可以增加互斥信号量,以便P0与P1之间互斥使用B0缓冲区,P1与P2之间互斥使用B1缓冲区,P2与P0之间互斥使用B0缓冲区。这里主要描述它们之间的同步关系。若考虑互斥共享缓冲区,请自己加上。

2设用三个队列管理缓冲区池的使用情况,分别为空白缓冲队列em,输入缓冲队列in,以及输出缓冲队列out。过程add_buf(type,numb)和take_buf(type,numb)

分别用来把缓冲区numb插入type队列和从type队列中取出缓冲区numb。试描述进程从任一缓冲队列中得到一个缓冲区的过程get_buf(type,numb)和释放一个缓冲区numb进入缓冲队列的过程put_buf(type,numb)。

答:假定用信号量s代表任一队列的可用缓冲区个数。假定三个队列的初值分别为n1,n2,n3。对任一队列的操作必须互斥。因此再引入一个互斥使用任一队列的信号量mutex,其初值为1。这里type代表队列的类型,它的取值为输入、输出和空白。(4’)

当有进程希望从任一队列取一个缓冲区时,过程get_buf(type,numb)的动作如下: get_buf(type,numb) (`3’) begin p(s) p(mutex) numb=take_buf(type,numb) v(mutex) end

当有进程希望向任一队列送一个缓冲区时,过程put_buf(type,numb)的动作如下: put_buf(type,numb) (`3’) begin p(mutex) add_buf(type,numb) v(mutex) v(s)

end.

3设有一个售票厅,可容纳100人购票。如果厅内不足100人则允许进入,进入后购票,购票后退出。如果厅内已有100人,则在厅外等候。试问: 1)购票者之间是同步还是互斥?

用P、V操作表达购票者的工作过程。 解:1)购票者之间是互斥关系。(2’)

2)一个售票厅可容纳100人购票,说明最多允许100个购票者共享售票厅;可引入一个信号量empty,其初值为100。由于购票者必须互斥地进行购票,故应再设一个mutex,其初值为1。(4’)

用P、V操作表达购票者的工作过程如下:(`4’) empty,mutex:semaphore; empty:=100; mutex:=1; begin p(empty) p(mutex) 进入厅内购票,购票后退出 v(empty) v(mutex) end.

4某招待所有100个床位,住宿者入住要先登记(在登记表上填写姓名和床位

号).离去时要注销登记(在登记表上删去姓名和床位号).请给出住宿登记及注销过程的算法描述.

答:某招待所有100个床位,为了正确管理,引入一个信号量empty代表空床位数,初值为100;住宿者入住要先登记(在登记表上填写姓名和床位号),显然,登记表是一个临界资源,必须互斥访问,引入一个mutex,其初值为1。(4’) 住宿登记及注销过程的算法描述如下: 住宿登记:(`3’) begin p(empty) //检查有无床位 p(mutex) //申请登记 找出一个空床位将名字登入表中 v(mutex) end

注销过程:(`3’) begin p(mutex) //申请退房 找出自己的登记项,并删除该项的登记 v(mutex) v(empty)

end.

5有一个阅览室,共有100个座位。为了很好地利用它,读者进入时必须先在登记表上进行登记。该表表目设有座位号和读者姓名;离开时再将其登记项擦除。 试问:为描述读者的动作,应编写几个程序,应设几个进程、它们之间的关系怎样?并请用P、V操作描述进程之间的同步算法。

解:为了描述阅览室,用一个登记表来记录其使用情况。表中共有100项。每当有读者进入阅览室时,为了正确地登记,各读者应互斥使用(1’)。为此设两个信号量:mutex为互斥信号量,用来制约各读者互斥地进行登记,其初值为1;empty为同步信号量,用来制约各读者能同时进入阅览室的数量,其初值为100 (2’)。 下面用两个过程描述对表格应执行的动作: 登记过程:(`2’) 擦除过程:(`2’) begin begin P(empty) P(mutex) P(mutex) 找到自己的登记项擦除 找到一个登记项登记 V(mutex) V(mutex) V(empty) end end

为了正确地描述读者的动作,可以将读者看成进程。若干读者希望进入阅览室时,调用登记过程,退出阅览室时,调用擦除过程(1’)。 可见,一个程序可对应多个读者。可设的进程数由读者数决定,其动作如下:(`2’) begin 调用登记过程 进入阅览室阅读 准备退出

调用擦除过程 end.

6一条河上架设了由若干个桥墩组成的一座桥。若一个桥墩只能站一个人,过河的人只能沿着桥向前走而不能向后退。过河时,只要对岸无人过,就可以过;但不允许河对岸的两个人同时过,以防止出现死锁。请给出两个方向的人顺利过河的同步算法。

解:假设一座桥由N个桥墩,也即最多允许有N个人同向过河,用一个计数器R记录同时过河的人数(2’)。用S1信号量保护计数器,其初值为1,R的初值为0;互斥使用桥的信号量用S表示,其初值为1。(2’) 同步算法描述如下: procedure goriver() begin L:P(S1); //为同时过河,申请对计数器计数

If R>N begin V(S1); goto L; end //同方向过河的人站满桥墩时,重新申请计数

R=R+1; If R==1 P(S); //申请过河 V(S1); //释放计数器的使用权 (3’) 占有一个桥墩,并顺序过河到对岸; P(S1); R=R-1;

If R==0 V(S); //如果已经无同向的人过河,释放占用权 V(S1); (3’)

end.

7在一个飞机订票系统中,多个用户共享一个数据库。各用户可以同时查询信息,若有一个用户要订票,须更新数据库时,其余所有用户都不可以访问数据库。请用P,V操作设计一个同步算法,实现用户查询与订票功能。要求:当一个用户订票而需要更新数据库时,不能因不断有查询者到来而使其长时间等待。利用信号量机制保证其正常执行。

解:这是典型的读者——写者问题,查询信息的用户是读者,订票用户是写者,并且要求写者优先。(2’) 变量说明:(`2’)

计数变量

rc——正在运行的查询者进程数目,初值为0. 信号量

Sw——控制订票者进程的活动,初值为1. Src——互斥使用rc变量,初值为1.

S——当订票者到达时封锁后续的读进程,初值为1. 读者进程 P(S) P(Src) rc=rc+1


操作系统习题2(含答案)(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:生产区卫生管理制度

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: