计算机组成原理2013年

这张卷子还有诸多疑惑,留到离散考试后解决吧。

一些考点(没有明确的题)

1. The second generation computers is?

Answer:
Second generation computers refer to computers that used transistors instead of vacuum tubes. These computers appeared in the late 1950s and were faster, smaller, and more reliable than the first-generation computers.


2. Half adder, input is x, y, output is s, what is s?

Answer:
In a half adder, the sum $s$ is calculated as the XOR (exclusive OR) of the inputs $x$ and $y$:
$
s = x \oplus y
$
Where $x$ and $y$ are binary inputs. The XOR operation produces a sum of 1 when exactly one of the inputs is 1.


3. Seek time + rotational latency + transfer time is what?

Answer:
The sum of seek time, rotational latency, and transfer time represents the access time of a disk drive.

  • Seek time: Time to move the read/write head to the correct track.
  • Rotational latency: Time for the disk to rotate so that the desired sector is under the read/write head.
  • Transfer time: Time to transfer data once the head is correctly positioned.

Access time is the total time it takes to access and start reading or writing data on a disk.


4. 电脑内存 is 8k words of 32-bit each, 最小的 addressable memory unit is 8-bit bytes, 则内存地址需要多少bit?

Answer:
To calculate the number of address bits required, we follow these steps:

  1. Total memory size in bytes:

    • Each word has 32 bits = 4 bytes (since 1 byte = 8 bits).
    • Total memory = $8 \, \text{k} \times 4 = 32 \, \text{k bytes}$.
  2. Smallest addressable unit:

    • The smallest addressable unit is 1 byte.
  3. Number of addressable units:

    • $32 \, \text{k bytes} = 32 \times 1024 = 32,768 \, \text{bytes}$.
    • Each byte requires a unique address.
  4. Address bits required:

    • To address $32,768$ bytes, we need:
      $
      \text{Address bits} = \lceil \log_2(32,768) \rceil = 15 \, \text{bits}.
      $

Explanation:
The memory consists of 32,768 bytes, and each byte is uniquely addressable. To uniquely address $32,768$ units, $2^{15} = 32,768$, so 15 address bits are needed.

5. 考取有关 OpcodeInstruction Address 的点

Answer:

  • Opcode (操作码): 指令的操作部分,用于指定 CPU 应执行的操作类型(如加法、减法、加载、存储等)。每条指令都有唯一的操作码,由固定的比特数表示。例如,二进制 “0011” 可能表示一个加法操作。
  • Instruction Address (指令地址): 指令在内存中的位置,由程序计数器(PC, Program Counter)维护。当指令被执行时,PC 会递增以指向下一条指令的地址,或者根据条件跳转到指定的地址。
  • 考点:
    • 识别指令格式(例如,Opcode 和操作数字段)。
    • 理解指令地址的生成和跳转指令的工作机制。
    • Opcode 解码对指令执行的意义。

6. 考取有关 Hit Rate 的点

Answer:

  • Hit Rate (命中率): 在缓存(Cache)或存储层次结构中,命中率是指请求的数据在缓存中找到的概率。公式为:
    $
    \text{Hit Rate} = \frac{\text{Cache Hits}}{\text{Total Memory Accesses}}
    $
    其中:

    • Cache Hits 是数据直接从缓存中获取的次数。
    • Total Memory Accesses 是总的内存访问次数。
  • 考点:

    • 理解命中率的计算公式和影响因素(如缓存大小、替换策略)。
    • 缓存失效(Miss)的处理:包括强制失效(Compulsory Miss)、容量失效(Capacity Miss)和冲突失效(Conflict Miss)。
    • 命中率对系统性能的影响:高命中率降低主存访问延迟,从而提升系统效率。

7. 考取有关 Control Store 的点

Answer:

  • Control Store (控制存储器): 是微程序控制单元的一部分,用于存储微指令的存储器。微指令是实现复杂指令集的基本操作序列,每条微指令控制 CPU 内部的具体行为。
  • 工作原理:

    • 当 CPU 执行一条指令时,微指令从控制存储器中按序取出,用于控制信号的生成。
    • 微指令地址由指令解码或条件测试的结果决定。
  • 考点:

    • 理解微程序控制器的结构,包括控制存储器、地址寄存器和微指令寄存器。
    • 掌握微指令的编码方式,如水平微指令(控制信号直接编码)与垂直微指令(字段编码)。
    • 控制存储器的优化,例如减少微指令长度或提高执行速度。

