计算机组成原理
4.1 存储器概述
分类
按存储介质:
-
1 半导体存储器:TTL, MOS (容易丢失,断电就没)
-
2.1 磁表面存储器:(塑料或金属基片涂磁层并磁化) 磁头 磁载体 (盘片)
-
2.2 磁芯存储器:硬磁材料 环形元件
-
3 光盘存储器:激光 磁光材料
按存储方式:
-
存取时间与地址无关 (随机访问)
- 随机存储器 (RAM random-access memory) 在程序执行过程中可读可写
- 只读存储器 (ROM read-only memory) 在程序执行过程中只读
-
存取时间与地址有关 (串行访问)
- 顺序存储存储器 磁带
- 直接存储存储器 硬盘 (定位 磁头一栋,停在指定的柱面上,读写头移动到柱面下,等待磁盘指定的区域旋转过来)
按在计算机中的作用:
- 主存储器
- RAM
- 静态 RAM cache
- 动态 RAM 内存条
- ROM
- MROM 出厂厂家写入
- PROM 一次可编程
- EPROM 可擦鞋,可编程 ROM, 擦写复杂
- EEPROM 更容易擦写
- RAM
- Flash Memory 大硬盘缓冲
- 高速缓冲存储器 (Cache)
- 辅助存储器 磁盘 磁带 光盘
层次结构
- 存储器的三个主要特性的关系
速度 价格 容量
寄存器 > 缓存 > 主存 > 硬盘 > 光盘 > 磁带
- 存储层次
- cache <=> 主存
- 解决 CPU 和主存速度差异过大
- 主存 <=> 辅存
- 解决容量问题
- 虚拟地址空间
+-----------------------------+
| |
+--+--+ +-------+ +--+--+ +-----+
| |------| |--------| |--------| |
| CPU | | cache | | 主存 | | 辅存 |
| |------| |--------| |--------| |
+--+--+ +-------+ +--+--+ +-----+
| |
+-----------------------------+
4.2 主存储器
概述
- 主存储器基本组成
+-------+ +---------+ +-----+
| |<--->| |<----->| | 数据总线
| 存储体 | | 读写电路 | | MDR | <========>
| |<--->| |<----->| |
+-------+ +---------+ +-----+
↑ ↑ ↑ ↑
+-------+ +---------+
| 驱动器 | | 控制电路 |
+-------+ +---------+
↑ ↑ ↑ ↑
+-------+ 读 写
| 译码器 |
+-------+
↑ ↑
+-------+
| MAR |
+-------+
↑
| 地址总线
|
MAR 中保存了由 01 代码构成的地址 译码器将 01 代码译码之后会对应存储体的存储单元 接着选中的存储单元的开关打开,存储体中的数据会送到数据线上,或者数据线上的数据会保存到存储单元里
- 主存和 CPU 的联系
+------------+
| |
| +-------+ | 数据总线 +-------+
| | MAR |<=|==========>| |
| +-------+ | | |
| | 读 | |
| |---------->| |
| CPU | 写 | 主存 |
| |---------->| |
| | | |
| +-------+ | 地址总线 | |
| | MAR |==|==========>| |
| +-------+ | +-------+
| |
+------------+
- 存储器和主存需要数据交换,所以数据总线是双向的
- 读和写都是站在 CPU 角度来说的,CPU 需要发出读或者写信号
- 主存中存储单元地址的分配
字地址 字节地址 字地址 字节地址
0 +--+--+--+--+ 0 +--+--+--+--+
4 |1 |2 |3 |4 | 4 |4 |3 |2 |1 |
8 |5 |6 |7 |8 | 8 |8 |7 |6 |5 |
+--+--+--+--+ +--+--+--+--+
小端对齐 大端对齐
举例:将 16 进制数 0X12345678H 存储
字地址 字节地址 字地址 字节地址
0 +--+--+--+--+ 0 +--+--+--+--+
4 |12|34|56|78| 4 |78|56|34|12|
+--+--+--+--+ +--+--+--+--+
- 存储器的技术指标
- 存储容量:主存存储二进制代码的总位数
- 存储速度
- 存取时间:存储器的访问时间,读出时间,写入时间
- 存取周期:连续两次独立的存储器操作 (读或写) 所需要的最小间隔时间
- 存储器的带宽
半导体芯片概述
1. 基本结构
+-------------------------+
| +----+ +----+ +----+ |
地址线 | | 译 | | 存 | | 读 | | 数据线
=====> | | 码 | | 储 | | 写 | | <=====>
| | 驱 | | 矩 | | 电 | |
| | 动 | | 阵 | | 路 | |
| +----+ +----+ +----+ |
片选线--->| | <--- 读/写控制线
+-------------------------+
-
地址线:单向,由外部输入,能够表示有多少个存储单元
-
数据线:双向,读出和写入的数据都通过数据线传输,表示存储单元有多少信息
-
片选线:内存条上有很多芯片,需要由它确定。(CS/CE)
一个存储单元的容量是 1b,需要 8 个存储单元组成一组才能表示 1 字节,很多组就构成了一个大存储器,片选线能够指定组
-
读/写控制线:读写的控制信号 (例如 WE 低电平写,高电平读,OE 允许读,WE 允许写)
芯片容量 = 2 ^ 地址线条数 × 2 ^ 数据线条数
2. 译码器
将输入地址映射到对应的线路,找到对应的存储单元
- 线选法:每个地址都对应一根线,线太多不现实
- 重合法:地址信号分为两部分,可以等分也可以不等分,按照矩阵的 x y 选择
3. 随机存取存储器 (RAM)
- 静态 RAM(SRAM)
行选,列选同时打开,完成读写操作
- 动态 RAM(DRAM)
假如数据保存的是 0
- 预充电:读数据线为高电平 1
- 读选择线有效,这是读出的数据为 1,需要取反的到真实数据
假如数据保存的是 1
- 数据是高电平,t1 也导通,接地,
- 数据电容放电会变为 0,读数据线也会变为低电平
注意:读数据线不能一直充电
- 这是读选择线会读到 0, 取反得到真实数据
- 注意: 因为数据改变了,需要重新写入原始数据。写入时就通过写选择线写入,写选择线会控制一整行
- 动态 RAM 时序
行列地址分开传送
- 引脚数量更少,速度相对会慢
- 静态 RAM 也可以实现,但是它速度更快,价格更高,不能舍弃性能
4. 只读存储器
- 掩膜 ROM(MROM)
-
出厂时写入,不能修改
-
可以保存常用的函数等
-
行列选择线交叉处有 MOS 管为 1
-
行列选择线交叉处无 MOS 管为 0
- PROM (一次性编程)
融丝
- EPROM(多次性编程)
必须整块擦出
- EPPRAM
- 电可擦写
- 局部擦写
- 全部擦写
- Flash Memory(闪速型存储器)
5. 存储器和 CPU 的连接
存储器容量的拓展
- 位拓展(增加存储字长)
用 16K × 4 位 的存储芯片组成 1K × 8 位的存储器
-
准备两个芯片(以 2114 为例)
-
1K 对应 10 根地址线,分别连接到两个芯片上
-
每一个芯片输出 4 位数据,把它们分别接到 8 根地址线上
-
片选线会同时选中两个芯片,他们会同时工作
- 字拓展(增加存储器器的容量)
用 1K × 8 位的存储芯片组成 2K × 8 位的存储器
2K 对应 11 根地址线
使用最高位作为芯片选择的信号
- 字位拓展
用 1K × 4 位的存储芯片组成 4K × 8 位
先用两个 1K × 4 的组成 1 个 1K × 8 的
4K 对应 12 根地址线
4K A11 A10 A9 ... A1 A0
1K A9 ... A1 A0
可以用最高 2 位选择 4 个芯片,两位译码出 4 根线,决定是哪一个芯片
存储器与 CPU 的连接
-
地址线的连接
-
数据线的连接
-
读/写命令线的连接
-
片选线的连接
-
合理选择存储芯片
-
其他,时序,负载
6. 存储器的校验
- 奇偶校验
计算一组存储单元中 1 的个数,如果 1 的个数是偶数,校验码就为 0, 1 的个数是奇数,校验码变为 1
假如纠错码发生翻转呢?并无影响
缺点:
- 只能知道出错,但不知到出错的位置
- 如果有偶数位发生翻转,无法检查到出错
- 汉明码
将数据分组,并利用二分法反复确认对比错误,能够发现两个数据翻转,无法解决 3 个数据翻转
由于汉明码的性质,纠错码出现在 2^n 位上。数据块越大,纠错吗的相对占比就越少
- LDPC
7. 提高访存速度
- 采用高速器件
- 采用层次结构 Cache-主存
- 调整主存结构
- 单体多字结构
每次向数据中取出多个记录
带宽可能提高 4 倍
- 多体并行系统
-
高位交叉,顺序编址
不同存储体之间可以并行,但是 CPU 只会频繁访问某一个存储体
-
低位交叉,各个存储体轮流编址
需要满足一定条件,在存取周期内
4.3 高速缓冲存储器
1.
2.Cache 和 主存的映射
- 直接映射
特点:
- 每个缓存块 i 和若干个主存块对应
- 每个主存块 j 只能和 1 干个缓存块对应
过程:
- 将主存储器的每个单元按照所在地址取模(Cache 大小)分组
- 根据地址就能直接找到地址在 Cache 中的位置,
- 接着在经过比较器比较组号是否对应判断是否命中
优点:速度快
- 只需要一个额外的标记,组号
- CPU 三级缓存,适合做为一级缓存,追求极致速度
缺点:利用率不高,
- 假如 Cache 不满,1 号已经被占用,其他组 1 号的存储记录也不能利用到空的 Cache 资源
- 全相连映射
特点:
-
主存的任一块可以映射到 Cache 的任一块
-
主存储器依然需要分组
-
Cache 需要除了组号,还要标记第几位
-
在比较时需要同时比较组号,位号
优点:
- 利用率高
- 适合做为 CPU 后几级缓存
- 组相连映射
前两种方法的折中
让每个主存块可以和 n 个 缓存块对应,它可以选择这 n 个中的任意一个
3.替换算法
- 先进先出(FIFO)
没有体现程序的局部型原理
- 最近最少使用算法(LRU)
很好体现程序的局部型原理
实现复杂:(滑动窗口 + 次数)?
最近最旧使用简单替代?