跳到主要内容

408模拟选择题 · 计算机组成原理 · 第5章 中央处理器

5.1 CPU的功能和基本结构

5.1.2 CPU的基本结构

  1. 【王道·卷三-Q19】 下列部件中,不属于运算器的是( )。
A. 状态寄存器    B. 通用寄存器    C. ALU    D. 数据高速缓存
查看答案与解析

答案: D

解析: 运算器是 CPU 中完成算术、逻辑和数据暂存的部件,通常包括:

  • 算术逻辑单元 ALU;
  • 通用寄存器组;
  • 状态寄存器或程序状态字寄存器;
  • 移位器、暂存寄存器等辅助部件。

数据高速缓存用于缓存近期使用的数据,属于存储层次结构,不属于运算器本身。因此选择 D。


5.1.3 CPU中的寄存器

  1. 【王道·卷一-Q20】 执行如下指令序列(第一列为指令序号),其中t1、t2、a0和v0表示寄存器编号。
Text
1 add t1, 0, 20 //R[t1] ← 20
2 lw t2, 12(a0) //R[t2] ← M[R[a0]+12]
3 add v0, t1, t2 //R[v0] ← R[t1] + R[t2]

在以上指令序列中,第1条和第3条、第2条和第3条指令之间发生数据相关。假定采用“取指、译码/取数、执行、访存、写回”的五段式流水线,并控制在时钟的前半周期写寄存器堆,后半周期读寄存器堆,不采用“转发”技术,则至少需要在第3条指令前加入( )条空操作(nop)指令才能使这段程序不发生数据冒险。

A. 1    B. 2    C. 3    D. 4
查看答案与解析

答案: B

解析: 五段流水线依次为 IF、ID、EX、MEM、WB。无转发时,消费者指令必须等生产者在 WB 阶段写回寄存器后,才能在 ID 阶段读到新值。

若不插入 nop,各指令的关键时序为:

周期123456
指令1IFIDEXMEMWB
指令2IFIDEXMEMWB
指令3IFIDEXMEM

第 3 条指令在原时序的第 4 周期进入 ID,但:

  • t1\displaystyle t1 要到第 5 周期由指令 1 写回;
  • t2\displaystyle t2 要到第 6 周期由指令 2 写回。

题目规定寄存器堆在前半周期写、后半周期读,因此第 3 条指令可在第 6 周期的后半周期读取指令 2 刚写回的 t2\displaystyle t2。要把其 ID 阶段从第 4 周期推迟到第 6 周期,需要插入 2 条 nop。因此选择 B。


  1. 【王道·卷二-Q19】 在采用“取指、译码/取数、执行、访存、写回”五段式流水线的处理器中,执行如下指令序列(第一列为指令序号),其中r0、t1、s3、s4、s5表示寄存器编号。
Text
1 loop: add t1,s3,s3 //R[t1] ← R[s3] + R[s3]
2 add t1,t1,t1 //R[t1] ← R[t1] + R[t1]
3 lw t0,0(t1) //R[t0] ← M[R[t1] + 0]
4 bne t0,s5,exit //if(R[t0] ≠ R[s5]) then goto exit
5 add s3,s3,s4 //R[s3] = R[s3] + R[s4]
6 j loop //goto loop
7 exit:

在上述指令序列中,共有( )条指令会产生分支控制冒险。

A. 1    B. 2    C. 3    D. 4
查看答案与解析

答案: B

解析: 控制冒险由改变控制流的指令引起,主要包括条件转移、无条件转移、调用和返回等。

本序列中:

  • 第 4 条 bne 是条件分支指令,会根据比较结果决定是否转移到 exit
  • 第 6 条 j 是无条件跳转指令,会跳回 loop

其余加法和访存指令都不会改变下一条指令地址。因此共有 2 条指令会产生控制冒险,选择 B。


  1. 【王道·卷八-Q20】 在以下硬件中,程序员不可见的是( )。
A. 程序状态字寄存器    B. Cache    C. 程序计数器    D. 内存
查看答案与解析

答案: B

解析: “程序员可见”是指该部件或其状态属于指令集体系结构的一部分,程序可以直接或间接感知、使用。

  • 程序状态字寄存器中的条件码、控制位会影响程序执行,属于体系结构状态;
  • 程序计数器决定指令执行顺序,可被转移、调用等指令改变;
  • 内存是程序存放指令和数据的空间,显然对程序可见;
  • Cache 由硬件自动完成命中判断、装入与替换,对程序通常透明。程序使用的是主存地址空间,并不显式指定访问哪一行 Cache。

因此程序员不可见的是 Cache,选择 B。


  1. 【王道·卷八-Q21】 假设执行最复杂的指令需要完成6个子功能,分别由对应的功能部件 AF\displaystyle A\sim F 来完成,每个功能部件所花的时间分别为 80ps,40ps,50ps,70ps,20ps,30ps\displaystyle 80\text{ps}, 40\text{ps}, 50\text{ps}, 70\text{ps}, 20\text{ps}, 30\text{ps},流水段寄存器延时为 20ps\displaystyle 20\text{ps},现将最后两个功能部件 E\displaystyle EF\displaystyle F 合并,以产生一个五段式流水线,则该五段式流水线CPU的时钟周期至少是( )。
A. 70ps    B. 80ps    C. 90ps    D. 100ps
查看答案与解析

答案: D

解析: 流水线时钟周期必须不小于“最慢流水段的组合逻辑延迟与流水段寄存器延迟之和”。

合并 E\displaystyle EF\displaystyle F 后,五个流水段的组合逻辑延迟分别为:

80ps, 40ps, 50ps, 70ps, 20ps+30ps=50ps\displaystyle 80\text{ps},\ 40\text{ps},\ 50\text{ps},\ 70\text{ps},\ 20\text{ps}+30\text{ps}=50\text{ps}

最慢流水段为功能部件 A\displaystyle A,延迟为 80ps\displaystyle 80\text{ps}。再加上流水段寄存器延迟 20ps\displaystyle 20\text{ps},得到最小时钟周期:

Tclk=80ps+20ps=100ps\displaystyle T_{\text{clk}}=80\text{ps}+20\text{ps}=100\text{ps}

