计算机组成原理学习笔记
最近发现自己离科班出身差了”挂科四大件”
- 计算机组成原理
- 操作系统
- 数据结构(已完成)
- 计算机网络
其中数据结构学习了”大话数据结构”这本书,基本算是没问题. 正在通过刷算法题强化算法. 未来会啃一遍算法第四版
现在开始学习计算机组成!
==学习是跟着 b 站的视频学习的, 所以其实也包含了很多视频的截图.== 视频地址:https://www.bilibili.com/video/BV1BE411D7ii?p=1
1. 基本概念
1.1 计算机分类与发展方向
1.2 结构
1.2.1 系统结构
指令和数据流
- 单指令&单数据流 SISD: 冯诺依曼体系结构
- 单指令流&多数据流 SIMD: 阵列处理器, 向量处理器
- 多指令流&单数据流 MISD: 实际不存在
- 多指令流&多数据流 MIMD: 多处理器, 多计算机. 类似分布式
左上角为冯诺依曼结构计算机
右上角为现代结构计算机
注意理解图中各个箭头的意义
个人理解:
- 计算机是输入到输出, 所以要有输入设备和输出设备
- 输入到输出需要计算,所以左上角图中,中间由运算器连接
- 整个流程需要控制, 所以输入输出运算器均由控制器控制(虚线)
- 我们需要让输入连续一串,而不是一个一个,所以需要地方存储输入的数据和指令, 所以有了存储器,存储器与运算器直接数据交互
- 又因为控制器需要控制逻辑运算流程,所以存储器和控制器也直接数据交互(左上角图完成)
- 如果将运算器独立出来作为运算职能, 将存储器与运算器位置交换, 可以得到右上角图. 右上角图的优势是总线变宽
上面两张图进行分类得到左下角的图, 可以知道 CPU 和 IO 设备的由来, 这也就组成了右下角的计算机
1.2.2 CPU 及工作过程
==cpu 的任务: 到内存中取指令; 按指令的指示进行下一步工作==
运算器和控制器
计算机工作过程-取数指令
1.2.3 I/O 设备
1.2.4 软件系统
机器语言: 二进制代码
1 | 0000,0000,000000010000 |
如果 0000 代表 LOAD 操作, 0001 代表 STORE 操作. 可以使用汇编语言使人类能看懂
汇编语言 Assembly language : 助记符
所以, 汇编语言也就是一种助记符.
1 | LOAD A,16 |
16 号单元数据与 17 号单元数据相加存回 17 号单元:
1 | LOAD A,16 |
汇编语言通过汇编器转换为机器语言
汇编语言其实也不是我们平时在生活中使用的符号, 所以就有了高级语言
高级语言: C/C++, Java
1 | c = a + b |
高级语言通过编译器编译为汇编语言
1.2.5 计算机系统的层次结构
微指令是为了复用机器指令
冯诺依曼计算机
“存储程序”: 将指令以代码的形式实现输入到计算机主存储器中, 然后按其在存储器中的首地址执行程序的第一条指令, 以后就按照程序的规定顺序执行其他指令, 直至程序执行结束.
- 计算机硬件由运算器,存储器,控制器,输入设备,输出设备 5 大部件
- 指令和数据以同等地位存于存储器内,并可按地址寻访
- 指令和数据军用二进制码表示
- 指令由操作码和地址码组成, 操作码用来表示操作的性质, 地址码用来表示操作数在存储器中的位置
- 指令在存储器内按顺序存放. 通常指令是顺序执行的, 特定条件可以根据设定的条件改变
- 早期的冯诺依曼机以运算器为中心, 输入/输出设备通过运算器与存储器传送数据
1.2.6 存储器
注意存储元的存储原理
我们将诸多的存储元放在一行构成了存储单元. 许多存储单元构成了存储体
图中绿色线表示连通的, 所以我们需要图中的红色线来表明我们取的是哪一行存储单元. 红色线的数值用 0 和 1 表示,1 表示选取该行.
于是有了另一个设备: 译码器. 用来指定输入/输出的存储单元. 因为用二进制表示, 所以 3 根输入线可以表示 8 排存储单元. 图中的设备名为 3-8 译码器
尽管设计上 MDR 和 MAR 是属于内存, 但是实现上是放在了 CPU 中的, 目的是为了加快速度
1.3 性能指标
1.3.1 容量
首先得了解一下存储器的容量

