2.1 进程与线程 (答案见原书 P57)
第2章 进程与线程
2.1 进程与线程 (答案见原书 P57)
01. 一个进程映像是 ( C )
题目原文
- 一个进程映像是 ( )
A. 由协处理器执行的一个程序 B. 一个独立的程序 + 数据集
C. PCB 结构与程序和数据的组合 D. 一个独立的程序
正确答案:C
题目解析
- 考点分析: 本题考察对进程映像(Process Image) 这一静态概念的理解。
- 正确选项分析 (C. PCB 结构与程序和数据的组合):
- 进程映像是指一个进程在某一时刻的静态内存快照,它包含了操作系统描述和管理该进程所需的所有信息。
- 它主要由两部分组成:
- 用户部分: 即用户地址空间,包含了程序(代码段)、数据(数据段、堆)和用户栈。
- 系统部分: 即进程控制块(PCB),存放了操作系统的管理信息。
- 选项C准确地概括了这两部分的组合。
- 错误选项分析:
- A, B, D: 都不完整,遗漏了最关键的管理核心——PCB。
02. 进程之间交换数据不能通过 ( C ) 途径进行。
题目原文
02. 进程之间交换数据不能通过 ( ) 途径进行。
A. 共享文件 B. 消息传递
C. 访问进程地址空间 D. 访问共享存储区
正确答案:C
题目解析
- 考点分析: 本题考察进程间通信(IPC)的方式以及进程地址空间的独立性。
- 正确选项分析 (C. 访问进程地址空间):
- 现代操作系统的一个核心特性是进程地址空间的隔离。
- 每个进程都拥有自己独立的、私有的虚拟地址空间。出于安全和保护的考虑,一个进程不能直接访问另一个进程的私有地址空间。
- 任何试图这样做的行为都会被硬件(MMU)检测到并触发保护异常。
- 错误选项分析(属于IPC方式):
- A. 共享文件: 进程可以通过读写同一个文件来进行通信。
- B. 消息传递: 进程通过操作系统提供的
send/receive
原语来交换格式化的消息。 - D. 访问共享存储区: 进程可以请求操作系统将同一块物理内存映射到它们各自的虚拟地址空间中,从而形成一个共享内存区,实现高速通信。
03. 进程与程序的根本区别是 ( A )
题目原文
03. 进程与程序的根本区别是 ( )
A. 静态和动态特点 B. 是不是被调入内存
C. 是不是具有就绪、运行和等待三种状态 D. 是不是占有处理器
正确答案:A
题目解析
- 考点分析: 本题考察对进程和程序这两个核心概念的本质区别的理解。
- 正确选项分析 (A. 静态和动态特点):
- 程序 (Program): 是一组有序的指令的集合,它存放在磁盘上,是一个静态的概念。
- 进程 (Process): 是一个正在执行的程序实例。它是一个动态的概念,有创建、运行、消亡的生命周期,并且会不断地改变状态。
- “静态”与“动态”是两者最根本、最本质的区别。
- 错误选项分析:
- B, C, D: 这些都是进程作为动态实体的具体表现,但“动态性”本身是更根本的区别。
04. 下列关于进程的描述中,最不符合操作系统对进程的理解的是 ( A )
题目原文
04. 下列关于进程的描述中,最不符合操作系统对进程的理解的是 ( )
A. 进程是在多程序环境中的完整程序
B. 进程可以由程序、数据和 PCB 描述
C. 线程 (Thread) 是一种特殊的进程
D. 进程是程序在一个数据集合上的运行过程,它是系统进行资源分配和调度的一个独立单元
正确答案:A
题目解析
- 考点分析: 本题要求从多个描述中找出对进程概念最不准确的一个。
- 错误选项分析 (A. 进程是在多程序环境中的完整程序):
- 这个说法是错误的。进程不是程序,而是程序的一次执行活动。程序是静态的,进程是动态的。将进程等同于程序,是最常见的概念混淆。
- 正确选项分析(是对进程的合理描述):
- B: 正确,这描述了进程映像的组成。
- C: 【注意】 这个说法有争议。线程有时被称为“轻量级进程”,但它与进程是不同的概念(线程是调度单位,进程是资源分配单位)。但在某些语境下,为了强调线程的执行能力,可以将其看作一种“特殊的进程”,但A的错误更根本。
- D: 正确,这是对进程最经典、最完整的定义,指出了其动态性以及作为资源分配和调度单位的双重角色。
05. 下列关于并发进程特性的叙述中,正确的是 ( D )
题目原文
05. 下列关于并发进程特性的叙述中,正确的是 ( )
A. 进程是一个动态过程,其生命周期是连续的
B. 并发进程执行完毕后,一定能够得到相同的结果
C. 并发进程对共享变量的操作结果与执行速度无关
D. 并发进程的运行结果具有不可再现性
正确答案:D
题目解析
- 考点分析: 本题考察并发进程的“异步性”所带来的特征。
- 正确选项分析 (D. 并发进程的运行结果具有不可再现性):
- 并发是指多个进程在宏观上同时推进,但在微观上是异步的,即它们的相对执行速度是不可预测的。
- 如果这些并发进程共享了某些资源(如共享变量),那么由于执行顺序的微小差异,对共享资源的访问顺序就会不同,从而可能导致每次运行都得到不同的最终结果。这种现象称为不可再现性 (Irreproducibility)。
- 错误选项分析:
- A: 进程的生命周期是“走走停停”的(在运行、就绪、阻塞态之间切换),不是连续执行的。
- B, C: 正是因为执行速度(异步性)会导致对共享变量的访问顺序不同,所以结果不一定相同,与执行速度密切相关。
06. 下列关于进程的叙述中,正确的是 ( A )
题目原文
06. 下列关于进程的叙述中,正确的是 ( )
A. 进程获得处理器运行是通过调度得到的
B. 优先级是进程调度的重要依据, 一旦确定不能改动
C. 在单处理器系统中,任何时刻都只有一个进程处于运行态
D. 进程申请处理器而得不到满足时,其状态变为阻塞态
正确答案:A
题目解析
- 考点分析: 本题考察进程状态转换和调度的基本概念。
- 正确选项分析 (A. 进程获得处理器运行是通过调度得到的):
- 这是进程调度的定义。操作系统的调度程序(Scheduler) 负责从就绪队列中,按照某种调度算法(如优先级、时间片),选择一个进程,并将其投入运行态(即分配CPU给它)。
- 错误选项分析:
- B: 优先级可以分为静态优先级(创建时确定,不变)和动态优先级(根据进程行为动态调整),不一定不能改动。
- C: 【注意】 这个说法是正确的。在单CPU系统中,物理上在任何一个瞬间都只有一个进程在CPU上执行。但答案是A,说明A是“更正确”或“考点所在”。
- D: 进程申请处理器得不到满足时,它会留在就绪态等待。只有当进程申请除CPU以外的资源(如I/O、锁)而得不到满足时,才会进入阻塞态。
07. 并发进程执行的相对速度是 ( C )
题目原文
07. 并发进程执行的相对速度是 ( )
A. 由进程的程序结构决定的 B. 由进程自己来控制的
C. 与进程调度策略有关 D. 在进程被创建时确定的
正确答案:C
题目解析
- 考点分析: 本题考察影响并发进程推进速度的因素。
- 正确选项分析 (C. 与进程调度策略有关):
- 并发进程的执行是“走走停停”的,哪个进程能获得CPU、能运行多久,都取决于操作系统的进程调度策略。
- 例如,一个高优先级的进程会比一个低优先级的进程获得更多的CPU时间,其推进速度就相对更快。
- 因此,它们的相对速度是不可预测的,并且受到调度策略的直接影响。
- 错误选项分析:
- A, B, D: 进程无法自己控制执行速度,程序结构和创建时间也不是决定因素。
08. 下列任务中,( C ) 不是由进程创建原语完成的。
题目原文
08. 下列任务中,( ) 不是由进程创建原语完成的。
A. 申请 PCB 并初始化
B. 为进程分配内存空问
C. 为进程分配 CPU
D. 将进程插入就绪队列
正确答案:C
题目解析
- 考点分析: 本题考察进程创建原语(如
fork()
)的具体工作步骤。 - 正确选项分析 (C. 为进程分配 CPU):
- 进程创建原语的工作是完成一个新进程的初始化,使其达到可以被调度的状态。
- 它的工作包括:
- A. 申请PCB并初始化: 分配一个空白PCB,填入父进程信息、PID、初始状态等。
- B. 为进程分配内存空间: 为新进程的代码、数据、栈分配内存。
- D. 将进程插入就绪队列: 完成所有初始化后,将进程的状态置为就绪态,并将其PCB链入就绪队列,等待被调度。
- 分配CPU是调度程序的工作,它是在进程创建之后,从就绪队列中选择进程时才发生的。
- 错误选项分析:
- A, B, D: 都是进程创建原语的核心步骤。
09. 下列关于进程和程序的叙述中,错误的是 ( B )
题目原文
09. 下列关于进程和程序的叙述中,错误的是 ( )
A. 一个进程在其生命周期中可执行多个程序
B. 一个进程在同一时刻可执行多个程序
C. 一个程序的多次运行可形成多个不同的进程
D. 一个程序的一次执行可产生多个进程
正确答案:B
题目解析
- 考点分析: 本题考察进程与程序之间复杂的一对多、多对一关系。
- 错误选项分析 (B. 一个进程在同一时刻可执行多个程序):
- 这是错误的。在任何一个时刻,一个进程(或其内部的线程)都只能执行一个程序中的一条指令。它的执行流是单一的。
- 正确选项分析:
- A: 正确。例如,在UNIX中,一个进程可以通过
exec()
系统调用,用一个新的程序来替换自己当前正在执行的程序。 - C: 正确。例如,你多次点击浏览器图标,就会启动多个独立的浏览器进程,它们都运行自同一个浏览器程序。
- D: 正确。一个正在执行的程序(进程),可以通过
fork()
等系统调用来创建出新的子进程。
- A: 正确。例如,在UNIX中,一个进程可以通过
10. 下列选项中,导致创建新进程的操作是 ( D )
I.用户登录 II.高级调度发生时 III.操作系统响应用户提出的请求
IV.用户打开了一个浏览器程序
正确答案:D
题目解析
- 考点分析: 本题考察在操作系统中,哪些事件会触发新进程的创建。
- 逐项分析:
- I. 用户登录: 正确。用户成功登录后,操作系统会为其创建一个用户界面进程(如Shell或桌面环境)。
- II. 高级调度发生时: 错误。高级调度(作业调度)是从后备作业队列中选择一个作业调入内存,为其创建进程。所以不是“高级调度发生时”,而是“高级调度选中一个作业时”。但这个说法可以勉强接受为创建进程的事件。
- III. 操作系统响应用户提出的请求: 正确。用户在Shell中输入命令(如
gcc myprog.c
)来启动一个程序,就是操作系统在响应用户的请求,并为其创建一个新进程。 - IV. 用户打开了一个浏览器程序: 正确。这是III的一个具体例子。用户通过图形界面点击图标,操作系统响应这个事件,创建一个浏览器进程。
- 组合判断: I, III, IV 都是明确的创建新进程的操作。II 的描述不那么精确,但也可以理解为创建进程的源头。因此,选择包含最多的选项D是合理的。
- 【答案校对】 您提供的答案是
D (全部)
。这表明出题者将II也算作了创建进程的操作。
11. 操作系统是根据 ( B ) 来对并发执行的进程进行控制和管理的。
题目原文
11. 操作系统是根据 ( ) 来对并发执行的进程进行控制和管理的。
A. 进程的基本状态 B. 进程控制块 C. 多道程序设计 D. 进程的优先权
正确答案:B
题目解析
- 考点分析: 本题考察操作系统管理进程所依赖的核心数据结构。
- 正确选项分析 (B. 进程控制块, PCB):
- PCB是操作系统为了管理进程而专门设置的数据结构,它是进程存在的唯一标志。
- PCB中包含了操作系统对一个进程进行控制和管理所需的全部信息,如进程ID、状态、优先级、CPU现场、内存指针、打开文件列表等。
- 操作系统对进程的所有操作(如创建、调度、阻塞、唤醒、撤销)都是通过对PCB的查询和修改来实现的。
- 错误选项分析:
- A, D: 进程状态和优先级是PCB中的一部分内容,不是管理的依据本身。
- C: 多道程序设计是并发执行的环境,不是管理工具。
12. 在任何时刻, 一个进程的状态变化 ( C ) 引起另一个进程的状态变化。
题目原文
12. 在任何时刻, 一个进程的状态变化 ( ) 引起另一个进程的状态变化。
A. 必定 B. 一定不 C. 不一定 D. 不可能
正确答案:C
题目解析
- 考点分析: 本题考察进程状态转换的联动性。
- 正确选项分析 (C. 不一定):
- 进程状态的变化可能会引起其他进程状态的变化,也可能不会。
- 会引起变化的情况:
- 一个进程释放了某个临界资源,可能会唤醒一个正在等待该资源的阻塞进程,使其变为就绪态。
- 一个进程时间片用完从运行变为就绪,会触发调度,让另一个就绪进程变为运行态。
- 不会引起变化的情况:
- 一个进程因为I/O请求而从运行变为阻塞,此时如果没有其他就绪进程,系统可能会进入空闲状态,不改变其他进程状态。
- 结论: 存在两种可能性,所以是“不一定”。
13. 在单处理器系统中,若同时存在 10 个进程,则处于就绪队列中的进程最多有 ( C ) 个。
题目原文
13. 在单处理器系统中,若同时存在 10 个进程,则处于就绪队列中的进程最多有 ( ) 个。
A. 1 B. 8 C. 9 D. 10
正确答案:C
题目解析
- 考点分析: 本题考察进程五状态模型(或三状态模型)中,各状态下进程数量的限制。
- 分析过程:
- 系统是单处理器系统。
- 这意味着,在任何一个时刻,处于运行态的进程最多只有1个。
- 总共有10个进程。
- 假设所有进程都没有因为等待I/O等事件而处于阻塞态,这是就绪队列中进程数最多的情况。
- 此时,10个进程中,有1个在运行,剩下的
10 - 1 = 9
个都处于就绪状态,在就绪队列中等待被调度。
- 结论: 就绪队列中最多有9个进程。
14. 一个进程释放了一台打印机, 它可能会改变 ( C ) 的状态。
题目原文
14. 一个进程释放了一台打印机, 它可能会改变 ( ) 的状态。
A. 自身进程 B. 输入 / 输出进程
C. 另一个等待打印机的进程 D. 所有等待打印机的进程
正确答案:C
题目解析
- 考点分析: 本题考察资源释放对等待队列中进程状态的影响。
- 正确选项分析 (C. 另一个等待打印机的进程):
- 打印机是独占设备。
- 当一个进程释放打印机时,操作系统会检查等待该打印机的阻塞队列。
- 如果队列不为空,操作系统会从中选择一个(通常是队首的)等待进程,将其唤醒,即把它的状态从阻塞态改为就绪态,并把它链入就绪队列。
- 错误选项分析:
- A: 释放资源的进程本身状态通常不变(继续运行或变为就绪)。
- D: 只会唤醒一个等待进程,而不是所有。
15. 系统进程所请求的一次 I/O 操作完成后, 将使进程状态从 ( D )
题目原文
15. 系统进程所请求的一次 I/O 操作完成后, 将使进程状态从 ( )
A. 运行态变为就绪态 B. 运行态变为阻塞态
C. 就绪态变为运行态 D. 阻塞态变为就绪态
正确答案:D
题目解析
- 考点分析: 本题考察I/O完成后,进程状态的转换。
- 正确选项分析 (D. 阻塞态变为就绪态):
- 当一个进程发起I/O请求时,它会从运行态进入阻塞态,等待I/O操作完成。
- 当I/O操作完成后,设备会发出中断。
- 中断处理程序会负责唤醒这个正在等待的进程。
- “唤醒”操作就是将该进程的状态从阻塞态改为就绪态,并将其PCB放入就绪队列,等待下一次被CPU调度。
- 错误选项分析:
- 被唤醒的进程只是具备了运行的资格,但不一定能立刻获得CPU,所以是变为就绪态,而不是运行态。
16. 一个进程的基本状态可以从其他两种基本状态转变过去,这个基本的状态一定是 ( C )
题目原文
16. 一个进程的基本状态可以从其他两种基本状态转变过去,这个基本的状态一定是 ( )
A. 运行态 B. 阻塞态 C. 就绪态 D. 终止态
正确答案:C
题目解析
- 考点分析: 本题考察进程三状态(运行、就绪、阻塞)模型中的状态转换关系。
- 正确选项分析 (C. 就绪态):
- 我们来分析进入每个状态的来源:
- 运行态: 只能从就绪态通过调度转换而来。(1个来源)
- 阻塞态: 只能从运行态因为等待资源转换而来。(1个来源)
- 就绪态:
- 可以从运行态因为时间片用完或被抢占而转换而来。
- 可以从阻塞态因为等待的事件发生而被唤醒而来。
- (如果考虑创建)新创建的进程也会进入就绪态。
- 因此,就绪态是可以从运行态和阻塞态这两种状态转变过去的。
- 我们来分析进入每个状态的来源:
- 错误选项分析:
- A, B: 都只有一个来源。
17. 在分时系统中,通常处于 ( B ) 的进程最多。
题目原文
17. 在分时系统中,通常处于 ( ) 的进程最多。
A. 运行态 B. 就绪态 C. 阻塞态 D. 终止态
正确答案:B
题目解析
- 考点分析: 本题考察在不同类型操作系统中,进程在各状态的典型分布。
- 正确选项分析 (B. 就绪态):
- 分时系统的特点是交互性。系统中有大量的交互式进程(如文本编辑器、浏览器)。
- 这些进程大部分时间都在等待用户输入,所以处于阻塞态的进程也很多。
- 但是,分时系统的设计目标是让每个用户都感觉自己独占计算机,因此CPU的切换非常频繁。
- 为了保证快速响应,一旦用户有输入,进程会被立即唤醒进入就绪态。
- 在一个繁忙的交互式系统中,往往有大量的进程都处于“准备好运行,只等CPU”的状态,即就绪态。
- 相比之下,运行态最多只有一个,而阻塞态虽然也多,但就绪态的进程数量通常会更多。
- 【对比】 在批处理系统中,作业以计算密集型为主,因此通常是阻塞态(等待I/O)的进程最多。
18. 并发进程失去封闭性,是指 ( D )
题目原文
18. 并发进程失去封闭性,是指 ( )
A. 多个相对独立的进程以各自的速度向前推进
B. 并发进程的执行结果与速度无关
C. 并发进程执行时,在不同时刻发生的错误
D. 并发进程共享变量, 其执行结果与速度有关
正确答案:D
题目解析
- 考点分析: 本题考察并发进程“失去封闭性”这一特性的具体含义。
- 正确选项分析 (D. 并发进程共享变量, 其执行结果与速度有关):
- 封闭性是指一个程序在封闭环境下(即不受外界干扰)运行时,其执行结果是确定的、可再现的。
- 并发进程因为要共享系统资源(如共享变量),它们之间会相互影响、相互制约。
- 一个进程的执行会受到其他进程的影响,不再是封闭的。
- 由于并发执行的异步性(相对速度不可预测),对共享变量的访问顺序会发生变化,从而导致程序的最终执行结果也变得不确定,与它们的执行速度有关。
- 错误选项分析:
- A: 这是并发的现象,不是失去封闭性的解释。
- B: 正好说反了,执行结果与速度有关。
19. 通常用户进程被建立后,( B )
题目原文
19. 通常用户进程被建立后,( )
A. 便一直存在于系统中,直到被操作人员撤销
B. 随着进程运行的正常或不正常结束而撤销
C. 随着时间片轮转而撤销与建立
D. 随着进程的阻塞或者唤醒而撤销与建立
正确答案:B
题目解析
- 考点分析: 本题考察进程的生命周期和终止条件。
- 正确选项分析 (B. 随着进程运行的正常或不正常结束而撤销):
- 一个进程被创建后,会经历运行、就绪、阻塞等状态的转换,直到它完成自己的任务或遇到无法恢复的错误。
- 进程的撤销(终止) 通常发生在两种情况下:
- 正常结束: 进程执行完所有代码,主动调用退出系统调用(如
exit()
)。 - 异常/错误结束: 进程发生致命错误(如非法内存访问、除零),或被其他进程(如父进程或管理员)强制杀死。
- 正常结束: 进程执行完所有代码,主动调用退出系统调用(如
- 无论哪种情况,进程的结束都会导致其被系统撤销,回收所有资源。
- 错误选项分析:
- A: 进程不会一直存在,有生命周期。
- C, D: 时间片轮转、阻塞、唤醒都只是进程的状态转换,而不是撤销。
20. 进程在处理器上执行时,( D )
题目原文
20. 进程在处理器上执行时,( )
A. 进程之间是无关的,具有封闭特性
B. 进程之间都有交互性,相互依赖、相互制约,具有并发性
C. 具有并发性,即同时执行的特性
D. 进程之间可能是无关的,但也可能是有交互性的
正确答案:D
题目解析
- 考点分析: 本题考察并发进程之间的关系。
- 正确选项分析 (D. 进程之间可能是无关的,但也可能是有交互性的):
- 这是一个最全面、最准确的描述。
- 无关进程: 两个进程不共享任何资源,一个进程的执行完全不受另一个进程的影响。
- 交互进程 (协作进程): 两个或多个进程需要共享某些资源(如共享内存、文件、信号量)来协同完成任务。它们之间存在相互制约的关系。
- 在一个多道程序系统中,这两类进程都可能存在。
- 错误选项分析:
- A, B: 都过于绝对。不是所有进程都无关,也不是所有进程都有交互。
- C: 并发性是指宏观上同时推进,微观上交替执行,不是真正的“同时执行”(除非在多核处理器上)。
21. 下列关于父进程和子进程的叙述中,正确的是 ( B )
题目原文
21. 下列关于父进程和子进程的叙述中,正确的是 ( )
A. 为了标志父子关系,可让子进程和父进程拥有相同的 PID
B. 父进程和子进程是相互独立的,可以并发执行
C. 撤销子进程时,一定会同时撤销父进程
D. 父进程创建了子进程,要等父进程执行完后,子进程才能执行
正确答案:B
题目解析
- 考点分析: 本题考察通过
fork()
等方式创建的父子进程之间的关系。 - 正确选项分析 (B. 父进程和子进程是相互独立的,可以并发执行):
- 当一个父进程创建子进程后,子进程会获得父进程大部分资源的副本(如内存空间),但它们是两个独立的进程。
- 它们都有自己独立的PCB,并且会被操作系统调度程序视为两个独立的实体。
- 因此,它们可以并发地(在单核上交替,在多核上并行)执行。
- 错误选项分析:
- A: 每个进程都必须有一个唯一的进程ID(PID)。父子进程的PID是不同的。
- C: 撤销子进程不会影响父进程。反过来,如果父进程终止,其子进程可能会成为“孤儿进程”,由init进程接管。
- D: 除非父进程在创建子进程后,显式地调用
wait()
等函数来等待子进程结束,否则它们是并发执行的。
22. 若一个进程实体由 PCB、共享正文段、数据堆段和数据栈段组成…各位于哪一段中。
I.全局赋值变量,( A )
II.未赋值的局部变量,( D )
III.函数调用实参传递值,( D )
IV.用 malloc( ) 要求动态分配的存储区,( C )
V.常量值 (如 1995、 "string"),( B )
VI.进程的优先级,( A )
正确答案:BDDCBA
题目解析
- 考点分析: 本题考察一个进程的用户地址空间中,不同类型的数据和代码存放在哪个区段,以及PCB的内容。
- 进程内存布局(用户空间):
- 正文段 (.text segment): 存放程序的可执行代码和常量。通常是只读的。
- 数据段 (.data segment): 存放已初始化的全局变量和静态变量。
- BSS段 (.bss segment): 存放未初始化的全局变量和静态变量。
- 堆 (Heap): 用于动态内存分配(如
malloc()
)。从低地址向高地址增长。 - 栈 (Stack): 存放局部变量、函数参数、返回地址等。从高地址向低地址增长。
- 逐项分析:
- I. 全局赋值变量: 已初始化的全局变量,存放在数据段。但选项没有数据段。【答案校对】 答案是
A (PCB)
。这是错误的。全局变量在用户地址空间,优先级在PCB。 - II. 未赋值的局部变量: 局部变量存放在栈段 (D)。
- III. 函数调用实参传递值: 函数参数是通过栈段 (D) 传递的。
- IV. 用 malloc() …:
malloc
分配的内存来自堆段 ©。 - V. 常量值…: 字符串字面量和常量通常存放在正文段 (B)(或专门的只读数据段.rodata)。
- VI. 进程的优先级: 这是操作系统的管理信息,存放在PCB (A) 中。
- I. 全局赋值变量: 已初始化的全局变量,存放在数据段。但选项没有数据段。【答案校对】 答案是
- 【综合结论】 您的答案
BDDCBA
与我的分析{数据段}, D, D, C, B, A
存在差异。I
: 答案A(PCB)错 -> 应在数据段。II
: 答案D(栈段)对。III
: 答案D(栈段)对。IV
: 答案C(堆段)对。V
: 答案B(正文段)对。VI
: 答案A(PCB)对。- 最终匹配:
{?}, D, D, C, B, A
。如果将I
的答案也认为是正确的(虽然不标准),那么整体答案序列与BDDCBA
有出入。此题的第一个空和答案可能存在问题。
23. 同一程序经过多次创建,运行在不同的数据集上,形成了 ( A ) 的进程。
题目原文
23. 同一程序经过多次创建,运行在不同的数据集上,形成了 ( ) 的进程。
A. 不同
B. 相同
C. 同步
D. 互斥
正确答案:A
题目解析
- 考点分析: 本题考察程序与进程的一对多关系。
- 正确选项分析 (A. 不同):
- 每次运行一个程序,操作系统都会为其创建一个全新的、独立的进程。
- 每个进程都有自己唯一的PID、独立的PCB、独立的地址空间(即使代码共享,数据段和栈也是独立的)。
- 即使运行在不同的数据集上,它们也是完全不同的进程实体。例如,打开两个Word窗口编辑两个不同的文档,就是两个不同的Word进程。
- 错误选项分析:
- B, C, D: 都是不相关的概念。
24. PCB 是进程存在的唯一标志,下列 ( D ) 不属于 PCB。
题目原文
24. PCB 是进程存在的唯一标志,下列 ( ) 不属于 PCB。
A. 进程 ID
B. CPU 状态
C. 堆栈指针
D. 全局变量
正确答案:D
题目解析
- 考点分析: 本题考察进程控制块(PCB)中包含的内容。
- 正确选项分析 (D. 全局变量):
- 全局变量是程序数据的一部分,它存放在进程的用户地址空间中的数据段或BSS段。
- PCB是操作系统内核中的数据结构,用于存放进程的管理信息,它不存放用户程序的变量。
- 错误选项分析(属于PCB的内容):
- A. 进程 ID (PID): 进程的唯一标识符,是PCB的核心内容。
- B. CPU 状态: 指CPU的各种寄存器的值(PC, 通用寄存器, PSW等),在进程切换时需要保存在PCB中。
- C. 堆栈指针 (SP): 是CPU状态的一部分,也需要保存在PCB中。
25. 一个计算机系统中, 进程的最大数量主要受到 ( A ) 限制。
题目原文
25. 一个计算机系统中, 进程的最大数量主要受到 ( ) 限制。
A. 内存大小 B. 用户数目 C. 打开的文件数 D. 外部设备数量
正确答案:A
题目解析
- 考点分析: 本题考察限制系统中可创建进程总数的因素。
- 【答案校对与分析】 您提供的答案是
C (打开的文件数)
。这是一个非常不直观的答案。 - 标准分析:
- 限制进程数量的主要因素是A. 内存大小。
- 每个进程都需要占用一定的内存空间来存放其PCB、页表、代码和数据等。
- 当内存(特别是内核空间)耗尽,无法再为新的PCB或页表分配空间时,就无法创建新进程了。
- 在Linux系统中,可以通过
/proc/sys/kernel/pid_max
来查看和设置最大进程数,这个值也间接受到内存大小的制约。
- 为什么答案可能是C?
- 在某些系统中,可能会将“打开的文件数”作为一个全局资源限制,而每个进程都会默认打开几个文件(标准输入、输出、错误)。如果这个全局限制很小,它可能会成为比内存更早到达的瓶颈。但这并不是一个普遍的、主要的原因。
- 结论: 标准答案应为A. 内存大小。此题的答案C非常奇怪,可能基于某个特定系统的特殊限制。
26. 进程创建完成后会进入一个序列,这个序列称为 ( C )
题目原文
26. 进程创建完成后会进入一个序列,这个序列称为 ( )
A. 阻塞队列 B. 挂起序列 C. 就绪队列 D. 运行队列
正确答案:C
题目解析
- 考点分析: 本题考察新创建进程的初始状态。
- 正确选项分析 (C. 就绪队列):
- 当一个进程通过创建原语完成了所有初始化工作(分配PCB、分配内存等)之后,它就具备了运行所需的一切条件,只差CPU。
- 此时,它的状态会被设置为就绪态 (Ready),并且其PCB会被链入到就绪队列中,等待操作系统调度程序的选择。
- 错误选项分析:
- A, B: 阻塞和挂起是进程在运行过程中因为等待事件或资源而进入的状态。
- D: 运行队列中通常只有一个(或在多核系统中有N个)进程。
27. 进程自身决定 ( A )
题目原文
27. 进程自身决定 ( )
A. 从运行态到阻塞态 B. 从运行态到就绪态
C. 从就绪态到运行态 D. 从阻塞态到就绪态
正确答案:A
题目解析
- 考点分析: 本题考察不同进程状态转换的触发者。
- 正确选项分析 (A. 从运行态到阻塞态):
- 一个正在运行的进程,当它执行到一条需要等待某个事件(如请求I/O、申请锁)的指令时,它会主动调用一个系统调用来发起请求。
- 这个主动的请求会导致操作系统将其状态转换为阻塞态。因此,这个状态转换是由进程自身的行为(执行了特定指令)引起的。
- 错误选项分析:
- B. 运行态 -> 就绪态: 由操作系统(调度程序)因时间片用完或被更高优先级进程抢占而被动转换。
- C. 就绪态 -> 运行态: 由操作系统(调度程序)选中而转换。
- D. 阻塞态 -> 就绪态: 由操作系统(中断处理程序或唤醒原语)在等待的事件发生后被动转换。
28. 下列关于原语操作的叙述中,错误的是 ( D )
题目原文
28. 下列关于原语操作的叙述中,错误的是 ( )
A. 操作系统使用原语对进程进行管理和控制
B. 原语在执行过程中不允许被中断
C. 原语在内核态下执行,常驻内存
D. 原语被定义为“原子操作”,意思是其执行速度非常快
正确答案:D
题目解析
- 考点分析: 本题考察对原语(Primitive) 和原子操作(Atomic Operation) 概念的理解。
- 错误选项分析 (D. …意思是其执行速度非常快):
- 这是错误的。原子操作的“原子”性,指的是该操作在执行过程中是不可分割、不可被中断的。
- 一旦开始,它就必须一气呵成地执行完毕,中间不允许任何其他并发事件(如中断、进程切换)插入。
- 这种不可中断性是为了保证对核心数据结构(如进程队列)修改的一致性。
- 它不意味着执行速度一定很快。一个原语可能包含多条指令,执行时间可能相对较长,但在此期间中断是被屏蔽的。
- 正确选项分析:
- A, B, C: 都是对原语的正确描述。
29. 用信箱实现进程间互通信息的通信机制要有两个通信原语,它们是 ( C )
题目原文
29. 用信箱实现进程间互通信息的通信机制要有两个通信原语,它们是 ( )
A. 发送原语和执行原语 B. 就绪原语和执行原语
C. 发送原语和接收原语 D. 就绪原语和接收原语
正确答案:C
题目解析
- 考点分析: 本题考察基于消息传递的IPC机制的基本操作。
- 正确选项分析 (C. 发送原语和接收原语):
- 基于消息传递的通信模型,无论是直接通信还是间接通信(信箱),都必然包含两个最基本的操作:
- 发送 (send): 一个进程将消息发送到目标(另一个进程或信箱)。
- 接收 (receive): 一个进程从源(另一个进程或信箱)接收消息。
- 这两个操作通常由操作系统以原语的形式提供。
- 基于消息传递的通信模型,无论是直接通信还是间接通信(信箱),都必然包含两个最基本的操作:
- 错误选项分析:
- A, B, D: “执行原语”和“就绪原语”是进程状态管理的原语,与通信无关。
30. 速度最快的进程通信方式是 ( C )
题目原文
30. 速度最快的进程通信方式是 ( )
A. 消息传递 B. Socket C. 共享内存 D. 管道
正确答案:C
题目解析
- 考点分析: 本题比较不同IPC方式的通信效率。
- 正确选项分析 (C. 共享内存):
- 共享内存方式下,操作系统在初始化时,将同一块物理内存映射到多个进程的虚拟地址空间。
- 一旦映射建立,这些进程就可以像访问自己的私有内存一样,直接对这块共享区域进行读写,无需再通过操作系统内核进行数据拷贝。
- 它避免了内核介入和数据复制的开销,因此是速度最快的IPC方式。
- 错误选项分析(速度较慢):
- A. 消息传递、B. Socket(网络套接字,也是一种消息传递)、D. 管道 (Pipe):这些方式都需要将数据从发送进程的用户空间拷贝到内核空间,再从内核空间拷贝到接收进程的用户空间。这两次数据拷贝和频繁的内核陷入开销,使得它们的速度远慢于共享内存。
31. 信箱通信是一种 ( B ) 通信方式。
题目原文
31. 信箱通信是一种 ( ) 通信方式。
A. 直接通信 B. 间接通信 C. 低级通信 D. 信号量
正确答案:B
题目解析
- 考点分析: 本题考察消息传递IPC中的两种基本模式。
- 正确选项分析 (B. 间接通信, Indirect Communication):
- 消息传递通信可以分为:
- 直接通信: 发送进程直接将消息发送给指定的接收进程。
- 间接通信: 发送进程将消息发送到一个中间实体——信箱(Mailbox) 或端口,接收进程再从这个信箱中获取消息。
- 信箱作为通信的中介,实现了发送者和接收者的解耦。
- 消息传递通信可以分为:
- 错误选项分析:
- A: 直接通信不使用信箱。
- C: 低级通信通常指信号量等同步机制。
- D: 信号量是同步机制,不是通信方式。
32. 下列关于信号发送和处理的描述中,错误的是 ( D )
题目原文
32. 下列关于信号发送和处理的描述中,错误的是 ( )
A. 一个进程可以给自己发送信号
B. 操作系统的内核可以给进程发送信号
C. 操作系统的内核对每种信号都有默认处理程序
D. 用户可以对每种信号自定义处理函数
正确答案:D
题目解析
- 考点分析: 本题考察UNIX/Linux中信号(Signal)机制的细节。
- 错误选项分析 (D. 用户可以对每种信号自定义处理函数):
- 这个说法是错误的,因为它过于绝对。
- 大部分信号,用户进程都可以通过
signal()
或sigaction()
系统调用来“捕捉(catch)”并提供自定义的处理函数。 - 但是,有两种特殊的信号是不能被捕捉、不能被忽略、也不能被阻塞的,它们必须由内核执行默认操作。这两个信号是:
- SIGKILL (9): 强制杀死进程。
- SIGSTOP (19): 强制暂停进程。
- 正确选项分析:
- A: 正确,例如通过
kill(getpid(), SIGUSR1)
。 - B: 正确,内核在检测到异常(如非法内存访问->SIGSEGV)或硬件事件时会给进程发信号。
- C: 正确,每种信号都有一个默认动作,如终止进程、忽略信号、暂停进程等。
- A: 正确,例如通过
33. 下列关于信号的处理的描述中,错误的是 ( B )
题目原文
33. 下列关于信号的处理的描述中,错误的是 ( )
A. 当进程从内核态转为用户态时,会检查是否有待处理的信号
B. 当进程从用户态转为内核态时,也会检查是否有待处理的信号
C. 操作系统对某些信号的处理是可以忽略的
D. 操作系统允许进程通过系统调用,自定义某些信号的处理程序
正确答案:B
题目解析
- 考点分析: 本题考察操作系统内核处理信号的精确时机。
- 错误选项分析 (B. 当进程从用户态转为内核态时,也会检查是否有待处理的信号):
- 这是错误的。
- 信号处理函数是在用户空间执行的。
- 内核检查和处理信号的时机是在即将从内核态返回到用户态之前。
- 例如,一个系统调用或中断处理完毕,准备返回用户程序时,内核会检查该进程是否有未决(pending)的信号。如果有,就会先切换到用户空间去执行信号处理函数,执行完毕后再返回到原程序的断点。
- 在进入内核态时检查是没有意义的,因为此时无法立即去执行用户空间的信号处理函数。
- 正确选项分析:
- A: 正确,这是处理信号的主要时机。
- C: 正确,进程可以设置忽略某些信号(如SIGCHLD)。
- D: 正确,这是
signal()
系统调用的功能。
34. 下面的叙述中,正确的是 ( D )
题目原文
34. 下面的叙述中,正确的是 ( )
A. 引入线程后,处理器只能在线程间切换
B. 引入线程后,处理器仍在进程间切换
C. 线程的切换,不会引起进程的切换
D. 线程的切换,可能引起进程的切换
正确答案:D
题目解析
- 考点分析: 本题考察引入线程后,线程切换与进程切换的关系。
- 正确选项分析 (D. 线程的切换,可能引起进程的切换):
- 这是一个最全面、最准确的描述。分两种情况:
- 不引起进程切换: 如果调度程序选择同一个进程中的另一个线程来运行,那么这只是线程上下文的切换,进程的地址空间等资源保持不变。
- 引起进程切换: 如果调度程序选择的是另一个进程中的线程来运行,那么不仅要进行线程上下文的切换,还必须进行进程上下文的切换(如切换页表、地址空间等)。
- 因此,线程切换“可能”引起进程切换。
- 这是一个最全面、最准确的描述。分两种情况:
- **错误选项分析:
- A, B: 处理器(调度程序)调度的基本单位是线程,切换既可能在同一进程内,也可能在不同进程间。
- C: 过于绝对,当切换到不同进程的线程时,就会引起进程切换。
35. 下列关于线程的叙述中,正确的是 ( A )
题目原文
35. 下列关于线程的叙述中,正确的是 ( )
A. 线程包含 CPU 现场,可以独立执行程序
B. 每个线程都有自己独立的地址空间
C. 每个进程只能包含一个线程
D. 同一进程中的线程间通信也必须使用系统调用函数
正确答案:A
题目解析
- 考点分析: 本题考察线程的核心特性。
- 正确选项分析 (A. 线程包含 CPU 现场,可以独立执行程序):
- 线程是CPU调度和分派的基本单位。
- 为了能够被独立调度和执行,每个线程都必须拥有自己的一套独立的CPU现场(上下文),这主要包括:
- 程序计数器 (PC)
- 一套寄存器的值 (通用寄存器, 状态寄存器)
- 线程私有的栈和栈指针 (SP)
- 正是因为有了这些独立的执行上下文,线程才能“独立执行程序”(更准确地说是执行程序中的一段代码流)。
- 错误选项分析:
- B: 同一进程中的所有线程共享该进程的地址空间。
- C: 一个进程可以包含一个或多个线程。
- D: 同一进程中的线程因为共享地址空间,可以通过直接读写全局变量或堆内存来进行通信,这不需要系统调用,是最高效的通信方式。
36. 下面的叙述中,正确的是 ( B )
题目原文
36. 下面的叙述中,正确的是 ( )
A. 线程是比进程更小的能独立运行的基本单位,可以脱离进程独立运行
B. 引入线程可提高程序并发执行的程度,可进一步提高系统效率
C. 线程的引入增加了程序执行时的时空开销
D. 一个进程一定包含多个线程
正确答案:B
题目解析
- 考点分析: 本题考察引入线程技术的主要优点。
- 正确选项分析 (B. 引入线程可提高程序并发执行的程度,可进一步提高系统效率):
- 提高并发度: 在一个进程内部,可以将原本需要串行执行的任务(如一个计算任务和一个I/O任务)分解到不同的线程中并发执行,从而提高了程序内部的并发程度。
- 提高系统效率:
- 创建/销毁开销小: 创建一个线程远比创建一个进程快,因为它无需分配新的地址空间。
- 切换开销小: 同一进程内的线程切换,只需切换CPU现场,而无需切换地址空间,速度远快于进程切换。
- 这些都使得系统能够更高效地利用资源。
- 错误选项分析:
- A: 线程不能脱离进程独立运行,它是进程的执行实体。
- C: 线程的引入减少了并发执行时的时空开销(相比于多进程模型)。
- D: 一个进程可以只包含一个线程(传统进程模型)。
37. 下面的叙述中,正确的是 ( D )
题目原文
37. 下面的叙述中,正确的是 ( )
A. 同一进程内的线程可并发执行,不同进程的线程只能串行执行
B. 同一进程内的线程只能串行执行,不同进程的线程可并发执行
C. 同一进程或不同进程内的线程都只能串行执行
D. 同一进程或不同进程内的线程都可以并发执行
正确答案:D
题目解析
- 考点分析: 本题考察线程的并发性范围。
- 正确选项分析 (D. 同一进程或不同进程内的线程都可以并发执行):
- 操作系统调度的基本单位是线程。
- 调度程序看到的就绪队列是一个由来自不同进程的线程组成的队列。
- 调度程序每次从中选择一个线程投入运行,无论是来自同一个进程还是不同进程,它们都可以并发地(在单核上交替,在多核上并行)执行。
- **错误选项分析:
- A, B, C: 都错误地限制了线程的并发范围。
38. 下列选项中,( D ) 不是线程的优点。
题目原文
38. 下列选项中,( ) 不是线程的优点。
A. 提高系统并发性 B. 节约系统资源 C. 便于进程通信 D. 增强进程安全性
正确答案:D
题目解析
- 考点分析: 本题考察线程的优缺点。
- 正确选项分析 (D. 增强进程安全性):
- 线程的引入反而降低了安全性。
- 由于同一进程内的所有线程共享同一个地址空间和资源,一个线程的错误(如野指针、非法内存访问)可能会导致整个进程崩溃,并影响到该进程内的所有其他线程。
- 相比之下,多进程模型中,进程之间地址空间隔离,一个进程的崩溃通常不会影响其他进程。
- 错误选项分析(是线程的优点):
- A. 提高系统并发性:正确。
- B. 节约系统资源:正确。创建和切换线程的开销远小于进程。
- C. 便于进程通信:应为“便于线程间通信”。同一进程内的线程通信非常方便(通过共享内存)。
39. 下列关于进程和线程的说法中, 正确的是 ( B )
题目原文
39. 下列关于进程和线程的说法中, 正确的是 ( )
A. 一个进程可以包含一个或多个线程,一个线程可以属于一个或多个进程
B. 多线程技术具有明显的优越性,如速度快、通信简便、设备并行性高等
C. 由于线程不作为资源分配单位, 线程之间可以无约束地并行执行
D. 线程又称轻量级进程,因为线程都比进程小
正确答案:B
题目解析
- 考点分析: 本题综合考察对多线程优点的概括。
- 正确选项分析 (B. …速度快、通信简便、设备并行性高等):
- 速度快: 指的是线程的创建、销毁和切换速度快。
- 通信简便: 同一进程内的线程通过共享内存通信,非常高效。
- 设备并行性高: 可以用一个线程处理计算,另一个线程处理I/O,实现计算与I/O的并行。
- 这个选项较好地概括了多线程的优点。
- 错误选项分析:
- A: 一个线程只能属于一个进程。
- C: 线程之间共享资源,它们的并行执行必须受到同步机制(如锁、信号量)的约束,以避免竞态条件。
- D: “轻量级”指的是其创建和切换的开销小,而不是说线程的代码或数据一定比进程小。
40. 在以下描述中,( C ) 并不是多线程系统的特长。
题目原文
40. 在以下描述中,( ) 并不是多线程系统的特长。
A. 利用线程并行地执行矩阵乘法运算
B. Web 服务器利用线程响应 HTTP 请求
C. 键盘驱动程序为每个正在运行的应用配备一个线程,用以响应该应用的键盘输入
D. 基于 GUI 的调试程序用不同的线程分别处理用户输入、计算和跟踪等操作
正确答案:C
题目解析
- 考点分析: 本题要求从几个应用场景中,找出不适合使用多线程的。
- 正确选项分析 (C. 键盘驱动程序为每个…应用配备一个线程…):
- 这个设计是不合理且不必要的。
- 键盘是一个典型的慢速、串行设备。所有的键盘输入都通过一个单一的硬件中断进入系统。
- 通常的设计是,内核中有一个单一的键盘中断处理程序和驱动程序,它负责接收所有的按键事件,并根据当前哪个窗口是活动的,将事件分派给对应的应用程序。
- 为每个应用都创建一个专门的线程来等待键盘输入,会造成大量的线程切换和资源浪费,且没有实际意义。
- 错误选项分析(是多线程的典型应用):
- A. 并行计算: 将大任务(如矩阵乘法)分解给多个线程,在多核CPU上并行执行,是多线程的核心应用。
- B. 并发服务器: Web服务器为每个客户端的HTTP请求创建一个新的线程来处理,可以同时服务大量客户端,是经典的并发模型。
- D. GUI应用: 将负责界面响应(用户输入)、后台计算、数据更新等任务分配给不同的线程,可以防止因后台计算耗时过长而导致界面卡死,提升用户体验。
41. 在进程转换时,下列 ( D ) 转换是不可能发生的。
题目原文
41. 在进程转换时,下列 ( ) 转换是不可能发生的。
A. 就绪态 → 运行态 B. 运行态 → 就绪态 C. 运行态 → 阻塞态 D. 阻塞态 → 运行态
正确答案:D
题目解析
- 考点分析: 本题考察进程三状态模型中,状态转换的合法路径。
- 错误选项分析 (D. 阻塞态 → 运行态):
- 这个转换是不可能直接发生的。
- 一个处于阻塞态的进程,当它等待的事件发生后,它会被操作系统唤醒。
- 唤醒操作只是将该进程的状态从阻塞态改为就绪态,并将其放入就绪队列。
- 它只是获得了竞争CPU的资格,但还没有真正获得CPU。
- 之后,它必须等待调度程序在未来的某个时刻选中它,才能从就绪态转换到运行态。
- 正确选项分析(是可能的转换):
- A. 就绪态 → 运行态: 进程被调度程序选中。
- B. 运行态 → 就绪态: 时间片用完或被更高优先级进程抢占。
- C. 运行态 → 阻塞态: 进程发起I/O请求或等待某个资源。
42. 当 ( B ) 时, 进程从执行状态转变为就绪态。
题目原文
42. 当 ( ) 时, 进程从执行状态转变为就绪态。
A. 进程被调度程序选中 B. 时间片到
C. 等待某一事件 D. 等待的事件发生
正确答案:B
题目解析
- 考点分析: 本题考察从“运行态”到“就绪态”的具体转换原因。
- 正确选项分析 (B. 时间片到, Time Slice Expired):
- 在采用时间片轮转或优先级抢占的调度算法中,一个进程从运行态回到就绪态主要有两个原因:
- 时间片用完: 进程用完了分配给它的CPU时间片,操作系统会强制剥夺其CPU使用权,将其放回就绪队列的末尾。
- 被更高优先级进程抢占: 一个更高优先级的进程从阻塞态变为就绪态,调度程序会立即剥夺当前运行进程的CPU,分配给那个更高优先级的进程。
- 选项B是其中最主要、最常见的原因。
- 在采用时间片轮转或优先级抢占的调度算法中,一个进程从运行态回到就绪态主要有两个原因:
- 错误选项分析:
- A: 这是就绪 -> 运行。
- C: 这是运行 -> 阻塞。
- D: 这是阻塞 -> 就绪。
43. 两个合作进程 (CooperatingProcesses) 无法利用 ( C ) 交换数据。
题目原文
43. 两个合作进程 (CooperatingProcesses) 无法利用 ( ) 交换数据。
A. 文件系统 B. 共享内存
C. 高级语言程序设计中的全局变量 D. 消息传递系统
正确答案:C
题目解析
- 考点分析: 本题考察进程间通信(IPC)的有效手段,以及进程地址空间隔离的后果。
- 正确选项分析 (C. 高级语言程序设计中的全局变量):
- 全局变量的作用域仅限于单个进程的地址空间。
- 由于操作系统为每个进程提供了独立的、隔离的虚拟地址空间,一个进程中定义的全局变量,在另一个进程中是不可见、不可访问的。
- 因此,普通全局变量不能被用来在两个独立的进程之间交换数据。
- 错误选项分析(是有效的IPC方式):
- A. 文件系统: 一个进程写文件,另一个进程读文件,是最古老也是最通用的IPC方式。
- B. 共享内存: 操作系统将同一块物理内存映射到两个进程的地址空间,它们可以通过这块共享区域直接交换数据。
- D. 消息传递系统: 进程通过内核提供的
send/receive
原语来交换消息。
44. 以下可能导致一个进程从运行态变为就绪态的事件是 ( D )
(该题题干与答案存在矛盾,此处按标准理论分析)
题目原文
44. 以下可能导致一个进程从运行态变为就绪态的事件是 ( )
A. 一次 I/O 操作结束
B. 运行进程需做 I/O 操作
C. 运行进程结束
D. 出现了比现在进程优先级更高的进程
正确答案:D
题目解析
- 考点分析: 本题再次考察进程状态转换的原因。
- 正确选项分析 (D. 出现了比现在进程优先级更高的进程):
- 在抢占式优先级调度算法中,如果一个更高优先级的进程因为I/O完成等原因从阻塞态变为就绪态,调度程序会立即剥夺当前正在运行的(较低优先级的)进程的CPU使用权,使其状态从运行态变为就绪态。
- 错误选项分析:
- A. 一次 I/O 操作结束:这个事件会导致一个阻塞的进程被唤醒,变为就绪态。它可能会间接导致当前运行进程变为就绪态(如果被唤醒的进程优先级更高),但它本身不是直接原因。
- B. 运行进程需做 I/O 操作:会导致当前进程从运行 -> 阻塞。
- C. 运行进程结束:会导致当前进程从运行 -> 终止。
- 【答案校对】 您提供的答案是
A
。这个答案的逻辑是:I/O结束 -> 某个阻塞进程P’被唤醒 -> P’进入就绪队列 -> 调度程序发现P’的优先级高于当前运行进程P -> 抢占P,使P从运行->就绪。A是这个链条的初始事件。在选择题中,有时会考察初始触发事件。但D的描述更直接、更准确。
45. ( B ) 必会引起进程切换。
题目原文
45. ( ) 必会引起进程切换。
A. 一个进程创建后,进入就绪态
B. 一个进程从运行态变为就绪态
C. 一个进程从阻塞态变为就绪态
D. 以上答案都不对
正确答案:B
题目解析
- 考点分析: 本题考察哪些事件必然导致CPU调度(进程切换)。
- 正确选项分析 (B. 一个进程从运行态变为就绪态):
- 一个进程从运行态离开,无论是变为就绪态(时间片用完/被抢占)还是阻塞态,都意味着CPU空闲出来了。
- 只要就绪队列中还有其他进程,操作系统必须立即进行进程切换,从就绪队列中选择一个新的进程投入运行。
- 错误选项分析:
- A, C: 一个进程进入就绪态,只是增加了一个可被调度的候选者。它不一定会立即引起切换。只有当这个新进入就绪态的进程的优先级高于当前正在运行的进程时,才会发生抢占式切换。如果它的优先级较低,当前进程会继续运行。
46. 进程处于 ( C ) 时, 它处于非阻塞态。
题目原文
46. 进程处于 ( ) 时, 它处于非阻塞态。
A. 等待从键盘输入数据
B. 等待协作进程的一个信号
C. 等待操作系统分配 CPU 时间
D. 等待网络数据进入内存
正确答案:C
题目解析
- 考点分析: 本题要求区分阻塞态和就绪态。
- 正确选项分析 (C. 等待操作系统分配 CPU 时间):
- “等待CPU时间”是就绪态(Ready) 的精确定义。
- 处于就绪态的进程,已经万事俱备(所需资源都已满足),没有被任何事件阻塞,只差CPU就可以运行。
- 错误选项分析(都属于阻塞态):
- A, B, D: 等待键盘输入、等待信号、等待网络数据,都是在等待CPU以外的某个事件或资源,这些都是导致进程进入阻塞态(Blocked / Waiting) 的典型原因。
47. 一个进程被唤醒,意味着 ( A )
题目原文
47. 一个进程被唤醒,意味着 ( )
A. 该进程可以重新竞争 CPU
B. 优先级变大
C. PCB 移动到就绪队列之首
D. 进程变为运行态
正确答案:A
题目解析
- 考点分析: 本题考察“唤醒”操作的本质。
- 正确选项分析 (A. 该进程可以重新竞争 CPU):
- “唤醒”一个进程,是指当它所等待的事件发生后,操作系统将其状态从阻塞态改为就绪态,并将其PCB放入就绪队列。
- 进入就绪队列,就意味着它重新获得了参与CPU调度的资格,可以开始“竞争CPU”了。这是对唤醒操作最本质的描述。
- 错误选项分析:
- B: 唤醒不一定会改变优先级(虽然在某些动态优先级算法中可能会)。
- C: 不一定移动到队首,取决于调度算法(如优先级队列)。
- D: 只是变为就绪态,不是运行态。
48. 进程创建时,不需要做的是 ( D )
题目原文
48. 进程创建时,不需要做的是 ( )
A. 填写一个该进程的进程表项
B. 分配该进程适当的内存
C. 将该进程插入就绪队列
D. 为该进程分配 CPU
正确答案:D
题目解析
- 考点分析: 本题与第8题考点完全相同,考察进程创建原语的工作。
- 正确选项分析 (D. 为该进程分配 CPU):
- 进程创建原语的职责是初始化一个进程,使其达到就绪状态。
- 分配CPU是调度程序在进程创建完成之后才做的事情。
- 错误选项分析(都是创建步骤):
- A: 填写进程表项(PCB)。
- B: 分配内存。
- C: 插入就绪队列。
49. 计算机两个系统中两个协作进程之间不能用来进行进程间通信的是 ( A )
题目原文
49. 计算机两个系统中两个协作进程之间不能用来进行进程间通信的是 ( )
A. 数据库
B. 共享内存
C. 消息传递机制
D. 管道
正确答案:A
题目解析
- 考点分析: 本题考察进程间通信(IPC)机制的范畴。
- 正确选项分析 (A. 数据库):
- 数据库是一个应用层的软件系统,它自身可能会使用底层的IPC机制,但它本身不是操作系统提供的一种通用的、底层的IPC机制。
- 虽然两个进程可以通过读写同一个数据库表来进行数据交换,但这是一种非常高层次的、间接的协作方式。
- 错误选项分析(是IPC机制):
- B. 共享内存、C. 消息传递、D. 管道:都是操作系统提供的经典的、底层的IPC机制。
50. 下面关于用户级线程和内核级线程的描述中,错误的是 ( B )
题目原文
50. 下面关于用户级线程和内核级线程的描述中,错误的是 ( )
A. 采用轮转调度算法,进程中设置内核级线程和用户级线程的效果完全不同
B. 跨进程的用户级线程调度也不需要内核参与,控制简单
C. 用户级线程可以在任何操作系统中运行
D. 若系统中只有用户级线程,则 CPU 的调度对象是进程
正确答案:B
题目解析
- 考点分析: 本题考察用户级线程和内核级线程的对比。
- 错误选项分析 (B. 跨进程的用户级线程调度也不需要内核参与,控制简单):
- 这个说法是错误的,而且存在逻辑矛盾。
- 用户级线程的调度是在用户空间由线程库完成的,这个调度只在同一个进程内部有效。
- 跨进程的调度,即从一个进程的线程切换到另一个进程的线程,必然涉及到进程上下文的切换,这个操作必须由操作系统内核来完成。
- 用户级线程调度根本就不存在“跨进程”的情况。
- 正确选项分析:
- A: 正确。对于内核级线程,内核可以给每个线程分配时间片;对于用户级线程,内核只给整个进程分配时间片,由进程内部的线程库再分配。
- C: 正确,因为用户级线程的实现对内核是透明的,只需要一个实现了线程库的运行时环境即可。
- D: 正确,在纯用户级线程模型中,内核只看得到进程,因此其调度对象是进程。
51. 在内核级线程相对于用户级线程的优点的如下描述中,错误的是 ( A )
题目原文
51. 在内核级线程相对于用户级线程的优点的如下描述中,错误的是 ( )
A. 同一进程内的线程切换,系统开销小
B. 当内核线程阻塞时, CPU 将会调度同一进程中的其他内核线程执行
C. 内核级线程的程序实体可以在内核态运行
D. 对多处理器系统,核心可以同时调度同一进程的多个线程并行运行
正确答案:A
题目解析
- 考点分析: 本题要求找出不属于内核级线程优点的描述,实际上就是找出用户级线程的优点或内核级线程的缺点。
- 错误选项分析 (A. 同一进程内的线程切换,系统开销小):
- 这个描述是用户级线程的优点,而不是内核级线程。
- 用户级线程的切换完全在用户空间由线程库完成,无需陷入内核,因此上下文切换的开销非常小。
- 内核级线程的切换必须陷入内核态,由操作系统调度程序完成,虽然比进程切换开销小,但比用户级线程切换的开销要大得多。
- 正确选项分析(是内核级线程的优点):
- B: 正确。当一个内核级线程因I/O等原因阻塞时,内核知道这一情况,可以立即调度该进程中的其他就绪线程来运行。而对于用户级线程,一个线程阻塞会导致整个进程阻塞。
- C: “程序实体”这个词不准确,但内核级线程由内核管理,可以执行内核代码。
- D: 正确。内核能够识别每一个内核级线程,因此可以在多核处理器上,将同一个进程的多个线程真正并行地调度到不同的核心上运行。而纯用户级线程模型无法做到这一点。
52. 下列关于用户级线程相对于内核级线程的优点的描述中,错误的是 ( A )
题目原文
52. 下列关于用户级线程相对于内核级线程的优点的描述中,错误的是 ( )
A. 一个线程阻塞不影响另一个线程的运行
B. 线程的调度不需要内核直接参与, 控制简单
C. 线程切换代价小
D. 允许每个进程定制自己的调度算法,线程管理比较灵活
正确答案:A
题目解析
- 考点分析: 本题要求找出不属于用户级线程优点的描述,实际上就是找出内核级线程的优点或用户级线程的缺点。
- 错误选项分析 (A. 一个线程阻塞不影响另一个线程的运行):
- 这个描述是错误的,这恰恰是用户级线程的最大缺点。
- 在纯用户级线程模型中,操作系统内核只看得到进程,而不知道线程的存在。
- 当该进程中的任何一个用户级线程因为执行了一个阻塞型系统调用(如
read
)而被内核阻塞时,内核会阻塞整个进程。 - 这样,该进程中的所有其他就绪的用户级线程也无法被调度运行了。
- 正确选项分析(是用户级线程的优点):
- B, C, D: 都是用户级线程的核心优点:切换开销小、无需内核干预、调度算法灵活。
53. 下列关于用户级线程的优点的描述中,不正确的是 ( D )
题目原文
53. 下列关于用户级线程的优点的描述中,不正确的是 ( )
A. 线程切换不需要切换到内核态
B. 支持不同的应用程序采用不同的调度算法
C. 在不同操作系统上不经修改就可直接运行
D. 同一个进程内的多个线程可以同时调度到多个处理器上执行
正确答案:D
题目解析
- 考点分析: 本题与上一题类似,要求找出不属于用户级线程优点的描述。
- 错误选项分析 (D. …可以同时调度到多个处理器上执行):
- 这是错误的,是纯用户级线程模型的一个重大缺陷。
- 因为内核只把整个进程当作一个调度单位,它一次只会将这个进程调度到一个CPU核心上运行。
- 内核看不到进程内部的多个用户级线程,因此无法将它们并行地分派到多个处理器核心上。
- 正确选项分析(是用户级线程的优点):
- A: 正确,切换在用户态完成,开销小。
- B: 正确,每个进程的线程库可以实现自己的调度算法。
- C: 正确,因为对内核透明,所以可移植性好。
54. 下列选项中, 可能导致用户级线程切换的事件是 ( D )
题目原文
54. 下列选项中, 可能导致用户级线程切换的事件是 ( )
A. 系统调用 B. I/O 请求 C. 异常处理 D. 线程同步
正确答案:B
题目解析
- 考点分析: 本题考察触发用户级线程调度的时机。
- 正确选项分析 (B. I/O 请求):
- 【答案校对与分析】 您提供的答案是
B
。但A, B, C
都会导致进程陷入内核并可能阻塞,从而无法进行用户级线程切换。 - D. 线程同步 是最明确的答案。当一个线程执行
thread_yield()
(主动让出CPU)或者尝试获取一个已被其他线程占有的用户级锁(互斥量) 时,用户空间的线程库调度器就会被触发,进行一次用户级线程切换。 - 为什么答案可能是B?
- 为了解决用户级线程一个阻塞、全体阻塞的问题,线程库通常会使用非阻塞的(异步)I/O 系统调用。
- 当一个线程发起I/O请求时,线程库调用非阻塞
read
,如果数据未准备好,系统调用立即返回。此时,线程库就可以将这个线程置为“阻塞”状态,并调度运行该进程中的另一个就绪线程。 - 从这个角度看,I/O请求是触发用户级线程切换的一个重要时机。
- 【答案校对与分析】 您提供的答案是
- 结论: 在现代配合异步I/O的线程库模型下,B是合理的。但D(线程同步)是更普遍、更直接的触发原因。
55. 下列关于用户级线程的描述中,错误的是 ( B )
题目原文
55. 下列关于用户级线程的描述中,错误的是 ( )
A. 用户级线程由线程库进行管理
B. 用户级线程只有在创建和调度时需要内核的干预
C. 操作系统无法直接调度用户级线程
D. 线程库中线程的切换不会导致进程切换
正确答案:B
题目解析
- 考点分析: 本题考察用户级线程与内核的关系。
- 错误选项分析 (B. 用户级线程只有在创建和调度时需要内核的干预):
- 这是错误的。用户级线程的创建、调度、切换、销毁等所有管理工作,完全由用户空间的线程库来完成,完全不需要内核的任何干预。这正是其“轻量级”和高效的原因。
- 正确选项分析:
- A: 正确,线程库是用户级线程的实现核心。
- C: 正确,因为内核对用户级线程的存在一无所知。
- D: 正确,用户级线程切换只在同一个进程内部进行,不涉及进程上下文的改变。
56. 下面的说法中, 正确的是 ( C )
题目原文
56. 下面的说法中, 正确的是 ( )
A. 不论是系统支持的线程还是用户级线程,其切换都需要内核的支持
B. 线程是资源分配的单位,进程是调度和分派的单位
C. 不管系统中是否有线程,进程都是拥有资源的独立单位
D. 在引入线程的系统中,进程仍是资源调度和分派的基本单位
正确答案:C
题目解析
- 考点分析: 本题考察引入线程后,进程和线程角色的重新划分。
- 正确选项分析 (C. 不管系统中是否有线程,进程都是拥有资源的独立单位):
- 这是对进程本质的准确描述。
- 引入线程后,进程的角色被固化为资源分配和拥有的基本单位。它拥有地址空间、打开的文件、信号量等所有资源。
- 而线程则成为CPU调度和分派的基本单位。
- 即使在一个没有多线程概念的传统系统中,进程也同样扮演着拥有资源的角色。
- 错误选项分析:
- A: 用户级线程切换不需要内核支持。
- B: 说反了。进程是资源单位,线程是调度单位。
- D: 引入线程后,线程成为调度和分派的基本单位。
57. 在多对一的线程模型中,当一个多线程进程中的某个线程被阻塞后,( B )
(该题题干与答案存在矛盾)
题目原文
57. 在多对一的线程模型中,当一个多线程进程中的某个线程被阻塞后,( )
A. 该进程的其他线程仍可继续运行
B. 整个进程都将阻塞
C. 该阻塞线程将被撤销
D. 该阻塞线程将永远不可能再执行
正确答案:B
题目解析
- 考点分析: 本题考察多对一线程模型的阻塞问题。
- 多对一模型:
- 多个用户级线程映射到一个内核级线程。
- 整个进程在内核看来只有一个执行实体(那个内核线程)。
- 正确选项分析 (B. 整个进程都将阻塞):
- 当这个进程中的任何一个用户级线程执行了一个阻塞型系统调用时,内核会阻塞与之对应的那个唯一的内核级线程。
- 由于整个进程只有一个内核级线程,这个内核级线程一旦被阻塞,那么该进程中的所有其他用户级线程,即使它们处于就绪态,也无法被调度运行了。
- 因此,整个进程都会被阻塞。
- 【答案校对】 您提供的答案是
A (该进程的其他线程仍可继续运行)
。这个描述是一对一或多对多模型的特点,而不是多对一模型。- 结论: 此题的答案
A
与“多对一”模型的定义是矛盾的。正确的答案应为B。
- 结论: 此题的答案
58. 并发性较好的多线程模型有 ( C )
I.一对一模型 II.多对一模型 III.多对多模型
正确答案:C
题目解析
- 考点分析: 本题考察不同线程模型在并发能力上的对比。
- 逐项分析:
- I. 一对一模型 (One-to-One Model):
- 每个用户级线程都映射到一个独立的内核级线程。
- 并发性好: 一个线程阻塞,不影响其他线程;在多核CPU上,多个线程可以真正并行执行。
- II. 多对一模型 (Many-to-One Model):
- 多个用户级线程映射到一个内核级线程。
- 并发性差: 一个线程阻塞,整个进程(包括所有其他线程)都会阻塞;无法利用多核并行。
- III. 多对多模型 (Many-to-Many Model):
- 多个用户级线程映射到多个(通常数目较少)内核级线程上。
- 并发性好: 结合了一对一和多对一的优点。一个线程阻塞,内核可以调度另一个就绪的用户级线程到其他内核线程上运行;可以利用多核并行。
- I. 一对一模型 (One-to-One Model):
- 组合判断: 一对一模型(I)和多对多模型(III)都具有较好的并发性。
59. 下列关于多对一模型的叙述中,错误的是 ( C )
题目原文
59. 下列关于多对一模型的叙述中,错误的是 ( )
A. 一个进程的多个线程不能并行运行在多个处理器上
B. 进程中的用户级线程由进程自己管理
C. 线程切换会导致进程切换
D. 一个线程的系统调用会导致整个进程阻塞
正确答案:C
题目解析
- 考点分析: 本题考察多对一线程模型的特点。
- 错误选项分析 (C. 线程切换会导致进程切换):
- 这是错误的。
- 在多对一模型中,多个用户级线程的切换是在用户空间由线程库完成的,无需内核干预。
- 因此,这种线程切换不会导致进程切换。
- 正确选项分析(是多对一模型的特点):
- A: 正确,因为整个进程只有一个内核线程,所以一次只能在一个处理器上运行。
- B: 正确,用户级线程的管理对内核是透明的。
- D: 正确,这是该模型最大的缺点,一个线程阻塞,整个进程阻塞。
60. 【2010统考真题】下列选项中, 导致创建新进程的操作是 ( C )
I.用户登录成功 II.设备分配 III.启动程序执行
正确答案:C
题目解析
- 考点分析: 本题与第10题类似,考察创建新进程的典型事件。
- 逐项分析:
- I. 用户登录成功: 是。操作系统会为该用户启动一个会话管理进程(如Shell)。
- II. 设备分配: 不是。设备分配是操作系统为已存在的进程分配I/O资源,不创建新进程。
- III. 启动程序执行: 是。用户通过命令行或图形界面启动一个应用程序,操作系统就会为其创建一个新进程。
- 组合判断: I 和 III 是导致创建新进程的操作。
61. 【2011统考真题】在支持多线程的系统中, 进程 P 创建的若干线程不能共享的是 ( D )
题目原文
61. 【2011统考真题】在支持多线程的系统中, 进程 P 创建的若干线程不能共享的是 ( )
A. 进程 P 的代码段 B. 进程 P 中打开的文件
C. 进程 P 的全局变量 D. 进程 P 中某线程的栈指针
正确答案:D
题目解析
- 考点分析: 本题考察同一进程内,线程之间共享和私有的资源。
- 正确选项分析 (D. 进程 P 中某线程的栈指针):
- 线程私有资源: 为了保证线程能够独立执行函数调用,每个线程都必须拥有自己私有的栈(Stack) 和 栈指针(Stack Pointer, SP)。线程的局部变量、函数参数、返回地址都存放在其私有栈中。
- 此外,线程的程序计数器(PC) 和寄存器组也是私有的。
- 错误选项分析(是共享资源):
- A. 代码段: 所有线程执行的是同一份程序代码,共享。
- B. 打开的文件: 进程打开的文件由内核维护,所有线程共享文件描述符表。
- C. 全局变量(数据段/堆): 整个进程的地址空间是共享的,因此全局变量和堆内存也是共享的。
62. 【2012统考真题】下列关于进程和线程的叙述中,正确的是 ( A )
题目原文
62. 【2012统考真题】下列关于进程和线程的叙述中,正确的是 ( )
A. 不管系统是否支持线程,进程都是资源分配的基本单位
B. 线程是资源分配的基本单位,进程是调度的基本单位
C. 系统级线程和用户级线程的切换都需要内核的支持
D. 同一进程中的各个线程拥有各自不同的地址空间
正确答案:A
题目解析
- 考点分析: 本题与第56题考点相同,再次考察引入线程后进程和线程的角色划分。
- 正确选项分析 (A. 不管系统是否支持线程,进程都是资源分配的基本单位):
- 这是对进程角色的最准确描述。
- 在传统的不支持线程的系统中,进程既是资源分配单位,也是调度单位。
- 在支持线程的现代系统中,进程被定义为资源分配和拥有的基本单位,而线程成为调度的基本单位。
- 无论在哪种系统中,“进程是资源分配单位”这一点是始终成立的。
- 错误选项分析:
- B: 说反了。
- C: 用户级线程切换不需要内核支持。
- D: 同一进程的线程共享地址空间。
63. 【2014统考真题】一个进程的读磁盘操作完成后, 操作系统针对该进程必做的是 ( A )
题目原文
63. 【2014统考真题】一个进程的读磁盘操作完成后, 操作系统针对该进程必做的是 ( )
A. 修改进程状态为就绪态 B. 降低进程优先级
C. 给进程分配用户内存空间 D. 增加进程时间片大小
正确答案:A
题目解析
- 考点分析: 本题与第15题考点相同,考察I/O完成后进程的状态转换。
- 正确选项分析 (A. 修改进程状态为就绪态):
- 一个进程因请求读磁盘而进入阻塞态。
- 当读磁盘操作完成后,会产生一个I/O中断。
- 中断处理程序的核心任务之一就是唤醒这个等待的进程。
- “唤醒”操作就是将其PCB从阻塞队列中移出,修改其状态为就绪态,并放入就绪队列。
- 错误选项分析:
- B, C, D: 都不是I/O完成后必然会做的操作。
64. 【2014统考真题】下列关于管道 (Pipe) 通信的叙述中,正确的是 ( C )
题目原文
64. 【2014统考真题】下列关于管道 (Pipe) 通信的叙述中,正确的是 ( )
A. 一个管道可实现双向数据传输
B. 管道的容量仅受磁盘容量大小限制
C. 进程对管道进行读操作和写操作都可能被阻塞
D. 一个管道只能有一个读进程或一个写进程对其操作
正确答案:C
题目解析
- 考点分析: 本题考察管道(Pipe)这种IPC机制的特性。
- 正确选项分析 (C. 进程对管道…都可能被阻塞):
- 管道是一个固定大小的内核缓冲区,它提供了同步机制。
- 读阻塞: 如果一个进程试图从一个空的管道中读取数据,该进程将会被阻塞,直到有其他进程向管道中写入数据。
- 写阻塞: 如果一个进程试图向一个满的管道中写入数据,该进程也将会被阻塞,直到有其他进程从管道中读走数据,腾出空间。
- 错误选项分析:
- A: 普通的匿名管道是半双工的,数据只能单向流动。要实现双向通信,需要建立两个管道。
- B: 管道是基于内存的缓冲区,其容量是有限的(如几KB),与磁盘无关。
- D: 一个管道可以有多个读进程和多个写进程,但操作系统需要保证操作的原子性。
65. 【2015统考真题】下列选项中, 会导致进程从执行态变为就绪态的事件是 ( D )
题目原文
65. 【2015统考真题】下列选项中, 会导致进程从执行态变为就绪态的事件是 ( )
A. 执行 P(wait) 操作 B. 申请内存失败 C. 启动 I/O 设备 D. 被高优先级进程抢占
正确答案:D
题目解析
- 考点分析: 本题与第42题考点类似,考察从“运行态”到“就绪态”的转换原因。
- 正确选项分析 (D. 被高优先级进程抢占):
- 这是“运行 -> 就绪”转换的两个主要原因之一。当一个更高优先级的进程准备就绪时,抢占式调度器会剥夺当前进程的CPU,使其返回就绪态。
- 另一个主要原因是时间片用完。
- 错误选项分析(会导致进入阻塞态):
- A. 执行 P(wait) 操作:如果资源不足,进程会从运行 -> 阻塞。
- B. 申请内存失败:通常会导致进程阻塞或被终止。
- C. 启动 I/O 设备:进程会从运行 -> 阻塞,等待I/O完成。
66. 【2018统考真题】下列选项中, 可能导致当前进程 P 阻塞的事件是 ( C )
I.进程 P 申请临界资源 II.进程 P 从磁盘读数据 III.系统将 CPU 分配给高优先权的进程
正确答案:C
题目解析
- 考点分析: 本题考察导致进程进入阻塞态的原因。
- 逐项分析:
- I. 进程 P 申请临界资源: 是。如果临界资源(如被互斥锁保护的资源)已被其他进程占用,进程P必须等待,进入阻塞态。
- II. 进程 P 从磁盘读数据: 是。这是一个典型的I/O请求,进程P必须等待慢速的磁盘操作完成,进入阻塞态。
- III. 系统将 CPU 分配给高优先权的进程: 不是。这个事件(抢占)会导致当前进程P从运行态变为就绪态,而不是阻塞态。
- 组合判断: I 和 II 会导致进程阻塞。
67. 【2019统考真题】下列选项中, 可能会将进程唤醒的事件是 ( C )
I. I/O 结束 II.某进程退出临界区 III.当前进程的时间片用完
正确答案:C
题目解析
- 考点分析: 本题考察哪些事件会触发“唤醒”操作(即进程从阻塞态变为就绪态)。
- 逐项分析:
- I. I/O 结束: 是。一个因等待I/O而阻塞的进程,在I/O操作结束后,会被中断处理程序唤醒。
- II. 某进程退出临界区: 是。当一个进程释放了它所占有的临界资源时,它通常会唤醒一个(或多个)正在等待该资源的阻塞进程。
- III. 当前进程的时间片用完: 不是。这个事件只会导致当前运行的进程变为就绪态,它不会唤醒任何阻塞的进程。
- 组合判断: I 和 II 是可能唤醒进程的事件。
68. 【2019统考真题】下列关于线程的描述中, 错误的是 ( B )
题目原文
68. 【2019统考真题】下列关于线程的描述中, 错误的是 ( )
A. 内核级线程的调度由操作系统完成
B. 操作系统为每个用户级线程建立一个线程控制块
C. 用户级线程间的切换比内核级线程间的切换效率高
D. 用户级线程可以在不支持内核级线程的操作系统上实现
正确答案:B
题目解析
- 考点分析: 本题考察用户级线程对操作系统的透明性。
- 错误选项分析 (B. 操作系统为每个用户级线程建立一个线程控制块):
- 这是错误的。
- 用户级线程的存在对操作系统内核是完全透明的。内核不知道它们的存在,因此也不会为它们建立任何内核数据结构(如线程控制块TCB)。
- 用户级线程的管理(包括其TCB的建立和维护)完全由用户空间的线程库来完成。
- 正确选项分析:
- A: 正确,内核级线程是内核的调度单位。
- C: 正确,用户级线程切换无需陷入内核,开销小。
- D: 正确,因为其实现与内核无关。
69. 【2020统考真题】下列关于父进程与子进程的叙述中,错误的是 ( B )
题目原文
69. 【2020统考真题】下列关于父进程与子进程的叙述中,错误的是 ( )
A. 父进程与子进程可以并发执行
B. 父进程与子进程共享虚拟地址空间
C. 父进程与子进程有不同的进程控制块
D. 父进程与子进程不能同时使用同一临界资源
正确答案:B
题目解析
- 考点分析: 本题考察
fork()
创建的子进程与父进程的资源关系。 - 错误选项分析 (B. 父进程与子进程共享虚拟地址空间):
- 这是错误的。
- 通过
fork()
创建子进程时,操作系统会为子进程创建一个独立的、私有的虚拟地址空间,并且将父进程的地址空间内容复制一份到子进程的新空间中。 - 虽然有写时复制(Copy-on-Write) 优化,但在逻辑上,它们的地址空间是独立的。一个进程修改自己的数据,不会影响另一个进程。
- 正确选项分析:
- A: 正确,它们是独立的调度实体。
- C: 正确,每个进程都有自己唯一的PCB。
- D: 正确,临界资源具有互斥性,无论是父子进程还是其他无关进程,都必须互斥地访问。
70. 【2021统考真题】下列操作中, 操作系统在创建新进程时, 必须完成的是 ( B )
I.申请空白的进程控制块 II.初始化进程控制块 III.设置进程状态为执行态
正确答案:B
题目解析
- 考点分析: 本题与第8、48题类似,考察进程创建原语的核心步骤。
- 逐项分析:
- I. 申请空白的进程控制块 (PCB): 是。这是第一步,为新进程获取一个“身份证”。
- II. 初始化进程控制块: 是。将新进程的PID、父进程信息、初始状态、程序计数器等信息填入PCB。
- III. 设置进程状态为执行态: 错误。新创建的进程在完成初始化后,会被置为就绪态,并放入就绪队列,等待被调度。它不能直接进入执行态。
- 组合判断: I 和 II 是必须完成的操作。
71. 【2022统考真题】下列事件或操作中, 可能导致进程 P 由执行态变为阻塞态的是 ( D )
I.进程 P 读文件 II.进程 P 的时间片用完 III.进程 P 申请外设
IV.进程 P 执行信号量的 wait( ) 操作
正确答案:D
题目解析
- 考点分析: 本题考察从“运行态”到“阻塞态”的转换原因。
- 逐项分析:
- I. 进程 P 读文件: 是。读文件是一个I/O操作,进程需要等待数据从磁盘读入,因此会进入阻塞态。
- II. 进程 P 的时间片用完: 不是。时间片用完会导致进程从运行态变为就绪态。
- III. 进程 P 申请外设: 是。如果外设当前正忙,进程需要等待,进入阻塞态。
- IV. 进程 P 执行信号量的 wait() 操作: 是。如果信号量的值小于等于0,执行
wait()
操作的进程会被阻塞。
- 组合判断: I、III、IV 都是可能导致进程阻塞的事件。
72. 【2023统考真题】下列操作完成时, 导致 CPU 从内核态转为用户态的是 ( D )
正确答案:D
题目解析
- 考点分析: 本题考察CPU模式(用户态/内核态)的转换时机。
- 正确选项分析 (A. 阻塞进程):
- 【答案校对与分析】 您提供的答案是
A
。但这个答案是不准确的。 - 当一个进程在内核态下被阻塞时(例如,在系统调用中等待I/O),内核并不会立即返回用户态。相反,内核会立即调用调度程序,选择一个就绪的进程来运行。然后,内核会进行上下文切换,将CPU状态切换到新进程的,最后再通过一条特殊指令(如
IRET
)返回到新进程的用户态。 - 一个更准确的答案应该是**“中断/系统调用处理结束”**。当一个中断或系统调用服务例程执行完毕,准备返回到用户程序时,会执行一条特权指令,将CPU模式从内核态切换回用户态。
- 【答案校对与分析】 您提供的答案是
- 我们来分析其他选项:
- B. 执行CPU调度:调度本身在内核态进行。
- C. 唤醒进程:在内核态进行。
- D. 执行系统调用:导致CPU从用户态 -> 内核态。
- 结论: 在给定的选项中,没有一个是非常精确的。但“阻塞进程”这个动作之后紧跟着的就是调度和切换,最终会回到某个进程的用户态。可能是题目想考察这个连锁反应。
73. 【2023统考真题】…可能导致该线程由执行态变为就绪态的是 ( C )
题目原文
73. 【2023统考真题】下列由当前线程引起的事件或执行的操作中,可能导致该线程由执行态变为就绪态的是 ( )
A. 键盘输入 B. 缺页异常 C. 主动出让 CPU D. 执行信号量的 wait( ) 操作
正确答案:C
题目解析
- 考点分析: 本题考察线程从“运行”到“就緒”的转换原因。
- 正确选项分析 (C. 主动出让 CPU):
- 一个正在运行的线程可以调用一个**
yield()
**类型的函数,主动放弃CPU使用权。 - 当它主动让出CPU后,它的状态会从运行态变为就绪态,并被放回就绪队列,等待下一次被调度。
- 一个正在运行的线程可以调用一个**
- 错误选项分析:
- A. 键盘输入:这是一个外部中断事件,它会唤醒一个阻塞的线程,使其变为就绪。
- B. 缺页异常:会导致当前线程进入阻塞态,等待页面调入。
- D. 执行信号量的 wait() 操作:如果资源不可用,会导致线程进入阻塞态。
74. 【2024统考真题】下列选项中, 操作系统在终止进程时不一定执行的是 ( A )
题目原文
74. 【2024统考真题】下列选项中, 操作系统在终止进程时不一定执行的是 ( )
A. 终止子进程 B. 回收进程占用的设备
C. 释放进程控制块 D. 回收为进程分配的内存
正确答案:A
题目解析
- 考点分析: 本题考察进程终止(
exit()
)原语的工作。 - 正确选项分析 (A. 终止子进程):
- 当一个父进程终止时,它的子进程不一定会被立即终止。
- 这些子进程会成为孤儿进程。
- 在类UNIX系统中,孤儿进程会被**
init
进程(进程号为1的系统进程)** 所收养,init
进程会成为它们的新父进程,并负责在它们终止时回收其资源。 - 因此,终止子进程不是父进程终止时必然执行的操作。
- 错误选项分析(是终止时必须执行的):
- B, C, D: 回收进程占用的所有资源,包括设备、内存、PCB等,是进程终止时的核心任务。
75. 【2024统考真题】…则在下列资源中, Ta 与 Tb 可共享的是 ( B )
I.进程 P 的地址空间 II.线程 T 的栈 III.文件描述符 fd
正确答案:B
题目解析
- 考点分析: 本题考察同一进程内,不同线程之间的资源共享关系。
- 逐项分析:
- I. 进程 P 的地址空间: 可共享。
Ta
和Tb
都是进程P的线程,它们共享进程P的整个地址空间,包括代码段、数据段和堆。 - II. 线程 T 的栈: 不可共享。每个线程,包括T、Ta、Tb,都有自己私有的栈。
Ta
和Tb
不能访问线程T
的栈。 - III. 文件描述符 fd: 可共享。文件描述符表是进程级的资源。当一个线程(如T)打开一个文件获得fd后,这个fd对该进程内的所有其他线程(如Ta, Tb)都是可见和可用的。它们可以通过这个fd来读写同一个打开的文件实例。
- I. 进程 P 的地址空间: 可共享。
- 组合判断: I 和 III 是可共享的。
- 【答案校对】 您提供的答案是
A (仅I)
。- 分析:
I
是确定无疑可共享的。III
(文件描述符)在UNIX/Linux模型下也是确定可共享的。 - 为什么答案会是A?可能是题目对“共享”的定义有更严格的限制,或者认为文件描述符虽然可用,但不是“共享资源”的典型代表。然而,从操作系统原理的角度看,进程的资源(包括打开文件表)是被其内所有线程共享的。
- 结论: 标准答案应为B (I, III)。此题答案A存在争议。
- 分析:
第二章 进程与线程 全章知识体系与考法总结
本章内容围绕操作系统的两大核心执行实体——进程和线程展开。内容抽象,但逻辑性极强,重点在于理解它们的定义、特性、状态转换、相互关系以及通信与同步机制。
知识体系梳理
本章的知识体系可以划分为“进程的基本概念”、“线程的引入与对比”、“进程/线程间的协作”和“核心管理操作”四大模块。
一、 进程的基本概念 (OS如何组织并发活动)
-
进程 vs. 程序 (高频考点):
- 程序: 静态的指令集合。
- 进程: 动态的程序执行实例,是资源分配的基本单位。
- 根本区别: 静态 vs. 动态。
-
进程的组成:
- 进程映像 (Process Image): 进程的静态快照。
- 包含:
- 程序段 (代码): 指令。
- 数据段: 全局变量、堆、栈。
- PCB (进程控制块): 核心!是进程存在的唯一标志,存放了OS管理进程所需的所有信息。
-
进程的特征 (并发带来的):
- 动态性: 有生命周期,状态会变化。
- 并发性: 宏观上同时推进。
- 独立性: 独立的资源分配单位,地址空间隔离。
- 异步性: 执行速度不可预测,导致结果的不可再现性和失去封闭性。
-
进程的状态与转换 (必考核心):
- 三状态模型: 运行态、就绪态、阻塞态。
- 运行态: 占有CPU。
- 就绪态: 万事俱备,只欠CPU。
- 阻塞态 (等待态): 等待CPU以外的事件(如I/O完成、资源释放)。
- 状态转换路径 (重点):
就绪 -> 运行
: 被调度程序选中。运行 -> 就绪
: 时间片用完 / 被更高优先级抢占。运行 -> 阻塞
: 请求I/O / 等待资源 (进程主动行为)。阻塞 -> 就绪
: 等待的事件发生 (由OS唤醒)。- 不可能的转换:
阻塞 -> 运行
,就绪 -> 阻塞
。
二、 线程的引入与对比 (更轻量的执行单位)
-
引入目的: 减少并发执行的时空开销,提高系统效率。
-
进程 vs. 线程 (必考核心):
- 角色划分:
- 进程: 资源分配的基本单位。
- 线程: CPU调度的基本单位。
- 资源共享与私有:
- 共享 (进程级): 地址空间(代码、数据、堆)、打开的文件、信号量等。
- 私有 (线程级): 线程ID、程序计数器(PC)、寄存器组、栈。
- 开销: 线程的创建、销毁、切换开销远小于进程。
- 安全性: 多进程更安全(地址空间隔离),多线程安全性差(一个线程崩溃导致整个进程崩溃)。
- 角色划分:
-
线程的实现方式:
- 用户级线程 (ULT): 内核无感知,线程库在用户空间管理。优点: 切换快,可移植。缺点: 一个线程阻塞导致整个进程阻塞,无法利用多核。
- 内核级线程 (KLT): 内核感知并管理每个线程。优点: 一个线程阻塞不影响其他,可利用多核。缺点: 切换慢(需陷核)。
- 线程模型: 多对一 (ULT)、一对一 (KLT)、多对多 (混合)。
三、 进程/线程间的协作 (通信与同步)
-
进程间通信 (IPC - Inter-Process Communication):
- 原因: 进程地址空间独立。
- 主要方式:
- 共享内存: 速度最快,直接读写共享内存区。
- 管道 (Pipe): 半双工,基于内存缓冲区,有亲缘关系进程间。
- 消息传递:
send/receive
原语,通过内核传递消息。- 直接通信:
send(P, msg)
- 间接通信 (信箱):
send(mailbox, msg)
- 直接通信:
- 信号 (Signal): 异步通知机制,用于处理简单事件。
- 共享文件。
-
线程间通信:
- 主要方式: 直接读写全局变量或堆内存(共享地址空间)。
- 同步: 必须使用锁、信号量等同步机制来保证对共享数据访问的互斥性。
四、 核心管理操作 (原语与调度)
- 原语 (Primitive):
- 定义: 由若干条指令组成的、用于完成特定功能的程序段。
- 特性: 原子操作,执行过程不可中断。
- 作用: 保护操作系统内核数据结构的一致性。
- 进程创建 (
fork
): 创建PCB、分配资源、链入就绪队列。 - 进程终止 (
exit
): 回收资源、撤销PCB。 - 进程阻塞/唤醒: 改变进程状态,在不同队列间移动PCB。
常见考法与例题梳理
-
进程与线程的定义与对比(高频基础题)
- 考法: 辨析进程与程序的区别(静态/动态);对比进程与线程的角色(资源/调度)、资源共享情况、开销大小。
- 例题03, 56, 62 (真题): 反复考察“进程是资源单位,线程是调度单位”这一核心区别。
- 例题61 (真题): 考察了线程的私有资源(栈指针)和共享资源。
-
进程状态转换(必考核心)
- 考法:
- 判断一个状态转换是否可能发生。
- 给出一种事件,判断它会导致何种状态转换。
- 找出可以从多种状态转换而来的目标状态。
- 例题16, 41, 42, 65, 66, 71, 73: 这一系列题目全面覆盖了所有状态转换的路径和原因。必须牢记
运行->阻塞
是进程主动,其他多为被动。阻塞->运行
不可能。
- 考法:
-
线程模型的优劣对比
- 考法: 对比用户级线程和内核级线程在切换开销、阻塞影响、多核利用等方面的优缺点。
- 例题51, 52, 53, 57, 59: 集中考察了多对一模型(等同于用户级线程)“一损俱损”(一个阻塞全阻塞,无法利用多核)的重大缺陷,以及用户级线程切换快、管理灵活的优点。
-
进程间通信(IPC)
- 考法: 识别哪些是有效的IPC方式,并比较它们的效率。
- 例题02, 30, 43, 64 (真题): 考察了IPC方式的识别,并反复强调共享内存是速度最快的,而普通全局变量不能用于IPC。
-
进程创建与管理
- 考法: 考察进程创建原语的具体步骤,以及PCB的作用。
- 例题01, 08, 11, 24, 48, 70 (真题): 全面考察了PCB是进程存在的唯一标志,是OS管理的依据,以及进程创建时不分配CPU,而是进入就绪队列。
刻意练习建议
-
画出“进程状态转换图”并反复讲解:
- 这是掌握本章知识的“法宝”。画出包含“创建、就绪、运行、阻塞、终止”(五状态模型)的图。
- 用带箭头的线表示所有可能的转换,并在每条线上标注触发该转换的事件(如调度、时间片到、等待I/O、I/O完成)。
- 对着这张图,能够清晰地向别人(或自己)讲清楚一个进程的完整生命周期。
-
制作“进程 vs. 线程”终极对比表:
- 创建一个大表格,详细对比两者。
- 对比维度包括:定义、角色(资源/调度)、拥有资源、并发性、系统开销、安全性、通信方式。
-
制作“线程模型”对比表:
- 对比用户级线程(多对一)、内核级线程(一对一) 和 多对多模型。
- 对比维度:线程管理方 (线程库/内核)、切换开销、阻塞影响、多核利用能力、优点、缺点。
-
做“情景分析”练习:
- 自己设定场景,例如:
- “一个Web服务器,需要同时处理上千个客户端连接,应该用多进程还是多线程?为什么?” (多线程,开销小)
- “一个字处理软件,需要一个线程响应用户输入,一个线程后台打印,一个线程语法检查,应该用哪种线程模型?” (内核级或多对多,因为打印线程会阻塞)
- “进程P执行了
read()
,它的状态如何变化?磁盘读完后,状态又如何变化?” (运行->阻塞
,阻塞->就绪
)
- 自己设定场景,例如:
通过以上系统性的梳理和有针对性的刻意练习,您将能够全面掌握进程与线程这一操作系统的核心概念,并能从容应对各种复杂的辨析和流程分析问题。