因此选择 D。A、B、C 均未完整计入最慢流水段和流水段寄存器的总延迟。


5.2 指令执行过程

5.2.1 指令执行的一般流程

  1. 【王道·卷四-Q18】 假定不采用Cache和指令预取技术,且机器处于开中断状态,则在下列有关指令的叙述中,错误的是( )。
A. 每个指令周期中CPU都至少访问内存一次
B. 每个指令周期一定大于或等于一个CPU时钟周期
C. 空操作指令的指令周期中,任何寄存器的内容都不会改变
D. 当前程序在每条指令执行结束时都可能被外部中断打断
查看答案与解析

答案: C

解析: 不采用 Cache 和指令预取时,每条指令都必须从主存取指,因此每个指令周期至少访问内存一次,A 正确。

一个指令周期由一个或多个机器周期组成,而机器周期又包含一个或多个时钟周期,所以指令周期不可能短于一个 CPU 时钟周期,B 正确。

空操作指令虽然不执行实际的数据处理,但取指后程序计数器 PC 仍需更新为下一条指令地址,指令寄存器 IR 也会装入该空操作指令。因此“任何寄存器的内容都不会改变”错误,C 符合题意。

在开中断状态下,CPU 通常在一条指令执行结束后检查外部中断请求,因此每条指令结束时都可能转去响应外部中断,D 正确。


5.2.4 处理器指令执行模型

  1. 【王道·卷一-Q19】 下列关于多周期处理器和单周期处理器的描述中,错误的是( )。
A. 单周期处理器的CPI总是比多周期处理器的CPI大
B. 单周期处理器的时钟周期比多周期处理器的时钟周期长
C. 在一条指令的执行过程中,单周期处理器中的每个控制信号的值保持不变,而多周期处理器中的控制信号的值可能发生改变
D. 在一条指令的执行过程中,单周期处理器的数据通路中的每个部件只能使用一次,而在多周期处理器的数据通路中同一个部件可使用多次
查看答案与解析

答案: A

解析: 单周期处理器要求每条指令在一个时钟周期内完成,因此其 CPI=1\displaystyle CPI=1。多周期处理器将一条指令拆分到多个时钟周期中完成,不同指令所需周期数可能不同,通常 CPI>1\displaystyle CPI>1。所以“单周期处理器的 CPI 总是更大”正好相反,A 错误。

单周期处理器的时钟周期必须覆盖最复杂指令的完整执行路径;多周期处理器只需覆盖最慢的一个基本步骤,因此单周期处理器的时钟周期通常更长,B 正确。

单周期指令在一个周期内完成,控制信号在该周期内保持稳定;多周期处理器在不同阶段需要执行不同微操作,同一控制信号可随周期改变,C 正确。

单周期数据通路不能在同一时钟周期内分时复用同一部件;多周期数据通路则可在不同周期重复使用 ALU、存储器等部件,D 正确。


  1. 【王道·卷六-Q20】 在下列关于指令流水线CPU控制指令执行的说法中,正确的是( )。 ① 指令译码器产生相关的控制信号后,分别送到各个流水段中 ② 取指和指令译码两个阶段的动作是一致的,因此不需要控制信号对其进行控制 ③ 指令译码后,每个流水段中执行的动作一定要和特定的指令对应 ④ 译码阶段得到的控制信号也以流水线的方式传输,每经过一个时钟周期,控制信号就往后一个流水段传输一次
A. ①②③    B. ①②④    C. ②③④    D. 全部
查看答案与解析

答案: C

解析: 流水线中,多条指令同时处在不同阶段。控制信号必须与其对应的指令同步向后传递,才能保证某条指令进入后续流水段时使用的是自己的控制信息。

  • ①错误:译码阶段产生的控制信号通常先写入相邻的流水寄存器,再随指令逐级向后传递,并不是在产生后立即分别直送所有后续流水段。
  • ②正确:对基本五段流水线而言,各指令的取指和译码/读寄存器动作基本固定,可由统一时序完成,不需要像执行、访存、写回阶段那样按指令类型选择具体操作。
  • ③正确:译码完成后,后续各流水段的具体动作由当前指令类型决定,例如访存指令需要访问数据存储器,而普通算术指令通常不需要。
  • ④正确:控制信号与对应的数据、指令信息一起存入流水寄存器,并按时钟节拍逐段传递。

因此正确的是②③④,选择 C。


5.3 数据通路的功能和基本结构

5.3.2 数据通路的组成

  1. 【竟成·模拟二-19】 下列关于数据通路叙述错误的是()。
A. 通用寄存器包含在数据通路中
B. 控制器不包含在数据通路中
C. 单周期数据通路的每个部件在一条指令执行过程中只能使用一次
D. 数据通路包含状态元件ALU,负责进行逻辑和算术运算
查看答案与解析

答案: D

解析: 数据通路是指令执行过程中数据流经的硬件路径,通常包括寄存器、寄存器堆、ALU、多路选择器、总线以及必要的暂存部件等。

  • 通用寄存器用于保存操作数和结果,属于数据通路,A 正确。
  • 控制器负责产生控制信号,属于控制部件,不属于数据通路本身,B 正确。
  • 单周期数据通路中一条指令在同一时钟周期内完成,同一硬件部件不能在该周期内分时重复使用,C 正确。
  • ALU 确实负责算术和逻辑运算,但它是组合逻辑元件,不保存信息,不是“状态元件”。寄存器、存储器等能够保存状态的部件才属于状态元件,D 错误。

因此选择 D。


  1. 【竟成·模拟六-18】 数据通路中,包含以下哪些部件()。 I. 指令译码器 II. 通用寄存器 III. 状态寄存器 IV. ALU
A. I、II、III    B. I、II、IV    C. II、III、IV    D. I、II、III、IV
查看答案与解析

答案: C

解析: 数据通路负责数据的存储、传送和运算,包括:

  • 通用寄存器:存放操作数和运算结果;
  • 状态寄存器:保存运算产生的条件码或状态信息;
  • ALU:完成算术与逻辑运算。

