操作系统练习题及答案——第二章 进程控制

计算机操作系统第二章练习题及答案

一、选择题
1 、下列的进程状态变化中,( A )变化是不可能发生的。
A. 等待态→执行态 B. 等待态→就绪态
C. 执行态→等待态 D. 执行态→就绪态
2、用P、V操作管理临界区时,信号量的初值应定义为( B )。
A. -1 B. 1 C. 0 D. 任意值
3、分配到必要的资源并获得处理机时的进程状态是( A )。
A. 执行态 B. 就绪态 C. 阻塞态 D. 撤消态
4、下面对进程的描述中,错误的是( A )。
A. 进程是指令的集合 B. 进程是动态的概念
C. 进程是有生命期的 D. 进程执行需要处理机
5、在操作系统中,进程是一个具有一定独立功能的程序在某个数据集上的一次( A )。
A. 运行过程 B. 等待活动 C. 单独操作 D. 关联操作
6、 P、V操作是( C )。
A. 两组不同的机器指令 B. 两条高级进程通信原语
C. 两条低级进程通信原语 D. 两条系统调用命令
7、用V操作唤醒一个等待进程时,被唤醒进程的状态变为( A )。
A. 就绪态 B. 执行态 C. 等待态 D. 完成态
8、进程的并发执行是指若干个进程( A )。
A. 在执行的时间上是重叠的 B. 共享系统资源
C. 同时执行 D. 在执行的时间上是不可重叠的
9、下面所述步骤中,( D )不是创建进程所必需的。
A. 建立一个进程控制块 B. 为进程分配内存
C. 将进程控制块链入就绪队列 D. 由调度程序为进程分配CPU
10、对于两个并发进程,设互斥信号量为mutex,若mutex=0,则( C )。
A. 表示有一个进程进入临界区,另一个进程等待进入
B. 表示有两个进程进入临界区
C. 表示有一个进程进入临界区 D. 表示没有进程进入临界区
11、进程控制就是对系统中的进程实施有效的管理,通过使用( C )、进程撤消、进程阻塞、进程唤酲等进程控制原语实现。
A. 进程运行 B. 进程同步 C. 进程创建 D. 进程管理
12、若P、V操作的信号量S初值为2,当前值为-1,则表示有( B )等待进程。
A. 3个 B. 1个 C. 2个 D. 0个
13 、一个进程被唤醒意味着( D )。
A. 它的优先权变为最大 B. 其PCB移至阻塞队列队首
C. 该进程重新占有了CPU D. 进程变为就绪状态
14、信箱通信是一种( D )通信方式。
A. 直接通信 B. 低级通信 C. 信号量 D. 间接通信
15、进程的三个基本状态在一定条件下可以相互转化,由运行状态变为阻塞状态的条件是( A )。
A. 等待某事件发生 B. 被进程调度程序选中
C. 等待的某事件已发生 D. 时间片用完 (应是由运行变为就绪)
16、当若干进程调用了P(S)后,有n个进程处于等待信号量S的状态。此后,又有m个进程调用了V(s)后,有多少个进程处于等待信号量的状态( B )。
A. m+n B. m-n C. m D. n
17、一个进程在某一时刻具有( C )。
A. 三种状态 B. 二种状态 C. 一种状态 D. 四种状态
18 、某个信号量S初值为3,当前值为-2,则等待在该信号量上的进程数为( A )个。
A. 2 B. 1 C. 3 D. 4
19、用PV操作管理互斥使用的共享资源时,假定现在有n个进程在等待使用资源,那么,至少有( B )个进程调用P操作。
A. n-1 B. n+1 C. 1 D. n
20、在进程管理中,当( A )时,进程从阻塞状态变为就绪状态。
A. 等待的事件发生 B. 时间片用完
C. 等待某一事件 D. 进程被进程调度程序选中
21、进程和程序的本质区别是( A )。
A. 动态和静态特征 B. 顺序和非顺序执行机器指令
C. 存储在内存和外存 D. 分时使用和独占使用计算计资源
22、进程被创建后即进入( A )排队。
A. 就绪队列 B. 运行队列 C. 缓冲队列 D. 阻塞队列
23、进程从运行状态变为等待的原因可能是( B )。
A. 时间片到 B. 等待输入/输出和事件发生
C. .输入/输出事件完成 D. 某个进程被唤醒
24、正在运行的进程在信号量S上执行P操作之后,当S<0,进程将进入信号量的( C )。
A. 后备队列 B. 提交队列 C. 等待队列 D. 就绪队列
25、系统感知进程的唯一实体是( A )。
A. PCB B. SJT C. FCB D. JCB
26、操作系统通过( D )对进程进行管理。
A. JCB B. DCT C. CHCT D. PCB
27、进程的三个基本状态在一定条件下可以相互转化,进程由就绪状态变为执行状态的条件是( A )
A. 被进程调度程序选中 B. 等待某事件发生
C. 等待的某事件已发生 D. 时间片用完 (应是由运行变为就绪)
28、当对信号量进行V原语操作时( C )。
A. 当S<0,进程继续执行 B. 当S>0,要唤醒一个就绪进程
C. 当S<=0,要唤醒一个等待进程 D. 当S<0,要唤醒一个等待进程
二 填空题
1、系统中各进程之间逻辑上的相互制约关系称为( 同步 ) 。
2、信号量的物理意义是当信号量值大于零时表示( 允许进入临界区 );当信号量值小于零时,其绝对值为 (等待进入临界区的进程数)。
3 、进程在运行过程中有三种基本状态,它们是( 就绪态 )、(运行态)、( 等待态 )

