2.1.7 本节小结

2026 旧版 · 非 2027 主源 · 原书检索 · 文字用于定位,公式与图表请回原页核验 · 本次导入快照

63.【2014 统考真题】一个进程的读磁盘操作完成后,操作系统针对该进程必做的是( )。

A. 修改进程状态为就绪态
B. 降低进程优先级
C. 给进程分配用户内存空间
D. 增加进程时间片大小

64.【2014 统考真题】下列关于管道(Pipe)通信的叙述中,正确的是( )。

A. 一个管道可实现双向数据传输
B. 管道的容量仅受磁盘容量大小限制
C. 进程对管道进行读操作和写操作都可能被阻塞
D. 一个管道只能有一个读进程或一个写进程对其操作

65.【2015 统考真题】下列选项中,会导致进程从执行态变为就绪态的事件是( )。

A. 执行 P(wait)操作
B. 申请内存失败
C. 启动 I/O 设备
D. 被高优先级进程抢占

66.【2018 统考真题】下列选项中,可能导致当前进程 P 阻塞的事件是( )。

I. 进程 P 申请临界资源
II. 进程 P 从磁盘读数据
III. 系统将 CPU 分配给高优先权的进程

A. 仅 I
B. 仅 II
C. 仅 I、II
D. I、II、III

67.【2019 统考真题】下列选项中,可能将进程唤醒的事件是( )。

I. I/O 结束
II. 某进程退出临界区
III. 当前进程的时间片用完

A. 仅 I
B. 仅 III
C. 仅 I、II
D. I、II、III

68.【2019 统考真题】下列关于线程的描述中,错误的是( )。

A. 内核级线程的调度由操作系统完成
B. 操作系统为每个用户级线程建立一个线程控制块
C. 用户级线程间的切换比内核级线程间的切换效率高
D. 用户级线程可以在不支持内核级线程的操作系统上实现

69.【2020 统考真题】下列关于父进程与子进程的叙述中,错误的是( )。

A. 父进程与子进程可以并发执行


<!-- page: 67 -->

B. 父进程与子进程共享虚拟地址空间
C. 父进程与子进程有不同的进程控制块
D. 父进程与子进程不能同时使用同一临界资源

70. 【2021 统考真题】下列操作中,操作系统在创建新进程时,必须完成的是( )。

I. 申请空白的进程控制块
II. 初始化进程控制块
III. 设置进程状态为执行态

A. 仅 I
B. 仅 I、II
C. 仅 I、III
D. 仅 II、III

71. 【2022 统考真题】下列事件或操作中,可能导致进程 P 由执行态变为阻塞态的是( )。

I. 进程 P 读文件
II. 进程 P 的时间片用完
III. 进程 P 申请外设
IV. 进程 P 执行信号量的 wait() 操作

A. 仅 I、IV
B. 仅 II、III
C. 仅 III、IV
D. 仅 I、III、IV

72. 【2023 统考真题】下列操作完成时,导致 CPU 从内核态转为用户态的是( )。

A. 阻塞进程
B. 执行 CPU 调度
C. 唤醒进程
D. 执行系统调用

73. 【2023 统考真题】下列由当前线程引起的事件或执行的操作中,可能导致该线程由执行态变为就绪态的是( )。

A. 键盘输入
B. 缺页异常
C. 主动出让 CPU
D. 执行信号量的 wait() 操作

74. 【2024 统考真题】下列选项中,操作系统在终止进程时不一定执行的是( )。

A. 终止子进程
B. 回收进程占用的设备
C. 释放进程控制块
D. 回收为进程分配的内存

75. 【2024 统考真题】若进程 P 中的线程 T 先打开文件,得到文件描述符 fd,再创建两个线程 Ta 和 Tb,则在下列资源中,Ta 与 Tb 可共享的是( )。

I. 进程 P 的地址空间
II. 线程 T 的线
III. 文件描述符 fd

A. 仅 I
B. 仅 I、III
C. 仅 II、III
D. I、II、III

## 二、综合应用题

01. 为何进程之间的通信必须借助于操作系统内核功能?简单说明进程通信的几种主要方式。
02. 什么是多线程?多线程与多任务有什么区别?
03. 回答下列问题:

