1.在单处理机系统中,可并行的是( )。[2009年统考]
I. 进程与进程
II. 处理机与设备 Ⅲ.处理机与通道 IV. 设备与设备
A.I 、IⅡ 和I
B.I 、I 和IV C.I 、 和 IV D.IⅡ 、Ⅲ和 IV
【答案】D
【解析】单处理机即只有一个处理机(此处不包含多核的情况),某时刻处理机只能执行一个进程,所以进程 与进程之间不能并行执行。处理机、通道、设备都能并行执行,比如同时打印(设备)、计算(处理机)、传输数据 (通道控制内存与外存间数据交换)。换个角度来想,进程的执行必须要依赖处理机,而一个处理机同时只能处理 一个进程,所以单处理机系统中进程就不可以并行;而其他选项依赖的是不同部件,因此可以并行。明确一个概 念,即使是采用了多道程序设计技术的系统,只要是单处理机,进程就不可以并行,而只是并发。因此如果题目 改成"采用多道程序设计技术的单处理机系统",答案依然不变。
2.举例说明为什么操作系统起到了扩展机器的作用?[北大2004年研]
答:把真实的硬件情况在程序员面前隐藏起来,而表现为一组友好的、简单的、可以被读/写的命名文件的 程序就是操作系统。就如同隐藏磁盘硬件,表现为一个简单的面向文件的接口一样,操作系统还隐藏了很多令人 厌烦的中断、定时器、内存管理以及其他一些底层特性。在这种情况下,操作系统所提供的对硬件的抽象更简单, 更容易使用。例如,对于最基本的命令read 与write, 每 个read 及 write 命令都需要13个参数,这些参数被组合 在一个9字节的数据中。这些参数给出了需要读的磁盘块的地址、每磁道的扇区数、物理介质上所使用的记录模 式、扇区间的间隔以及遇到数据删除标志时需要做些什么。当操作完成的时候,控制芯片会返回23个状态以及 错误码,它们会被组合到7个字节长的数据中。不仅如此,编写软盘驱动程序的程序员还必须随时留意驱动器的 电动机是开着的还是关着的。如果电动机是关着的,在读/写数据前,它必须被打开(伴随很长一段启动延时)。
电动机也不能长时间开着,否则会使软磁盘因磨损过度而损坏。这就要求程序员必须在长启动延时及磁盘磨损度 (磨损会使磁盘上的数据丢失)之间寻找一种平衡。这对程序员来说是非常困难的。程序员所想要的,是一种简单 的、高级的抽象。对于这一问题,一个典型的抽象就是磁盘上包含一组已被命名的文件,每一个文件都可能被打 开来写或读,最后,文件会被关闭。诸如记录信息是否需要调整频率、电动机的当前状态等细节问题在这一抽象 中就不会再出现在用户的面前。
在这种观点中,操作系统的功能在用户面前就等同于是一台扩展了的机器或者说是虚拟的机器,它使得在硬 件上面的编程更加容易。
2
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。
|------------|---------------|------------|---|
| //加1操作 | | //减1操作 | |
| load R1,x | ①//取x 到寄存器R1中 | load R2,x | ④ |
| inc R1 | ② | dec R2 | ⑤ |
| store x,R1 | ③//将R1 的内容存入x | store x,R2 | ⑥ |
两个操作完成后,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年统考]
I. 用户登录成功 Ⅱ .设备分配
IⅢ . 启动程序执行
A. 仅 I 和Ⅱ B. 仅Ⅱ和Ⅲ C. 仅 I 和Ⅲ
D.I 、I 、III
【答案】C
【解析】用户登录成功就需要为这个用户创建进程来解释用户的各种命令操作,用户的相应操作都会反映为 该用户进程的请求或反馈,便于系统管理;设备分配由相应进程提出申请,内核自动完成,对于设备的操作可以 归于提出申请的这个进程,因此不需要创建新进程;启动程序执行,系统需要为这个程序创建一个对应的动态结 构,也就是进程,来控制和管理这个程序的运行,可以简单地说启动程序的目的就是创建一个新进程来执行程序。
6.下列选项中,降低进程优先权级的合理时机是( )。[2010年统考]
A. 进程的时间片用完
B. 进程刚完成I/O 操作,进入就绪列队
C. 进程长期处于就绪列队
D. 进程从就绪状态转为运行态
【答案】A
【解析】进行降低优先级的操作主要是为了改善交互式系统的响应时间,并均衡各个作业的公平性。A 项进 程时间片用完可以降低其优先级;B 项中进程刚完成I/O, 进入就绪队列后应该等待被处理器调度,故应提高优 先 级 ;C 项中长期处于就绪队列中的进程应当提高其优先级,避免产生"饥饿"甚至"饿死"现象;D 中优先级
不应该在此时降低,应该在时间片用完后降低。
- 设与某资源相关联的信号量初值为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台打印机,由K 个进程竞争使用,每个进程最多需要3台打印机。该系统可能会发 生死锁的K 的最小值是( )。 [2009年统考]
A.2 B.3 C.4 D.5
【答案】C
【解析】这种题用到组合数学中鸽巢原理的思想,考虑最极端情况,因为每个进程最多需要3台打印机,如 果每个进程已经占有了2台打印机,只要
cpp
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();
}
}
还有多的打印机,那么总能满足达到3台的条件,不会产生死锁。所以, 将8台打印机分给K 个进程,每个进程有2台打印机且无剩余打印机,这个情况就是极端情况,K 为4。
9 . 3个进程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。程序如下: