计组

小数

定点

定点就是最高位是符号位,形如x.xxxxxx(x = 0 or 1),当以补码的形式存储时范围是[-1, 1)

例:

十进制数 二进制真值 原码(8位纯小数) 补码(8位纯小数) 说明
+0.6875 +0.1011 0.1011000 → 01011000 0.1011000 → 01011000 正数原码 = 补码
-0.6875 -0.1011 1.1011000 → 11011000 1.0101000 → 10101000 补码 = 数值部分取反加1

当然,我们也可以添加整数位,用.来分割整数位和小数位,现在二进制由符号位+整数位+小数位构成

十进制数 二进制真值 原码(8位定点) 补码(8位定点) 说明
+3.625 +11.101 0011.1010 0011.1010 正数原码 = 补码
-3.625 -11.101 1011.1010 1100.0110 负数补码 = 原码数值部分取反+1

注:表格中“.”仅为视觉分隔,实际存储为连续8位:如 001110101011101011000110

变形补码

这里补充双符号位补码,用来防止溢出

我们用00和11表示正数和负数,01和10分别表示着正溢出和负溢出,我们可以通过第一位永远是其符号位来记忆。

规格化

下文中的M,S,E为mantissa,significand,coefficient的缩写。

规格化就是二进制的科学计数法表示,第一个数不能为0。现在二进制由阶码(E)+尾数(M)构成。阶码的符号位为阶符,尾数的符号位为数符

由于规格化的限制,所以我们可知尾数用原码表示的时候$\frac{1}{2}\leq M\lt 1$用补码表示的时候规定 $\frac{1}{2} \leq M < 1$ 或 $-1 \leq M < -\frac{1}{2}$,补码的时候尾数只能是1.0XXX或者0.1XXX

例:

十进制数 二进制表示(非规格化) 规格化形式(M × 2^E) 尾数 M(二进制) 阶码 E
5.0 101.0 0.101 × 2³ 0.101 3
-3.5 -11.1 -0.111 × 2² 0.111 2
0.75 0.11 0.11 × 2⁰ 0.11 0
0.375 0.011 0.11 × 2⁻¹ 0.11 -1
10.0 1010.0 0.1010 × 2⁴ 0.1010 4
-0.625 -0.101 -0.101 × 2⁰ 0.101 0
0.1875 0.0011 0.11 × 2⁻² 0.11 -2

IEEE754

这是一个标准,我们只学习单浮点数的情况。二进制现在同样由E+M构成,但是这里的E会加上偏移(2^n-1)。对于单浮点,一共有32位,S为一位E为8位M为23位,这里当$E >= 1000 0000$代表阶码为正,小于的时候是负的,它的正负由于加了偏移所以和补码是不一样的,相当于基于2^9的偏移。M则是在规格化的基础上,略去第一个1,相当于增加表示的尾数提高了精度,此处的M就是单纯的无符号数,其正负由其S符号位表示

加减法

这里考虑补码的加减法,加法很简单,减法需要转换一下。

$[x-y]_补 = [x]_补 - [y]_补 = [x]_补 + [-y]_补 $

对于$[-y]_补$我们的求法是对$[y]_补$求补,但是是在符号位也需要变的情况下求补码。对 $Y_补$按位取反,末位加 1(包括符号位)

十进制数 原码 (8位) 补码 (8位) $[-x]_{补}$
7 0000 0111 0000 0111 1111 1001
-7 1000 0111 1111 1001 0000 0111

乘法

原码阵列乘法器

符号位用小学二年级老师教的判断

乘积采用小学三年级的乘法竖式计算,但是我们要按照绝对值后的乘法来计算。

补码阵列乘法器

按照原码算还是太拟人了。显然机器完全不是人。

如果给你两个补码让你算乘法,我们可以先换成原码,再将运算结果变成补码,符号位单独去算,这个也是要知道的,但是机器显然不能这么算,这太慢了。

所以直接补码阵列运算器出现了。

直接补码阵列乘法器

相当于带着补码的符号位一起进行运算,在人肉运算时,我们将符号位的1写为(1),用来表示-1,在常规的运算完成后相加时,这里的(1)相当于减去1,如果不够减的话,那么就需要借位,当借位到最高位的时候并且还是0,没有可借的,那么就把这个(1)写下去到最终结果。

除法

除法作为人类我们可以按照十进制数的写法来计算,但是呢,比较大小对于机器并非是看出来的,而是需要进行比较运算的,所以对于机器还不如直接被除数减去除数来判断正负,所以这就引出了下面两种方法。

注:这里所以的计算都采用定点小数双位补码来进行。

当被除数为负数时,变成绝对值进行处理

恢复余数法

这个只是用来帮助理解下一个方法的。

每一次我们将余数左移

加减交替法

先减,正的接着减,负的加回来

规格化浮点数加减法

  1. 判断是否有0

  2. 比较阶码,小阶码看齐大阶码(精度更高)

  3. 尾数求和(采用双符号位补码运算)

  4. 结果规格化

    判断符号位:

    1. 若为00.1,11.0则证明无溢出,已经符合规格化
    2. 若为00.0,11.1,也无溢出,只需要左移至0.1,1.0的规格化形式即可(左规)
    3. 若为01,10则出现了溢出,这时候我们进入第五步进行舍入处理
  5. 舍入处理:在对阶和溢出摄入的时候均按照这个原则处理

    1. IEE754
      1. 就近舍入:类似与四舍五入,尾数后面被舍去的数字,若比10000….大,则最低位+1,反之舍去,若恰好为1000…000…,那么如果现在最低位是0就舍去,是1就+1
      2. 去尾/正无穷/负无穷
    2. 尾数补码规格化:均采用0舍1入的方法,类似于754标准的就近舍入,但是X > 10000的时候才最低为+1,<=的情况统一舍去
  6. 阶码的溢出:阶码若正溢出视作正或负无穷,负溢出视作0