1)若系统中没有运行进程,是否一定没有就绪进程?为什么?
2)若系统中既没有运行进程,又没有就绪进程,系统中是否就没有进程?为什么?
3)在采用优先级进程调度时,运行进程是否一定是系统中优先级最高的进程?

04. 某分时系统中的进程可能出现如下图所示的状态变化,请回答下列问题:

1)根据图示,该系统应采用什么进程调度策略?
2)将图中每个状态变化的可能原因填写在下表中。


[tbl-1.md](tbl-1.md)


<!-- page: 68 -->

## 2.1.9 答案与解析

### 一、单项选择题

#### 01. C

进程映像是PCB、程序段和数据的组合,其中PCB是进程存在的唯一标志。

#### 02. C

每个进程包含独立的地址空间,进程各自的地址空间是私有的,只能执行自己地址空间中的程序,且只能访问自己地址空间中的数据,相互访问会导致指针的越界错误(学完内存管理将有更好的认识)。因此,进程之间不能直接交换数据,但可利用操作系统提供的共享文件、消息传递、共享存储区等进行通信。

#### 03. A

动态性是进程最重要的特性,以此来区分文件形式的静态程序。操作系统引入进程的概念,是为了从变化的角度动态地分析和研究程序的执行。

#### 04. A

进程是一个独立的运行单位,也是操作系统进行资源分配和调度的基本单位,它包括PCB、程序和数据以及执行栈区,仅仅说进程是在多程序环境下的完整程序是不合适的,因为程序是静态的,它以文件形式存放在计算机的硬盘内,而进程是动态的。

#### 05. D

并发进程可能因等待资源或因被抢占CPU而暂停运行,其生命周期是不连续的。执行速度会影响进程之间的执行顺序和内存冲突问题,从而导致不同的操作结果。并发进程之间存在相互竞争和制约,导致每次运行可能得到不同的结果,选项D正确。

#### 06. A

选项B错在优先级分静态和动态两种,动态优先级是根据运行情况而随时调整的。选项C错在系统发生死锁时有可能进程全部都处于阻塞态,CPU空闲。选项D错在进程申请处理器得不到满足时就处于就绪态,等待处理器的调度。

#### 07. C

并发进程执行的相对速度与进程调度策略有关,因为进程调度策略决定了哪些进程可以获得处理机,以及获得处理机的时间长短,从而影响进程执行的速度和效率。

#### 08. C

进程创建原语的执行过程:申请空白PCB,并为新进程申请一个唯一的数字标识符。为新进程分配资源,包括内存、I/O设备等。初始化PCB,将新进程插入就绪队列。从上述过程可以看出,为进程分配CPU不是由进程创建原语完成的,而是由进程调度实现的。

#### 09. B

一个进程可以顺序地执行一个或多个程序,只要在执行过程中改变其CPU状态和内存空间即可,但不能同时执行多个程序,选项B错误,选项A正确。一个程序可以对应多个进程,即多个进程可以执行同一个程序。例如,同一个文本编辑器可以被多个用户或多个窗口同时运行,每次运行都形成一个新进程。一个程序在执行过程中也可产生多个进程。例如,一个程序可以通过系统调用fork()或create()来创建子进程,从而实现并发处理或分布式计算。选项C和D正确。

#### 10. D

用户登录时,操作系统会为用户创建一个登录进程,用于验证用户身份和提供用户界面。高级调度即作业调度,会从后备队列上选择一个作业调入内存,并为之创建相应的进程。操作系统


<!-- page: 69 -->

响应用户提出的请求时,通常会为用户创建一个子进程,用于执行用户指定的任务或程序。用户打开一个浏览器程序时,也是一种操作系统响应用户请求的情况,同样会创建一个新进程。

11. B

在进程的整个生命周期中,系统总是通过其PCB对进程进行控制。也就是说,系统是根据进程的PCB而非任何其他因素来感知到进程存在的,PCB是进程存在的唯一标志。同时PCB常驻内存。A和D选项的内容都包含在进程PCB中。

12. C

一个进程的状态变化可能引起另一个进程的状态变化。例如,一个进程时间片用完,可能引起另一个就绪进程的运行。同时,一个进程的状态变化也可能不会引起另一个进程的状态变化。例如,一个进程由阻塞态转变为就绪态就不会引起其他进程的状态变化。

