存储器概述
1、存储器层次结构
- 层次结构,从上到下(速度最快,容量最小,价格最高)
- CPU:芯片
- 寄存器
- Cache【高速缓冲存储器】
- 在主存和CPU之间,用来缓解主存和CPU速度不匹配的问题
- 内存:
- 主存:存放计算机运行期间所需的程序和数据
- 辅存:磁盘,硬盘
- 用来存放暂时不用的程序和数据,以及一些需要永久性保存的数据
- 用来存放暂时不用的程序和数据,以及一些需要永久性保存的数据
- 外存:光盘,磁带
2、存储器分类
- 按存储介质
- 半导体
- MOS管,双极管
- 磁介质
- 磁盘
- 光介质
- 光盘
- 半导体
- 按存储方式
- 随机存储【所有地址上的数据被访问的时间是一样的】
- 主存,,Cache
- 只读存储【信息一旦写入以后,只能读出不能写入】
- BIOS就存储在这里面
- 顺序存储【按地址顺序访问】
- 磁带
- 直接存储【先找对应的小区域(磁盘的磁道),再在小区域上按顺序查找】
- 光盘
- 随机存储【所有地址上的数据被访问的时间是一样的】
3、存储器的性能指标
-
- 存储容量
- 单位成本
- 数据传输速率
- 存储周期 = 存取时间 + 恢复时间
存储器的分类
1、半导体随机存储器【DRAM】
- 主存组成
-
- 存储元:电容 + MOS管
- 存储阵:n行存储行
- 译码驱动:通过地址总线,翻译成对应的地址,将存储阵 对应地址的 mos管施加高电平,读或者写数据
- 读写电路:通过读写线,控制从存储阵中 读写数据
- 两根读写线
- 一根读写线
- 片选线:进行读写操作的是不是这块芯片,对芯片使能
- 一块内存有8个存储单元,每个存储单元有一根片选线
-
- 对存储的描述
- 地址线:n 位地址 = 2^n个存储单元 = 2^n根地址线 = 2^n行存储行
- 数据线:n位存储字长 = 每行存储行有 n 个存储元(电容 + MOS管)= 宽度
- 总容量 :存储单元 * 存储字长
- 常见描述:
- 8K * 8位:2^13(存储单元) * 8bit(字长)
- 题目
- 存储体有几根引脚
- 片选线 + 1或2读写线 + 地址线 + 数据线
- 存储体有几根引脚
- 寻址
- 对存储的描述
2、SRAM 和DRAM
- DRAM
- 存储元:栅极电容
- 破坏性读写
- 存储元:栅极电容
- SRAM
- 存储元:双稳态触发器【下图】
- 稳定读写
- A高B低:1
- A低B高:0
- 存储元:双稳态触发器【下图】
-
- 对比
-
- 刷新【一个存取周期 = 存取时间 + 恢复时间】这里的刷新就是在做恢复
- 栅极电容内的电荷不稳定,只能维持2ms,即便不断电,信息也会消失:2ms必须刷一次
- 触发器的结构稳定,只要不断电,触发器的状态就不会改变
- 问题
- 多久刷新一次:对于一般DRAM,2ms
- 每次刷新一个行存储单元
- 优化1:将译码器分为行、列译码器,选通线也变为原来的一半
- 优化2:将地址线复用,增加一个行缓冲器,一个列缓冲器,把地址先给行缓冲器,再给列缓冲器,然后访问对应地址的存储数据
- 刷新方式
- 分散刷新:按行进行刷新,每次存取完刷新一次,2ms可能不止刷新一次
- 集中刷新:在 2ms 内,集中将全部存储单元刷新一次
- 异步刷新:设置2ms 内仅刷新一次,时间太短,看起来像异步
- 刷新【一个存取周期 = 存取时间 + 恢复时间】这里的刷新就是在做恢复
-
- 现代:使用SDRAM 代替DRAM
3、只读存储器【ROM】
主存,包括RAM(内存条) + ROM(主板上的ROM)
- 用来存储BIOS系统
- 分类
- 一旦形成不可擦除
- MROM:掩只读存储器:工厂出厂定制
- PROM:可编程只读存储:用户可进行一次写,
- 可擦除
- EPROM
- E^2PROM,电擦除
- UVEPROM,紫外线擦除
- Flash Memory:闪存
- SSD:固态硬盘
- EPROM
- 一旦形成不可擦除
主存与CPU的连接
1、连接原理
- CPU通过MAR和地址线连接主存,通过MDR和数据线连接主存
- 地址总线的位数决定了可寻址的最大内存空间
2、主存容量扩展
- 位扩展【】
- 一个存储单元只能连接CPU的一个数据线,扩展为8个存储单元,即:8K * 8bit
- 字扩展
- 增加存储单元数量
- 字位同时扩展
- 多个存储单元 + 译码片选法:形成可以选择存储单元组
3、存储芯片的地址分配和片选
- 线选法
-
- 01线选法,给需要使用的存储单元高电压1,其他的0,效率低,消耗的CPU线太多
- 片选法
- 增加一个译码器,用来给需要使用的存储单元使能,(2/4译码器下图【输入两个二进制值,输出相应的4个值】,3/8)
4、存储器与CPU连接
- 74ls138译码片选器
双端口RAM和多模块存储器
1、双端口RAM
- 定义:一个存储器有两个独立端口,进行读写
- 操作
- 两端读
- 两端不同时写
- 两端写一个地址【error】
- 一端读,一端写【error】
2、多模块存储器
- 单体并行
- 多体并行
- 高位交叉编址
- 例如:两个内存,纵向编址,必须完成一个读写周期,才能访问下一个地址
- 低位交叉编址【组成双通道内存】
- 两个内存,横向编址,交叉访问,形成双通道!!
- a
- 高位交叉编址
Cache高速缓冲存储器
- cache工作原理
- 工作原理
- 将主存中部分数据放入cache,缓和CPU与主存间速度不匹配的矛盾
- 局部性原理
- 程序局部性:一个循环代码中,循环体和变量在一定时间内是需要高频访问的
- 空间局部性:最近一点时间内要使用的信息,很可能与现在使用信息在存储空间上是邻近的
- 时间局部性:最近未来要用的信息是现在在使用的信息,例如上面的循环
- 性能分析
- 两个指标
- Cache命中率:CPU需要的数据正好在Cache中
- 缺失率:不在Cache中
- 两种方式
- 先在Cache中找,再在主存中找
- 同时找,找到即停止
- 例题
- Cache命中率95%,访问Cache比主存快5倍,平均时间?
- 方式1:0.95t + 0.05*5t = 1.2t
- 方式2:0.95t + 0.05*6t = 1.25t
- Cache命中率95%,访问Cache比主存快5倍,平均时间?
- 两个指标
- 工作原理
- 映射方式【Cache和主存是如何对应的】
- 【全相联映射】随机映射
- 存储规则:没有规则
- 主存地址结构:有效位 + 标记位 + 整块数据
- 步骤:
- CPU要找的主存地址与cache中标记匹配,
- 匹配成功,
- 有效位 = 0,命中失败
- 看有效位= 1时,命中,存取数据
- 匹配失败,在主存中查找
- 优点:充分利用空间
- 缺点:命中率低
- 【直接映射】块取余
- 存储规则:主存根据地址存放到Cache特定地址,行号 = 主存块号 % cache总存储行数,
- 主存地址结构:标记位(主存地址前几位) + cache行号(主存地址末几位) + 整块数据
- 优点:命中率高
- 缺点:空间利用率低
- 【组相联映射】组号取余
- 存储规则:将cache分组,主存号可以放入组中任意位置,所属组号 = 主存块号 % 总组数
- 主存地址结构:标记位 + 组号 + 整块数据
- 优点:综合上诉两种方法,效果较好
- 步骤
- 根据主存块号的后两位确定组号
- 匹配标记的块号
- 命中,再块内查找数据
- 【全相联映射】随机映射
- 替换算法【cache满了怎么办,如何替换数据】
- 随机换
- 原理:想换哪换哪
- 命中率:低
- FIFO先进先出换
- 原理:最早调入的被替换
- 命中率:低
- LRU【最近最少使用】
- 原理:块中添加计数位,从调入开始,CPU每次访问,被访问的记数清0,其他的记数+1。替换时,选择记数最大的替换,该块记数清0
- 替换完,比其值低的 + 1,【不做无效加法,省空间】
- 做题步骤
- 从需要替换的元素出发,往前看,最近没有使用过的就是需要置换的
- 原理:块中添加计数位,从调入开始,CPU每次访问,被访问的记数清0,其他的记数+1。替换时,选择记数最大的替换,该块记数清0
- LFU【最不经常使用】
- 原理:CPU访问Cache,被访问的行 计数器 + 1,其他的不加,替换时,选择记数最小的替换
- 多个记数相同的行:FIFO替换
- 原理:CPU访问Cache,被访问的行 计数器 + 1,其他的不加,替换时,选择记数最小的替换
- 随机换
- 写策略【PS的操作在Cache中,操作完如何与主存中的数据一致?】
- Cache命中
- 全写法:CPU 每次写,都给Cache和主存同时写
- 很明显,写效率很低
- 写回法:CPU只写Cache,当前块内容要被替换时,再写回主存,
- 需要一个脏位:表示该地址块被修改过
- 效率高,但存在不一致的隐患
- 全写法:CPU 每次写,都给Cache和主存同时写
- Cache不命中【CPU要写的不在Cache中】
- 写分配
- 先把该块调到Cache中,再执行写操作
- 配合写回法
- 非写分配
- 直接对主存执行写操作,
- 配合全写法
- 写分配
- Cache命中
虚拟存储器
- 概念:具有主存的性能,和辅存的容量,提高存储系统的性价比
- 页式虚拟存储系统
- 页表:
- 存放:主存
- 逻辑地址(虚拟地址)根据页表,对应主存中的物理地址
- 快表:
- 存放:SRAM【独立,不在Cache中】
- 加快访问速度
- 页表:
- 页表
- 外存块号:辅存中的页号
- 有效位:同cache中映射的有效位,记录映射是否有效
- 访问位:同cache中页面替换的记数位,记录最近一段时间页面的访问次数,替换时,把数值小的替换掉
- 脏位:同cache中写策略,记录逻辑地址中是否发生写操作,被替换时,再将这些写回物理地址(主存)