1
0
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:
Zhou
2020-08-18 00:14:26 +08:00
parent 52915aed9a
commit 77468a7bcf
6 changed files with 1240 additions and 1 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View 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
* 只写一次型光盘(可由用户写入一次)
* 可擦写光盘

View 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
##### 循环移位运算
![img](img/数据的表示和运算/循环移位.jpg)
#### 原码定点数的加减法
##### 加法
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~ 的指数进行编码的。
![img](img/数据的表示和运算/特殊浮点数.jpg)
#### 浮点数的加减
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位全加器分成若干大组
* 每个大组又包括多个小组
* 小组计算出的结果作为大组的输入
* 大组组间串行,组内并行
### 算数逻辑单元的功能和结构
* 功能
* 算术运算
* 逻辑运算
* 结构
* 两个输入变量
* 一个控制变量
* 一个输出函数
## 数据的存储与排列
### 大小端存储
#### 大端存储
* 高字节位于高地址位
#### 小端存储
* 高字节位于低地址位
### 边界对齐存储
* 提高指令和数据的存取速度
* 浪费内存空间
* 一般按最大基本类型的字节数对齐

View 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:每一个时钟周期执行的指令数

View File

@@ -75,7 +75,7 @@
* 长度大于r的突发错误逃逸的概率是
$$
\frac{1}{r^2}
\frac{1}{2^r}
$$
#### 纠错编码