13. C

在单处理器系统中,不可能出现10个进程都处于就绪态的情况。但9个进程处于就绪态、1个进程处于运行态是可能的。此外还要想到,可能10个进程都处于阻塞态。

14. C

由于打印机是独占资源,当一个进程释放打印机后,另一个等待打印机的进程就可能从阻塞态转到就绪态。当然,也存在一个进程执行完毕后由运行态转为终止态时释放打印机的情况,但这并不是由于释放打印机引起的,相反是因为运行完成才释放了打印机。

15. D

I/O 操作完成之前进程在等待结果,状态为阻塞态;完成后进程等待事件就绪,变为就绪态。

16. C

只有就绪态可以既由运行态转变过去又能由阻塞态转变过去。时间片到,运行态变为就绪态;当所需要资源到达时,进程由阻塞态转变为就绪态。

17. B

分时系统中处于就绪态的进程最多,这些进程都在争夺CPU的使用权,而CPU的数量是有限的。处于运行态的进程只能有一个或少数几个。处于阻塞态的进程也不会太多,阻塞事件的发生频率不会太高。处于终止态的进程也不多,这些进程已释放资源,不再占用内存空间。

18. D

程序封闭性是指进程执行的结果只取决于进程本身,不受外界影响。也就是说,进程在执行过程中不管是不停顿地执行,还是走走停停,进程的执行速度都不会改变它的执行结果。失去封闭性后,不同速度下的执行结果不同。

19. B

进程有它的生命周期,不会一直存在于系统中,也不一定需要用户显式地撤销。进程在时间片结束时只是就绪,而不是撤销。阻塞和唤醒是进程生存期的中间状态。进程可在完成时撤销,或在出现内存错误等时撤销。

20. D

选项A和B都说得太绝对,进程之间可能具有相关性,也可能是相互独立的。选项C错在“同时”。

21. B

虽然父进程创建了子进程,它们有一定的关系,但仍然是两个不同的进程,拥有各自的PID,选项A错误。父进程和子进程是相互独立的,两个进程能并发执行,且互不影响,选项B正确,选项D错误。撤销一个进程并不一定会导致另一个进程也被撤销,父进程撤销后,子进程可能有两种状态:①子进程一并被终止;②子进程成为孤儿进程,被init进程领养。子进程撤销不会导


<!-- page: 70 -->

致父进程撤销,C错误。

22. B、D、D、C、B、A

C语言编写的程序在使用内存时一般分为三个段:正文段(代码和赋值数据段)、数据堆段和数据栈段。二进制代码和常量存放在正文段,动态分配的存储区存放在数据堆段,临时使用的变量存放在数据栈段。由此,我们可以确定全局赋值变量在正文段赋值数据段,未赋值的局部变量和实参传递在栈段,动态内存分配在堆段,常量在正文段,进程的优先级只能在PCB内。

23. A

进程是程序的一次执行过程,它不仅包括程序的代码,还包括程序的数据和状态。同一个程序经过多次创建,运行在不同的数据集上,会形成不同的进程,它们之间没有必然的联系。

24. D

进程实体主要是代码、数据和PCB。因此,要清楚了解PCB内所含的数据结构内容,主要有四大类:进程标志信息、进程控制信息、进程资源信息、CPU现场信息。由此可知,全局变量与PCB无关,而只与用户代码有关。

25. A

进程创建需要占用系统内存来存放PCB的数据结构,因此一个系统能够创建的进程总数是有限的,进程的最大数量取决于系统内存的大小,它在系统安装时就已确定(若后期内存增加,则系统能够创建的进程总数也会增加)。而用户数量、外设数量和文件等均与此无关。

26. C

我们先要考虑创建进程的过程,当该进程所需的资源分配完成而只等CPU时,进程的状态为就绪态,因此所有的就绪PCB一般以链表方式链成一个序列,称为就绪队列。

27. A

只有从运行态到阻塞态的转换是由进程自身决定的。从运行态到就绪态的转换是由于进程的时间片用完,“主动”调用程序转向就绪态。虽然从就绪态到运行态的转换同样是由调度程序决定的,但进程是“被动的”。从阻塞态到就绪态的转换是由协作进程决定的。

28. D