指令译码器的主要作用是分析操作码并为控制器产生控制依据,通常划入控制器而不是数据通路。因此 II、III、IV 属于数据通路,选择 C。


5.3.3 数据通路的组织与分类

  1. 【竟成·模拟三-18】 下列关于处理器数据通路的叙述中,正确的是()。 I. 多周期处理器不同指令的CPI可能不同 II. 单周期处理器的时钟周期比多周期处理器的时钟周期长 III. 在单周期数据通路中,一条指令的所有控制信号同时产生 IV. 在多周期数据通路中,同一个控制信号的取值在一个指令周期中可能改变多次 V. 在一条指令的执行过程中,单周期数据通路中每个部件只能被使用一次
A. I、II    B. I、II、IV    C. I、II、III、IV    D. I、II、III、IV、V
查看答案与解析

答案: D

解析: 各项均正确:

  • I:多周期处理器按指令需要安排周期,例如寄存器运算指令和访存指令所需周期数不同,因此 CPI 可能不同。
  • II:单周期处理器必须让最复杂指令在一个周期内完成,时钟周期由最长组合路径决定,通常长于多周期处理器的时钟周期。
  • III:单周期数据通路中,整条指令的控制信号由当前指令一次性译码产生,并在该时钟周期内共同起作用。
  • IV:多周期处理器在不同周期执行不同微操作,因此同一个控制信号在一条指令执行期间可多次改变取值。
  • V:单周期内无法对同一部件进行时间复用,所以一条指令执行过程中每个部件至多使用一次;若需要同时完成两次同类功能,必须配置独立部件。

因此 I~V 全部正确,选择 D。


5.3.4 单总线结构的数据通路

  1. 【竟成·模拟三-20】 某计算机指令集中包含RR型运算指令、取数指令、存数指令、分支指令和跳转指令。若采用单周期数据通路实现该指令系统,各主要功能部件的操作时间为:指令存储器和数据存储器都是3ns;ALU运算是2ns;寄存器堆的读和写都是1ns。在不考虑多路复用器、控制单元、PC、符号扩展单元和传输线路等延迟的情况下,该计算机时钟周期至少为()。
A. 6ns    B. 8ns    C. 10ns    D. 12ns
查看答案与解析

答案: C

解析: 单周期处理器的时钟周期由执行时间最长的指令决定。给出的指令中,取数指令需要经过的主要路径最长:

  1. 从指令存储器取指:3ns\displaystyle 3\text{ns}
  2. 从寄存器堆读取基址寄存器:1ns\displaystyle 1\text{ns}
  3. ALU 计算有效地址:2ns\displaystyle 2\text{ns}
  4. 访问数据存储器:3ns\displaystyle 3\text{ns}
  5. 将数据写回寄存器堆:1ns\displaystyle 1\text{ns}

因而最小时钟周期为:

Tclk=3+1+2+3+1=10ns\displaystyle T_{\text{clk}}=3+1+2+3+1=10\text{ns}

RR 型指令、存数指令、分支和跳转指令的关键路径均不超过该值,因此选择 C。


  1. 【竟成·模拟四-19】 下列关于单周期数据通路的说法,错误的是()。
A. 单周期数据通路中PC不需要写使能控制信号
B. 单周期数据通路CPI为1
C. 单周期数据通路中的每个部件在一条指令执行过程中只是使用一次
D. 单周期数据通路中的每个控制信号取值在一条指令执行过程中会改变多次
查看答案与解析

答案: D

解析: 单周期数据通路中,每条指令都在一个完整时钟周期内完成,因此 CPI=1\displaystyle CPI=1,B 正确。

基本单周期处理器在每个周期末都要更新 PC,正常顺序执行、分支或跳转只是在不同候选地址之间进行选择,因此通常无须像多周期处理器那样设置 PC 写使能信号,A 正确。

单周期内不能对同一功能部件进行分时复用,所以同一部件在一条指令执行过程中至多使用一次,C 正确。

一条指令的控制信号在周期开始时由指令译码确定,并在整个周期内保持稳定,不会在该指令执行过程中反复改变。因此 D 错误。


5.4 控制器的功能和工作原理

5.4.1 控制器的结构和功能

  1. 【竟成·模拟一-20】 下列部件中,需要控制器提供显式控制信号的是()。 I. 算术逻辑部件(ALU) II. 多路选择器(MUX) III. 三态门 IV. 程序计数器(PC)的自增加法器 V. 指令译码器
A. I、II、III    B. I、II、V    C. II、III、IV    D. III、IV、V
查看答案与解析

答案: A

解析: 所谓显式控制信号,是指控制器需要主动给出某种选择、使能或操作编码,部件才能完成当前所需动作。

  • ALU 需要 ALU 操作控制信号,以选择加、减、与、或等功能,I 正确。
  • 多路选择器需要选择信号,以确定哪一路输入送到输出端,II 正确。
  • 三态门需要使能信号,以决定是否将某部件连接到公共总线上,III 正确。
  • PC 自增电路通常是固定执行 PC+1\displaystyle PC+1PC+4\displaystyle PC+4 的专用组合逻辑,只要输入有效即可产生结果,不需要控制器指定其运算类型,IV 不选。
  • 指令译码器根据输入的操作码自动产生译码结果,本身不需要由控制器再提供控制信号,V 不选。

因此需要显式控制信号的是 I、II、III,选择 A。


5.4.2 硬布线控制器

  1. 【竟成·模拟三-17】 以下关于硬布线控制器与微程序控制器的叙述中,错误的是()。
A. 与微程序控制器相比,硬布线控制器的结构复杂,不够规整
B. 硬布线控制器根据当前状态和操作码来输出控制信号
C. 精简指令集系统(RISC)通常采用微程序控制器
D. 微程序控制器的设计比较灵活,容易扩充指令系统
查看答案与解析

答案: C

解析: 硬布线控制器直接利用组合逻辑和时序逻辑产生控制信号,速度快,但控制逻辑与指令系统紧密耦合,结构通常较复杂且不够规整,因此 A 正确。

硬布线控制器的输出由机器指令的操作码、当前时序状态以及条件标志等共同决定,B 正确。

