操作系统习题2(含答案) 下载本文

1在操作系统中为什么要引入进程概念?

答: 由于多道程序并发执行时共享系统资源,共同决定这些资源的状态,因此系统中各程序在执行过程中就出现了相互制约的新关系,程序的执行出现“走走停停”的新状态。用程序这个静态的概念已不能如实反映程序并发执行过程中的这些特征。为此,人们引入了“进程(Process)”这一概念来描述程序动态执行过程的性质。

进程和程序是两个完全不同的概念。然而,进程与程序之间存在密切关系,进程的功能是通过程序的运行得以实现的,进程活动的主体是程序。进程不能脱离开具体程序而独立存在。

2有人说,一个进程是由伪处理机执行的一个程序,这话对吗?为什么?

答:对。

因为伪处理机的概念只有在执行时才存在,它表示多个进程在单处理机上并发执行的一个调度单位。因此,尽管进程是动态概念,是程序的执行过程,但是,在多个进程并行执行时,仍然只有一个进程占据处理机执行,而其他并发进程则处于就绪或等待状态。这些并发进程就相当于由伪处理机执行的程序。

3试比较进程和程序的区别

答:(1)进程是一个动态的概念,而程序是一个静态的概念,程序是指令的有序集合,无执行含义,进程则强调执行的过程。

(2)进程具有并行特征(独立性、异步性),程序则没有。

(3)不同的进程可以包含同一个程序,同一程序在执行中也可以产生多个进程。

4进程的基本状态有哪些?试描绘进程状态转换图。

答:进程至少有三种基本状态:运行状态、就绪状态和阻塞状态(或等待状态) 。进程状态转换如下图:

运行态

进程调度 所需要的资源未被满足

时间片到 (如等待 I/O)

所需资源得到满足

(如I/O完成) 运行态 运行态

5并发进程间的制约有哪两种?引起制约的原因是什么?

答:并发进程所受的制约有两种:直接制约和间接制约。 直接制约是由并发进程相互共享对方的私有资源所引起的;间接制约是由竞争共有资源而引起的。

6什么是进程间的互斥?什么是进程间同步?

答:进程间的互斥是指:一组并发进程中的一个或多个程序段,因共享某一共有资源而导致它们必须以一个不许交叉执行的单位执行,即不允许两个以上的共享该资源的并发进程同时进入临界区。

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

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) //申请登记 找出一个空床位将名字登入表中