原语是由若干条指令组成的、用于实现某个特定功能的程序段。它与一般的程序的区别如下:它是“原子操作”,即一个操作中的所有动作要么全做,要么全不做,在执行过程中不允许被中断,因此“原子操作”并不是指执行速度快,选项D错误。对进程的管理和控制功能是通过各种原语实现的,如创建原语等。原语是操作系统内核的组成部分,它常驻内存,且在内核态下执行。

29. C

用信箱实现进程间互通信息的通信机制要有两个通信原语,它们是发送原语和接收原语。

30. C

消息传递需要在内核和用户空间中进行数据的拷贝,而且需要对消息进行格式化和排队,这些都会增加通信的开销。套接字(Socket)通常用于不同机器之间的进程通信,需要经过传输层以下的协议栈,而且可能涉及数据的加密和压缩,这些都会降低通信的速度。共享内存允许多个进程直接访问同一块物理内存,不需要任何数据的拷贝和中介,是最快的进程通信方式。管道需要在内核和用户空间进行数据的拷贝,而且一般是单向传输,降低了通信的效率。

31. B

信箱通信属于消息传递中的间接通信方式,因为信箱通信借助于收发双方进程之外的共享数据结构作为通信中转,发送方和接收方不直接建立联系,没有处理时间上的限制,发送方可以在任何时间发送信息,接收方也可以在任何时间接收信息。


<!-- page: 71 -->

32. D

有些信号是不能被用户自定义处理函数的,只能执行操作系统默认的处理程序,选项D错误。

33. B

信号的处理时机只会在进程从内核态转为用户态时。当进程从用户态转为内核态时,不会检查是否有待处理的信号,选项B错误。操作系统对某些信号的默认处理可能就是忽略。

34. D

在同一进程中,线程的切换不会引起进程的切换。当从一个进程中的线程切换到另一个进程中的线程时,才会引起进程的切换,因此选项A、B、C错误。

35. A

线程的CPU现场是指线程运行时所需的一组寄存器的值,包括程序计数器、状态寄存器、通用寄存器和线指针等。当线程切换时,操作系统会保存当前线程的CPU现场,并恢复下一个线程的CPU现场。线程是CPU调度的基本单位,当然可以独立执行程序,选项A正确。线程没有自己独立的地址空间,它共享其所属进程的空间,选项B错误。进程可以创建多个线程,选项C错误。同一个进程中的线程间通信可以直接通过它们共享的存储空间,选项D错误。

36. B

线程是进程内一个相对独立的执行单元,但不能脱离进程单独运行,只能在进程中运行。引入线程是为了减少程序执行时的时空开销。一个进程可包含一个或多个线程。

37. D

同一个进程或不同进程内的线程可以并发执行,并发是指多个线程在一段时间内交替执行,而不一定是同时执行的。在多核CPU中,同一个进程或不同进程内的线程可以并行执行,并行是指多个线程在同一时刻同时执行。若实现了并行,则一定也实现了并发。

38. D

线程的优点有提高系统并发性、节约系统资源、便于进程通信等,但线程并不能增强进程安全性,因为线程共享进程的地址空间和资源,若一个线程出错,则可能影响整个进程的运行。

39. B

一个进程可以包含一个或多个线程,但一个线程只能属于一个进程,选项A错误。线程共享进程的资源,但线程之间不能无约束地并行执行,因为线程之间还需要进行同步和互斥,以免造成数据的不一致和冲突,选项C错误。线程也称轻量级进程,但并不能说所有线程都比进程小,选项D错误。

40. C

整个系统只有一个键盘,而且键盘输入是人的操作,速度比较慢,完全可以使用一个线程来处理整个系统的键盘输入。

41. D

阻塞的进程在获得所需资源时只能由阻塞态转变为就绪态,并插入就绪队列,而不能直接转变为运行态。

42. B

当进程的时间片到时,进程由运行态转变为就绪态,等待下一个时间片的到来。

43. C

不同的进程拥有不同的代码段和数据段,全局变量是对同一进程而言的,在不同的进程中是不同的变量,没有任何联系,所以不能用于交换数据。此题也可用排除法做,选项A、B、D均是课本上所讲的。管道是一种文件。


<!-- page: 72 -->

44. D