RISC 指令系统通常指令种类少、格式规整、控制逻辑相对简单,更适合采用速度较快的硬布线控制器,而不是微程序控制器。因此 C 错误。

微程序控制器通过修改控制存储器中的微程序即可调整控制功能,设计规整,便于增加或修改指令,D 正确。


5.4.3 微程序控制器

  1. 【王道·卷七-Q20】 在微程序控制器中,微程序的入口地址是由( )形成的。
A. 机器指令的地址码字段    B. 微指令的微地址字段
C. 机器指令的操作码字段    D. 微指令的操作码字段
查看答案与解析

答案: C

解析: 一条机器指令对应一个实现其功能的微程序。完成公共取指微程序后,微程序控制器需要根据当前机器指令的操作码,经过微地址形成部件,将其转换为对应微程序的入口地址。

  • 机器指令的地址码用于表示操作数地址,与微程序入口无关,A 错误。
  • 微指令的下地址字段用于确定当前微程序内部的后继微指令地址,不能直接区分不同机器指令,B 错误。
  • 机器指令操作码能够唯一标识指令类型,因此用于形成相应微程序的入口地址,C 正确。
  • 微指令一般由操作控制字段和下地址字段等组成,不存在与机器指令操作码同义的“微指令操作码字段”,D 错误。

  1. 【竟成·模拟二-20】 某计算机采用微程序控制器,共有63条指令,各指令对应的微程序平均由4条微指令组成。若采用断定法确定下条微指令地址,微指令中下地址字段的位数为8位,则公共的取指令微程序包含的微指令条数最多为()。
A. 2    B. 4    C. 64    D. 189
查看答案与解析

答案: B

解析: 下地址字段为 8 位,因此控制存储器最多可编址:

28=256\displaystyle 2^8=256

63 条机器指令对应的执行微程序平均各含 4 条微指令,共占用:

63×4=252\displaystyle 63\times 4=252

除这些指令执行微程序外,控制存储器还要存放所有指令共用的取指令微程序,因此其最多可占用:

256252=4\displaystyle 256-252=4

所以公共取指令微程序最多包含 4 条微指令,选择 B。


  1. 【竟成·模拟六-17】 下列有关指令、微指令和微程序之间的关系的叙述中,正确的是()。
A. 每条指令用一条微指令来表示    B. 每条微指令用一个微程序来表示
C. 若干条指令组成一个微程序    D. 每条指令的执行过程用一个微程序来表示
查看答案与解析

答案: D

解析: 微程序控制器中各概念的层次关系为:

  • 一条机器指令的执行过程由一个微程序实现;
  • 一个微程序由若干条微指令组成;
  • 一条微指令又包含若干个可并行或顺序执行的微命令。

因此,每条机器指令通常对应一个微程序,D 正确。

A 把“微程序”误写成“一条微指令”;B 颠倒了微程序与微指令的包含关系;C 将若干机器指令错误地视为一个微程序的组成部分。


  1. 【竟成·模拟七-19】 下列与微指令格式相关的描述中,正确的是()。
A. 相对于字段直接编码法,直接控制法的控存利用率更高
B. 相对于直接控制法,字段直接编码法的执行速度更快
C. 相对于计数器法,下址字段法(断定法)的微指令格式更短
D. 相对于垂直型微指令,一条水平型微指令中包含的微命令更多
查看答案与解析

答案: D

解析: 水平型微指令强调并行控制,一条微指令可同时给出较多微命令,因此并行能力强、执行速度快,但微指令字较长。垂直型微指令编码程度高,字长较短,但一条微指令包含的微命令较少。因此 D 正确。

  • 直接控制法通常每个微命令对应一个控制位,微指令字很长,控存利用率较低,A 错误。
  • 字段直接编码法需要译码后才能产生控制信号,通常比直接控制法慢,B 错误。
  • 下址字段法在微指令中直接设置后继地址字段,字长通常比依靠微程序计数器顺序加一的计数器法更长,C 错误。

  1. 【竟成·模拟七-20】 在微程序控制器中,执行指令微程序的首条微指令地址是由()得到的。
A. 指令操作码    B. 程序计数器PC    C. 微指令下址字段    D. μPC+1
查看答案与解析

答案: A

解析: 公共取指微程序取得机器指令并完成译码后,微地址形成部件根据机器指令的操作码,生成该指令对应执行微程序的入口地址,即首条微指令地址。因此选择 A。

  • PC 保存的是下一条机器指令地址,不能确定当前机器指令对应的微程序入口,B 错误。
  • 微指令下址字段和 μPC+1\displaystyle \mu PC+1 主要用于确定一个微程序内部的后继微指令地址,C、D 错误。

5.5 异常和中断机制

5.5.2 异常和中断的分类

  1. 【竟成·模拟一-19】 在典型的多周期处理器中(包含取指、译码/取数、执行、访存、写回五个阶段),不同类别的异常和中断会在指令执行的特定阶段进行检测。下列描述正确的是()。
A. "缺页"异常一定在访存阶段检测    B. "溢出"异常一定在访存阶段检测
C. "外部中断"一定在取指阶段检测    D. "无效指令操作码"异常一定在译码/取数阶段检测
查看答案与解析

答案: D

解析: 无效指令操作码只有在指令完成取指并进入译码阶段后,才能由指令译码器识别,因此通常在译码/取数阶段检测,D 正确。

  • 缺页既可能发生在取指时,也可能发生在数据访存时,不能说一定在访存阶段,A 错误。
  • 算术溢出是在 ALU 执行运算时检测,属于执行阶段,B 错误。
  • 外部中断通常在一条指令执行结束后统一查询和响应,并不等同于“一定在取指阶段检测”,C 错误。

  1. 【竟成·模拟六-21】 下列事件中,无须相应的处理程序进行异常或中断处理的是()。
A. 缺页    B. 访问Cache缺失    C. 地址越界    D. 除数为0
查看答案与解析

答案: B

解析: Cache 缺失属于存储层次中的正常硬件事件。Cache 控制器会自动从下一级存储器调入所需存储块,CPU 通常只表现为等待时间增加,无须转入操作系统的异常或中断处理程序,因此 B 正确。

  • 缺页需要由缺页异常处理程序将页面调入主存,A 不选。
  • 地址越界属于存储保护异常,需要异常处理程序处理,C 不选。
  • 除数为 0 会触发算术异常,需要异常处理程序处理,D 不选。