4、进程的基本特征有 (并发性)、( 共享性)、( 动态性 )、( 异步性)。
5、对于信号量可以做( P )操作和( V )操作,( P ) 操作用于阻塞进程,( V ) 操作用于释放进程。程序中的 ( P ) 和 ( V ) 操作应谨慎使用,以保证其使用的正确性,否则执行时可能发生死锁。
6、同步机制应遵循的准则有(空闲让进)、(忙则等待)、(让权等待)、(有限等待)。
7、进程主要由 (程序)、( 数据)、(PCB )、三部分内容组成,其中 ( PCB )是进程存在的惟一标志。而( 程序 )部分也可以为其他进程共享。
8、程序顺序执行时有顺序性、( 封闭性 )和可再现性的特点。
9、有m个进程共享同一临界资源,若使用信号量机制实现对临界资源的互斥访问,则信号量值的变化范围是( -(m-1) ~ 1 )。
三、判断题
1、在单CPU系统中,某一时刻处于运行状态的进程有一个。 √
2、飞机机票系统是分时系统。 ×
3、多道程序的引入,主要是为了提高CPU及其它资源的利用率。 √
4、只有处于就绪状态的进程经调度程序选中后才可进入执行状态。 √
5、程序的并发执行,使程序失去了顺序执行时具有的封闭性和可再现性。 √
6、优先级是进行进程调度的重要依据,一旦确定不能改变。 ×
7、分时系统中,时间片越小,响应时间越长。 ×
8、PCB是进程存在的唯一标志,而程序是系统感知进程存在的唯一实体。 ×
9、在单CPU的系统中,任何时刻处于就绪状态的进程有多个。 ×
10、进程获得处理机而运行是通过调度而实现的。 √
11、进程申请CPU得不到满足时,其状态变为阻塞状态。 ×

四、简答题
1、某系统的进程状态转换图如图所示:
请说明:
(1)引起各种状态转换的典型事件有哪些?
(2)当我们观察系统中某些进程时,能够看到某一进程产生的一次状态转换能引起另一进程作一次状态转换。在什么情况下,当一个进程发生转换3时能立即引起另一个进程发生转换1?
提示:转换1是指进程从就绪态转换为运行态。转换2是指进程从运行态转换为就绪态。转换3是指进程从运行态转换为阻塞态。转换4是指进程从阻塞态转换为就绪态。
解答:
(1) 引起转换1的典型事件:CPU调度
引起转换2的典型事件:时间片用完,或被其他优先级高的进程抢占CPU。
引起转换3的典型事件:等待某种事件的发生。
引起转换4的典型事件:等待的事件已发生。
(2)当状态转换3发生后,若就绪队列非空,则进程调度程序将选出一个就绪进程投入执行,即发生了转换1。
2、在单处理机的分时系统中,分配给进程P的时间片用完后,系统进行切换,结果调度到的仍然是进程P。有可能出现上述情形吗? 如果可能请说明理由。
答:有可能。发生这种情况有2种原因,一是就绪队列为空;二是进程P在就绪队列里优先级最高。

五、应用题
1、如下图所示,有一个计算进程C和一个打印进程Q,它们共享一个单缓冲区buffer,计算进程不断地计算出一个整形数并将它放入缓冲区中,打印进程则负责从单缓冲区中取出每一个结果进行打印,请用信号量来实现它们的同步关系。

解:设两个信号量empty和full;
empty表示缓冲区是否空,empty = 1 表示空, empty = 0表示不空,用于控制进程C是否可以放数据;初值empty = 1;
full表示缓冲区是否满(即是否有数据可取),full = 1 表示满, full = 0表示不满,用于控制进程Q 是否可以q取数据;初值 full = 0。
完整实现过程如下:

Int  empty = 1 ;full = 0 ;   //  定义信号量并赋初值
A( int empty  full) // A进程      Q(int full ,empty )// Q进程
{  while(条件真)                 {  while(条件真)             
	{ 准备数据;                        { P(empty);
	P(empty);                        取数据;
	放数据;                            V(empty);
	V(full)                           输出数据;
	}                                   }
}                                  }
Main( ){ cobegin  C ;Q ;coend }   // 主函数调用两个函数并发执行。