进程处于运行态时,它必须已获得所需的资源,在运行结束后就撤销。只有在时间片到或出现了比现在进程优先级更高的进程时才转变成就绪态。选项 A 使进程从阻塞态到就绪态,选项 B 使进程从运行态到阻塞态,选项 C 使进程撤销。

45. B

进程切换是指 CPU 调度不同的进程执行,当一个进程从运行态变为就绪态时,CPU 调度另一个进程执行,引起进程切换。

46. C

进程有三种基本状态,处于阻塞态的进程由于某个事件不满足而等待。这样的事件一般是 I/O 操作,如键盘等,或是因互斥或同步数据引起的等待,如等待信号或等待进入互斥临界区代码段等,等待网络数据进入内存是为了进程同步。而等待 CPU 调度的进程处于就绪态,只有它是非阻塞态。

47. A

当一个进程被唤醒时,这个进程就进入了就绪态,等待进程调度而占有 CPU 运行。进程被唤醒在某种情形下优先级可以增大,但一般不会变为最大,而由固定的算法来计算。也不会在唤醒后位于就绪队列的队首,就绪队列是按照一定的规则赋予其位置的,如先来先服务,或者高优先级优先,或者短进程优先等,更不能直接占有处理器运行。

48. D

进程创建原语完成的工作是:向系统申请一个空闲 PCB,为被创建进程分配必要的资源,然后将其 PCB 初始化,并将此 PCB 插入就绪队列,最后返回一个进程标志号。当调度程序为进程分配 CPU 后,进程开始运行。所以进程创建的过程中不会包含分配 CPU 的过程,这不是进程创建者的工作,而是调度程序的工作。

49. A

进程之间的通信方式主要有管道、消息传递、共享内存、文件映射和套接字等。数据库不能直接作为进程之间的通信方式。

50. B

用户级线程的调度仍以进程为单位,各个进程轮流执行一个时间片,假设进程 A 包含 1 个用户级线程,而进程 B 包含 100 个用户级线程,此时进程 A 中单个线程的运行时间将是进程 B 中各个线程平均运行时间的 100 倍;内核级线程的调度是以线程为单位的,各个线程轮流执行一个时间片,同样假设进程 A 包含 1 个内核级线程,而进程 B 包含 100 个内核级线程,此时进程 B 的运行时间将是进程 A 的 100 倍,选项 A 正确。用户级线程的调度单位是进程,跨进程的线程调度需要内核支持,选项 B 错误。用户级线程是由用户程序或函数库实现的,不依赖于操作系统的支持,选项 C 正确。用户级线程对操作系统是透明的,CPU 调度的对象仍然是进程,选项 D 正确。

51. A

在内核级线程中,同一进程中的线程切换,需要从用户态转到内核态进行,系统开销较大,选项 A 错误。CPU 调度是在内核中进行的,在内核级线程中,调度是在线程一级进行的,因此内核可以同时调度同一进程的多个线程在多 CPU 上并行运行(用户级线程则不行),选项 B 正确、选项 D 正确。内核级线程可以在内核态执行系统调用子程序,直接利用系统调用为它服务,因此选项 C 正确。注意,用户级线程是在用户空间中实现的,不能直接利用系统调用获得内核的服务,当用户级线程要获得内核服务时,必须借助于操作系统的帮助,因此用户级线程只能在用户态运行。

52. A

进程中的某个用户级线程被阻塞,则整个进程也被阻塞,即进程中的其他用户级线程也被阻


<!-- page: 73 -->

塞,选项A错误。用户级线程的调度是在用户空间进行的,节省了模式切换的开销,不同进程可以根据自身的需要,对自己的线程选择不同的调度算法,因此选项B、C和D都正确。

53. D

用户级线程是不需要内核支持而在用户程序中实现的线程,不能利用多处理器的并行性,因为操作系统只能看到进程。其余说法均正确。

54. D

本题可用排除法。用户级线程的切换是由应用程序自己控制的,不需要操作系统的干预,操作系统感受不到用户级线程的存在。因此,系统调用、I/O请求和异常处理这些涉及内核态的事件都不会导致用户级线程切换,但会导致内核级线程切换。线程同步是指多个线程之间协调执行顺序的机制,如互斥锁、信号量、条件变量等。当一个线程在等待同步条件时,应用程序可以选择切换到另一个就绪的用户级线程,以提高CPU的利用率。