5.5.3 异常和中断响应过程

  1. 【王道·卷一-Q13】 下面是一个用来计算数组 a\displaystyle a 中各元素之和的程序,当参数 len\displaystyle len 为0时,返回值应该是0,但在执行时发生了存储器访问异常,请问程序应如何修改?( )。
C
float sum_elements(float a[], unsigned len) {
int i;
float result = 0;
for(i = 0; i <= len - 1; i++)
result += a[i];
return result;
}
A. 将变量result定义为double类型    B. 将变量result定义为int类型
C. 将变量len定义为int类型    D. 将数组 a\displaystyle a 定义为int类型
查看答案与解析

答案: C

解析: 问题来自无符号整数下溢。原程序中 len\displaystyle lenunsigned 类型,当 len=0\displaystyle len=0 时:

len1=2w1\displaystyle len-1=2^w-1

其中 w\displaystyle w 为该无符号类型的位数。结果并不是 1\displaystyle -1,而是无符号数的最大值。比较 i <= len - 1 时,i 还会被转换为无符号数,于是循环会执行大量次数并访问数组边界之外的存储单元,最终发生存储器访问异常。

若将 len\displaystyle len 改为有符号 int,则当 len=0\displaystyle len=0 时有 len1=1\displaystyle len-1=-1,初始 i=0\displaystyle i=0 不满足 01\displaystyle 0\leq -1,循环不会执行,函数正确返回 0。因此选择 C。

改变 result 或数组元素类型并不能消除循环边界中的无符号下溢,A、B、D 均错误。


  1. 【王道·卷一-Q22】 在一个支持多重中断的系统中,已知中断源A的处理优先级高于中断源B的处理优先级,中断源B的响应优先级高于中断源A的响应优先级。在下列关于中断响应和处理的说法中,错误的是( )。
A. 在“中断响应”周期,CPU将中断允许触发器清零,以使CPU关中断
B. 在“中断响应”周期,CPU把后继指令地址作为返回地址保存在固定的地方
C. 当CPU正在执行中断源A的中断服务程序时,中断源B发出中断请求,则CPU在当前指令周期结束后能检测到中断源B发出的中断请求信号
D. 若中断源A和B同时发出中断请求,且都未被屏蔽,则CPU先响应中断源B的中断请求,但先完成中断源A的中断处理过程
查看答案与解析

答案: C

解析: 响应优先级决定多个中断同时提出请求时 CPU 先响应谁;处理优先级决定进入某个中断服务程序后,哪些中断能够嵌套进入。

  • 中断响应时,CPU 通常先自动关中断,以保护断点和现场,A 正确。
  • CPU 保存下一条待执行指令的地址作为中断返回地址,以便服务结束后继续执行,B 正确。
  • A 的处理优先级高于 B,因此执行 A 的中断服务程序时,B 应被屏蔽。即使 B 提出请求,也不能在当前指令结束后作为可响应中断被 CPU 接受,故 C 错误。
  • A、B 同时请求时,由于 B 的响应优先级较高,CPU 先进入 B 的服务程序;但 A 的处理优先级较高,A 可嵌套打断 B,先完成 A 的处理,再返回继续完成 B,D 正确。

  1. 【王道·卷二-Q18】 下列各种类型的指令中,( )执行后一定会改变程序的执行顺序。 \displaystyle ① 条件跳转指令 \displaystyle ② 无条件跳转指令 \displaystyle ③ 过程调用指令 \displaystyle ④ 过程返回指令 \displaystyle ⑤ 自陷指令 \displaystyle ⑥ 中断返回指令
A. ②③④⑤⑥\displaystyle ②③④⑤⑥    B. ②③⑤⑥\displaystyle ②③⑤⑥    C. ①②③④⑤\displaystyle ①②③④⑤    D. ③④⑤⑥\displaystyle ③④⑤⑥
查看答案与解析

答案: A

解析: 判断关键是区分“可能改变”与“一定改变”。

  • 条件跳转指令只有在条件成立时才转移;条件不成立时仍顺序执行,因此 \displaystyle ① 不一定改变程序执行顺序。
  • 无条件跳转指令必然把 PC 改为目标地址,\displaystyle ② 一定改变顺序。
  • 过程调用指令需要转入被调用过程,\displaystyle ③ 一定改变顺序。
  • 过程返回指令需要从栈或链接寄存器中恢复返回地址,\displaystyle ④ 一定改变顺序。
  • 自陷指令会主动进入异常处理程序,\displaystyle ⑤ 一定改变顺序。
  • 中断返回指令会恢复中断前的执行现场和返回地址,\displaystyle ⑥ 一定改变顺序。

因此一定改变程序执行顺序的是 ②③④⑤⑥\displaystyle ②③④⑤⑥,选择 A。


  1. 【王道·卷二-Q22】 开中断和关中断两种操作都用于对( )进行设置。
A. 中断允许触发器    B. 中断屏蔽寄存器    C. 中断请求寄存器    D. 中断向量寄存器
查看答案与解析

答案: A

解析: 开中断和关中断的本质,是修改 CPU 中的中断允许标志(中断允许触发器)。

  • 开中断:将中断允许标志置为允许状态,使 CPU 可以响应可屏蔽中断。
  • 关中断:将中断允许标志清零,使 CPU 暂时不响应可屏蔽中断。

中断屏蔽寄存器用于分别屏蔽某些中断源;中断请求寄存器记录中断请求;中断向量寄存器与中断服务程序入口定位有关。故选择 A。


  1. 【王道·卷四-Q21】 设CPU与I/O设备以中断方式进行数据传输,当CPU响应中断时,该I/O设备接口控制器送给CPU的中断向量表(中断向量表中存放中段向量)的指针是0800H,0800H单元中的值为1200H。则该I/O设备的中断服务程序在主存中的入口地址为( )。
A. 0800H    B. 0801H    C. 1200H    D. 1201H
查看答案与解析

答案: C