cache

基本概念:

  • cache:cache的数据块大小叫做行(所以行是大小),但是cache不仅是行,cache包含标记位和cache的数据块
  • 主存:以块(B)为单位,主存的地址由不同的映射方式定义
  • cache的行和主存的块是等长的

对于缓存一个主存的块,cache需要多存一个tag,主存->纯数据,cache-> 数据 + 元数据

全相联映射

相当于随机存储,只要cache没满就往里面存,但是需要并行比较导致电路复杂,一多了设计难度就炸了。

主存地址 = 块号(s) + 块内字节号(w位)

直接映射方式

相当于分组,给主存按照每r行分为一组,然后每组的第i块只能存在cache的第i行中。

主存地址 = 组号 (s-r)+ 组内号数(r) + 块内字节号(w)

此时第i行的cache存的就是每组主存第i块的内容,可以省略cache中对于行数的存储

组相联映射方式

是全相联和直接映射的折中。Cache被分成若干个,每个组内包含多个

映射规则:主存中的一个块可以映射到指定组内的任意一个空闲块

命名:cache每组行数v时,我们通常称这种方式为v路组相联映射,v通常为2、4、8、16。

对于主存每$2^v$分成一组,对于每个组中的第i块,可以存到cache中第i组的任意一行。

d = log2(cache组数)

主存地址=主存组号(s-d)+ 组内块号(d)+块内字节号(w)

举例

我们以一个地址线为16的64KB主存为例。其地址形如1001 0000 0000 0001,字长为1B,假设块大小为16B。(由此我们可以理解一点:cache中存的不是一个主存地址的内容,而是主存中相邻的几个内容组成的一个块。进一步,我们可以知道,在此例子下,一个块有16个,对应着4位二进制,所以主存的后四位对于命中cache的判断就没有用了,只是用来确定块内偏移的。)

  1. 全相联映射:这种情况,主存的前12位就是用来定位cache的tag,每次cpu访问的时候和tag进行比较。

  2. 直接映射:这种情况与cache的行数有关,假如cache一共有32行,那么主存就是每32块视作一组。每一组的第i块,对应着cache的第i行。

    64KB / 16B = 4K,可以求出主存有4K块。4K / 32 = 128,可以求出每一行cache被128行主存抢着用(我们可以视作把主存划分成128坨,但不能叫组,为了和下一种方式区分开),log2(128) = 7。log2(32) = 5,定位cache的行需要5位。剩下的12 - 5 = 7 ,所以主存的地址就是 7(tag) + 5(index) + 4(offset)

  3. 组相联映射:依旧和cache有关,我们假设cache有32行,设每组有4行,一共有32 / 4 = 8组。log2(8) = 3,需要3位来定位是哪一组cache。剩下的 12 - 3 = 9 位作为tag,用于和这一组的4行并行比较,判断是否命中缓存。所以主存的地址就是9(tag) + 3(set index) + 4(offset)

[!WARNING]

直接映射中删除线部分求出log2(128) = 7来表示tag当且仅当主存填满地址空间时结果与减出来的结果一致,所以用地址线数减去 index和 offset 更加稳妥。tag就是剩下多少位都用作tag,就算超了也是未命中,没有任何风险。

虚拟内存

仅学习页式存储管理

地址位数:存储容量 = 2地址位数,物理地址位数由主存容量定,虚地址位数由虚存容量定;单位换算:1KB=210B、1MB=220B、1GB=230B

页内偏移位数:由页面大小决定,即 log2(页面大小)

总页数 = 存储容量 ÷ 页面大小;页表长度 = 虚存总页数

逻辑地址位数 = 页号位数(log2(逻辑总页数)) + 页内偏移位数

主存物理空间 = 物理总页数 × 页面大小

虚地址转物理地址:拆分虚地址得虚页号(商)和偏移(余)→ 查页表找物理页号 → 物理地址 = 物理页号 × 页长 + 偏移;无映射则缺页中断

  1. 主存容量为 4MB,虚存容量为 1GB,则虚地址和物理地址各为多少位?如页面大小为 4KB,则 页表长度是多少? 30 22 1GB/4KB = 256K

  2. 某页式存储管理,页大小为 2KB。逻辑地址空间包含 16 页,物理地址空间共有 8 页。逻辑地址 应有多少位?主存物理空间有多大?

    页面大小 2 KB=2^11 B,因此页内偏移量为 11 位。 逻辑地址空间含 16 页,16=2^4,因此页号为 4 位 逻辑地址位数 = 页号位数 + 页内偏移量位数 = 4+11=15 位。 物理空间 = 物理页数 × 页面大小 = 16KB

  3. 在一个分页虚存系统中,用户虚地址空间为 32 页,页长 1KB,主存物理空间为 16KB。已知用户程序有 10 页长,若虚页 0、 1、 2、 3 已经被分别调入主存 8、 7、 4、 10 页中,请问虚地址 0AC5 和 1AC5(十六进制)对应的物理地址是多少 页长 1 KB=2^10 B,因此页内偏移量为 10 位 虚地址空间 32 页,32=25,虚页号占 5 位二进制。 物理空间 16 KB=16 页,物理页号范围 0∼15 映射关系:虚页 0→物理页 8、虚页 1→物理页 7、虚页 2→物理页 4、虚页 3→物理页 10。 虚地址格式:虚页号(高位 5) + 页内偏移(低位 10)

0AC5H=00010,1011000101B,页面号为2,已被调入到主存页4,所以,物理地址中的页面号为4,页内地址与虚地址的页内地址相同,所以是:0100,1011000101=12C5H