8. 判断溢出

Answer:
溢出(Overflow)发生在计算结果超出了操作数表示范围时。

1. 无符号数溢出(Unsigned Overflow)
  • 条件: 当加法结果大于最大表示值(如 8 位无符号数的最大值是 255)。
  • 判断:
    • 如果结果的进位标志 $C$ = 1,则溢出发生。
    • 例如:$ 200 + 100 = 300 $ (超过 255,溢出)。
2. 有符号数溢出(Signed Overflow)
  • 条件: 加法或减法结果超出有符号数表示范围(如 8 位有符号数范围是 $-128$ 到 $127$)。
  • 判断:
    • 若两个数符号相同,且结果符号不同,则溢出发生。
    • 使用进位标志 $C$ 无法判断有符号数溢出,需要使用溢出标志 $V$。
    • 例如:$ 127 + 1 = -128 $ (溢出)。
考点:
  • 理解无符号数和有符号数的溢出条件。
  • 溢出标志位的设置规则,尤其是进位标志和溢出标志的区别。
  • 溢出的检测方法及其对计算结果的影响。

其他

1. Hazard 的分类

Answer:
在指令流水线中,Hazard 是指由于数据、控制或资源冲突,导致流水线不能正常执行的情况。分类如下:

  1. 数据冒险(Data Hazard):

    • RAW (Read After Write): 后续指令需要读取之前指令写入的数据,但写操作尚未完成。
    • WAR (Write After Read): 后续指令需要写入之前指令尚未读取的数据。
    • WAW (Write After Write): 两条指令同时试图写入相同寄存器,但顺序错乱。
  2. 控制冒险(Control Hazard):

    • 由于分支指令或跳转指令导致的指令流中断,使流水线无法预测后续执行的指令。
  3. 结构冒险(Structural Hazard):

    • 硬件资源不足(如多条指令同时访问相同的存储器或运算单元),导致冲突。

2. RISC 的特征

Answer:
RISC(Reduced Instruction Set Computer) 是一种精简指令集计算机,其主要特点包括:

  1. 简单指令集: 每条指令完成单一任务,指令长度固定,易于解码。
  2. 寄存器优化: 使用大量通用寄存器,减少对内存的访问。
  3. 流水线友好: 设计与流水线结合紧密,指令执行周期短。
  4. 负载/存储架构(Load/Store Architecture): 所有操作都在寄存器间完成,内存访问仅限于加载和存储指令。
  5. 硬件实现简单: 将更多的优化任务交给编译器完成,硬件复杂度低。

3. 关于 Pipelining

① Hazard:
在流水线中,Hazard 是由于指令间的依赖性或资源冲突,导致流水线停顿的情况。常见的解决方法:

  • 数据冒险:使用数据转发或插入气泡(Stall)。
  • 控制冒险:使用分支预测、延迟槽(Delay Slot)。
  • 结构冒险:增加硬件资源(如分离指令和数据存储器)。

② Branch Penalty:

  • 分支延迟(Branch Penalty) 是分支指令导致流水线清空或重新加载的时间损失。
  • 常见的优化方法:
    • 分支预测(Branch Prediction)。
    • 动态分支预测算法,如 1-bit 或 2-bit 饱和计数器。
    • 延迟槽:在分支指令后填充无依赖的指令。

③ Implement Pipeline:
实现流水线设计的关键点:

  • 将指令分解为多个阶段(如取指、译码、执行、访存和写回)。
  • 增加硬件寄存器(Pipeline Registers)在各阶段间传递数据。
  • 解决冒险问题,提高吞吐率。

4. In memory-mapped I/O system use _ to differentiate memory and I/O devices?

Answer:
In a memory-mapped I/O system, address ranges are used to differentiate between memory and I/O devices.


