进制与计量
K、M、G、T、P
| 单位 | 名称 | 定义 | 对应的字节数 | 换算关系 |
|---|---|---|---|---|
| K | Kilo | 千 | 2^10^ | 1KB = 1024B |
| M | Mega | 百万 | 2^20^ | 1MB = 1024KB |
| G | Giga | 十亿 | 2^30^ | 1GB = 1024MB |
| T | Tera | 万亿 | 2^40^ | 1TB = 1024GB |
| P | Peta | 千万亿 | 2^50^ | 1PB = 1024TB |
存储和网络中换算区别
| 存储 | 1KB = 1024B, 1MB = 1024KB |
|---|---|
| 网络 | 1KB/s = 1000B/s, 1MB/s = 1000KB/s |
机器数与码制 原码反码补码
原码、反码、补码和移码
| 码制 | 定义 | 数值0表示 | 8位表示范围 | 备注 |
|---|---|---|---|---|
| 原码 | 最高位为符号位,0表示正数,1表示负数 | 有+0和-0两种表示 | -127~+127 | 0正1负 |
| 反码 | 正数的反码与原码相同; 负数符号位不变,其余位取反 |
有+0和-0两种表示 | -127~+127 | 无 |
| 补码 | 正数的补码与原码相同; 负数的补码在反码基础上加1 |
只有一种表示法,即:00000000 | -128~+127 | 适合数字加减运算 |
| 移码 | 在补码基础上符号位取反 | 只有一种表示法,即:10000000 | -128~+127 | 适合浮动数阶码计算 |
小结:
- 原码、反码和补码正数表示方法一样
- 原码和反码表示范围:-127~+127,正负0表示不一样
- 补码和移码表示范围:-128~+127,正负0表示一样
示例:
| 编码方式 | 数值 | 表示方法 |
|---|---|---|
| 原码 | +1 | 0 0000001 |
| 原码 | -1 | 1 0000001 |
| 反码 | +1 | 0 0000001 |
| 反码 | -1 | 1 1111110 (符号位不变,其余位取反) |
| 补码 | +1 | 0 0000001 |
| 补码 | -1 | 1 1111111 (反码基础上加1) |
| 移码 | +1 | 1 0000001 |
| 移码 | -1 | 0 1111111 (补码基础上符号位取反) |
定点数与浮点数
定点数和浮点数对比
| 特性 | 定点数 | 浮点数 |
|---|---|---|
| 定义 | 小数点位置固定不变的数 | 由阶码、尾数和符号位组成,能表示很大范围的数值 |
| 表示形式 | 小数点固定在最高位之前或最低位之后,且小数点不占位 | 科学计数法形式,$$N = M * R ^ e$$, M为尾数,e为指数,R为基数 |
| 溢出处理 | 上溢:超出最大表示范围时无精确处理方式 下溢:小于最小表示值时作0处理或有特定处理 |
根据硬件和软件设计,可能有特定的溢出标志或处理机制 |
| 应用场景 | 精度要求不高,范围相对有限的计算 | 需要大范围和高精度的数值计算,如科学计算、工程计算 |
| 优点 | 实现简单,运算速度快 | 表示范围广,精度可变,灵活性高 |
| 缺点 | 表示范围受限,可能遇到溢出问题 | 实现复杂,运算速度相对较慢 |
| 示例 | 定点整数:102(小数点默认在最后) 定点小数:0.102(小数点在最前) |
$3 * 10^8$的浮点表示,尾数3,指数8,基数10 |
浮点数的计算
完成浮点数加减法五个基本步骤:
- 对阶(向大对阶,小数点左移,尾数右移):如$210^3 + 5 * 10^ 5$向大对阶为$0.0210^5 + 5 * 10^ 5$
- 尾数加减:$0.02 + 5 = 5.02$
- 规格化:$ 5.02 * 10 ^5$
- 舍入:
- 检查溢出:
计算机组成结构
计算机组成结构概述
计算机硬件系统依旧为冯诺依曼(扩展:图灵(图灵提出了思想))设计的体系结构,即由
- 运算器
- 控制器
- 存储器
- 输入设备
- 输出设备
以上五大部件组成。


