计算机组成原理2013年
计算机组成原理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:
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}$.
Smallest addressable unit:
- The smallest addressable unit is 1 byte.
Number of addressable units:
- $32 \, \text{k bytes} = 32 \times 1024 = 32,768 \, \text{bytes}$.
- Each byte requires a unique address.
Address bits required:
- To address $32,768$ bytes, we need:
$
\text{Address bits} = \lceil \log_2(32,768) \rceil = 15 \, \text{bits}.
$
- To address $32,768$ bytes, we need:
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. 考取有关 Opcode 和 Instruction 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 是指由于数据、控制或资源冲突,导致流水线不能正常执行的情况。分类如下:
数据冒险(Data Hazard):
- RAW (Read After Write): 后续指令需要读取之前指令写入的数据,但写操作尚未完成。
- WAR (Write After Read): 后续指令需要写入之前指令尚未读取的数据。
- WAW (Write After Write): 两条指令同时试图写入相同寄存器,但顺序错乱。
控制冒险(Control Hazard):
- 由于分支指令或跳转指令导致的指令流中断,使流水线无法预测后续执行的指令。
结构冒险(Structural Hazard):
- 硬件资源不足(如多条指令同时访问相同的存储器或运算单元),导致冲突。
2. RISC 的特征
Answer:
RISC(Reduced Instruction Set Computer) 是一种精简指令集计算机,其主要特点包括:
- 简单指令集: 每条指令完成单一任务,指令长度固定,易于解码。
- 寄存器优化: 使用大量通用寄存器,减少对内存的访问。
- 流水线友好: 设计与流水线结合紧密,指令执行周期短。
- 负载/存储架构(Load/Store Architecture): 所有操作都在寄存器间完成,内存访问仅限于加载和存储指令。
- 硬件实现简单: 将更多的优化任务交给编译器完成,硬件复杂度低。
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.
解释:
Memory-mapped I/O 系统:
- I/O 设备与主存共享相同的地址空间,每个设备通过特定的地址范围访问。
- 例如,地址范围 $ 0x0000 $ 到 $ 0x7FFF $ 可能对应主存,而 $ 0x8000 $ 到 $ 0xFFFF $ 对应 I/O 设备。
地址区分作用:
- CPU 根据地址区分是访问主存还是访问 I/O 设备。
- 这种方式减少了单独的 I/O 指令,统一了访问逻辑,但可能需要额外的地址解码器来处理区间映射。
在中断处理中,保存 PC 的作用
答案:
在中断处理中,保存 程序计数器(PC) 是为了记录下一条要执行的指令地址,确保中断处理完成后可以正确恢复程序的执行。
解释:
中断过程:
- 当发生中断时,CPU 暂停当前程序的执行,跳转到中断服务程序(ISR)处理中断。
- 在此过程中,需要保存当前指令的下一条地址(PC 的值),以便在中断完成后恢复程序。
PC 保存的作用:
- 确保中断结束后能够继续执行被中断的程序,而不会丢失程序执行流程。
过程步骤:
- 保存当前 PC 的值(即返回地址)到堆栈或特定寄存器中。
- 加载中断服务程序的地址到 PC。
- 中断服务程序执行完成后,恢复保存的 PC 值,继续执行原程序。
控制信号由什么决定
答案:
控制信号是由当前正在执行的指令决定的。
解释:
控制信号的作用:
控制信号用于管理 CPU、内存和 I/O 设备的操作,例如:读、写、ALU 运算、数据传输等。指令驱动控制信号:
- 当前指令通过指令解码器解析操作码(Opcode),生成对应的控制信号。
- 不同的指令类型(如算术、内存访问、跳转)需要不同的信号组合。
实例:
- 对于 LOAD 指令,控制信号可能包括:
- 内存读取信号(Memory Read)。
- 将内存数据传输到寄存器的信号。
- 对于 ADD 指令,控制信号可能包括:
- 启用算术逻辑单元(ALU)。
- 选择操作数寄存器信号。
- 对于 LOAD 指令,控制信号可能包括:
关键因素:
控制信号由以下因素决定:- 指令类型(如算术运算、内存访问指令)。
- 操作数的来源(寄存器或内存)。
- 数据传输的方向(读或写)。
CICS:条件分支使用相对寻址,指令地址为 0x0100,偏移量为 0x0010,下一条指令在哪?
答案:
下一条指令位于地址 0x0110。
解释:
相对寻址:
在相对寻址中,目标地址是通过当前指令的地址与偏移量相加计算得到的。计算过程:
- 当前指令地址:0x0100。
- 偏移量:0x0010。
- 目标地址 = 当前地址 + 偏移量:
$
0x0100 + 0x0010 = 0x0110
$
分支条件:
- 如果分支条件成立,程序会跳转到地址 0x0110 处执行。
- 如果分支条件不成立,则顺序执行下一条指令,其地址为 0x0102(假设当前指令长度为 2 字节)。
简答题
问题:
- 指出依赖指令
- 使用转发(forwarding)能否消除数据依赖?如果不能,我们该怎么做?
- 画出流水线执行这四条指令的示意图
指令序列:
Add R3, R1, #100
Or R4, R5, R6
Load R2, (R3)
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
(数据依赖)。
- 依赖于
依赖关系总结:
Load
依赖于Add
的R3
(地址依赖)。Subtract
依赖于Load
的R2
(数据依赖)。