存储器
随机访问存储器
RAM(随机存储器)
SRAM
双稳态触发器,有电就保持不变,干扰消除后时会恢复到稳定值,晶体管多因此密集度低
DRAM
每个位存储为对一个电容的充电,对干扰敏感,漏电所以需要刷新
刷新:
- 集中刷新:产生“死区”,2ms内集中刷新每一行
- 分散刷新:没有死区
- 异步刷新:结合前两种方式,2ms内刷新每一行
- 以行为单位,不需要“选片”,对CPU透明,一次刷新占用一个周期
SRAM & DRAM
都易失(关电后信息丢失)
ROM(只读存储器)(非易失性存储器)
- MROM(掩模式ROM):无法更改内容
- PROM(可编程ROM):熔丝,1次可编程
- EPROM(可擦写可编程ROM):1000次
- EEPROM(电子可擦除PROM):100000次
- Flash:“晶体管浮体”保存电荷
- 闪存:基于EEPROM和Flash技术,用MOS管的浮栅上有无电荷来存储信息
- SSD(固态硬盘):基于闪存技术,由存储单元(闪存芯片)和控制单元(闪存翻译层)组成
- U盘:基于闪存技术,只是不如SSD容量大性能好
未格式化的硬盘容量要大于格式化后的实际容量
在固态硬盘中,数据存储在闪存芯片中的块(Block)中。当需要修改数据时,固态硬盘会将相应的块标记为可擦除状态,并将数据写入一个新的块中。这是因为闪存芯片的写入操作是以块为单位进行的,无法直接在原来位置上修改部分数据。
串行访问存储器
- 顺序存取存储器:磁带
- 直接存取存储器:磁盘、光盘
磁盘
构造:
容量:
操作:
- 寻道时间:传动臂移动到目标磁道
- 旋转时间:等待目标扇区的第一个位旋转到读/写头下
- 传送时间:读写的过程(与旋转速率、每条磁道的扇区数有关)
RAID(廉价磁盘冗余阵列)
RAID(Redundant Array of Independent Disks)是一种数据存储技术,通过将多个独立的硬盘组合在一起,形成一个逻辑上的单一存储单元,以提供更高的数据可靠性、性能或容量。通过数据分布和冗余来实现
柱面斜进
性能指标
多体模块存储器(提高访存速度)
单体多字系统
指令和数据必须连续存放
在一个存取周期内,从同一地址取出4条 连续 指令,每隔1/4存取周期逐条送至CPU
多体并行系统
使不同的请求源同时访问不同的体,并行工作
高位交叉编址(顺序方式):总是先在一个模块内访问,仍是顺序存储器
低位交叉编址(交叉方式):流水线方式并行存取
存储器层次结构
Cache(高速缓存存储器)
由SRAM构成 ,在CPU内,加速CPU访存速度
Cache和主存的结构原理以及访问机制不同(主存按地址访问,Cache是按内容及地址访问)
Cache与主存的映射由硬件自动完成
CPU与Cache之间的数据交换以字为单位,Cache与主存之间的数据交换以Cache块为单位
存储层次
高速缓存的描述:(S,E,B,m) ,容量C=S X E X B
主存字块标记(tag)、组地址(索引)、字块内地址(偏移)
64KB数据cache、块大小64B、共1024个块、2路组相联;40位物理地址
块内偏移:64B=26,6位
索引:cache大小/(块大小X相联度)=64KB/(64BX2)=29,9位
tag:40-6-9=25位
m位物理地址被划分为1个有效位、t个标记位、s个组索引位、b个块偏移位
- 有效位:该行是否包含有意义的信息
- 标记位:唯一标识存储在这个行中的块
映像规则
组选择、行匹配、字抽取
- 直接映射:E=1,每组仅一行
- 组相联:1<E<C/B
- 全相联:E=C/B,仅一组(虚拟内存系统的TLB)
查找算法
索引是地址的低g位(组数为G=2g),高位作为tag标识
tag相同,并且有效位为1,即为找到
替换算法
随机、先入先出、最近最少使用(LRU)、最不常使用(LFU)
写策略
写的块不在cache中
- 按写分配(写时取):加载较低一层的块到cache,更新这个cache块
- 不按写分配(绕写):直接写到较低一层
写的块在cache中
- 写直达法:既写入cache,又写入主存
- 写回法:只写到cache,当cache被替换时才写回主存,通过设置“脏位”(修改过,与主存不一致)
改进cache性能
降低失效率
缓存不命中:
- 冷不命中/强制性不命中:缓存是空的,短暂事件
- 冲突不命中(抖动):对象映射到同一个缓存块,一直不命中,反复加载和驱逐相同高速缓存块的组
- 容量不命中:缓存太小,不能处理这个工作集
调节cache块大小
增加块大小,减少强制不命中,但同时减少块数,增加冲突不命中,增加失效开销
提高相联度
降低失效率,但同时增加多路选择器延迟增加命中时间
Victim Cache
位于cache和存储器之间的又一级cache,采用命中率较高的全相联策略,容量小而且仅仅在替换时发生作用。但同时多种命中时间会使CPU流水线的设计复杂化
硬件预取
指令和数据在处理器提出访问请求之前预取,预取内容可以直接放入cache或者访问速度快于下一级存储器的缓冲器
编译器控制的预取
编译时加入预取指令,使得指令和数据被用到之前发出预取请求
编译器优化
- 数组合并
- 内外循环交换
- 循环融合
- 分块
减少失效开销
写缓存、写合并
读失效优先于写
读失效时检查写缓冲器的内容,若没有冲突并且存储器可访问,则可继续处理读失效
请求字处理
请求字:当从存储器向CPU调入一块时,块中往往只有一个字是CPU立即需要的
当CPU请求的字到达后,不等整个块都调入cache,就把该字发给CPU并使处理器继续运行(尽早重启动、请求字优先)
多级cache
第一级cache的速度影响CPU的时钟频率,第二级cache的速度只影响第一级cache的失效开销
非阻塞cache
“失效下命中”:cache失效时,不是完全拒绝CPU的访问,而是能处理部分访问,从而减少平均失效开销
减少cache命中时间
容量小、结构简单
虚拟cache
使用虚拟地址映射并访问的cache
访问流水化
提高cache带宽
多体cache
不把cache当作一个独立的块,而是划分为独立的几个体,支持同时访问。从而增大cache的带宽
路预测
每一组cache中保存一些预测位,表示下次cache访问本组应该命中的cache块
Trace Cache
L3组数=4MB / 16way / 每块64B =212
L2组数=256KB / 4way /每块64B =210,组地址10位,字块内地址64对应6位,
因此,字块标记位数=47-10-6=31
L1组数=32KB / 8way /每块64B =26,组地址6位
主存
提高主存性能
增加存储器宽度
多体交叉
独立存储体
存储器支持独立的访存请求
主存与CPU的连接
通过存储器芯片拓展技术,将多个芯片集成在一个内存条
主存容量的拓展
- 位拓展法
8片8K X 1位的RAM芯片组成8K X 8位的存储器
每片的数据线依次作为CPU数据线的一位
每片连接地址线A0—A12的方式相同,地址线连在一起
某一时刻选中所有芯片,片选线CS连在一起
- 字拓展法
4片16K X 8位的RAM芯片组成64K X 8位的存储器
每片连接地址线和数据线的方式相同
数据线D0—D7连在一起,A15A14作为片选信号
同一时间只选中一个芯片
- 字位同时拓展法
连接
- 地址线:CPU地址线低位连接存储芯片的地址线
- 数据线:扩位存储芯片,使与CPU相等
- 读/写命令线:高读低写,有时分开
- 片选线:剩余的高位地址与访存控制信号MREQ(低电平有效)共同产生CS信号
线选法:寻址时地址线只能一位有效
译码片选法:二进制编码
存储器的校验
汉明码:
- 从1开始编号
- 在第1,2,4,8…位添加检验位
- 第i个检测位负责的数据位包括所有在二进制表示中第i个位置为1的位
- 配偶原则:如C1应使1,3,5,7…位中的1为偶数个,即C1=b4⊕b3⊕b1
- P1=C1⊕b4⊕b3⊕b1
- 出错位:若P4P2P1=110,则第6位出错
- 欲传递的信息是正确的b4b3b2b1
局部性原理
时间局部性:该内存位置本身将再被引用
空间局部性:附近的内存位置将被引用文章来源:https://www.toymoban.com/news/detail-440055.html
运用局部性的设计:文章来源地址https://www.toymoban.com/news/detail-440055.html
- 缓存系统:存储经常访问的数据,减少对主存储器的访问
- 虚拟内存系统:执行过程中只会使用部分内存页面,这些页面通常都是相邻的
- 磁盘调度算法:FIFO、最短寻道时间优先、电梯算法等,优先访问磁盘上相邻的数据块
- 分支预测技术:分支通常重复执行
到了这里,关于2.存储器层次系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!