CPU与运算器、控制器
运算器和控制器
| 组件 | 功能描述 | 主要组成部分 |
|---|---|---|
| 中央处理器 (CPU) | 计算机的核心,负责执行程序指令,处理数据 | 运算器 + 控制器 |
| 运算器 | 负责算术与逻辑运算 | ALU (算术/逻辑单元), 寄存器, 多路转换器, 数据总线 - ALU: 执行基本的数学和逻辑运算 - 寄存器: 存储运算过程中的数据和中间结果 - 多路转换器: 选择数据路径 - 数据总线: 在CPU内部及与内存之间传输数据 |
| 控制器 | 控制指令的读取、解释与执行,协调CPU与其他硬件组件 不仅要保证指令的正确执行,还要能够处理异常事件 |
PC(程序计数器), 指令寄存器, 指令译码器等 - PC(程序计数器): 存储当前指令地址,指示下一条指令的位置 - 指令寄存器: 存储当前正在执行的指令 - 指令译码器: 解析指令,生成控制信号 - 状态/条件寄存器: 存储CPU运行状态信息 - 时序发生器: 产生CPU操作的时序信号 - 微操作信号发生器: 根据指令译码结果产生控制信号,控制硬件执行 |
指令执行的步骤
| 步骤 | 动作 | 说明 |
|---|---|---|
| 第1步 | 取指 | 取操作数和指令如取“1”、“1”、“+” |
| 第2步 | 译码 | 识别指令是加减乘除如将“+”翻译为加法操作 |
| 第3步 | 执行 | 运算器的算数运算单元ALU执行加法操作 |
几个常考重要组件
| 组件 | 功能 | 备注 |
|---|---|---|
| 程序计数器(PC) | 是用于存放下一条指令所在单元的地址 | 最常考!!! |
| 指令寄存器(IR) | 存放当前从主存读出的正在执行的一条指令(含操作码和地址码)。 | PC存的是地址,IR存的是指令 |
| 指令译码器 | 分析指令的操作码,以决定操作的性质和方法。 | - |
计算机指令执行过程
处理器首先从程序计数器PC中取出指令在内存中的地址,通过地址总线寻址获取
然后,把从内存中取出的这条指令经数据总线送往指令寄存器中
指令的操作码被送到指令译码器中译码,地址码则送到地址形成部件,地址形成部件根据指令特
征将地址码形成有效地址,取出数据参与操作。运算器执行指令
寄存器
寄存器在CPU的内部,相比于Cache、内存等,寄存器的访问速度最快,
寄存器用于暂存寻址和计算过程的信息。分为:
| 寄存器 | 功能 |
|---|---|
| 累加器 | 是一个数据寄存器,在运算过程中暂时存放被操作数和中间运算结果,是通用寄存器的一种。 |
| 通用寄存器组 | 是CPU中的一组工作寄存器,用于暂存操作数或地址 |
| 其他寄存器 | 标志寄存器、指令寄存器。 |
总线和总线速率计算
总线简介
总线是一种内部结构,它是CPU、内存、输入/输出设备传递信息的共用通道,主机的各部件通过总线互相连接,外部设备通过相应的接口电路与总线相连接,从而形成了计算机硬件系统。
| 总线类型 | 功能描述 | 特点 |
|---|---|---|
| 数据总线 (Data Bus, DB) | 传递数据信息 between CPU与内存或其他I/O设备 | - 实现数据传输 |
| 地址总线 (Address Bus, AB) | 专门用于传送地址信息,决定CPU可直接寻址的内存空间大小 | - 地址总线位数决定内存大小:地址总线位数越多,能访问的地址范围越大 - 例如:32位地址总线最大寻址4GB内存 |
| 控制总线 (Control Bus, CB) | 传输控制信号和时序信号,协调系统内各部件的工作 | - 包括读/写信号、中断信号、时钟信号等 - 确保系统部件间操作同步进行 |