1AC5H=00110,1011000101B,页面号为6,未被调入到主存页中,所以无物理地址,会发生缺页中断。

指令系统

指令格式

指令格式形如:

操作码字段 OP 地址码字段A

根据一条指令有几个操作数,分为零、一、二、三操作数地址。(如汇编中的 NOP、INC、ADD、和arm架构下的add x0, x1, x2

零地址指令

操作码 OP

一地址指令

操作码 OP 地址码 A

二地址指令

操作码 OP 地址码 A₁ 地址码 A₂

A1为兼作存放操作结果的地址

三地址指令

操作码 OP 地址码 A₁ 地址码 A₂ 地址码 A₃

A1为被操作地址、A2为操作数地址、A3为存放操作结果的地址。


对于二地址指令可以进一步划分:令S代表存储器R代表寄存器

  1. SS
  2. RR
  3. RS

按照指令子长度划分,分为单字长、半字长、双字长指令

例题:

机器字长为 16 位,其中 OP 为操作码字段,Ms 和 Md 分别为寻址方式,Rs 和 Rd 为通用寄存器,Ms 和 Rs 组成了源操作数,Md 和 Rd 组成了目的操作数。指令格式:15 OP 10 Ms Rs Md Rd

(1)指令格式是何种指令格式?单字长二地址指令

(2)请解释说明:该指令可以指定多少种操作?6位OP,2⁶=64

(3)若源操作数和目的操作数各有 8 种寻址方式,则该系统可以具有多少个通用寄存器?2³ = 8,所以寻址方式占了3位,(16 - 6) / 2 - 3 = 2,剩下两位是用来存地址的,即为4个

寻址

方式 算法 主要优点
隐含寻址 操作数在专用寄存器 无存储器访问
立即寻址 操作数=A 无存储器访问
直接寻址 EA=A 简单
间接寻址 EA=(A) 大的地址范围
寄存器寻址 EA=R 无存储器访问
寄存器间接寻址 EA=(R) 大的地址范围
偏移寻址 EA=A+(R) 灵活
段寻址 EA=A+(R) 灵活
堆栈寻址 EA=栈顶 无需给出存储器地址

偏移寻址包含:相对寻址、基址寻址、变址寻址 也是最容易考的

指令

指令流程

**指令寄存器(**IR):保存当前正在执行的一条指令 Instruction Register **程序计数器(**PC):用于存放下一条指令所在的单元地址 Program Counter 数据地址寄存器(AR):保存当前CPU所访问的数据存储器(简称数存)单元的地址 Address Register 数据缓冲寄存器(DR):用来暂时存放ALU的运算结果或者内存的内容 Data Register 通用寄存器:当算术逻辑元(ALU)执行算术或逻辑运算时,为ALU提供一个工作区 通用的取指流程

1
2
3
4
5
graph TD
    A[开始] --> B[PC → AR]
    B --> C["M → DR (信号 R/Ŵ = R)"] 
    C --> D[DR → IR]
    D --> E{ }

然后是经典操作 读取:地址存到AR,输出存到DR,$R/\overline{W} = R$ 写入:地址存到AR,输入存到DR,$R/\overline{W} = W$

微指令格式

微指令的格式大体分成两类:水平型微指令和垂直型微指令

水平型微指令。 一次能定义并执行多个并行操作微命令的微指令, 叫做水平型微指令。 其一般格式如下

控制字段 判别测试字段 下地址字段

e.g.:

已知某机采用微程序控制方式,控存容量为 512× 48 位。微程序可在整个控存中实现转移,控制 微程序转移的条件共 4 个,微指令采用水平型格式,后继微指令地址采用断定方式。请问: (1)微指令的三个字段分别应为多少位?

控存地址位数 = 下地址字段 log2 512=9 位; 有 n 个转移条件,需要 n 位来分别表示 “是否按该条件转移”; 本题有 4 个转移条件,因此判别测试字段 = 4 位。 微操作控制字段位数 = 微指令字长 - 判别测试字段位数 - 下地址字段位数 = 32 - 4 - 9 = 35位

AI的一坨

好的,这是对您提供的四份计算机组成原理/体系结构简答题的完整解答。


第一份试卷(七、简答题 10分)

  1. RISC 含义: RISC 是 精简指令集计算机 (Reduced Instruction Set Computer) 的缩写。其核心思想是通过简化指令系统,使每条指令执行周期短、硬件实现简单,从而提高处理器的执行效率和性能。

  2. “存储总线”连接部件: 在双总线结构中,“存储总线”主要用于连接 CPU 和主存储器 (内存)。有时也用于连接高速缓存 (Cache),但其主要作用是实现 CPU 与主存之间的数据交换。

  3. 浮点数加减运算对阶原则: 对阶操作应采用 “小阶向大阶看齐”的原则。即,将阶码较小的那个数的小数点右移,使其阶码与较大的那个数相等。这样做可以保证数值精度损失最小(因为右移时丢失的是低位有效数字)。

  4. “控制存储器”存放内容: “控制存储器”(Control Memory, CM)用来存放 微程序。微程序是由一系列微指令组成的,每条微指令对应一个或多个控制信号,用于控制数据通路中的各个部件完成一条机器指令的操作。

  5. 采用“虚拟存储器”的目的: 采用“虚拟存储器”的主要目的是 扩大程序可使用的地址空间,使其不受物理内存容量的限制。它通过将部分不常用的数据暂时存放到外存(如硬盘),在需要时再调入内存,从而让程序感觉拥有一个比实际物理内存大得多的连续地址空间,同时提高内存利用率和多道程序并发能力。


第二份试卷(七、简答题 12分)

  1. 内部总线连接部件: 内部总线(也称片内总线或芯片内总线)主要用来连接 CPU 芯片内部的各个功能部件,例如:寄存器堆、算术逻辑单元 (ALU)、控制器、指令译码器、地址生成器等。

  2. 计数器定时查询方式优先级设置: 若要使得每个设备使用总线的优先级相等,应该将 计数器的初始值每次都从0开始计数,并且每次查询结束后,计数器清零或重置为0。这样,所有设备都有均等的机会被轮询到,实现了公平的“轮询”机制。

  3. 先行进位加法器优点: 先行进位加法器(Carry Lookahead Adder, CLA)的优点是 大大缩短了进位传递的时间,提高了加法运算的速度。它通过并行计算每一位的进位产生(Generate)和进位传播(Propagate)信号,避免了串行进位加法器中进位逐位传递造成的延迟。

  4. 双译码方式优点: 在存储器芯片中,地址译码采用双译码方式(行译码 + 列译码)的优点是 显著减少了译码器的输出线数量,降低了芯片引脚数和内部布线复杂度,节省了芯片面积,提高了集成度。例如,对于 64K×1 位的芯片,单译码需 65536 条字线,而双译码只需 256 条行线 + 256 条列线 = 512 条线。

  5. CPU区分指令和数据: CPU 区分指令和数据主要依靠 不同的时间周期和指令执行阶段

    • 取指周期:CPU 从存储器取出的内容被视为 指令
    • 执行周期:根据指令的操作码,CPU 可能会再次访问存储器,此时取出的内容被视为 数据。 此外,指令和数据在存储器中的位置、格式以及由控制单元根据指令流自动判断。
  6. 流水线资源相关冲突解决: 当流水线中出现资源相关(如两个指令同时争用同一个功能部件,如 ALU 或乘法器)时,通常采用以下方法解决:

    • 插入气泡 (Bubble/Stall):暂停后续指令的执行,等待当前指令释放资源。
    • 增加功能部件:复制有冲突的功能部件(如增加多个 ALU)。
    • 资源重命名:在支持乱序执行的处理器中,通过寄存器重命名技术,将不同指令的操作数映射到不同的物理寄存器,减少资源竞争。

第三份试卷(六、简答题 12分)

  1. 求 [-y]补 的方法: 已知 [y]补,求 [-y]补 的方法是:对 [y]补 连同符号位一起按位取反,然后末位加1。 (公式:[-y]补 = ~[y]补 + 1)

  2. 解决 CPU 与主存速度差异的方法: 一种常用方法是 在 CPU 和主存之间设置高速缓冲存储器 (Cache)。Cache 存储最近频繁访问的数据和指令,利用程序访问的局部性原理,使 CPU 大部分时间能从高速的 Cache 中获取数据,从而缓解速度差异。

  3. 程序计数器 (PC) 内容修改情况: PC 的内容在以下情况下会被修改:

    • 执行顺序指令后,PC 自动加1(或加指令长度)。
    • 执行 转移指令(如 JMP、CALL、BRANCH)时,PC 被载入目标地址。
    • 执行 中断或异常 时,PC 被保存,并载入中断服务程序的入口地址。
    • 执行 子程序调用指令 (CALL) 时,PC 被压栈,然后载入子程序入口地址。
    • 执行 返回指令 (RET) 时,PC 从栈中弹出。
  4. 流水线“数据相关”冲突解决: 解决数据相关(Data Hazard)冲突的主要方法有:

    • 前递 (Forwarding/Bypassing):将前一条指令的运算结果直接从 ALU 输出端或寄存器文件写回端“转发”给后一条指令的输入端,避免等待写回。
    • 插入气泡 (Stall):暂停流水线,插入空闲周期,直到数据准备好。
    • 编译器调度:在编译时调整指令顺序,尽量避免数据相关。
    • 乱序执行:允许后序指令在数据准备好时提前执行。
  5. 快速和慢速模块共用总线的定时方式: 应采用 同步定时方式。同步定时以统一的时钟信号作为基准,所有设备都按固定节拍工作。虽然慢速设备会降低整体效率,但为了确保系统稳定性和兼容性,必须选择最慢设备能跟上的时钟频率。异步定时虽然灵活,但在此场景下管理复杂,不如同步定时可靠。

  6. 总线仲裁目的: 总线仲裁是为了 解决多个主设备(如 CPU、DMA 控制器、I/O 处理器)同时请求使用总线时的冲突问题,决定哪个设备在当前时刻获得总线使用权,从而保证总线通信有序、高效地进行。


第四份试卷(无标题,共6题)

  1. 二进制全加器公式: 设 A、B 为两个输入位,C_in 为进位输入,则:

    • 和输出 S = A ⊕ B ⊕ C_in
    • 进位输出 C_out = (A ∧ B) ∨ ( (A ⊕ B) ∧ C_in )
  2. DRAM 需要“刷新”的原因: DRAM 的存储单元是基于电容存储电荷的,而电容会随着时间推移自然漏电,导致存储的信息(0或1)丢失。因此,必须定期对 DRAM 进行“刷新”操作——即读取每一行的数据并重新写入,以恢复电容上的电荷,保持数据不丢失。

  3. 链式查询方式设备优先级确定: 在“链式查询”方式中,设备的优先级由它们在总线上的 物理连接位置决定。离总线仲裁器(或总线控制器)最近的设备具有最高优先级,越远的设备优先级越低。仲裁信号沿链依次传递,只有当高优先级设备未请求总线时,低优先级设备才有机会获得授权。

  4. 按仲裁电路位置分类的仲裁方式: 按照总线仲裁电路的位置不同,仲裁方式分为两类:

    • 集中式仲裁:所有仲裁逻辑集中在单一的总线仲裁器(Bus Arbiter)中。
    • 分布式仲裁:仲裁逻辑分散在各个主设备上,各设备通过某种协议(如自举、竞争)自行协商决定谁获得总线使用权。
  5. RISC 最主要特点: RISC 最主要的特点是 指令集简单、规整,指令条数少,指令长度固定,寻址方式少,大部分指令在一个机器周期内完成。这使得硬件设计简化,易于采用流水线、超标量等高性能技术,从而获得更高的执行效率。

  6. 程序“时间局部性”含义: 程序的“时间局部性”(Temporal Locality)是指:如果一个信息项(如数据或指令)被访问过,那么在不久的将来它很可能再次被访问。这是缓存(Cache)和预取技术能够有效工作的理论基础之一。


以上答案力求简洁准确,符合“简答即可”的要求。希望对您的学习或备考有所帮助!

六、简答题(12分)

1.传统的CPU包括哪两部分? 运算器和控制器

2.用双符号位补码(变形补码)表示数据。当两个符号位为10时,此时该数的数值大小范围是多少? 负溢出 -2n+1~-2n-1 若非符号位有n个 10中, 1表示1×-2n+1 0表示0×-2n 剩下数据部分的范围为0~2n-1

3.采用行、列双译码结构进行地址译码,有什么优点?

减少线的数目

4.微程序控制器由哪三部分组成?

控制存储器 微指令寄存器 地址转移逻辑

5.总线带宽与总线位宽二者有什么关系?

带宽=位宽*工作频率

6.采用“链式查询方式”进行总线总裁时,设备的优先级如何确定?

越靠近中央仲裁器的优先级越高

简答

以下是将您提供的内容整理为 问答(QA)形式 的完整版,按章节组织,问题与答案一一对应,语言简洁准确,便于复习或教学使用:


第一章 计算机系统概论

Q1:冯·诺依曼结构计算机的主要特点是什么?
A:采用“存储程序”方式;指令与数据以二进制形式统一存储于同一存储器中;按顺序执行(取指→译码→执行);以 CPU 为核心,通过总线连接存储器和 I/O 设备。

Q2:冯·诺依曼结构的核心思想是什么?
A:将程序当作数据一样存入存储器,由硬件自动按顺序取出并执行,实现“程序控制”。

Q3:为什么说指令和数据在冯·诺依曼计算机中地位相同?
A:因为二者均以二进制形式存储在同一地址空间,通过同一总线传输,可被同等读写——程序本身也可作为数据被修改或生成(如自修改代码、编译器等)。

Q4:计算机系统为什么要采用分层结构?
A:为了降低系统复杂度,通过抽象隔离各层功能,使接口清晰、便于设计、移植、复用和维护。

Q5:简述计算机系统的层次结构及各层的作用。
A:典型层次从上到下为:

  • 应用程序层:解决用户问题;
  • 高级语言/库:提供编程抽象;
  • 操作系统:管理资源、提供系统调用接口;
  • 指令系统/汇编层:软硬件接口,定义机器指令;
  • 微程序层:生成控制信号序列(部分 CPU 使用);
  • 数字逻辑/电路层:物理硬件实现。

Q6:什么是软件和硬件的逻辑等价性?举例说明。
A:指同一功能既可用软件实现,也可用硬件实现。例如:浮点运算可用 FPU(硬件)或数学库(软件);AES 加密可用专用指令(如 AES-NI)或软件算法实现。

Q7:软件实现与硬件实现各有什么特点?
A:

  • 软件:灵活、开发快、成本低,但速度慢、效率较低;
  • 硬件:速度快、并行性强、能效高,但成本高、修改困难、灵活性差。

第二章 数的表示与运算

一、数的表示

Q1:原码、反码、补码、移码各自的表示方法是什么?
A:

  • 原码:最高位为符号位(0正1负),其余为绝对值;
  • 反码:正数同原码;负数符号位不变,数值位按位取反;
  • 补码:正数同原码;负数 = 反码 + 1;
  • 移码:真值 + 偏置常数(如 2^(n−1)),主要用于浮点阶码。

Q2:原码、反码、补码中 0 的表示有何不同?
A:原码和反码有 +0(00…0)和 −0(10…0 或 11…1)两种表示;补码中 0 唯一(全 0)。

Q3:n 位补码所能表示的数值范围是多少?为什么没有 −2ⁿ?
A:范围为 [−2^(n−1), 2^(n−1)−1]。−2ⁿ 需要 n+1 位才能表示(如 8 位无法表示 −256),故不在 n 位补码范围内。

Q4:什么是移码?移码的主要用途是什么?
A:移码 = 真值 + 偏置(通常为 2^(k−1))。主要用于浮点数的阶码表示,便于比较大小和硬件实现。

二、浮点数表示

Q5:浮点数由哪几部分组成?数符和阶符分别表示什么?
A:由数符 S(表示数值正负)、阶码 E(指数部分)、尾数 M(有效数字)组成。IEEE 754 中无显式“阶符”,阶码采用偏置表示,隐含符号信息。

Q6:为什么浮点数需要规格化表示?
A:避免同一数值有多种表示(如 0.1×2³ 与 0.01×2⁴),提高精度和有效位利用率。

Q7:什么是规格化浮点数?规格化的目的是什么?
A:规格化浮点数的尾数满足 1 ≤ |M| < 2(二进制下即形如 1.xxxxx…)。目的:唯一表示、最大化有效数字位数、提升计算精度。

Q8:IEEE 754 单精度浮点数的格式是怎样的?
A:共 32 位:1 位符号 S + 8 位阶码 E(偏置 127)+ 23 位尾数小数 f。值为 (−1)^S × 1.f × 2^(E−127)(正规数);E=0 或 255 用于表示非正规数、零、无穷大或 NaN。

Q9:IEEE 754 中为什么要隐藏尾数的最高位 1?
A:因规格化尾数必为 1.xxxx…,故可隐含最高位 1,节省 1 位存储空间,相当于获得 24 位精度。

Q10:IEEE 754 中阶码为什么要加偏置(127)?
A:将有符号阶码转为无符号整数,便于硬件直接比较大小、排序和进行加减运算。

三、算术运算与运算器

Q11:补码加法的运算规则是什么?
A:按模 2ⁿ 相加,丢弃最高位进位;溢出可通过符号位进位异或判断。

Q12:补码减法如何转换为加法实现?
A:A − B = A + (−B) = A + [B 的补码] = A + (~B + 1)。

Q13:什么是算术溢出?如何检测溢出(单符号位 / 双符号位)?
A:结果超出机器数表示范围即为溢出。

  • 单符号位:若两同号数相加得异号结果,或符号位进位 ⊕ 最高数值位进位 = 1,则溢出;
  • 双符号位(变形补码):若结果最高两位不一致(如 01 或 10),则溢出。

Q14:全加器的逻辑表达式是什么?其进位延迟如何产生?
A:Sum = A ⊕ B ⊕ Cin;Cout = AB + (A⊕B)Cin。进位需逐级传递,前一级 Cout 作为后一级 Cin,导致传播延迟。

Q15:行波进位加法器的工作原理及其缺点是什么?
A:多个全加器串联,低位进位依次传递至高位。缺点:进位链延迟随位数线性增长(O(n)),速度慢。

Q16:先行进位的基本思想是什么?为什么能提高速度?
A:预先计算每位的“进位生成”Gi = Ai·Bi 和“进位传递”Pi = Ai⊕Bi,通过并行逻辑直接计算各级进位,减少进位传播深度,显著加速。

Q17:原码阵列乘法器的基本工作原理是什么?
A:根据乘数每一位生成部分积(0 或被乘数),通过阵列加法器逐层累加,符号位单独处理。

Q18:什么是间接补码阵列乘法器?
A:先将补码操作数转换为绝对值(原码),进行原码乘法,再根据符号和补码规则修正最终结果。

Q19:直接补码阵列乘法器与间接补码阵列乘法器的区别?
A:

  • 直接:在阵列内部处理符号和补码补偿(如末尾加一行),速度快但结构复杂;
  • 间接:先取绝对值做原码乘,再外部修正,结构简单但需额外步骤。

Q20:原码除法的“恢复余数法”和“加减交替法”有何区别?
A:

  • 恢复余数法:试减后若余数为负,需加回除数“恢复”,再记商 0;
  • 加减交替法(非恢复):余数为负时不恢复,下步改做加法,末尾一次性修正,效率更高。

Q21:阵列除法器的基本思想是什么?
A:将除法的逐次加/减与移位操作固化为硬连线阵列结构,实现并行或流水化除法。

Q22:ALU 的功能由什么决定?如何根据功能表使用 ALU?
A:由控制信号(功能码)决定。根据功能表设置选择信号(如 S3~S0),即可输出对应运算结果(如加、减、与、或等)。

Q23:浮点加减运算的主要步骤有哪些?
A:① 对阶(小阶向大阶对齐,尾数右移);② 尾数加减;③ 规格化;④ 舍入处理;⑤ 溢出/下溢检查。

Q24:浮点乘除运算中,阶码和尾数分别如何处理?
A:

  • 阶码:乘法时相加(再减偏置),除法时相减(再加偏置);
  • 尾数:相乘或相除;
  • 结果需规格化、舍入,并设置符号位 S = SA ⊕ SB。

第三章 存储系统

Q1:存储器按层次如何分类?各层次的特点是什么?
A:寄存器 → Cache → 主存(DRAM)→ 外存(SSD/HDD)→ 离线存储。越上层速度越快、容量越小、成本越高;越下层反之。

Q2:简述存储系统的层次结构及其设计依据。
A:基于局部性原理(时间/空间局部性),通过多级缓存、块传送、替换策略(如 LRU)和写策略(Write-through/Back),在成本与性能间取得平衡。

Q3:主存储器的主要技术指标有哪些?
A:容量、字长、访问时间/周期、带宽、命中率、功耗、成本/位。

Q4:SRAM 和 DRAM 在结构和性能上有何区别?
A:

  • SRAM:用触发器存储,无需刷新,速度快,但密度低、成本高;
  • DRAM:用电容存储,需定期刷新,速度较慢,但密度高、成本低。

Q5:为什么 DRAM 需要刷新?刷新有哪几种方式?
A:电容会漏电导致数据丢失。刷新方式包括:集中刷新、分散刷新(行刷新)、CAS-before-RAS(CBR)刷新、自刷新。

Q6:存储器容量扩展的常见方法有哪些?
A:位扩展(增加数据宽度)、字扩展(增加地址空间)、多模块交叉/银行化(提高并行性)。

Q7:什么是位扩展和字扩展?
A:

  • 位扩展:多个芯片并联,扩展数据位宽(如 8 片 1M×1 扩展为 1M×8);
  • 字扩展:通过地址高位选片,扩展存储单元数量(如 2 片 1M×8 扩展为 2M×8)。

Q8:新型 DRAM 芯片(如 SDRAM)的主要特点是什么?
A:同步时钟控制、支持突发(Burst)传输、多 Bank 并行、命令驱动、高带宽。

Q9:ROM 有哪几种类型?各自的特点是什么?
A:

  • Mask ROM:出厂固化,不可改;
  • PROM:一次可编程;
  • EPROM:紫外光擦除;
  • EEPROM/Flash:电擦除、可重写,Flash 支持块擦除。

Q10:什么是双端口存储器?有什么优点?
A:具有两个独立访问端口,可同时读/写,提升带宽和并行性,常用于高速缓存或图形处理。

Q11:什么是相联存储器?其主要用途是什么?
A:按内容而非地址寻址(Content-Addressable Memory, CAM)。用于 TLB、Cache 标记查找等需快速匹配的场景。

Q12:多模块交叉存储器的基本原理是什么?
A:将地址低位用于选择存储模块,连续地址分布在不同模块,实现交叉访问,隐藏存储周期,提高吞吐。

Q13:Cache 的基本工作原理是什么?
A:利用局部性,将主存中近期可能访问的数据块复制到高速 Cache 中;命中则快速访问,未命中则从主存调入。

Q14:Cache 与主存之间有哪些地址映射方式?
A:直接映射、全相联映射、组相联映射。

Q15:直接映射、全相联映射、组相联映射各有什么特点?
A:

  • 直接:实现简单、速度快,但冲突率高;
  • 全相联:命中率高,但硬件复杂、成本高;
  • 组相联:折中方案,兼顾性能与复杂度。

Q16:什么是虚拟存储器?其核心思想是什么?
A:以磁盘为后备,将程序按页/段动态调入主存,提供远大于物理内存的虚拟地址空间。核心:按需调页 + 局部性原理

Q17:存储保护的主要实现方法有哪些?
A:基址-界限寄存器、页表中的 R/W/X 权限位、特权级/保护环、段表权限、内存保护键(MPK)等。


第四章 指令系统

Q1:一条指令通常由哪几部分组成?
A:操作码(Opcode)、寻址方式标识、源/目的操作数字段(寄存器、立即数、地址偏移等)、条件码、长度信息等。

Q2:常见的指令格式有哪些?
A:0/1/2/3 地址指令;R/I/J 型(如 MIPS);定长(RISC)与变长(CISC)格式。

Q3:什么是操作码定长?有什么优缺点?
A:操作码固定位数。优点:解码简单快速;缺点:编码空间受限,难以支持大量指令或灵活操作数。

Q4:什么是扩展操作码?其设计思想是什么?
A:高频指令用短操作码,低频指令用前缀+长操作码。思想:层次化编码,提升编码效率和指令密度。

Q5:常见的寻址方式有哪些?
A:立即、寄存器、直接、间接、寄存器间接、基址、变址(索引)、位移、PC 相对、堆栈等。

Q6:如何计算有效地址 EA?
A:依寻址方式而定,例如:

  • 基址+变址:EA = Base + Index×Scale + Disp;
  • PC 相对:EA = PC + offset;
  • 寄存器间接:EA = (R)。

Q7:立即寻址和直接寻址的区别是什么?
A:立即寻址的操作数直接包含在指令中;直接寻址的操作数地址在指令中,需访存一次获取数据。

Q8:变址寻址和基址寻址各自的应用场景是什么?
A:

  • 变址(Index):用于数组/循环遍历(Index 递增);
  • 基址(Base):用于程序重定位、多任务隔离、栈帧访问(Base 固定,Disp 变化)。

Q9:CISC 指令系统的主要特点是什么?
A:指令多且复杂、寻址方式丰富、变长指令、微程序控制、寄存器少、代码密度高。

Q10:RISC 指令系统的主要特点是什么?
A:指令简单定长、Load/Store 架构、寄存器多、寻址方式少、硬连线控制、流水线友好。

Q11:RISC 与 CISC 在设计思想上的根本区别?
A:CISC 依靠复杂指令减少程序条数,靠硬件实现功能;RISC 简化指令,靠编译器优化和流水线提升吞吐。

Q12:设计指令结构时需要考虑哪些因素?
A:性能(流水线兼容性)、编码空间与密度、正交性、兼容性、实现复杂度、能耗/面积、调试与安全性。


第五章 中央处理器(CPU)

Q1:CPU 的基本组成包括哪些部件?
A:ALU、寄存器组、控制器(硬连线/微程序)、PC、IR、状态寄存器、内部总线,部分含 Cache。

Q2:程序计数器(PC)的作用是什么?
A:保存下一条待取指令的地址,执行后自动更新(顺序+4 或跳转目标)。

Q3:指令周期和 CPU 周期的区别是什么?
A:指令周期 = 完成一条指令所需全过程;CPU 周期(时钟周期)是基本时间单位,一个指令周期包含多个 CPU 周期。

Q4:一条指令的执行过程通常分为哪几个阶段?
A:取指 → 译码 → 取操作数/地址计算 → 执行 → 访存(如 Load/Store)→ 写回。

Q5:如何用方框图语言描述指令执行过程?
A:用寄存器传输语言(RTL)表示,如:MAR←PC;IR←Mem[MAR];PC←PC+4;Reg[rd]←ALUout。

Q6:控制器有哪些控制方式?各有什么特点?
A:

  • 硬连线:速度快,但修改困难;
  • 微程序:灵活易改,但稍慢;
  • 混合式:结合两者优势。

Q7:什么是微程序控制?
A:将每条机器指令的执行分解为一系列微指令,存储在控制存储器中,顺序执行以生成控制信号。

Q8:微命令、微指令和微程序之间的关系是什么?
A:微命令 = 单个控制信号;微指令 = 一个时钟周期内所有微命令的集合;微程序 = 实现一条机器指令的微指令序列。

Q9:微地址是如何形成的?
A:由微地址字段、顺序器、条件分支(根据标志位)、操作码映射入口等共同决定下一微地址。

Q10:什么是并行性?CPU 中体现在哪些方面?
A:并行性指同时处理多个任务。CPU 中包括:

  • 指令级(流水线、超标量);
  • 数据级(SIMD/向量);
  • 线程级(多核、SMT);
  • 存储并行(多 Bank Cache)。

Q11:流水线中的三种相关冲突分别是什么?
A:数据相关、结构相关、控制相关(分支相关)。

Q12:数据相关、结构相关、控制相关的解决方法有哪些?
A:

  • 数据相关:转发(旁路)、停顿、寄存器重命名、调度;
  • 结构相关:增加资源(如多 ALU)、调度;
  • 控制相关:分支预测、延迟槽、投机执行+回滚。

Q13:RISC 技术在 CPU 设计中的体现是什么?
A:定长指令利于流水线;Load/Store 架构简化访存;丰富寄存器减少访存;硬连线控制提速;支持快速分支与数据转发。

Q14:指令与微指令的区别是什么?
A:指令是 ISA 层对软件可见的操作;微指令是硬件内部控制单元使用的底层信号序列,软件不可见。


第六章 总线系统

Q1:总线按功能可分为哪几类?
A:地址总线、数据总线、控制总线;按范围:片内总线、系统总线、I/O 总线、存储总线等。

Q2:总线的主要性能指标有哪些?
A:带宽(GB/s)、位宽、时钟频率、传输率、延迟、仲裁延时、利用率、负载能力、电气特性。

Q3:总线的数据传送方式有哪些?
A:程序查询 I/O、中断 I/O、DMA、总线主控(Bus Mastering)。

Q4:常见的总线仲裁方式有哪些?
A:链式查询(菊花链)、集中并行仲裁、分布式仲裁(如令牌、CAN)、轮询。

Q5:链式查询仲裁方式的工作原理是什么?
A:总线请求信号沿设备链传递,优先级由物理位置决定,最先响应者获得总线。

Q6:集中式仲裁和分布式仲裁有何区别?
A:集中式由单一仲裁器裁决;分布式由各节点自主协商(如比较优先级或传递令牌),无单点故障。

Q7:分布式仲裁电路的基本思想是什么?
A:各节点将自己的优先级编码放到总线上,通过“线与”或“线或”比较,最高优先级者胜出;或通过令牌在节点间传递。

Q8:总线的同步定时和异步定时有何区别?
A:

  • 同步:依赖全局时钟,时序固定,简单但受时钟 skew 限制;
  • 异步:采用握手协议(Req/Ack),适应不同延迟,更灵活但控制复杂。

Q9:总线的数据传送模式有哪些?
A:单次传送、突发(Burst)传送、分离事务(Split Transaction)、循环窃取(DMA)。

Q10:多总线结构的优点是什么?
A:提高并行度、减少冲突、模块化设计、易于扩展、隔离不同类型流量(如 CPU-内存 vs I/O),提升整体吞吐与可靠性。


✅ 此 QA 整理可用于复习提纲、教学讲义或面试准备。如需 PDF 或 Markdown 格式,可进一步告知。

计网

模型概念

OSI模型:

  1. 物理层:在物理介质(如电缆、光纤)上传输和接收原始比特流。
  2. 数据链路层:将从物理层获得的二进制流拆分为分离的帧。
  3. 网络层:将分组从源机一路送到目的机。
  4. 传输层
  5. 会话层
  6. 表示层
  7. 应用层

信道复用

  1. 时分复用 :将时间分成一个个极短的间隔,并 为每个用户分配专属的时间间隔, 用户在属于自己的时间间隔使用整条共享信道。
  2. 频分复用: 将共享的物理带宽分成若干间隔的频率范围,每个频 宽可以全时、同时使用,各个频宽上传输的信号互不干扰。
  3. 波分复用 :本质上是频分复用,波分复用是一种共享光纤信道的技术,不同用户的数据搭载到不 同波长的光波信号上,复用在一起共享信道
  4. 码分复用:不会太难了

数据链路层(DLL)协议

HDLC协议

帧的头部和尾部,以01111110的序列作为分界标志。

HDLC协议使用比特填充(bit stuffing)来避免在数据中出现与标志字段相同的比特模式。HDLC的标志字段是01111110,因此当数据中出现连续5个1时,需要在第5个1后面插入一个0。(这样数据中永远无法出现连续的6个1,避免出现帧标志分界符)

PPP

PPP同样以01111110作为分帧的边界符。

PPP协议在进行异步传输时,使用字节填充的法而在同步传输时,PPP协议使用与HDLC协议类似的位填充法

PPP使用异步传输时,我们使用0x7D(01111101)作为转义符,想要在里面输入特殊字节,就在前面加个转义符。类似c语言字符串中的"\\"行为

PPPoE

PPPoE技术(PPP over Ethernet),“在以太网上的PPP协议”

调制

波特率(baud)和比特率(bit)的关系 :

波特率:每秒钟信号变化的次数,也称调制速率

比特率:每秒钟传送的二进制位数

校验

奇偶校验

通过校验码字里面的1的个数是奇数或者偶数来判断是否出错。

CRC

给出一个生成多项式G(x)为r阶,原数据M(x)

在M(x)后面添加r个0,用得到的这个使用模2除法(即不借位)除以G(x)求出余数,用余数替换原先的r个0

模2除法它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只要以相同位数进行相除即可。余数首位是1,商就是1,余数首位是0,商就是0。

海明码

用2^n位(n = 0, 1, 2 …)作为校验位,然后中间是原先的数据位

对于第i个校验位(i = n + 1),从该位开始计算连续i的异或,跳过i个,再计算连续i个的异或,一直循环到末尾。

通常使用偶校验(即校验位使得其负责的所有位的总异或和为0)。

校验位数 r 需要满足不等式: 2^r >= k + r + 1