mirror of
https://github.com/OmegaZhou/408-notes.git
synced 2026-10-31 12:26:08 +08:00
update storage system
This commit is contained in:
BIN
计算机组成原理/img/数据的表示和运算/循环移位.jpg
Normal file
BIN
计算机组成原理/img/数据的表示和运算/循环移位.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
BIN
计算机组成原理/img/数据的表示和运算/特殊浮点数.jpg
Normal file
BIN
计算机组成原理/img/数据的表示和运算/特殊浮点数.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 25 KiB |
487
计算机组成原理/存储器层次结构.md
Normal file
487
计算机组成原理/存储器层次结构.md
Normal file
@@ -0,0 +1,487 @@
|
||||
# 存储器的组成结构
|
||||
|
||||
## 存储系统的组成
|
||||
|
||||
* 主存储器
|
||||
* 高速缓冲存储器(Cache)
|
||||
* 辅助存储器
|
||||
|
||||
## 存储器的分类
|
||||
|
||||
### 按存储介质分类
|
||||
|
||||
* 半导体存储器
|
||||
* 随机存储器
|
||||
* 只读存储器
|
||||
* 磁表面存储器
|
||||
* 磁盘
|
||||
* 磁带
|
||||
* 磁心存储器:由各种磁心制成,现已被半导体存储器取代
|
||||
* 光盘存储器(光存储器)
|
||||
* 光盘
|
||||
|
||||
### 按存取方式分类
|
||||
|
||||
* 随机存取存储器(RAM)
|
||||
* 优点
|
||||
* 读写方便
|
||||
* 使用灵活
|
||||
* 存取时间和存储位置无关
|
||||
* 缺点
|
||||
* 断电信息丢失
|
||||
* 分类
|
||||
* 静态RAM(SRAM):用于制作Cache
|
||||
* 动态RAM(DRAM):用于制作主存
|
||||
* 只读存储器
|
||||
* 特点
|
||||
* 也是随机存取
|
||||
* 断电可保留
|
||||
* 只能读入不能写入
|
||||
* 分类
|
||||
* 掩膜型ROM(MROM)
|
||||
* 可编程ROM(PROM)
|
||||
* 可擦除可编程ROM(EPROM)
|
||||
* 电可擦除可编程ROM(EEPROM)
|
||||
* 快擦除读写存储器/闪存(Flash Memory)
|
||||
* 缩写中有E的ROM是可擦除的
|
||||
* 一般用于存放不变的程序
|
||||
* ROM+RAM=主存
|
||||
* 串行访问存储器
|
||||
* 特点
|
||||
* 读写操作时需要按照物理位置的先后顺序访问
|
||||
* 分类
|
||||
* 顺序存取存储器
|
||||
* 磁带
|
||||
* 直接存取存储器
|
||||
* 磁盘:半串行,寻道随机访问,之后串行访问
|
||||
|
||||
### 按在计算机的作用分类
|
||||
|
||||
* 主存
|
||||
* 辅存
|
||||
* 缓冲存储器(Cache)
|
||||
|
||||
### 按信息的可保存性分类
|
||||
|
||||
* 易失存储器
|
||||
* RAM
|
||||
* 非易失存储器
|
||||
* ROM
|
||||
* 磁表面存储器
|
||||
* 光存储器
|
||||
|
||||
## 存储器性能指标
|
||||
|
||||
* 存储容量
|
||||
* 单位成本
|
||||
* 存储速度
|
||||
* 存取时间:启动一次存储器到完成该操作所需的时间
|
||||
* 存取周期:连续两次独立访问存储器所需的时间间隔,通常大于存取时间
|
||||
* 主存带宽
|
||||
|
||||
## 存储器层次化结构
|
||||
|
||||
1. 寄存器(CPU,主机)
|
||||
2. 缓冲(CPU,主机)
|
||||
3. 主存(主机)
|
||||
4. 磁盘(辅存)
|
||||
5. 光盘(辅存)
|
||||
6. 磁带(辅存)
|
||||
|
||||
## 半导体随机存储器
|
||||
|
||||
### 基本结构
|
||||
|
||||
#### 组成
|
||||
|
||||
* 存储矩阵
|
||||
* 译码驱动电路
|
||||
* 读/写电路
|
||||
* 数据线(双向)
|
||||
* 控制线(单向)
|
||||
* 读/写控制线
|
||||
* 片选线:选择存储芯片
|
||||
|
||||
#### 译码方式
|
||||
|
||||
##### 片选法
|
||||
|
||||
* 使用地址线选取矩阵的某一行
|
||||
* 每一根地址线代表一个二进制位
|
||||
* n根地址线可表示0~2^n^-1行
|
||||
|
||||
##### 重合法(双译码)
|
||||
|
||||
* 在片选法的基础上,以同样的方式选取行上的某一列
|
||||
|
||||
### SRAM
|
||||
|
||||
* 使用双稳态触发器(六晶体管MOS)
|
||||
|
||||
* 不需要再生(非破坏性读出)
|
||||
* 优点
|
||||
* 存取速度快
|
||||
* 缺点
|
||||
* 集成度低
|
||||
* 功耗大
|
||||
|
||||
### DRAM
|
||||
|
||||
* 存储电路分类
|
||||
* 多管型
|
||||
* 单管型
|
||||
* 工作原理:使用电容存储电荷
|
||||
* 采用地址复用技术,地址线是原有的1/2,地址信号分行、列两次传送
|
||||
* 优点
|
||||
* 易集成
|
||||
* 位价低
|
||||
* 容量大
|
||||
* 功耗低
|
||||
* 易失性存储器,电荷只能维持1~2ms,需要定期刷新,两次刷新间隔称为**刷新周期**
|
||||
* 刷新一行默认需要一个存取周期
|
||||
* 刷新方式
|
||||
* 集中刷新:一个刷新周期内,使用固定一段时间进行逐行刷新,该段时间称为**死时间**
|
||||
* 存取速度高
|
||||
* 集中刷新期间无法访问存储器
|
||||
* 分散刷新:将系统工作周期分为两部分,前一部分正常读写,后一部分进行刷新某一行
|
||||
* 增加了存取周期,降低系统速度
|
||||
* 没有死时间
|
||||
* 异步刷新:刷新周期/行数,得到时间t,每隔时间t刷新一次
|
||||
* 避免CPU等待过长
|
||||
* 减少刷新次数
|
||||
* 提高工作效率
|
||||
|
||||
### 读写周期与读写时间
|
||||
|
||||
* 读写周期为芯片连续两次操作的最小时间间隔
|
||||
* 读写时间为芯片进行一次操作的时间
|
||||
* 读写周期大于读写时间
|
||||
|
||||
## 只读存储器
|
||||
|
||||
* 掩膜型ROM(MROM)
|
||||
* 制造时写入内容,只能读不能写
|
||||
* 通过元件的有无表示01
|
||||
* 可编程ROM(PROM)
|
||||
* 使用熔丝存储数据
|
||||
* 用户可以自行填入编程
|
||||
* 但只可填入一次
|
||||
* 可擦除可编程ROM(EPROM)
|
||||
* 使用悬浮栅存储数据
|
||||
* 使用高压写入数据
|
||||
* 能使用紫外线擦除全部内容(不能部分擦除)
|
||||
* 电可擦除可编程ROM(EEPROM)
|
||||
* 使用悬浮栅存储数据
|
||||
* 使用高压写入数据
|
||||
* 使用高压擦除数据(可全部擦除,也可部分擦除)
|
||||
* 快擦除读写存储器/闪存(Flash Memory)
|
||||
* 按块存取数据
|
||||
* 非易失性
|
||||
* 结合了ROM和RAM的优点
|
||||
* 固体硬盘(SSD)
|
||||
* 组成:控制单元+Flash芯片
|
||||
* 保留了闪存的腾讯
|
||||
* 读写速度快,功耗低
|
||||
* 造价高
|
||||
|
||||
## 主存储器与CPU连接
|
||||
|
||||
### 存储芯片信号
|
||||
|
||||
* CS:片选信号,低电平有效,用于选择芯片
|
||||
* WE:读/写信号
|
||||
|
||||
### 容量格式
|
||||
|
||||
* a*b:
|
||||
* a为地址,连接地址线
|
||||
* b为数据位数,连接数据线
|
||||
|
||||
### 容量扩充
|
||||
|
||||
#### 位扩充
|
||||
|
||||
* 扩充数据线
|
||||
* 通过增加数据线
|
||||
|
||||
#### 字扩充
|
||||
|
||||
* 扩充地址线
|
||||
* 使用片选信号选择存储芯片
|
||||
|
||||
#### 字位扩充
|
||||
|
||||
* 结合上述二者方式
|
||||
|
||||
## 双端口RAM
|
||||
|
||||
* 拥有左右两个独立端口,使用两组独立的地址线、数据线、读写控制线
|
||||
* 提高并行性
|
||||
* 冲突(读写冲突,写冲突)解决:使用一个BUSY信号,当会发生冲突时,暂时关闭一个端口
|
||||
|
||||
## 多模块存储器
|
||||
|
||||
### 单体并行存储器
|
||||
|
||||
* 每个存储单元存储m个字,数据字宽也为m
|
||||
* 一次可并行读出m个字
|
||||
* 优点
|
||||
* 提高存储器带宽
|
||||
* 增加存储器工作效率
|
||||
* 缺点
|
||||
* 对于不连续的指令和数据,效果不明显
|
||||
|
||||
### 多体并行存储器
|
||||
|
||||
* 使用多个存储模块构成
|
||||
|
||||
#### 高位交叉编址
|
||||
|
||||
* 高地址部分代表存储器编号
|
||||
* 模块内地址连续,仍为顺序存储器
|
||||
* 缺点
|
||||
* 访问连续内存块时,总时只访问一个层次模块,不能提高吞吐率
|
||||
|
||||
#### 低位交叉编址
|
||||
|
||||
* 低地址部分代表存储器编号
|
||||
|
||||
* 数据连续存放在相邻模块,为交叉存储器
|
||||
|
||||
* 采用流水线方式存取
|
||||
|
||||
* 存取时间计算
|
||||
$$
|
||||
设一个模块内一个字存取周期为T,总线传送周期为r\\
|
||||
存储器模块数应大于等于\frac Tr,从而保证流水线读取完所有模块后能直接进行下一轮读取\\
|
||||
这样连续存取m个字所需的时间t=T+(m-1)r
|
||||
$$
|
||||
|
||||
## 高速缓冲存储器(Cache)
|
||||
|
||||
### 局部性原理
|
||||
|
||||
* 时间局部性:某个数据或指令可能在短时间内多次使用
|
||||
* 空间局部性:某个数据或指令使用后,附近的数据或指令可能在短时间内也被使用
|
||||
|
||||
### 组成
|
||||
|
||||
* 地址映射变换机构:将主存地址转换为Cache地址
|
||||
* 替换机构:实现Cache块替换
|
||||
|
||||
### 工作原理
|
||||
|
||||
* 将Cache和主存划分成相等的块
|
||||
|
||||
* Cache块又称**Cache行**
|
||||
|
||||
* 块的长度称为块长(Cache行长)
|
||||
|
||||
* 工作流程
|
||||
|
||||
1. CPU发出访问请求
|
||||
2. 若Cache命中,直接访问Cache
|
||||
3. 若Cache不命中,若Cache已满,选择替换的Cache块,反之选择一个空闲块
|
||||
4. 访问主存找到相应的块,同时装入Cache和传送给CPU
|
||||
|
||||
* 部分计算机在访问Cache的同时也会访问主存,当Cache命中时终止主存访问
|
||||
|
||||
* Cache与CPU数据交换单位为**字**
|
||||
|
||||
* Cache与主存数据交换单位为**块**
|
||||
|
||||
* $$
|
||||
Cache命中率H=\frac{Cache总命中次数}{Cache总命中次数+访问主存的总次数}
|
||||
$$
|
||||
|
||||
|
||||
|
||||
* $$
|
||||
设Cache命中率为H,访问Cache时间为T_c,访问主存时间为T_m\\
|
||||
平均访问时间T_a=H*T_c+(1-H)*T_m
|
||||
$$
|
||||
|
||||
### Cache映射方式
|
||||
|
||||
#### 直接映射
|
||||
|
||||
* 每个主存块对应一个Cache块
|
||||
|
||||
* 映射关系:
|
||||
$$
|
||||
设j为Cache块号,i为主存块号,Cache总块数为m\\
|
||||
j = i\ mod\ m
|
||||
$$
|
||||
|
||||
* 地址结构:标记+Cache块号+块内地址
|
||||
|
||||
* 使用**有效位**标识Cache是否有效
|
||||
|
||||
* 不需要替换算法
|
||||
|
||||
#### 全相联映射
|
||||
|
||||
* 每个主存块可对应任意Cache块
|
||||
* 优点
|
||||
* 冲突概率低
|
||||
* 空间利用率高
|
||||
* 命中率高
|
||||
* 缺点
|
||||
* 标记字段比较速度慢
|
||||
* 成本高
|
||||
* 通常使用昂贵的内容寻找方式(相联存储器)
|
||||
* 地址结构:标记+块内地址
|
||||
|
||||
#### 组相联映射
|
||||
|
||||
* 将Cache分成若干大小相同的组
|
||||
|
||||
* 数据块可装入所属组内任意位置
|
||||
|
||||
* 映射关系
|
||||
$$
|
||||
设j为Cache块号,i为主存块号,Cache组数为Q\\
|
||||
j = i\ mod\ Q
|
||||
$$
|
||||
|
||||
* 地址结构:标记+块号+块内地址
|
||||
|
||||
### 替换算法
|
||||
|
||||
* 随机算法:
|
||||
* 随机替换
|
||||
* 命中率较低
|
||||
* 先进先出算法(FIFO):
|
||||
* 选择最早调入的块替换
|
||||
* 容易实现
|
||||
* 命中率较低
|
||||
* 近期最少使用算法(LRU):
|
||||
* 选择近期内最久未被访问过的Cache替换
|
||||
* 平均命中率高于FIFO
|
||||
* 堆栈类算法
|
||||
* 最不经常使用算法
|
||||
* 选择近期访问次数最少的行替换
|
||||
|
||||
### 写策略
|
||||
|
||||
#### 写命中
|
||||
|
||||
* 全写法
|
||||
* CPU写入Cache时,同时把数据写入主存
|
||||
* 替换块时直接覆盖即可
|
||||
* 优点
|
||||
* 实现简单
|
||||
* 随时保持贮存数据正确
|
||||
* 缺点
|
||||
* 增加缓冲次数
|
||||
* 写缓冲
|
||||
* 增加一个FIFO队列缓冲,缓和写速度不匹配问题
|
||||
* 写回法
|
||||
* Cache被换出时写回内存
|
||||
* 使用**标记位(脏位)**判断是否被修改
|
||||
* 写一次法
|
||||
* 第一次写入时写回内存
|
||||
* 其余处理方式与写回法一致
|
||||
|
||||
#### 写不命中
|
||||
|
||||
* 写分配法
|
||||
* 加载主存块至Cache中,并修改Cache块
|
||||
* 缺点:每次写不命中都要调取一块
|
||||
* 一般与写回法合用
|
||||
* 非写分配法
|
||||
* 直接写入内存,不进行掉块
|
||||
* 一般与全写法合用
|
||||
|
||||
## 虚拟存储器
|
||||
|
||||
* 页式虚拟存储器
|
||||
* 段式虚拟存储器
|
||||
* 段页式虚拟存储器
|
||||
* 快表(TLB)
|
||||
* 详细见**操作系统**
|
||||
|
||||
## 外存储器
|
||||
|
||||
### 硬盘存储器
|
||||
|
||||
#### 数据存储方式
|
||||
|
||||
* 归零制(RZ)
|
||||
* 记录1时,通**正向电流**
|
||||
* 记录0时,通**反向电流**
|
||||
* 0,1之间电流归零
|
||||
* 不归零制(NRZ)
|
||||
* 记录1时,通**正向电流**
|
||||
* 记录0时,通**反向电流**
|
||||
* 电流不归0
|
||||
* 见1就翻的不归零制(NRZI)
|
||||
* 记录1时,电流方向与上一周期相反
|
||||
* 记录0时,电流方向不变
|
||||
* 电流不归零
|
||||
|
||||
#### 性能指标
|
||||
|
||||
* 记录密度
|
||||
* 延半径长度单位长度的磁道数(即单位长度有多少个同心圆)
|
||||
* 相邻磁道之间距离称为**道距**
|
||||
* 位密度
|
||||
* 单位长度磁道记录的二进制信息位数
|
||||
* 默认条件下,一个磁道存放的信息量相等,即越靠近圆心的磁道位密度越大
|
||||
* 题目中给出的位密度默认为最内圈磁道位密度
|
||||
|
||||
#### 存储容量
|
||||
|
||||
* $$
|
||||
设C为总存储容量,n为盘面数,k为每个盘面的磁道数,s为每条磁道能记录的二进制代码数\\
|
||||
C=nks
|
||||
$$
|
||||
|
||||
#### 平均寻址时间
|
||||
|
||||
* 平均寻址时间=平均寻道时间+平均等待时间
|
||||
|
||||
#### 组成
|
||||
|
||||
* 磁记录介质
|
||||
* 磁盘控制器
|
||||
* 磁盘驱动器
|
||||
|
||||
#### 分类
|
||||
|
||||
* 磁盘是否可换
|
||||
* 可换盘磁盘存储器
|
||||
* 固定磁盘存储器
|
||||
* 磁头工作方式
|
||||
* 固定磁头磁盘存储器(每个磁道上有一个磁头,成本高)
|
||||
* 移动磁头磁盘存储器
|
||||
|
||||
#### 磁盘地址
|
||||
|
||||
* 磁盘地址=台号(磁盘组编号,使用多磁盘组成存储器)+磁道号+盘面号+扇区号
|
||||
|
||||
### 磁盘阵列
|
||||
|
||||
#### RAID 0
|
||||
|
||||
* 直接由多块磁盘组成
|
||||
|
||||
#### RAID 1
|
||||
|
||||
* 镜像备份
|
||||
|
||||
### 光盘存储器
|
||||
|
||||
* 使用激光存储(光存储技术)
|
||||
|
||||
#### 分类1
|
||||
|
||||
* 第一代光存储技术(不支持可擦除重写)
|
||||
* 第二代光存储技术(支持可擦除重写)
|
||||
|
||||
#### 分类2
|
||||
|
||||
* 只读型光盘(由厂家写入一次)
|
||||
* 被称为CD-ROM,但不属于ROM
|
||||
* 只写一次型光盘(可由用户写入一次)
|
||||
* 可擦写光盘
|
||||
520
计算机组成原理/数据的表示与运算.md
Normal file
520
计算机组成原理/数据的表示与运算.md
Normal file
@@ -0,0 +1,520 @@
|
||||
# 数据的表示与运算
|
||||
|
||||
## 进制转换
|
||||
|
||||
### 前提
|
||||
|
||||
* 待转换数为10进制
|
||||
* 转换的数为k进制
|
||||
|
||||
### 整数部分
|
||||
|
||||
* 对整数部分除以k并进行取余,之后将余数逆序输出
|
||||
* 例:$19_{(10)}转为二进制$
|
||||
* 19/2=9······1
|
||||
* 9/2=4········1
|
||||
* 4/2=2········0
|
||||
* 2/2=1········0
|
||||
* 1/2=0········1
|
||||
* 故结果为10011
|
||||
|
||||
### 小数部分
|
||||
|
||||
* 乘以k后,取整数部分,并正序输出
|
||||
* 例$0.6875_{(10)}转2进制$
|
||||
* 0.6875*2=1.375······取1
|
||||
* 0.375*2=0.75··········取0
|
||||
* 0.75*2=1.5··············取1
|
||||
* 0.5*2=1···················取1
|
||||
* 故结果为0.1011
|
||||
|
||||
## 编码
|
||||
|
||||
### 真值和机器数
|
||||
|
||||
* 真值:机器数代表的实际值
|
||||
* 机器数:在计算机中用于表示真值的编码数
|
||||
|
||||
### BCD码
|
||||
|
||||
* 使用4位二进制数表示0-9十个数字
|
||||
* 存在6钟冗余状态
|
||||
* 常见BCD码
|
||||
* 8421码(最常见)
|
||||
* 有权码
|
||||
* 设数字为$a_3a_2a_1a_0$
|
||||
* 则表示十进制数$D=8*a_3+4*a_2+2*a_1+a_0$
|
||||
* 相加时若结果大于10,需要加6并进位进行修正结果
|
||||
* 余三码
|
||||
* 8421码的基础上加上$(0011)_{(2)}$得到
|
||||
* 例:8的余三码为1011,0的余三码为0011
|
||||
* 2421码
|
||||
* 有权码
|
||||
* 大于等于5的数首位为1
|
||||
* 小于5的数首位为0
|
||||
* 例:5的2421码为1011
|
||||
|
||||
### ASCII码
|
||||
|
||||
### 汉字编码
|
||||
|
||||
* 组成
|
||||
* 输入编码
|
||||
* 区位码:两个字节表示一个汉字,每个字节使用7位二进制编码,构成一个94*94的二维代码表
|
||||
* 国标码=$(区位码)_{(16)}+2020H$
|
||||
* 汉字内码=$(国标码)_{(16)}+8080H$
|
||||
* 汉字字形码
|
||||
|
||||
### 校验码
|
||||
|
||||
#### 奇偶校验码
|
||||
|
||||
* 检错编码
|
||||
|
||||
* 奇校验:添加校验位后1的个数为奇数
|
||||
* 偶校验:添加校验位后1的个数为偶数
|
||||
|
||||
#### CRC(循环冗余校验码)
|
||||
|
||||
* 默认只有检错功能
|
||||
* 又称(N,K)码,N为编码长度,K为校验位长度
|
||||
* 具有r检测位的多项式可以检测出所有长度小于等于r的突发错误
|
||||
* 长度大于r的突发错误逃逸概率为$\frac1{2^r}$
|
||||
* 构造过程(例)
|
||||
* 设生成多项式G(x)=x^3^+x+1
|
||||
* 设数据多项式M(x)=x^3^+1
|
||||
* 即G(x)代表1011
|
||||
* M(x)代表1001
|
||||
* 将待发送数据左移G(x)的最高位次,得到1001 000
|
||||
* 使用1001000对1011进行模2除法,得到余数110
|
||||
* 故CRC码为1001 110
|
||||
|
||||
#### 海明码
|
||||
|
||||
* 纠错编码
|
||||
* 设数据位数为k,校验码位数r满足 $2^r-1>=k+r$
|
||||
* 海明码生成步骤,步骤中海明码,数据,校验码的位号皆从1开始
|
||||
|
||||
1. $
|
||||
将校验码P_i放置在海明码的第2^i位
|
||||
$
|
||||
|
||||
2. $
|
||||
将数据位P_i依次放入海明码剩余位处
|
||||
$
|
||||
|
||||
3. $
|
||||
将海明码各各个位号分为r组,使第i组各位号j满足\ j\&i!=0
|
||||
$
|
||||
|
||||
4. $
|
||||
对每一组采用偶校验的方式得到每一组中校验码P_i的值
|
||||
$
|
||||
|
||||
* 海明码校验步骤
|
||||
|
||||
1. $
|
||||
将第i组内所有数据进行异或操作,得到S_i
|
||||
$
|
||||
|
||||
2. $
|
||||
将S_i依次拼接在一起,得到二进制数码S,若S==0,则海明码无措,反之,则第S位出错
|
||||
$
|
||||
|
||||
* 海明码若要检测出d位错误,则海明距需要d+1位,即当d>1时,通过上述公式得到校验码后,还需要令r+=d-1
|
||||
|
||||
* 海明码若要纠正d位错误,则海明距需要为2d+1
|
||||
|
||||
## 定点数的表示与运算
|
||||
|
||||
### 定点数的表示
|
||||
|
||||
* 无符号数
|
||||
* 有符号数
|
||||
|
||||
### 机器数的定点表示
|
||||
|
||||
* 定点小数
|
||||
* 定点整数
|
||||
|
||||
### 数码表示
|
||||
|
||||
* 原码
|
||||
* 补码
|
||||
* 反码
|
||||
* 移码
|
||||
* 0的表示唯一
|
||||
* 对于偏移值为2^n^(n为机器字长-1)的移码,补码与移码仅相差个符号位
|
||||
* 移码保持了数据原有的大小
|
||||
|
||||
### 定点数的运算
|
||||
|
||||
#### 移位运算
|
||||
|
||||
##### 算数移位运算
|
||||
|
||||
* 原码
|
||||
* 左移右移都补0
|
||||
* 反码
|
||||
* 正数:左移右移都补0
|
||||
* 负数:左移右移都补1
|
||||
* 补码
|
||||
* 左移时都补0
|
||||
* 右移时保持符号位不变
|
||||
|
||||
##### 逻辑移位运算
|
||||
|
||||
* 所有码制下左移右移皆补0
|
||||
|
||||
##### 循环移位运算
|
||||
|
||||