CPU特性
| 概念 | 定义 | 作用 | 关系 |
|---|---|---|---|
| 指令周期 | 取出并执行一条指令所需的时间 | 指令执行的基本时间单位 | 包含多个总线周期,根据指令复杂度变化 |
| 总线周期 | CPU进行一次存储器或I/O端口访问所需的时间(一般为存取一个字节) | 数据传输的基本时间单位 | 包含多个时钟周期,通常为4个,依系统设计而异 |
| 时钟周期 | 计算机系统中最小的时间单位,时钟脉冲的倒数 (如 i5 2.9GHz则时钟周期就为 1/2.9Ghz) |
决定计算机的基本操作速度 | 构成总线周期的基础,是最基本的时间计量单位 |
总线数据传输速率公式
总线传输速率计算公式如下:(记住下面公式)
$$
总线数据传输率= \frac{1}{{每个总线周期包含的时钟周期数} * {时钟周期} }* 每个总线周期传送的字节数
\\ = \frac{时钟频率}{每个总线周期包含的时钟周期数} * 每个总线周期传送的字节数
$$
例如:某系统总线的一个总线周期包含3个时钟周期,每个总线周期中可以传送32位数据。若总线的时钟频率为33MHz,则总线的带宽(即传输速度)应该是多少?
根据上述公式得出:33MHz/3×32b=11M×32b=44MB/s
指令基础 RISC CISC
指令基础
指令的组成
指令由操作码和地址码两个部分组成的。
| 组成 | 说明 |
|---|---|
| 操作码 | 指出该指令要完成什么操作:如加法操作 |
| 地址码 | 提供原始的数据(操作数):如数字 |
操作数的寻址方式
| 寻址方式 | 描述 |
|---|---|
| 立即寻址 | 直接给出操作数而非地址,无需查找地址(通常是最快的) |
| 直接寻址 | 直接给出操作数地址或所在寄存器号(寄存器寻址),如给出操作数的内存地址 |
| 间接寻址 | 给出的是指向操作数地址的地址 |
| 变址寻址 | 给出的地址需与特定的地址值累加从而得出操作数地址 |
注意:直接指出操作数本身不是直接寻址,而是立即寻址
CISC与RISC对比
| 指令系统类型 | 指令 | 寻址方式 | 实现方式 |
|---|---|---|---|
| CISC(复杂) | 数量多,使用频率差别大,可变长格式 | 支持多种方式 | - |
| RISC(精简) | 数量少,使用频率接近,定长格式 | 支持方式少 | 硬布线逻辑控制为主 |
流水线技术
流水线执行时间
流水线概述
假定有某种类型的任务,可分成k个子任务(A、B、C),每个子任务需要时间t,共有这样n个任务($I_1$~$I_n$)
则完成单个任务所需的时间为$kt$.
若以传统的方式,完成k个任务所需的时间是 $nkt$
使用流水线技术,花费的时间是 $kt + (n-1)t$ = $(k + n - 1)t$,该时间远小于上面的$nkt$
注意,如果每个子任务所需的时间不同,其时间取决于执行顺序中最慢的那一个,即t应当取$max(t_1, t_2, …, t_k)$。
笔者注:由下图可以看出,以流水线方式完成任务所需时间由两个部分组成
- 传统方式执行完n个子任务如下图的A、B、C所需的时间kt
- 第n个任务$I_n$长出$I_1$的部分(实际上长出几格是关于n的,首项为0,公差为1的等差数列)所需时间,该时间与n有关,为(n-1)t

流水线案例分析
若指令流水线把一条指令分为取指令、分析和执行三部分,三部分的时间分别是取指令2ns,分析2ns,执行1ns。最长的是2ns,因此100条指令全部执行完毕所需要的时间是:
- 按照流水线执行,则t = 2ns,n = 100
- 第一条指令顺序执行2ns+2ns+1ns = 5ns
- 后面100-1条指令流水线执行(100-1) x 2ns = 198ns
- (2ns+2ns+1ns)+(100-1)x2ns=203ns,现在考试选这个,即第一条顺序执行,后面n-1条按照流水线执行
- 2ns+2ns+2ns+(100-1)x2ns=204ns,早期考试选这个,即所有指令都按照流水线执行
考试用流水线执行时间公式
综上推导过程和案例分析可知,考试考察的流水线执行时间公式实际为
$$
T_p = t_1 + t_2 + … + t_k + (n - 1) * max(t_1, t_2, …, t_k)
$$
其中,n为连续的指令数量即流水线上任务数量,k为每个指令内子任务数量
流水线的吞吐率
流水线吞吐率公式1
指在单位时间内(基本是1秒)流水线所完成的任务数量或输出的结果数量。
$$
p = \frac{n}{T_k}
$$
其中,n为任务数,Tk是处理完成n个任务所用的时间
上面案例的吞吐率为
$$
p = \frac{n}{T_k}= \frac{100}{203*10^{-9}s}=4.93 * 10^8/s
$$
流水线吞吐率公式2
吞吐率另一个公式:
$$
p= \frac{1}{\Delta t}=\frac{1}{max(t_1,t_2…t_k)}
$$
意即吞吐率是最长流水段操作时间的倒数
加速比
定义:指不采用流水线的执行时间/采用流水线的执行时间,用来衡量并行系统或程序并行化的性能和效果
如上面的案例中的速比为500/203=2.46(如果不采用流水线,则执行100条指令需要500ns)
案例分析

解析:
由题意得,子任务数量k = 4,流水线任务数量n = 8,各个子任务执行时间如图所示
流水线执行时间为
$$
T_p = t_1 + t_2 + … + t_k + (n - 1) * max(t_1, t_2, …, t_k) = 7 \Delta t + (8-1) * max(t_1….t_k) = 7 \Delta t + 7 * 3\Delta t = 28\Delta t
$$流水线吞吐率为8/28$\Delta$ t ,选择C