55. B

用户级线程不依赖于操作系统内核,而是由用户程序自己实现的,选项A正确。用户级线程的创建和调度都是在用户态下实现的,不需要切换到内核态,选项B错误。操作系统只能看到一个单线程进程,而不知道进程内部有多个用户级线程,选项C正确。线程库中线程的切换只涉及用户栈和寄存器等上下文的保存和恢复,不涉及内核栈和页表等内核上下文的切换,选项D正确。

56. C

引入线程后,进程仍然是资源分配的单位。内核级线程是处理器调度和分派的单位,线程本身不具有资源,它可以共享所属进程的全部资源,选项C正确,选项B、D明显错误。至于选项A,可以这样来理解:假如有一个内核进程,它映射到用户级后有多个线程,那么这些线程之间的切换不需要在内核级切换进程,也就不需要内核的支持。

57. B

在多对一的线程模型中,只有一个内核级线程,用户级线程的“多”对操作系统透明,因此操作系统内核只能感知到一个调度单位的存在。因此,该进程的一个线程被阻塞后,该进程就被阻塞,进程的其他线程当然也被阻塞。注意,作为对比,在一对一模型中将每个用户级线程都映射到一个内核级线程,因此当某个线程被阻塞时,不会导致整个进程被阻塞。

58. C

一对一模型和多对多模型能充分利用内核级线程,发挥多处理机的优势,能同时调度同一个进程中的多个线程并发执行,具有较好的并发性。

59. C

多对一模型中的线程切换不会导致进程切换,而是在用户空间进行的。其余说法均正确。

60. C

创建进程的原因主要有:①用户登录;②高级调度;③系统处理用户程序的请求;④用户程序的应用请求。对于选项I,用户登录成功后,系统要为此创建一个用户管理的进程,包括用户桌面、环境等,所有用户进程都会在该进程下创建和管理。对于选项II,设备分配是通过在系统中设置相应的数据结构实现的,不需要创建进程,这是操作系统中I/O核心子系统的内容。对于选项III,启动程序执行是引起创建进程的典型事件,启动程序执行属于③或④。

61. D

进程是资源分配的基本单位,线程是CPU调度的基本单位。进程的代码段、进程打开的文件、进程的全局变量等都是进程的资源,唯有进程中某线程的栈指针(包含在线程TCB中)是属于线程的,属于进程的资源可以共享,属于线程的栈指针是独享的,对其他线程透明。


<!-- page: 74 -->

62. A

在引入线程后,进程依然是资源分配的基本单位,线程是调度的基本单位,同一进程中的各个线程共享进程的地址空间。在用户级线程中,有关线程管理的所有工作都由应用程序完成,无须内核的干预,内核意识不到线程的存在。

63. A

进程申请读磁盘操作时,因为要等待 I/O 操作完成,会把自身阻塞,此时进程变为阻塞态;I/O 操作完成后,进程得到了想要的资源,会从阻塞态转换到就绪态(这是操作系统的行为)。而降低进程优先级、分配用户内存空间和增加进程的时间片大小都不一定会发生,选择选项 A。

64. C

普通管道只允许单向通信,数据只能往一个方向流动,要实现双向数据传输,就需要定义两个方向相反的管道,选项 A 错误。管道是一种存储在内存中的、固定大小的缓冲区,管道的大小通常为内存的一页,其大小并不是受磁盘容量大小的限制,选项 B 错误。由于管道的读/写操作都可能遇到缓冲区满或空的情况,当管道满时,写操作会被阻塞,直到有数据读出;而当管道空时,读操作会被阻塞,直到有数据写入,因此选项 C 正确。一个管道可以有多个读进程或多个写进程对其进行操作,但是这会增加数据竞争和混乱的风险,为了避免这种情况,应使用互斥锁或信号量等同步机制来保证每次只有一个进程对管道进行读或写操作,选项 D 错误。

65. D

P(wait)操作表示进程请求某一资源,选项 A、B 和 C 都因为请求某一资源会进入阻塞态,而选项 D 只是被剥夺了 CPU 资源,进入就绪态,一旦得到 CPU 即可运行。

66. C

进程等待某资源为可用(不包括 CPU)或等待输入/输出完成均会进入阻塞态,因此选项 I、II 正确;选项 III 中的情况发生时,进程进入就绪态,因此选项 III 错误。