解释:

  1. Memory-mapped I/O 系统

    • I/O 设备与主存共享相同的地址空间,每个设备通过特定的地址范围访问。
    • 例如,地址范围 $ 0x0000 $ 到 $ 0x7FFF $ 可能对应主存,而 $ 0x8000 $ 到 $ 0xFFFF $ 对应 I/O 设备。
  2. 地址区分作用

    • CPU 根据地址区分是访问主存还是访问 I/O 设备。
    • 这种方式减少了单独的 I/O 指令,统一了访问逻辑,但可能需要额外的地址解码器来处理区间映射。

在中断处理中,保存 PC 的作用

答案:
在中断处理中,保存 程序计数器(PC) 是为了记录下一条要执行的指令地址,确保中断处理完成后可以正确恢复程序的执行。


解释:

  1. 中断过程:

    • 当发生中断时,CPU 暂停当前程序的执行,跳转到中断服务程序(ISR)处理中断。
    • 在此过程中,需要保存当前指令的下一条地址(PC 的值),以便在中断完成后恢复程序。
  2. PC 保存的作用:

    • 确保中断结束后能够继续执行被中断的程序,而不会丢失程序执行流程。
  3. 过程步骤:

    • 保存当前 PC 的值(即返回地址)到堆栈或特定寄存器中。
    • 加载中断服务程序的地址到 PC。
    • 中断服务程序执行完成后,恢复保存的 PC 值,继续执行原程序。

控制信号由什么决定

答案:
控制信号是由当前正在执行的指令决定的。


解释:

  1. 控制信号的作用:
    控制信号用于管理 CPU、内存和 I/O 设备的操作,例如:读、写、ALU 运算、数据传输等。

  2. 指令驱动控制信号:

    • 当前指令通过指令解码器解析操作码(Opcode),生成对应的控制信号。
    • 不同的指令类型(如算术、内存访问、跳转)需要不同的信号组合。
  3. 实例:

    • 对于 LOAD 指令,控制信号可能包括:
      • 内存读取信号(Memory Read)。
      • 将内存数据传输到寄存器的信号。
    • 对于 ADD 指令,控制信号可能包括:
      • 启用算术逻辑单元(ALU)。
      • 选择操作数寄存器信号。
  4. 关键因素:
    控制信号由以下因素决定:

    • 指令类型(如算术运算、内存访问指令)。
    • 操作数的来源(寄存器或内存)。
    • 数据传输的方向(读或写)。

CICS:条件分支使用相对寻址,指令地址为 0x0100,偏移量为 0x0010,下一条指令在哪?

答案:
下一条指令位于地址 0x0110


解释:

  1. 相对寻址:
    在相对寻址中,目标地址是通过当前指令的地址与偏移量相加计算得到的。

  2. 计算过程:

    • 当前指令地址:0x0100
    • 偏移量:0x0010
    • 目标地址 = 当前地址 + 偏移量:
      $
      0x0100 + 0x0010 = 0x0110
      $
  3. 分支条件:

    • 如果分支条件成立,程序会跳转到地址 0x0110 处执行。
    • 如果分支条件不成立,则顺序执行下一条指令,其地址为 0x0102(假设当前指令长度为 2 字节)。

简答题

问题:

  1. 指出依赖指令
  2. 使用转发(forwarding)能否消除数据依赖?如果不能,我们该怎么做?
  3. 画出流水线执行这四条指令的示意图

指令序列:

  1. Add R3, R1, #100
  2. Or R4, R5, R6
  3. Load R2, (R3)
  4. Subtract R9, R2, #30

答案

1. 依赖分析

我们需检查每条指令的源操作数和目的操作数之间的关系:

  • Add R3, R1, #100
    • 目的寄存器:R3
  • Or R4, R5, R6
    • 无依赖,独立指令。
  • Load R2, (R3)
    • 依赖于 Add 指令中的 R3(地址依赖)。
  • Subtract R9, R2, #30
    • 依赖于 Load 指令中的 R2(数据依赖)。

依赖关系总结

  1. Load 依赖于 AddR3(地址依赖)。
  2. Subtract 依赖于 LoadR2(数据依赖)。