2、苹果桔子问题。如下图所示:父亲Father、儿子San和女儿Daught公用一个盘子Plate,盘子里只能放一个水果。父亲负责削苹果和剥桔子放到盘子里,儿子和女儿从盘子里取水果吃。若水果为苹果,则儿子吃,若水果为桔子,则女儿吃。试用信号量机制实现互斥与同步。

解:分析,找出同步规则:
当盘子Place空时,Father才能放水果,若放的是苹果,应通知儿子,若放的是桔子,则应该通知女儿。
当盘子里是苹果时,进程Son才能取,取走后要通知进程Farher盘子已经空了。
当盘子里是桔子时,进程Daught才能取,取走后要通知进程Farher盘子已经空了。
设三个信号量:empty、apple、orange,
empty表示盘子是否空,用于控制父亲Father进程是否可以放水果, empty=1表示空, empty=0表示不空。初值为empty=1.
apple表示盘子里放的是苹果,用于控制儿子San进程是否可取苹果,初值为0
orange表示盘子里放的是桔子,用于控制女儿Daught进程是否可取桔子,初值为0
实现过程如下:

int  empty = 1,apple=0,orange=0;
Father ( int empty,apple,orange ) //  父亲进程
{  while (条件真)
	{削苹果或剥桔子;
	 P(empty);
	 放水果;
	 if(水果是苹果) V(apple)else  V()orange}}
}
Son ( int empty,apple )    // 儿子进程
    {  while(条件真)
{  P(apple);
取苹果;
V(empty);
吃苹果;
}
}
Daught ( int orange ,empty)    // 女儿进程
    {  while(条件真)
{  P(orange);
取桔子;
V(empty);
吃桔子;
}
}

3.奇偶打印问题:
三个进程R、W1、W2共享一缓冲池B,而B中能存放2个数。R将从输入设备上读入的自然数放到缓冲器B中。若存放的是奇数,则允许W1将其取出打印,如果是偶数,由进程W2取出打印。请利用P、V操作保证三个进程间的同步和互斥。

解:设信号量如下:
用empty表示缓冲区B是否空,empty=1表示B空,empty=0表示B不空;
用add表示B中的数为奇数,初值add=0;
用even表示B中的数为偶数,初值even=0.

 R( int  empty,add,even )
{ while(条件真)
{  读入一个自然数;
               P(empty);
               向B中放入自然数;
               if(x%2!=0)        // 若读入的自然数是奇数
               V(add) ;           // 向W1发信号
               else              // 若读入的自然数是奇数     
               V(even);          // 向W2发信号          
}
       }
void W1(int add,empty)
{   while(条件真)
                {  P(add);
                   取数据;;
                   V(empty);
                   打印数据;
                 }
}
void W2(int even,empty)
{   while(条件真)  
                {  P(even);
                   取数据;
                   V(empty);
                   输出数据;
}
}

4.苹果橘子问题
苹果桔子问题:桌上有一只盘子,每次只能放入一只水果;爸爸专向盘子中放苹果(apple),妈妈专向盘子中放桔子(orange),儿子专等吃盘子中的桔子,女儿专等吃盘子里的苹果。请用PV操作和信号量来描述四者的同步动作。

解:设信号量。需要4个信号量:
互斥信号量 mutex 初值为1,用于实现爸爸妈妈向盘子中互斥地放水果;
信号量empty表示盘子是否空,empty=1表示空,empty=0表示不空;
信号量apple表示盘子中的水果是否为苹果,apple=1表示是,apple=0表示不是;
信号量orange表示盘子中的水果是否为桔子,orange=1表示是,orange=0表示不是;

Int mutex=1,empty=1,full=0,apple=0,orange=0; //定义信号量并赋初值

Void Father( int mutex,empty,apple)  //爸爸进程
{  While(条件真)
{   P(empty);          //果盘是否为空。
P(mutex);          //是否有其他的人正在使用果盘.
放苹果;
V(mutex);          //释放盘子
P(orange);         //通知儿子可以取苹果了。
}
}
Void Mother( int mutex,empty,orange   )  //妈妈进程
{   While(条件真)
{   P(empty);      //果盘是否为空。
P(mutex);      //是否有其他的人正在使用果盘.
放橘子;
V(mutex);    
P(full2) ;    //通知女儿可以取桔子了。
}
}
Void Son( int apple,mutex,empty )     //儿子进程
{   While(条件真)
{   P(apple) ;     //盘子中是否是苹果
P(mutex);    //是否有其他人在使用盘子。
取苹果;
V(mutex);
P(empty) ;      // 通知爸爸可以放苹果了。
吃苹果;
}
}

void Daughter( int orange,mutex,empty)  //女儿进程
{   While(条件真)
{   P(orange);
P(mutex);
取橘子;
V(mutex)
P(empty)
}
}
main( )   // 主函数
   {  cobegin  
Father;
Mother;
San;
Daught;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章