|
||||
|
||||
#### 原码定点数的加减法
|
||||
|
||||
##### 加法
|
||||
|
||||
1. 先判断符号位,若相同,绝对值相加,若不同,则绝对值相减(大减小)
|
||||
2. 最终符号与绝对值大的数相同
|
||||
|
||||
##### 减法
|
||||
|
||||
1. 减数取反在进行加法操作
|
||||
|
||||
#### 补码定点数的加减法
|
||||
|
||||
##### 加法
|
||||
|
||||
* 直接相加,舍去进位
|
||||
|
||||
##### 减法
|
||||
|
||||
* 减数取反在进行加法操作
|
||||
|
||||
#### 溢出判定
|
||||
|
||||
* 一位符号位
|
||||
|
||||
* 操作数符号相同时,结果与操作数符号不同时,则溢出
|
||||
|
||||
* 双符号位
|
||||
|
||||
| 符号位$S_1S_2$ | 结果 |
|
||||
| -------------- | ---------------- |
|
||||
| 00 | 结果为正,无溢出 |
|
||||
| 01 | 结果为正溢出 |
|
||||
| 10 | 结果为负溢出 |
|
||||
| 11 | 结果为负,无溢出 |
|
||||
|
||||
* 一位符号位加数据位进位
|
||||
|
||||
* 若进位$C_s=最高数位C_1$,则没有溢出,反之,溢出
|
||||
|
||||
#### 定点数的乘法
|
||||
|
||||
##### 原码一位乘
|
||||
|
||||
* 采用双符号位
|
||||
* 符号位单独求
|
||||
* 使用右移操作模拟竖式计算的进位
|
||||
* 结果使用乘数所在寄存器存放低位结果,新寄存器存放高位结果
|
||||
* **详细见参考书**
|
||||
|
||||
##### 原码二位乘
|
||||
|
||||
* 使用乘数的两位来计算部分积
|
||||
|
||||
* 即
|
||||
|
||||
| $y_n$(高位) | $y_{n+1}$(低位) | 操作 |
|
||||
| ------------- | ----------------- | ---------------------------- |
|
||||
| 0 | 0 | 部分积右移两位 |
|
||||
| 0 | 1 | 部分积加上被乘数后右移两位 |
|
||||
| 1 | 0 | 部分积加上被乘数*2后右移两位 |
|
||||
| 1 | 1 | 部分积加上被乘数*3后右移两位 |
|
||||
|
||||
|
||||
|
||||
##### 补码一位乘
|
||||
|
||||
###### 校正法
|
||||
|
||||
* 符号位不参与计算
|
||||
* 为避免溢出,采用双符号位
|
||||
|
||||
* 当乘数为负数时,计算结果应加上$[-X]_补$,进行校正,其中X为被乘数
|
||||
|
||||
###### 比较法(booth算法)
|
||||
|
||||
* 在乘数末位增补一位附加位$y_{n+1}$,令初值为0
|
||||
|
||||
* 移位按补码右移规则进行
|
||||
|
||||
* 根据$y_ny_{n+1}$的值执行相应操作
|
||||
其中X为被乘数
|
||||
|
||||
| $y_n$(高位) | $y_{n+1}$(低位) | 操作 |
|
||||
| ------------- | ----------------- | --------------------------- |
|
||||
| 0 | 0 | 部分积右移一位 |
|
||||
| 0 | 1 | 部分积加$[X]_补$,右移一位 |
|
||||
| 1 | 0 | 部分积加$[-X]_补$,右移一位 |
|
||||
| 1 | 1 | 部分积右移一位 |
|
||||
|
||||
* **详细见参考书**
|
||||
|
||||
##### 补码二位乘
|
||||
|
||||
* 部分积和被乘数采用3符号位,乘数使用双符号位
|
||||
|
||||
#### 定点数的除法
|
||||
|
||||
* 讨论前提:绝对值<1的定点小数
|
||||
|
||||
##### 原码恢复余数法
|
||||
|
||||
* 符号位单独处理
|
||||
|
||||
* 步骤
|
||||
|
||||
```c++
|
||||
if(abs(被除数)-abs(除数)>=0){
|
||||
throw exception(溢出);
|
||||
}else{
|
||||
商=0;
|
||||
被除数=abs(被除数);
|
||||
除数=abs(除数);
|
||||
负除数=-除数; //使用补码
|
||||
n=位数长度;
|
||||
// 循环执行n+1次
|
||||
while(n--){
|
||||
被除数+=负除数; //计算机只有加法器
|
||||
if(被除数<0){
|
||||
被除数+=除数;
|
||||
}else{
|
||||
商++;
|
||||
}
|
||||
if(n!=0){
|
||||
被除数<<=1;
|
||||
商<<=1;
|
||||
}
|
||||
}
|
||||
|
||||
余数=被除数;
|
||||
为商和余数附上符号位
|
||||
}
|
||||
```
|
||||
|
||||
##### 原码的不恢复余数法(加减交替法)
|
||||
|
||||
* 符号位单独处理
|
||||
|
||||
* 步骤
|
||||
|
||||
```c++
|
||||
if(abs(被除数)-abs(除数)>=0){
|
||||
throw exception(溢出);
|
||||
}else{
|
||||
商=0;
|
||||
被除数=abs(被除数);
|
||||
除数=abs(除数);
|
||||
负除数=-除数; //使用补码
|
||||
n=位数长度;
|
||||
|
||||
被除数+=负除数;
|
||||
// 循环执行n+1次
|
||||
while(n--){
|
||||
if(被除数<0){
|
||||
if(n!=0){
|
||||
被除数<<=1;
|
||||
商<<=1;
|
||||
}
|
||||
被除数+=除数;
|
||||
|
||||
}else{
|
||||
商+=1;
|
||||
if(n!=0){
|
||||
被除数<<=1;
|
||||
商<<=1;
|
||||
被除数+=负除数;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
余数=被除数;
|
||||
为商和余数附上符号位
|
||||
}
|
||||
```
|
||||
|
||||
##### 补码的不恢复余数法(交替加减法)
|
||||
|
||||
* 步骤
|
||||
|
||||
```c++
|
||||
if(abs(被除数)-abs(除数)>=0){
|
||||
throw exception(溢出);
|
||||
}else{
|
||||
商=0;
|
||||
负除数=-除数; //使用补码
|
||||
n=位数长度;
|
||||
// 循环执行n次
|
||||
while(--n){
|
||||
if(被除数与除数异号){
|
||||
被除数<<=1;
|
||||
被除数+=除数;
|
||||
}else{
|
||||
商+=1;
|
||||
被除数<<=1;
|
||||
被除数+=负除数;
|
||||
}
|
||||
商<<=1;
|
||||
}
|
||||
商+=1;
|
||||
余数=被除数;
|
||||
为商和余数附上符号位
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 浮点数的表示与运算
|
||||
|
||||
### 浮点数的一般形式
|
||||
|
||||
* 阶符+阶码数值部分+数符+尾数的数值部分
|
||||
|
||||
### 规格化浮点数
|
||||
|
||||
* 使尾数M满足关系$\frac1r<=|M|<=1$,其中r位尾数进制
|
||||
* 原码规格化(二进制下)
|
||||
* 正数:0.1xxxxx的形式
|
||||
* 最大正数为0.11...1
|
||||
* 最小正数为0.10...0
|
||||
* 取值$\frac12<=M<=1-2^{-r}$
|
||||
* 负数:1.1xxxxx的形式
|
||||
* 最大负数为1.10...0
|
||||
* 最小负数为1.11...1
|
||||
* 取值$-(1-2^{-r})<=M<=-(\frac12)$
|
||||
* 补码规格化(二进制下)
|
||||
* 正数:0.1xxxxx的形式
|
||||
* 最大正数为0.11...1
|
||||
* 最小正数为0.10...0
|
||||
* 取值$\frac12<=M<=1-2^{-r}$
|
||||
* 负数:1.0xxxxx的形式
|
||||
* 最大负数为1.01...1
|
||||
* 最小正数为1.00...0
|
||||
* 取值$-1<=M<=-(\frac12+2^{-r})$
|
||||
|
||||
### IEEE 754标准
|
||||
|
||||
#### 格式
|
||||
|
||||
* 数符+阶码(使用移码表示,可代表正负)+尾数数值位(使用规格化原码表示)
|
||||
|
||||
* **被忽略的首位1代表整数1**
|
||||
|
||||
| 类型 | 数符 | 阶码(移码2^k^-1) | 尾数数值 | 总位数 | 偏移值 |
|
||||
| ----------------------------- | ---- | ---------------- | -------- | ------ | ------ |
|
||||
| 短浮点数(尾数首位1忽略) | 1 | 8 | 23 | 32 | 0x7F |
|
||||
| 长浮点数(尾数首位不忽略) | 1 | 11 | 52 | 64 | 0x3FF |
|
||||
| 临时浮点数(尾数首位1不忽略) | 1 | 15 | 64 | 80 | 0x3FFF |
|
||||
|
||||
#### 表示范围
|
||||
|
||||
| 格式 | 最小值 | 最大值 |
|
||||
| ------ | ------------------------------ | ------------------------------------------- |
|
||||
| 单精度 | 1*2^-126^(阶码为1,尾数为0) | 2^127^*(2-2^-23^)(阶码为254,尾数为全1) |
|
||||
| 双精度 | 1*2^-1022^(阶码为1,尾数为0) | 2^1023^*(2-2^-52^)(阶码为2046,尾数为全1) |
|
||||
|
||||
#### 特殊数值
|
||||
|
||||
* IEEE 标准指定了以下特殊值:±0、反向规格化的数、±∞ 和 NaN(如下表所示)。这些特殊值都是使用 e~max+1~ 或 e~min-1~ 的指数进行编码的。
|
||||

|
||||
|
||||
#### 浮点数的加减
|
||||
|
||||
1. 对阶,阶数小的向阶数大的靠齐(即阶码小的进行右移操作)
|
||||
2. 尾数求和
|
||||
3. 规格化
|
||||
* 左归:尾数左移
|
||||
* 右归:尾数右移
|
||||
4. 舍入
|
||||
* 0舍1进法:右归时,若尾数为1,则尾数末位加1,若为0则舍入
|
||||
* 恒置1法:尾数最后一位始终置1
|
||||
5. 溢出判断:根据阶码判断是否溢出
|
||||
|
||||
## 算数逻辑单元
|
||||
|
||||
### 全加器
|
||||
|
||||
#### 输入
|
||||
|
||||
* C~i-1~:低位传来的进位
|
||||
* A~i~:加数A
|
||||
* B~i~:加数B
|
||||
|
||||
#### 输出
|
||||
|
||||
* X~i~:该位结果,$X_i=A_i\bigoplus B_i \bigoplus C_{i-1}$
|
||||
* C~i~:该位进位,$C_i=A_iB_i+(A_i \bigoplus B_i)C_{i-1}$
|
||||
|
||||
### 半加器
|
||||
|
||||
* 没有低位进位的加法器
|
||||
* 两个半加器可组成全加器
|
||||
|
||||
### 串行加法器
|
||||
|
||||
* 只设置一个全加器的加法器,每一次计算产生一位和
|
||||
* 操作数长k位,则一次计算要进行k次串行操作,效率差
|
||||
|
||||
### 并行加法器
|
||||
|
||||
#### 串行进位链
|
||||
|
||||
* 每完成一次计算,将进位作为下一个全加器的输入
|
||||
* 虽然解决了部分延迟问题,但仍难以提高运算速度
|
||||
|
||||
#### 并行进位链
|
||||
|
||||
* 主要思路:将n位全加器分为若干组,组内并行计算,组间串行计算
|
||||
* 并行计算实现:
|
||||
* 根据公式得$C_i=G_i+P_i\bigoplus C_{i-1} \\其中G_i=A_iB_i,P_i=A_i \bigoplus B_i$
|
||||
* 将其展开,将$C_i$仅用输入来表示,从而避免需要等待全加器计算出进位
|
||||
* 单重分组跳跃进位链
|
||||
* 直接将n位全加器分为若干组
|
||||
* 双重分组跳跃进位链
|
||||
* 将n位全加器分成若干大组
|
||||
* 每个大组又包括多个小组
|
||||
* 小组计算出的结果作为大组的输入
|
||||
* 大组组间串行,组内并行
|
||||
|
||||
### 算数逻辑单元的功能和结构
|
||||
|
||||
* 功能
|
||||
* 算术运算
|
||||
* 逻辑运算
|
||||
* 结构
|
||||
* 两个输入变量
|
||||
* 一个控制变量
|
||||
* 一个输出函数
|
||||
|
||||
## 数据的存储与排列
|
||||
|
||||
### 大小端存储
|
||||
|
||||
#### 大端存储
|
||||
|
||||
* 高字节位于高地址位
|
||||
|
||||
#### 小端存储
|
||||
|
||||
* 高字节位于低地址位
|
||||
|
||||
### 边界对齐存储
|
||||
|
||||
* 提高指令和数据的存取速度
|
||||
* 浪费内存空间
|
||||
|
||||
* 一般按最大基本类型的字节数对齐
|
||||
232
计算机组成原理/绪论.md
Normal file
232
计算机组成原理/绪论.md
Normal file
@@ -0,0 +1,232 @@
|
||||
# 绪论
|
||||
|
||||
## 计算机发展历程
|
||||
|
||||
### 计算机硬件发展
|
||||
|
||||
* 前四代计算机都使用冯诺依曼体系结构
|
||||
|
||||
1. 第一代计算机(1946-1957)——电子管时代
|
||||
* 电子管作为开关硬件
|
||||
* 使用机器语言
|
||||
* 可以存储信息
|
||||
* 输入/输出很慢
|
||||
2. 第二代计算机(1958-1964)——晶体管时代
|
||||
* 晶体管代替电子管
|
||||
* 采用磁芯存储器
|
||||
* 汇编语言取代机器语言
|
||||
3. 第三代计算机(1965-1971)——中小规模集成电路时代
|
||||
* 中小规模集成电路取代晶体管
|
||||
* 操作系统问世
|
||||
4. 第四代计算机(1972-至今)——大规模集成电路时代
|
||||
* 采用集成度很高的电路
|
||||
* 微处理器问世
|
||||
5. 第五代计算机——智能计算机(代表:神经网络计算机)
|
||||
* 具有人工智能
|
||||
* 运算速度极快
|
||||
* 软件系统能处理知识信息
|
||||
6. 第六代计算机——生物计算机与量子计算机
|
||||
* 未来计算机发展的发现和趋势
|
||||
|
||||
#### 计算机元件的更新换代
|
||||
|
||||
* 摩尔定律:价格不变的前提,每十八月,集成电路上可容纳晶体管数目将增加一倍,性能也将提升一倍
|
||||
* 半导体存储器的发展
|
||||
* 微处理器的发展
|
||||
|
||||
### 计算机软件的发展
|
||||
|
||||
* 计算机语言的发展
|
||||
* 计算机操作系统的发展
|
||||
|
||||
### 计算机的分类与发展方向
|
||||
|
||||
* 电子计算机
|
||||
* 电子模拟计算机
|
||||
* 电子数字计算机
|
||||
* 专用计算机
|
||||
* 通用计算机
|
||||
* 巨型机
|
||||
* 大型机
|
||||
* 中型机
|
||||
* 小型机
|
||||
* 微型机
|
||||
* 单片机
|
||||
* 按指令和数据流划分
|
||||
* 单指令流和单数据流(SISD):传统冯诺依曼架构
|
||||
* 单指令流和多数据流(SIMD):阵列处理器和向量处理器系统
|
||||
* 多指令流和单数据流(MISD):实际上不存在
|
||||
* 多指令流和多数据流(MIMD):多处理器和多计算机系统
|
||||
* 发展方向
|
||||
* 微型计算机
|
||||
* 微型化
|
||||
* 网络化
|
||||
* 高性能
|
||||
* 多用途
|
||||
* 巨型机
|
||||
* 巨型化
|
||||
* 超高速
|
||||
* 并行处理
|
||||
* 智能化
|
||||
|
||||
## 计算机层次结构
|
||||
|
||||
### 计算机基本组成
|
||||
|
||||
* 硬件
|
||||
* 处理器
|
||||
* 存储器
|
||||
* 外设
|
||||
* 软件
|
||||
* 程序
|
||||
* 相应文档
|
||||
|
||||
**注**
|
||||
|
||||
* 软件和硬件在逻辑上等效
|
||||
|
||||
### 计算机硬件基本组成
|
||||
|
||||
* 组成
|
||||
* 存储器
|
||||
* 运算器
|
||||
* 控制器
|
||||
* 输入设备
|
||||
* 输出设备
|
||||
* CPU=运算器+控制器
|
||||
* 主机=CPU+主存储器
|
||||
* I/O设备又叫外部设备
|
||||
|
||||
#### 存储器
|
||||
|
||||
* 分类
|
||||
|
||||
* 主存储器/主存/内存储器
|
||||
* CPU能直接访问
|
||||
* 辅助存储器/辅存/外存储器
|
||||
* CPU通过主存储器间接访问
|
||||
* 概念
|
||||
* 存储元:存储一位二进制数据
|
||||
* 存储单元:由若干个存储元组成
|
||||
* 存储体:由存储单元构成
|
||||
* 存储字:存储单元中二进制代码组合
|
||||
* 存储字长:存储单元的二进制代码位数
|
||||
* 构成
|
||||
* 地址寄存器(MAR)
|
||||
* 数据寄存器(MDR)
|
||||
* 存储体
|
||||
* 时序控制逻辑
|
||||
* 运行逻辑
|
||||
1. 将需要访问的内存单元地址存入MAR
|
||||
2. 使用地址译码器对MAR的地址进行译码,找到相应内存单元
|
||||
3. 在MDR中暂存要读写的数据
|
||||
4. 通过时序控制逻辑完成整个读写操作
|
||||
* MAR和MDR在现代计算机中位于CPU
|
||||
|
||||
#### 运算器
|
||||
|
||||
* 组成
|
||||
* ALU
|
||||
* 寄存器
|
||||
* 核心部件:算术逻辑单元(ALU)
|
||||
* 功能
|
||||
* 算术运算:加减乘除
|
||||
* 逻辑运算:与或非,异或,比较,移位
|
||||
* 寄存器
|
||||
* 累加器(ACC):必需
|
||||
* 乘商寄存器(MQ):必需
|
||||
* 操作数寄存器(X):必需
|
||||
* 变址寄存器(IX)
|
||||
* 基址寄存器(BR)
|
||||
* 程序状态寄存器(PSW)
|
||||
|
||||
#### 控制器
|
||||
|
||||
* 功能:控制计算机各个部件协调工作
|
||||
* 流动信息类型
|
||||
* 控制信息
|
||||
* 数据信息
|
||||
* 组成
|
||||
* 程序计数器(PC)
|
||||
* 指令寄存器(IR)
|
||||
* 控制单元(CU)
|
||||
|
||||
#### 输入设备
|
||||
|
||||
* 如键盘等
|
||||
|
||||
#### 输出设备
|
||||
|
||||
* 如显示器等
|
||||
|
||||
## 计算机软件分类
|
||||
|
||||
* 按功能分类
|
||||
* 系统软件
|
||||
* 操作系统
|
||||
* 数据库管理系统(位于操作系统和用户间的数据管理软件)
|
||||
* 语音处理
|
||||
* 分布式软件系统
|
||||
* 网络软件系统
|
||||
* 标准库程序
|
||||
* 服务性程序
|
||||
* 应用软件
|
||||
* 科学计算程序
|
||||
* 工程设计类程序
|
||||
* 数据统计和处理程序
|
||||
* 三个级别的语言
|
||||
* 机器语言
|
||||
* 汇编语言
|
||||
* 高级语言
|
||||
|
||||
## 计算机工作流程
|
||||
|
||||
### 源程序代码到可执行文件
|
||||
|
||||
1. 预处理
|
||||
2. 编译
|
||||
3. 汇编
|
||||
4. 链接
|
||||
|
||||
### 指令执行过程
|
||||
|
||||
* 以取数指令为例(将数从内存中取出放入ACC)
|
||||
|
||||
1. 取指令:PC->MAR->M->MDR->IR
|
||||
2. 分析指令:OP(IR)->CU
|
||||
3. 执行指令:Ad(IR)->MAR->M->MDR->ACC
|
||||
|
||||
### 步骤分类
|
||||
|
||||
1. 将程序和数据装入主存
|
||||
2. 将源程序转换为可执行文件
|
||||
3. 从可执行文件的首地址开始执行指令
|
||||
|
||||
## 计算机层级结构
|
||||
|
||||
1. 微程序机器层:实际存在的硬件层,由机器硬件直接实现
|
||||
2. 传统机器语言层:实际的机器层,由微程序解释指令系统
|
||||
3. 操作系统层:由操作系统程序实现
|
||||
4. 汇编应用层
|
||||
5. 高级语言层
|
||||
6. 应用层
|
||||
|
||||
## 计算机性能指标
|
||||
|
||||
* 机器字长:计算机进行整数运算能处理的最大二进制位数
|
||||
* 数据通路带宽:数据总线能一次性并行传输的信息位数
|
||||
* 主存储器容量
|
||||
* 运算速度
|
||||
* 吞吐量:单位时间内处理请求的数量,主要取决于主存的存取周期
|
||||
* 响应时间:用户向计算机发送请求后得到相应所需的等待时间
|
||||
* CPU时钟周期:频率倒数,CPU中最小的时间单位
|
||||
* 主频:内部时钟的频率
|
||||
* CPI:执行一条指令需要的时钟周期数
|
||||
* CPU执行时间:运行一个程序所需的时间
|
||||
* MIPS:每秒可执行百万条指令数
|
||||
* FLOPS:每秒执行的浮点运算数
|
||||
* MFLOPS:每秒执行的10^6^浮点运算数
|
||||
* GFLOPS:每秒执行的10^9^浮点运算数
|
||||
* TFLOPS:每秒执行的10^12^浮点运算数
|
||||
* PFLOPS:每秒执行的10^15^浮点运算数
|
||||
* IPC:每一个时钟周期执行的指令数
|
||||
@@ -75,7 +75,7 @@
|
||||
|
||||
* 长度大于r的突发错误逃逸的概率是
|
||||
$$
|
||||
\frac{1}{r^2}
|
||||
\frac{1}{2^r}
|
||||
$$
|
||||
|
||||
#### 纠错编码
|
||||
|
||||
Reference in New Issue
Block a user