解析: 题目给出的 0800H 是中断向量表项的地址,即指向中断向量的指针;0800H 单元中保存的 1200H 才是中断向量,也就是中断服务程序的入口地址。

可表示为:

中断向量表项地址=0800H,M[0800H]=1200H\displaystyle \text{中断向量表项地址}=0800\mathrm{H},\qquad M[0800\mathrm{H}]=1200\mathrm{H}

因此中断服务程序入口地址为 1200H,选择 C。A 是向量表项的位置,而不是服务程序入口;B、D 均无依据。


  1. 【王道·卷四-Q22】 当下列情况出现时,引起CPU自动查询有无中断请求,进而可能进入中断响应周期的是( )。
A. 一条指令执行结束    B. 一次I/O操作结束    C. 一次中断处理结束    D. 一次DMA操作结束
查看答案与解析

答案: A

解析: CPU 通常在一条指令执行结束后、取下一条指令之前,统一检查是否存在满足响应条件的外部中断请求。若有未被屏蔽且优先级满足要求的请求,CPU 才进入中断响应周期。

I/O 操作结束或 DMA 操作结束可能使设备提出中断请求,但这只是“中断源提出请求”的时刻,并不等于 CPU 立即查询和响应。CPU 的自动查询时机仍是当前指令执行结束。因此选择 A。


  1. 【王道·卷五-Q22】 当外设发生异常事件或完成特定任务时,一般通过“外部中断”请求CPU执行相应的中断服务程序来处理。在以下情形中,( )会引起外部中断。
A. 访问内存时缺页    B. Cache没有命中    C. 磁盘寻道结束    D. 运算发生溢出
查看答案与解析

答案: C

解析: 外部中断来自 CPU 当前执行指令之外的外部设备或硬件事件。磁盘寻道结束由磁盘控制器向 CPU 发出完成通知,属于典型的外部中断,因此 C 正确。

  • 缺页由当前指令访问的虚拟地址无法完成转换引起,属于异常(内中断),A 错误。
  • Cache 未命中由 Cache 控制器自动处理,一般不转入中断服务程序,B 错误。
  • 运算溢出由当前算术指令执行产生,属于异常,D 错误。

  1. 【竟成·模拟四-22】 下列操作只能由硬件完成的是()。
A. DMA方式进行I/O    B. 保存断点    C. 中断处理    D. 保存现场
查看答案与解析

答案: B

解析: 中断发生后,CPU 必须先保存断点,即保存下一条待执行指令的地址,才能可靠地转入中断服务程序。该动作属于中断响应过程的一部分,必须由硬件自动、原子地完成,因此 B 正确。

  • DMA 数据传送主要由 DMA 控制器硬件完成,但仍需要软件进行初始化和管理,不能笼统地说整个操作只能由硬件完成,A 不选。
  • 中断处理主要由中断服务程序完成,属于软件行为,C 错误。
  • 保存现场通常由中断服务程序用指令保存通用寄存器等内容,属于软件完成;硬件一般只自动保存少量关键状态,D 错误。

  1. 【竟成·模拟五-21】 下列关于中断的叙述中错误的是()。
A. 中断向量是中断服务程序入口地址    B. 单级中断系统中CPU响应中断后首先进行关中断操作
C. 中断处理程序在中断周期执行    D. 中断方式下外设数据直接和CPU交互
查看答案与解析

答案: C

解析: 中断周期是 CPU 完成中断响应的硬件阶段,主要完成关中断、保存断点、获得中断服务程序入口地址并转移控制等操作。真正的中断处理程序是在随后按普通指令执行方式运行的,而不是“在中断周期内执行”,因此 C 错误。

  • 中断向量通常表示中断服务程序入口地址,A 正确。
  • 单级中断不允许中断嵌套,CPU 响应中断时应先关中断,B 正确。
  • 在程序中断方式下,数据通常经过 CPU 寄存器在外设接口和主存之间传送,即外设数据需要与 CPU 交互,D 正确。

5.6 指令流水线

5.6.1 指令流水线的基本概念

  1. 【王道·卷六-Q19】 在下列关于指令流水线设计的说法中,错误的是( )。
A. 指令执行过程中的各个子功能都需要包含在某个流水段中
B. 所有子功能都必须按一定的顺序经过流水段
C. 虽然各子功能所用的实际时间可能不同,但经过每个流水段的时间都一样
D. 任何时候各个流水段的功能部件都不可能执行空(nop)操作
查看答案与解析

答案: D

解析: 流水线将一条指令的执行过程划分为若干顺序衔接的流水段,各段在统一时钟控制下并行处理不同指令。

  • 指令所需的各项子功能必须被安排到某个流水段中,A 正确。
  • 指令依照设计好的流水段顺序向前推进,B 正确。
  • 各段实际组合逻辑延迟可能不同,但流水线时钟周期统一,通常由最慢流水段及寄存器开销决定,因此每段占用一个相同长度的时钟周期,C 正确。
  • 遇到数据冒险、控制冒险、结构冒险或流水线排空时,会在某些流水段中插入气泡,即执行 nop 操作,所以 D 错误。

5.6.2 流水线的基本实现

  1. 【王道·卷一-Q17】 在一个五段式指令流水线的CPU中,当执行lw指令(从内存中取数据)或sw指令(往内存中写数据)时,TLB缺失和Cache缺失有可能在( )时钟周期被检测到。 \displaystyle ① IF(取指) \displaystyle ② ID(译码/取数) \displaystyle ③ EX(执行) \displaystyle ④ Mem(存储器访问) \displaystyle ⑤ WB(写回)
A. \displaystyle ①\displaystyle ②    B. \displaystyle ①\displaystyle ④    C. \displaystyle ②\displaystyle ④\displaystyle ⑤    D. \displaystyle ①\displaystyle ④\displaystyle ⑤
查看答案与解析

答案: B

解析: lwsw 都可能在两个阶段访问存储系统:

  1. IF 阶段需要根据 PC 取机器指令,因此可能访问指令 TLB 和指令 Cache,此时可能检测到 TLB 缺失或 Cache 缺失。
  2. Mem 阶段需要访问数据存储器,因此可能访问数据 TLB 和数据 Cache,此时也可能检测到相应缺失。