一个存储元只能存储二进制的一位, 也就是一个 bit. 一个存储单元是八个存储元,也就是 1Byte
所以可以计算出总容量
译码器依赖于地址寄存器. 如果译码器加一根线, 可以支持的存储单元就多一倍. 所以系统所能支持的最大容量取决于地址寄存器.
已经达到上限的话,添加右侧的存储单元也是无意义的.
1.3.2 速度
几个方面可以衡量计算机的速度
CPU 执行速度
时钟周期的倒数就是主频 
- MIPS (Million Instructions Per Second): 每秒执行多少百万条指令
数据通路带宽
数据总线一次所能并行传送信息的位数
吞吐量
系统在单位时间内处理请求的数量
响应时间
指从用户向计算机发送一个请求,到系统对该请求做出相应并获得它所需要的结果的等待时间.
通常包括 CPU 时间,与等待时间(磁盘,存储器,IO,系统开销)
2 数制与编码
2.1 计数法和编码
2.1.1 进数计数法
基数: 每个数位所用到的不同符号的个数
基数大(十进制) | 基数小(二进制) | |
---|---|---|
位数 | 少 | 多 |
运算(乘法为例) | 100 种情况(10*10) | 4 种情况(2*2) |
计算机选择二进制的原因: 方便对应到物理器件的状态, 如高电平, 低电平
2.1.2 进制转换 (重点)
进制说白了只是因为每一位的权值不同, 比如 75 = 7 * 10 + 5
这个权重叫做位权
十进制和任意进制的转换
根据位权的推算, 我们可以通过一种除基取余法来转换.
二进制和其他进制的转换
n 位一组法
真值和机器数
2.1.3 BCD 码
BCD 即 Binary Coded Decimal
注意如果超出 9, 则不在映射表中, 这种情况需要加 6
叫做加6修正
我感觉就是模拟十进制的进位, 使二进制表示方法下进位
除了 8421 码还有:
- 余 3 码, 其实也就是将 8421 平移了
- 2421 码, 也就是将最高位权重变为 2
2.1.4 字符
ASCII 码:
大写字母: 65-90
小写字母: 97-122
需要记住的是 A 是 65
而且实际存放的是 ASCII 码对应的二进制形式
2.1.5 奇偶校验
码距: 两个合法码字对应位上数字的不同位的个数
奇偶校验其实就是增加了一个校验位, 用来使整个奇偶校验码”1”的个数为奇数或偶数
示例: 给出两个编码 1001101 和 1010111 的奇校验码和偶校验码
假设最高位为校验位, 剩下 7 位为信息位, 则对应的奇偶校验码为:
奇校验: 11001101 01010111 (第一个本身 1 不是奇数个,加一个 1 变成奇数个, 第二个本身就是奇数个,所以补一个 0)
偶校验: 01001101 11010111
2.1.6 汉明码
汉明码的设计思路: 分组校验 -> 多个校验位 -> 校验位标注出错位置
汉明码的实际过程和校验方法略
2.1.7 循环冗余校验码
略
2.2 定点数的表示和运算
2.2.1 无符号数和及原码
无符号数: 整个机器字长的全部二进制位均为数值位, 没有符号位, 相当于数的绝对值
原码: 就是符号位加上了绝对值, 把正号变为 0,把符号变为 1.
2.2.2 补码反码移码
补码
对于正数, 补码与原码的表示相同
对于负数, 原码符号位不变, 数值部分按位取反, 末位加一 (即所谓”取反加一”)
补码的作用: 使用补码可以将减法操作转变为等价的加法, ALU 中无须集成减法器. 执行加法操作后, 符号位一起参与运算
计算机在执行有符号数的减法很麻烦, 想办法将其转换为加法, 利用的就是取模的原理, 因为计算机会天然的取 $2^8$ 的模. 所以我们想办法让两个数相加溢出一位, 将结果等于取 $2^8$ 的模的结果即可将减法等价于加法. 这时候就将八位的二进制取反+1,使得运算结果超出$2^8$, 计算机自动取模得到等价的减法操作. (重点理解)
取反加一的加一操作原因: 因为如果不加一, 某一个数取反之后何其原本相加为八个一, 11111111. 加一之后为 100000000. 即 $2^8$ .为我们所需要的模
反码
对于正数, 反码与原码的表示相同
对于负数,原码符号位不变,数值部分按位取反(也就是求补码的中间状态)
核心就是这张图
2.2.3 移位运算
我们日常使用的十进制, 可以通过小数点左移或者右移, 实现 /10 或者 *10操作.
原码的算数移位
符号位保持不变, 仅对数值位进行移位.
右移: 高位补零,低位舍弃. 若舍弃的位等于 0, 则相当于除以 2; 若舍弃的位不等于 0, 则相当于丢失精度.
右移一位: $\div 2^1$; 右移两位: $\div 2^2$; 右移三位: $\div 2^3$
左移: 低位补零, 高位舍弃. 若舍弃的位等于 0, 则相当于乘以 2; 若舍弃的位不等于 0, 则会出现严重误差. (原因左移表示至少乘以二,但是因为最高位为 1 的话, 乘以二绝对会超出 7 位 bit 表示的范围)
反码的算数移位
正数的反码与原码相同. 因此对正数的反码移位和原码相同.
负数的反码数值为与原码想反. 因此负数反码的移位运算规则如下: 右移: 高位补1,低位舍弃. 左移:低位补 1,高位舍弃.(其实就是从补0变成了补1)
补码的算数移位
正数的补码与原码相同. 因此对正数的补码移位和原码相同.
负数: 因为负数的补码是反码+1.导致反码最右边几个连续的1 都将会边为 0, 知道进位变成第一个 0 为止. 规律: 负数补码时,最右边的 1 及其右边同原码, 最右边的 1 的左边同反码. 所以负数补码的移位运算规则如下: 右移(同反码): 高位补 1, 低位舍弃; 左移(同原码): 低位补 1,高位舍弃.
2.2.4 加减运算和溢出运算
2.2.5 乘法运算
2.2.6 除法运算
2.2.7 强制类型转换
以上小节略过
2.2.8 数据的存储和排列
大小端模式
对于 4 字节的 int 类型, 将最高一个字节称为最高有效字节(MSB), 将最低一个字节称为最低有效字节(LSB). 而且一个 int 几个字节都是连续的.
大端方式: 将最高有效字节存放在低地址. (便于人类阅读)
小端方式: 将最低有效字节存放在低地址. (便于机器处理, 如果 cpu 只能处理 8 位, 显然应该从最低的八位开始相加)
2.3 浮点数
2.3.4 浮点数的表示
定点数可表示的数字范围悠闲, 但我们不要无限制地增加数据的长度. 所以, 如何在位数不变的情况下增加数据的表示范围?
浮点数将数分成阶码和尾数两个部分.
规格化浮点数: 规定尾数的最高位必须是一个有效值
左规: 当浮点数运算结果为非规格化时要进行规格化处理, 将尾数算数左移一位, 阶码减一.
右规: 当浮点数运算结果尾数出现溢出(双符号位为 01 或 10), 将尾数算数右移一位, 阶码加一.
之所以采用双符号位就是为了当溢出发生时进行挽救. 更高的符号位是正确的符号位
2.3.2 IEEE754 标准
2.4.3 浮点数的运算
运算略
强制类型转换
char -> int -> long -> double 不会损失精度(前提是32 位机器,因为在 32 位机器 long 占用 32 位, 64 位中long 占用 64 位,但是 double 的尾数位只有 53 位, 所以一定会损失精度)
float -> double 不会损失精度
int -> float 可能丢失精度
float -> int 可能溢出(表示了超出 int 的小数)及损失精度(表示整数)
2.4 算数逻辑单元 ALU
2.4.1 电路的基本原理, 加法器设计
逻辑表达式其实就是电路的数学化表示. 根据逻辑电路的规则对逻辑表达式进行优化, 其实就是在优化电路
算术运算: 加减乘除等
逻辑运算: 与, 或, 非, 异或等
辅助功能: 移位, 求补
此处需要复习门电路
一位全加器
注意去理解如何将二进制加法 -> 逻辑表达式 -> 逻辑门电路 -> 一位加法器
但是注意, 这个是一位的加法, 如何计算多位?
串行加法器
只能一位一位的加
并行加法器
典型的空间换时间
并行加法器的速度取决于每一个加法器的速度
2.4.2 ALU 的改进
串行加法器 -> 串行进位的并行加法器 -> 组内并行, 组间串行进位的加法器 -> 组内并行, 组间并行的加法器
3 存储系统
3.1 存储系统
3.1.1 主存简单模型
主存储器包括存储体, MAR(地址寄存器)和 MDR(数据寄存器)三个部分.
联想到之前学的存储元的知识, 直接联系起来了.
3.2 寻址概念
3.3 存储器
3.3.1 半导体存储器 RAM (Random-Access Memory)
分为 SRAM (静态随机存储器) 和 DRAM (动态随机存储器) 两种
- SRAM: 触发器存储信息, 速度快, 成本高, 集成度低, 常用作高速缓存 Cache
- DRAM: 电容存储信息, 需刷新, 速度慢, 成本低, 集成度高, 常用作主存(SDRAM)
为什么要用行列地址? 减少选通线的数量
3.3.2 半导体存储器 ROM (Read-Only Memory)
CPU 包含了运算器, 控制器和主存储器.
因为 RAM 为易失性存储器. 如果采用 RAM 用来做主存, 一旦掉电将会丢失! 哪种不会丢失? 辅存. 但是由于辅存是通过 IO 接口连入主机, 所以就有了 ROM
ROM: 将辅存里的 OS 调到 RAM
ROM 经历了各种发展后, 目前使用固态硬盘为多. 但是固态硬盘依然无法替代 RAM, 但是正在逐步靠近.
没有保存的文件断电就会消失原理就是因为这些文件其实保存在 RAM 里. 保存其实就是将 RAM 中的数据保存到辅存.
ROM 就是在开机时候告诉主机, 应该往 RAM 中放辅存的哪些内容
总结
重点理解存储周期的概念
3.3.3 存储器概念
存储器的功能: 存放二进制信息
不同的材料, 不同的特性:
- 磁表面存储器: 磁盘 (特点:直接存取, 先定位到一个小区域), 磁带(特点:顺序存取)
- 磁芯存储器
- 半导体存储器 (特点是随机存取, 存取时间与存储单元位置无关,仅与电流有关. eg: ROM,RAM(易失性))
- 光存储器
存储器的性能指标
- 存储容量: 存储字数 * 字长
- 单位成本: 每位价格=总成本/总容量
- 存储速度: 数据传输率=数据的宽度/存储周期
存储器的层次化结构
3.4 主存与 CPU 的连接
片选线: 0 和 1 决定存储器工作与否
读写控制线: 0 和 1 决定读 or 写
cpu 想要处理 8 位的数据,则需要八个 8k1 位的存储器, 则有了下图, 这种扩展称为位扩展
位扩展
字扩展
通过利用 cpu 上的 A13A14 操控使用哪一个存储器的数据, 本例只有 01 或 10, 也就是 n 条线 n 个片选信号
这种叫做线选法
电路简单地址空间不连续
但是可见容量收到了输入线的数量的限制, 如何突破这种限制呢?
主存容量扩展
使用译码器, 将三位转换成 2 的三次方位
图下这种方法称为译码片选法, 电路复杂,但是地址空间可连续, 可以增加逻辑设计
字位同时扩展
略
3.5 双口 RAM 和多模块存储器
CPU 和主存之间存在着科技进步速度的差距
所以双口 RAM 和多模块存储器就是为了提高存储器的工作速度
存取周期
多体并行存储器
高位交叉编址的多体存储器
- 连续存取 n 个存储器耗时为 nT, n 个存取周期
低位交叉编址的多体存储器
- 这种方式省却了恢复时间, 所以在时间上会更快
一个存储周期内, 交叉存储器可以提供的数据量为单个模块的 m 倍 (m 为模块数).
可以并行工作, 如总线宽度为 mW 时, 可以同时取出长度为 mW 的数据.
3.6 高速缓冲存储器
3.6.1 局部性原理性能分析
通过多体并行存储器优化后, 速度与 CPU 差距仍然很大. 考虑更告诉的存储单元设计, 但是这样存储器价格会提升,容量会下降. 而且根据程序访问的局部性原理. 就有了高速缓存.
局部性原理
- 空间局部性: 在最近的未来要用到的信息(指令和数据), 很可能与现在正在使用的信息在存储空间上是临近的
- 时间局限性: 在最近的未来要用到的信息, 很可能是正在使用到的信息
命中率 H
CPU 欲访问的信息已在 Cache 中的比率
3.6.2 Cache-地址映射
主存中的块放到 Cache 中的哪个位置?
- 空位随意放: 全相联映射
- 对号入座: 直接映射
- 按号分组, 组内随意放: 组相联映射
对于 1, Cache 满了如何处理? 对于 2,3, 对应位置被占用如何处理?
随机算法, 先进先出算法, 近期最少使用(LRU)算法, 最不经常使用(LFU)算法.
修改 Cache 中的内容后, 如何保持主存中相应内容的一致性?
- 命中:
- 全写法(write-through)
- 回写法(write-back)
- 不命中:
- 写分配法(write-allocate)
- 非写分配法(not-write-allocate)
3.6.3 替换算法和写策略
替换算法
随机算法(RAND): 随机地确定替换的 Cache 块. 实现简单, 没有依据程序访问的局部性原理, 命中率较低.
先进先出算法(FIFO): 选择最早调入的行进行替换. 比较容易实现, 但也没有依据程序访问的局部性原理, 可能会把一些经常要使用的程序块(如循环程序)也作为最早进入 Cache 的块替换掉.
近期最少使用算法(LRU): 依据访问的局部性原理选择近期内长久未访问过的存储行作为替换的行, 平均命中率要比 FIFO 要高, 是堆栈类算法.
LRU 算法对每行设置一个计数器, Cache 命中一次, 命中行计数器清0,其他各行计数器加 1, 需要替换时比较各特定行的计数值, 将计数值最大的行换出.
最不经常使用算法(LFU): 将一段时间内访问次数最少的存储行换出. 每行也设置一个计数器, 新行建立后从 0 开始计数, 每访问一次, 被访问的计数器加 1,需要替换时比较计数值, 将计数值最小的行换出.
写策略
见上面的问题
主要搭配有两种:
- 写回法搭配写分配法
- 全写法搭配非写分配法
3.7 虚拟存储器
结构: ==CPU - Cache - 主存 - 辅助存储器==
这样层次是硬件直接实现的, 对操作系统透明(看不见)
虚拟存储器是一个逻辑模型. 功能: 用户给出一个地址, 叫做虚地址或逻辑地址, 虚拟存储器要给出该地址对应的数据
类型
页式虚拟存储器(重点)
虚拟空间与主存空间都被划分成同样大小的页, 主存的页称为实页, 虚存的页称为虚页.
段式虚拟存储器
按程序的逻辑结构划分的, 各个段的长度因程序而异. 虚拟地址分为两部分: 段号和段内地址.
虚实地址转换
- 快表 TLB
- 慢表 Page
4 指令系统
4.1 指令格式
指令: 是指计算机执行某种操作的命令, 是计算机运行的最小功能单位.
一台计算机的所有指令的集合构成该机的指令系统, 也称为指令集.
一台计算机只能执行自己指令系统中的指令, 不能执行其他系统的指令.
一条指令通常包括操作码字段和地址字段两部分
地址码
设指令字长及存储字长均为 32 位, 操作码占 8 位, 地址码占 24 位.
操作码
有定长和扩展两种.
扩展操作码就是预留 全 1 作为标识, 使用地址字段作为操作码. 变换三地址指令二地址指令一地址指令等. 如果操作码字段读到 1110, 就将之后的作为地址码.
操作类型
- 数据传送(LOAD,STORE)
- 算术逻辑操作
- 移位操作
- 转移操作
- 输入输出操作
4.2 寻址
寻址方式
- 指令寻址: 下一条与执行指令的指令地址: 始终由程序计数器 PC 给出
- 数据寻址: 确定本条指令的操作数地址
4.2.1 指令寻址
- 顺序寻址: (PC) + 1 -> PC
- 跳跃寻址: 由转移指令指出
4.2.2 数据寻址
操作数类型
- 地址: 无符号数
- 数字: 定点数, 浮点数, 十进制树(BCD 码)
- 字符: ASCII 码
- 逻辑树: 逻辑运算
寻址特征有很多种, 例如直接寻址.不需要记
直接寻址: 指令字中的形式地址 A 就是操作数的真实地址 EA, 即 EA=A. 优点: 简单
间接寻址: 指令的地址字段给出的地址不是操作数的真实地址, 而是操作数有效地址存在的存储单元的地址. 也就是操作数地址的地址. 即 EA=(A). 优点: 可扩大寻址范围(EA 位数大于 A)
寄存器寻址: 在指令字中直接给出操作数所在的寄存器编号. 优点: 执行阶段不访问主存, 执行速度快. 缺点: 昂贵.
寄存器间接寻址: 寄存器中给出的不是一个操作数, 而是操作数所在主存 单元的地址. 特点: 与一般间接寻址快, 但指令执行阶段需要访问主存.
隐含寻址: 不是明显给出操作数的地址,而是在指令中隐含着操作数的地址. 也就是直接指出操作数在 ACC 中.
偏移寻址
- 基址寻址: 将 CPU 中基址寄存器(BR) 的内容加上指令格式中的形式地址 A, 而形成操作数的有效地址, 即 EA=(BR)+A
- 变址寻址: 有效地址 EA 等于指令字中的形式地址 A 与变址寄存器 IX 的内容相加之和, 即 EA=(IX)+A, 其中 IX 为变址寄存器(专用, 可以由用户改变), 也可使用通用寄存器作为变址寄存器.
- 相对寻址: 把程序计数器 PC 的内容加上指令格式中的形式地址 A 而形成操作数的有效地址, 即 EA=(PC) + A, 其中 A 是相对于当前指令地址的位移量, 可正可负, 补码表示. 优点: 操作数的地址不是固定的, 随着 PC 变化而变化. 相对寻址广泛应用于转移指令.
堆栈寻址
操作数存放在对战中, 隐含使用堆栈指针(SP)作为操作数地址.
4.3 CISC 和 RISC 替换版
- CISC
- Complex Instruction Set Computer
- 设计思路: 一条指令完成一个复杂的基本功能
- 代表: x86, 主要用于笔记本,台式机
- 80-20 规律: 典型程序中 80%的语句仅仅用处理机中 20%的指令
- RISC
- Reduced Instruction Set Computer
- 设计思路: 一条指令完成一个基本”动作”; 多条指令组合完成一个复杂的基本功能.
- 代表: ARM 架构, 主要用于手机,平板, 苹果刚换了 M1芯片
5 中央处理器
5.1 CPU 的功能和基本结构
CPU 的功能
运算器的基本结构
控制器的基本结构
CPU 的基本结构
将运算器和控制器两者结合就是 CPU 的基本结构. 主要分为四部分:
- ALU
- 寄存器
- 中断系统
- CU
简单了解就好!
5.2 指令执行过程
指令周期的概念: 一条指令执行分为不同的阶段
数据流: 不同阶段要求依次访问的数据序列
指令执行方案: 如何安排多条指令的执行?
指令周期
指令周期: CPU 从主存中每取出并执行一条指令所需的全部时间
指令周期 = 若干机器周期(CPU 周期)
机器周期 = 若干时钟周期(这是 CPU 操作的最基本单位)
每个指令周期内机器周期数可以不等, 每个机器周期内的节拍数也可以不等. (每个指令任务是不一样的)
指令周期流程
- 取指周期: 取指令
- 间址周期: 取有效地址
- 执行周期: 取操作数
- 中断周期: 保存程序断点
指令执行方案
- 单指令周期
- 多指令周期
- 流水线方案
5.3 数据通路
5.3.1 数据通路—CPU 内部单总线模式