67. C

当被阻塞进程等待的某资源(不包括 CPU)可用时,进程将被唤醒。I/O 结束后,等待该 I/O 结束而被阻塞的有关进程会被唤醒,选项 I 正确;某进程退出临界区后,之前因需要进入该临界区而被阻塞的有关进程会被唤醒,选项 II 正确;当前进程的时间片用完后进入就绪队列等待重新调度,优先级最高的进程获得 CPU 资源从就绪态变成执行态,选项 III 错误。

68. B

应用程序没有进行内核级线程管理的代码,只有一个到内核级线程的编程接口,内核为进程及其内部的每个线程维护上下文信息,调度也是在内核中由操作系统完成的,选项 A 正确。用户级线程的控制块是由用户空间的库函数维护的,操作系统并不知道用户级线程的存在,用户级线程的控制块一般存放在用户空间的数据结构中,如链表或数组,由用户空间的线程库来管理。操作系统只负责为每个进程建立一个进程控制块,操作系统只能看到进程,而看不到用户级线程,所以不会为每个用户级线程建立一个线程控制块。但是,内核级线程的线程控制块是由操作系统创建的,当一个进程创建一个内核级线程时,操作系统会为该线程分配一个线程控制块,并将其加入内核的线程管理数据结构,选项 B 错误。用户级线程的切换可以在用户空间完成,内核级线程的切换需要操作系统帮助进行调度,因此用户级线程的切换效率更高,选项 C 正确。用户级线程的管理工作可以只在用户空间中进行,因此可以在不支持内核级线程的操作系统上实现,选项 D 正确。

69. B

父进程与子进程当然可以并发执行,选项 A 正确。父进程可与子进程共享一部分资源,但不


<!-- page: 75 -->

能共享虚拟地址空间,在创建子进程时,会为子进程分配资源,如虚拟地址空间等,选项B错误。临界资源一次只能为一个进程所用,选项D正确。进程控制块(PCB)是进程存在的唯一标志,每个进程都有自己的PCB,选项C正确。

70. B

操作系统感知进程的唯一方式是通过进程控制块(PCB),所以创建一个新进程就是为其申请一个空白的进程控制块,并且初始化一些必要的进程信息,如初始化进程标志信息、初始化CPU状态信息、设置进程优先级等。选项I、II正确。创建一个进程时,一般会为其分配除CPU外的大多数资源,所以一般将其设置为就绪态,让它等待调度程序的调度。

71. D

进程P读文件时,进程从执行态进入阻塞态,等待磁盘I/O完成,选项I正确。进程P的时间片用完,导致进程从执行态进入就绪态,转入就绪队列等待下次被调度,选项II错误。进程P申请外设,若外设是独占设备且正在被其他进程使用,则进程P从执行态进入阻塞态,等待系统分配外设,选项III正确。进程P执行信号量的wait()操作,若信号量的值小于或等于0,则进程进入阻塞态,等待其他进程用signal()操作唤醒,选项IV正确。

72. D

操作系统通过执行软中断指令陷入内核态执行系统调用,系统调用执行完成后,恢复被中断的进程或设置新进程的CPU现场,然后返回被中断进程或新进程。只有系统调用是用户进程调用内核功能,CPU从用户态切换到内核态,执行完后再返回到用户态。选项A、B、C的操作都是在内核态进行的,执行前后都可能处在内核态,只有中断返回时才切换为用户态。

73. C

在等待键盘输入的操作中,当前线程处于阻塞态,键盘输入完成后,再调出相应的中断服务程序进行处理,由中断服务程序负责唤醒当前线程,选项A错误。当线程检测到缺页异常时,会调用缺页异常处理程序从外存调入缺失的页面,线程状态从执行态转为阻塞态,选项B错误。当线程的时间片用完后,主动放弃CPU,此时若线程还未执行完,就进入就绪队列等待下次调度,此时线程状态从执行态转为就绪态,选项C正确。线程执行wait()后,若成功获取资源,则线程状态不变,若未能获取资源,则线程进入阻塞态,选项D错误。

74. A