ID 阶段主要完成译码和寄存器读取,EX 阶段计算有效地址,WB 阶段完成寄存器写回,通常不会首次检测 TLB 或 Cache 缺失。因此选择 \displaystyle ①\displaystyle ④,即 B。


  1. 【竟成·模拟六-19】 以下关于流水段寄存器的叙述中,错误的是()。
A. 流水段寄存器用来存放从当前流水段传到后面所有流水段的信息
B. 指令译码得到的控制信号需通过流水段寄存器传递到下一个流水段
C. 每个流水段之间的流水段寄存器位数一定相同
D. 用户无法通过指令访问某个流水段寄存器
查看答案与解析

答案: C

解析: 流水段寄存器位于相邻流水段之间,用于保存当前阶段产生、后续阶段仍需使用的数据和控制信息。由于不同阶段需要传递的信息种类和数量不同,各流水段寄存器的位数通常不同,因此 C 错误。

  • A 表述的是流水段寄存器保存并向后续阶段传递必要信息的作用,正确。
  • 译码阶段生成的控制信号必须随对应指令一起向后传递,通常保存在流水段寄存器中,B 正确。
  • 流水段寄存器属于处理器内部实现细节,对指令集程序员透明,不能被普通机器指令直接访问,D 正确。

5.6.4 流水线的冒险与处理

  1. 【王道·卷四-Q19】 下面是一段指令序列:
Text
add eax,20 //eax ← eax + 20
shl ecx,1 //ecx ← ecx<<1
mov edx,ecx //edx ← ecx

在以上指令序列中,第三条指令发生数据相关问题。假定采用“取指、译码/取数、执行、访存、写回”这种五段流水线方式。假定不采用“转发”,那么为了使这段程序的执行不被阻塞,需要在第三条指令前加入( )条nop指令(空操作)。

A. 1    B. 2    C. 3    D. 4
查看答案与解析

答案: B

解析: 第三条指令 mov edx,ecx 需要读取第二条指令 shl ecx,1 产生的新 ecx 值,二者存在写后读(RAW)数据相关。

在五段流水线中,第二条指令的执行时序为:

时钟周期12345
shlIFIDEXMEMWB

不采用转发时,第三条指令必须等到第二条指令在 WB 阶段将结果写回寄存器后,才能在 ID 阶段正确读出该值。通常约定同一时钟周期内先写寄存器、后读寄存器,因此第三条指令的 ID 阶段可以与第二条指令的 WB 阶段处于同一周期。

若在第三条指令前插入 2 条 nop,则第三条指令的 ID 阶段被推迟到第二条指令的 WB 周期,数据冒险消除。因此选择 B。


  1. 【竟成·模拟一-21】 在采用"取指、译码/取数、执行、访存、写回"5段流水线的RISC处理器中,执行如下指令序列,其中s0、s1、s2、t1和t2表示寄存器编号,每个流水段周期为1个时钟周期。
Text
I1: add s2, s1, s0 // R[s2]←R[s1]+R[s0]
I2: sub t2, s0, s3 // R[t2]←R[s0]-R[s3]
I3: lw t1, 0(t2) // R[t1]←M[R[t2]+0]
I4: add t1, t1, t2 // R[t1]←R[t1]+R[t2]

若采用转发(旁路)技术和硬件阻塞处理数据冒险,则执行上述4条指令的CPI是()。

A. 2    B. 2.25    C. 2.5    D. 3.5
查看答案与解析

答案: B

解析: 理想五段流水线执行 4 条指令所需周期数为:

4+51=8\displaystyle 4+5-1=8

分析数据相关:

  • I2 产生 t2,I3 在 EX 阶段用 t2 计算访存地址。I2 的 ALU 结果可直接转发给 I3 的 EX 阶段,无须停顿。
  • I3 是加载指令,直到 MEM 阶段结束才获得 t1。紧随其后的 I4 在 EX 阶段就需要 t1,即使采用转发,也存在典型的 load-use 冒险,必须插入 1 个停顿周期。

因此总周期数为:

8+1=9\displaystyle 8+1=9

CPI 为:

CPI=94=2.25\displaystyle \mathrm{CPI}=\dfrac{9}{4}=2.25

所以选择 B。


  1. 【竟成·模拟三-19】 在采用"取指、译码/取数、执行、访存、写回"的5段流水线处理器中,执行如下指令序列。
Text
I1 loop: sll R1, R2, 2 // (R2)<<2→R1
I2 add R1, R1, R3 // (R1)+(R3)→R1
I3 load R4, 0(R1) // ((R1)+0)→R4
I4 bne R4, R0, exit // if (R4)!=(R0) goto exit
I5 add R2, R2, 1 // (R2)+1→R2
I6 j loop // goto loop
I7 exit:

其中可能会产生控制冒险的指令是()。

A. I1    B. I3    C. I4    D. I4和I6
查看答案与解析

答案: D

解析: 控制冒险发生在改变程序控制流的指令上,因为处理器在确定下一条指令地址之前,可能已经按顺序取入了错误路径上的指令。

  • I4 是条件分支指令 bne,是否跳转取决于比较结果,会产生控制冒险。
  • I6 是无条件跳转指令 j,它会修改 PC,同样会产生控制冒险。
  • I1 为移位指令,I3 为加载指令,二者不会改变控制流。

因此可能产生控制冒险的是 I4 和 I6,选择 D。


  1. 【竟成·模拟四-20】 以下关于流水线及其相关冒险的说法,正确的是()。
A. 转发技术可用于解决部分控制冒险    B. 结构冒险只能通过设置多个独立的部件来解决
C. 数据相关不会引起流水线阻塞    D. 预测错误时必须冲刷掉流水线上错误执行的指令
查看答案与解析

答案: D