5.3.2 数据链路—专用数据通路方式
总结: 数据通路都是魔法世界, 看不懂, 学不会
5.4 控制器的功能和工作原理
5.4.1 硬布线
太难了, 略.
CPU 的控制方式
指: 产生不同微操作命令序列所用的时序控制方式.
同步控制方式
整个系统所有的控制信号均来自一个统一的时钟信号.
控制电路简单, 运行速度慢
异步控制方式
异步控制方式不存在基准时标信号. 各部件按自身固有的速度工作, 通过应答方式进行联络.
运行速度快, 控制电路比较复杂
联合控制方式
对各种不同的指令的微操作实行大部分采用同步控制, 小部分采用异步控制的方法
5.4.2 微程序
事先把微操作控制信号存储在一个专门的存储器(控制存储器)中, 将每一条机器指令编写成一个微程序, 用寻址用户程序机器指令的办法来寻址每个微程序中的微指令
太难了,详细略
5.5 指令流水线
5.5.1 概念和性能指标
指令流水线: 一条指令的执行过程可以分成多个阶段, 占用不同的资源, 就能使多条指令同时进行
- 取址: 根据 PC 内容访问主存, 取出一条指令送到 IR 中
- 分析: 对指令操作码进行译码, 按照给定的寻址方式和地址字段中的内容形成操作数的有效地址 EA, 并从有效地址 EA 中取出操作数.
- 执行: 根据操作码字段, 完成指令规定的功能, 即把运算结果写到通用寄存器或主存中.
流水线的性能指标
- 吞吐率: 单位时间内流水线所完成的任务数量.
- 加速比: 完成同样一批任务, 不使用流水线和使用流水线的时间之比
- 效率: 设备使用率
5.5.2 影响因素分类
结构相关(资源冲突)
由于多条指令在同一时刻征用同一资源所引起的冲突
数据相关(数据冲突)
数据相关指在一个程序中, 存在必须等前一条指令执行完之后才能执行后一条指令的情况
控制相关
当流水线遇到转移指令和其他改变 PC 值的指令而造成断流时, 会引起控制相关
6 总线
计组的记忆就像是一场梦
6.1 概念与分类
定义
总线是一组能为多个部件==分时共享==的公共信息传送线路.
分类
- 按数据传输格式
- 串行总线
- 并行总线
- 按总线的功能(连接的部件)
- 片内总线
- 芯片内部的总线
- 系统总线
- 数据总线
- 地址总线
- 控制总线
- 通信总线
- 片内总线
- 按时序控制
- 同步总线
- 异步总线
性能指标
传输周期, 时钟周期, 工作频率, 时钟频率, 总线宽度, 总线带宽, 总线复用, 信号线数
6.2 总线仲裁
如何解决多个设备争用总线的问题? (不是重点)
6.3 总线操作和定时
占用总线的一对设备如何进行数据传输?
- 同步定时方式(同步通信)
- 异步定时方式(异步通信)
- 半同步通信
- 分离式通信
6.4 总线标准
易于实现系统的模块化设计
7 I/O
7.1 I/O 系统基本概念
7.2 外部设备
7.2.1 输入输出设备
7.2.2 外存储器
都不重要
7.3 I/O 接口
接口可以看作两个部件之间的交接部分
I/O 接口是主机和外设之间的交接界面, 通过接口可以实现主机和外设之间的信息交换.
接口的功能
- 设备选址
- 传送命令
- 传送数据
- 反应 I/O 设备的工作状态
7.4 I/O 方式
7.4.1 程序查询方式
主要特点是: 踏步; 串行.
7.4.2 中断机制
程序中断是指计算机执行现行程序的过程中, 出现某些急需处理的异常情况或特殊请求, CPU 暂时中止线性程序, 而转去对这些异常情况或特殊请求进行处理, 在处理完毕后 CPU 又自动返回到现行程序的断点处, 继续执行原程序.
内容略
7.4.3 程序中断方式
7.4.4 DMA 方式
略
至此, 大概全部跟着走了一遍了, 有很多内容因为工作使用不到或者太难了就略过了. 毕竟我也不考研嘛.
继续努力! 年薪百万!
一清于 21 年 10 月 18 日