2.3 考研真题详解
1下列选项中会导致进程从执行态变为就绪态的事件是( )。[2015年统考]
A.执行P(wait)操作
B.申请内存失败
C.启动I/O设备
D.被高优先级进程抢占
【答案】D
【解析】D项,被高优先级进程抢占,进程会由执行态变为就绪态。ABC三项,程序由于缺少资源而由执行态转为阻塞态。
2下列关于进程和线程的叙述中,正确的是( )。[2012年统考]
A.不管系统是否支持线程,进程都是资源分配的基本单位
B.线程是资源分配的基本单位,进程是调度的基本单位
C.系统级线程和用户级线程的切换都需要内核的支持
D.同一进程中的各个线程拥有各自不同的地址空间
【答案】A
【解析】进程始终是操作系统资源分配的基本单位,线程不能直接被系统分配资源。因此A项是正确的,B项错误,而且线程是调度的基本单位。用户级线程只在用户进程的空间内活动,系统并不能感知到用户级线程的存在,所以用户级线程的切换不需要通过内核。系统级线程的切换是需要内核支持的,因此C项错误。同一进程下的各线程共享进程的地址空间,并共享进程所持有的资源,但线程有自己的栈空间,不与其他线程共享,因此D项错误。
3有两个并发执行的进程P1和P2,共享初值为1的变量x。P1对x加1,P2对x减1。
两个操作完成后,x的值( )。[2011年统考]
A.可能为-1或3
B.只能为1
C.可能为0、1或2
D.可能为-1、0、1或2
【答案】C
【解析】执行①②③④⑤⑥结果为1,执行①②④⑤⑥③结果为2,执行④⑤①②⑨⑥结果为0,结果-1无法得到。这个题目的进程之间没有同步关系,因此通过分步尝试就可以得到答案。有的题目中两个进程会有同步关系,可以画出前趋图,以防推进顺序错误。
4在支持多线程的系统中,进程P创建的若干个线程不能共享的是( )。[2011年统考]
A.进程P的代码段
B.进程P中打开的文件
C.进程P的全局变量
D.进程P中某线程的栈指针
【答案】D
【解析】进程是资源分配的基本单元,进程下的各线程可以并行执行,它们共享进程的资源,包括地址空间、持有资源、相关变量和代码等,但各个线程有自己的栈,这样各线程才能够独立执行程序而不相互干扰,各自的栈指针对其他线程是透明的,因此进程P中某线程的栈指针是不能共享的。
5下列选项中,导致创建新进程的操作是( )。[2010年统考]
Ⅰ.用户登录成功
Ⅱ.设备分配
Ⅲ.启动程序执行
A.仅Ⅰ和Ⅱ
B.仅Ⅱ和Ⅲ
C.仅Ⅰ和Ⅲ
D.Ⅰ、Ⅱ、Ⅲ
【答案】C
【解析】用户登录成功就需要为这个用户创建进程来解释用户的各种命令操作,用户的相应操作都会反映为该用户进程的请求或反馈,便于系统管理;设备分配由相应进程提出申请,内核自动完成,对于设备的操作可以归于提出申请的这个进程,因此不需要创建新进程;启动程序执行,系统需要为这个程序创建一个对应的动态结构,也就是进程,来控制和管理这个程序的运行,可以简单地说启动程序的目的就是创建一个新进程来执行程序。
6下列选项中,降低进程优先权级的合理时机是( )。[2010年统考]
A.进程的时间片用完
B.进程刚完成I/O操作,进入就绪列队
C.进程长期处于就绪列队
D.进程从就绪状态转为运行态
【答案】A
【解析】进行降低优先级的操作主要是为了改善交互式系统的响应时间,并均衡各个作业的公平性。A项进程时间片用完可以降低其优先级;B项中进程刚完成I/O,进入就绪队列后应该等待被处理器调度,故应提高优先级;C项中长期处于就绪队列中的进程应当提高其优先级,避免产生“饥饿”甚至“饿死”现象;D中优先级不应该在此时降低,应该在时间片用完后降低。
7设与某资源相关联的信号量初值为3,当前值为1,若M表示该资源的可用个数,N表示等待该资源的进程数,则M,N分别是( )。[2010年统考]
A.0,1
B.1,0
C.1,2
D.2,0
【答案】B
【解析】题目中信号量初值为3,表示该资源初始时有3个。信号量当前值K>0时,表示此资源还有K个资源可用,题目中信号量当前值为1,表示还有1个可用资源,M应该为1。由于还存在可用资源,所以此时不应存在等待该资源的进程,N应当为0。因此答案选B项。
8某计算机系统中有8台打印机,由K个进程竞争使用,每个进程最多需要3台打印机。该系统可能会发生死锁的K的最小值是( )。[2009年统考]
A.2
B.3
C.4
D.5
【答案】C
【解析】这种题用到组合数学中鸽巢原理的思想,考虑最极端情况,因为每个进程最多需要3台打印机,如果每个进程已经占有了2台打印机,只要还有多的打印机,那么总能满足达到3台的条件,不会产生死锁。所以,将8台打印机分给K个进程,每个进程有2台打印机且无剩余打印机,这个情况就是极端情况,K为4。
93个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区,P1每次用produce()生成一个正整数,并用put()送入缓冲区某一空单元中;P2每次用getodd()从该缓冲区中取出一个奇数,并用countodd()统计奇数个数;P3每次用geteven()从该缓冲区中取出一个偶数,并用counteven()统计偶数个数。请用信号量机制实现这3个进程的同步与互斥活动,并说明所定义的信号量的含义。要求用伪代码描述。[2009年统考]
答:定义信号量odd控制P1与P2之间的同步,初值为0;even控制P1与P3之间的同步,初值为0;empty表示缓冲区中的空单元数,初值为N;mutex控制进程间互斥使用缓冲区,初值为1。程序如下:
semaphore mutex=1;
semaphore odd=0,even=0;
semaphore empty=N;
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();
}
}