解析: 分支预测错误后,流水线中已经取入和部分执行的指令属于错误路径,必须将这些指令作废,即进行流水线冲刷,因此 D 正确。

  • 转发技术用于缓解数据冒险,将前面指令的结果直接送给后续指令使用,不能解决控制冒险,A 错误。
  • 结构冒险既可以通过增加独立硬件资源解决,也可以通过暂停流水线、调整指令调度等方式解决,“只能”表述错误,B 错误。
  • 数据相关可能形成 RAW 等数据冒险;若不能通过转发或调度消除,就会引起流水线阻塞,C 错误。

  1. 【竟成·模拟六-20】 以下指令序列中,发生了数据相关。假定采用"取指、译码/取数、执行、访存、写回"这种5段流水线方式,不采用"转发"技术,需要在第3条指令前加入()条空操作(nop)指令才能使这段程序不发生数据冒险。
Text
I1: addi R1, 30 // (R1)←30
I2: lw R2, R0, 16 // (R2)←M((R0)+16)
I3: add R3, R1, R2 // (R3)←(R1)+(R2)
A. 1    B. 2    C. 3    D. 4
查看答案与解析

答案: B

解析: I3 同时依赖 I1 产生的 R1 和 I2 加载得到的 R2。由于 I2 紧邻 I3,且不采用转发,主要约束来自 I2:I3 必须等到 I2 在 WB 阶段写回 R2 后,才能在 ID 阶段读取。

I2 的流水时序为:

时钟周期23456
I2IFIDEXMEMWB

原本 I3 的 ID 阶段位于第 4 周期。若插入 2 条 nop,I3 的 ID 阶段推迟至第 6 周期,可利用“同周期先写后读”的寄存器堆时序读取 I2 刚写回的数据。同时,I1 已在第 5 周期写回 R1,也满足要求。

因此需要插入 2 条空操作指令,选择 B。


  1. 【竟成·模拟七-21】 下列选项中,不会引起指令流水线阻塞的是()。
A. 外部中断    B. 执行空操作指令    C. Cache缺失    D. 访存冲突
查看答案与解析

答案: B

解析: 空操作指令 nop 本身是一条合法指令,它不改变程序可见状态,但可以像普通指令一样顺利流过流水线,因此不会因自身产生新的流水线阻塞,B 正确。

  • 外部中断到来后,处理器通常需要停止或清空流水线并转入中断处理,A 会影响流水线连续执行。
  • Cache 缺失需要等待下一级存储器调入数据或指令,会造成流水线停顿,C 错误。
  • 访存冲突属于结构冒险,多个流水段竞争同一存储资源时需要暂停部分指令,D 错误。

5.6.5 高级流水线技术

  1. 【王道·卷六-Q21】 在下列关于超标量技术的描述中,错误的是( )。
A. 超标量技术是指在流水线中采用更多的流水段数
B. 超标量技术执行指令时,可以同时发射多条指令至流水线中
C. 采用超标量技术的CPU必须配置多个不同的功能部件
D. 采用超标量技术的目的是利用部件的并行性来提高指令吞吐率
查看答案与解析

答案: A

解析: 超标量技术的核心是在同一时钟周期内并行发射并执行多条指令,通过配置多个执行部件来发掘指令级并行性,从而提高指令吞吐率。因此 B、C、D 均符合超标量处理器的基本特征。

在流水线中增加流水段数、将每个流水段进一步细分,以缩短时钟周期并提高主频,属于超流水线技术,而不是超标量技术。因此 A 错误。


  1. 【竟成·模拟五-20】 下列关于超标量和动态流水线说法正确的是()。 I. 超标量技术通过利用部件的并行性来提高流水线性能 II. 超标量处理器通过硬件动态进行流水线调度来完成指令打包和冒险处理 III. 超标量技术通过细化流水,提高主频来提高流水线性能
A. I    B. I、II    C. II、III    D. I、II、III
查看答案与解析

答案: B

解析: - I 正确。超标量处理器配置多个功能部件,在一个时钟周期内发射多条指令,利用部件并行性提高吞吐率。

  • II 正确。动态超标量处理器通常由硬件完成指令相关性检测、动态调度、发射和冒险处理,可在运行时选择可并行执行的指令。
  • III 错误。细化流水段、缩短时钟周期、提高主频是超流水线技术的思路,不是超标量技术的定义。

因此正确的是 I、II,选择 B。


5.7 多处理器的基本概念

5.7.2 硬件多线程的基本概念

  1. 【王道·卷五-Q20】 硬件多线程技术是一种共享单个处理器核内功能部件的技术,在下列关于硬件多线程的描述中,错误的是( )。
A. 每个线程实际上相当于一个指令序列    B. 多个线程可共享处理器核内的通用寄存器组和PC
C. 细粒度和粗粒度多线程指的都是线程并发执行    D. 同时多线程(SMT)是一种多线程并行执行技术
查看答案与解析

答案: B

解析: 硬件多线程通过在一个处理器核中保存多个线程的体系结构状态,使多个线程共享执行部件、流水线、Cache 等资源。为了使每个线程能够独立继续执行,每个线程必须拥有独立的程序计数器 PC 和独立的体系结构寄存器状态,因此不能共享同一套通用寄存器组和 PC,B 错误。

  • 每个线程对应一条独立的指令流,A 正确。
  • 粗粒度和细粒度多线程均通过在多个线程间切换或交替发射指令,实现宏观上的并发执行,C 正确。
  • SMT 可在同一周期从多个线程发射指令,使多个线程在处理器内部并行推进,D 正确。

5.7.4 共享内存多处理器的基本概念

  1. 【王道·卷二-Q20】 下列关于多处理器系统的描述中,错误的是( )。
A. 多处理器系统是共享存储多处理器系统的简称
B. 多处理器系统中所有主存储器都属于单一地址空间
C. 多处理器系统必须解决共享存储器的同步控制问题
D. 多处理器系统中各处理器对所有存储单元的访问时间是一致的
查看答案与解析

答案: D

解析: 共享内存多处理器系统向各处理器提供统一的共享地址空间,处理器之间通过共享存储器交换数据,因此需要解决互斥、同步和 Cache 一致性等问题,A、B、C 均正确。

多处理器系统既可能采用统一存储访问结构(UMA),也可能采用非统一存储访问结构(NUMA)。在 NUMA 系统中,处理器访问本地存储器和远程存储器的时间不同,因此不能认为各处理器访问所有存储单元的时间都一致,D 错误。