当操作系统终止进程时,所有的进程资源(如内存空间、进程控制块、设备、打开文件、I/O缓冲区等)都会被释放。有些系统不允许子进程在父进程已终止的情况下存在,对于这类系统,若一个进程终止,则它的所有子进程也终止,这种现象称为级联终止。但是,不是所有操作系统都是这么设计的,因此终止子进程不一定在终止进程时执行。

75. B

线程可理解为轻量级进程,仅拥有一点必不可少、能保证独立运行的资源。例如,在每个线程中都有一个用于控制线程运行的线程控制块(TCB)、用于指示被执行指令序列的程序计数器、保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈。因此,线程T的栈空间是线程T所独有的,不会被线程Ta和Tb共享。多个线程共享所属进程所拥有的资源,进程P的线程可以访问进程P的全部地址空间和资源(如已打开的文件、定时器、信号量机构等)以及它申请到的I/O设备等。综上所述,Ta和Tb可共享的是进程P的地址空间和文件描述符记。

二、综合应用题

01.【解答】

在操作系统中,进程是竞争和分配计算机系统资源的基本单位。每个进程都有自己的独立地


<!-- page: 76 -->

址空间。为了保证多个进程能够彼此互不干扰地共享物理内存,操作系统利用硬件地址机制对进程的地址空间进行了严格的保护,限制每个进程只能访问自己的地址空间。

具体解答如下。

每个进程有自己独立的地址空间。在操作系统和硬件的地址保护机制下,进程无法访问其他进程的地址空间,必须借助于系统调用函数实现进程之间的通信。进程通信的主要方式有:

1)共享内存区。通过系统调用创建共享内存区。多个进程可以(通过系统调用)连接同一个共享内存区,通过访问共享内存区实现进程之间的数据交换。使用共享内存区时需要利用信号量解决同步互斥问题。

2)消息传递。通过发送/接收消息,系统调用实现进程之间的通信。当进程发送消息时,系统将消息从用户缓冲区复制到内核中的消息缓冲区,然后将消息缓冲区挂入消息队列。进程发送的消息保持在消息队列中,直到被另一进程接收。当进程接收消息时,系统从消息队列中解挂消息缓冲区,将消息从内核的消息缓冲区中复制到用户缓冲区,然后释放消息缓冲区。

3)管道系统。管道允许两个进程按标准的生产者-消费者方式进行通信:生产者向管道的一端(写入端)写,消费者从管道的另一端(读出端)读。管道只允许单向通信。在读/写过程中,操作系统保证数据的写入顺序和读出顺序是一致的。

4)共享文件。利用操作系统提供的文件共享功能实现进程之间的通信。这时,也需要信号量来解决文件共享操作中的同步和互斥问题。

02. 【解答】

多线程是指在一个程序中可以定义多个线程并同时运行它们,每个线程可以执行不同的任务。多线程与多任务的区别:多任务是针对操作系统而言的,代表操作系统可以同时执行的程序个数;多线程是针对一个程序而言的,代表一个程序可以同时执行的线程个数,而每个线程可以完成不同的任务。

03. 【解答】

1)是。若系统中未运行进程,则系统很快会选择一个就绪进程运行。只有就绪队列中无进程时,CPU才可能处于空闲状态。

2)不一定。因为系统中的所有进程可能都处于等待态,可能处于死锁状态,也有可能因为等待的事件未发生而进入循环等待态。

3)不一定。因为高优先级的进程有可能正处在等待队列中,进程调度会从就绪队列中选择一个进程占用CPU,这个被选中的进程可能优先级较低。

04. 【解答】

根据题意,首先由图进行分析,进程由运行态可以直接回到就绪队列的末尾,而且就绪队列中是先来先服务。那么,什么情况才能发生这样的变化呢?只有采用单一时间片轮转的调度系统,分配的时间片用完后,才会发生上述情况。因此,该系统一定采用时间片轮转调度算法,采用时间片轮转算法的操作系统一般均为交互式操作系统。由图可知,进程被阻塞时,可以进入不同的阻塞队列,等待打印机输出结果和等待磁盘读取文件。所以,它是一个多阻塞队列的时间片轮转法的调度系统。

具体解答如下。

1)根据题意,该系统采用的是时间片轮转法调度进程策略。

2)可能的变化见下表。


<!-- page: 77 -->

[tbl-2.md](tbl-2.md)