存储器的层次结构及Cache
计算机系统中的存储器主要分以下几个结构:
- 寄存器
- Cache(高速缓存)
- 内存(主存/运行内存)
- 外存(辅存)
由上到下组成
存储容量:外存 > 内存 > Cache > 寄存器
读写速度:寄存器 > Cache > 内存 > 外存
寄存器(CPU)
存在于 CPU 中,一般只能通过汇编语言进行操作,负责与 Cache 相关的读写操作
Cache(高速缓存)
- CPU 和内存之间的中间存储器,目的是为了解决
CPU
和内存
之间速度
与容量
不匹配问题。- 对于开发者来说,它是
不可操作
的,属于透明状态
SRAM相联存储器
,特点是按内容存取,原理是把数据或者数据某一部分
作为关键字,按顺序写入信息,读取时并行将该关键字
与存储器的每一个单元
进行比较,找出存储器内所有与该关键字相同的数据集。更适合做数据的检索和更新
设置
多级高速缓存 Cache
可以提高访问的命中率
,从而提高主存访问的效率
- 多级 cache 一般分为
一级cache
、二级cache
、三级cache
- CPU 在访问主存时,会按顺序去优先访问一级 cache、二级 cache、三级 cache,如果都在 cache 中
未命中访问内容
,才会去主存
中寻找 - 在 CPU 进行 cache 查找时,需要
一级cache
拥有跟CPU主频
一样快的访问速度 - 按级别往下数的 cache 容量,它是由小到大的,一级大概为
几KB
,二级大概为几MB
,依此类推
- 多级 cache 一般分为
Cache 改善系统性能的依据时程序的局部性原理
时间局部性
:被引用过一次的存储器位置在未来会被多次引用,主要体现在循环结构上空间局部性
:一个存储器的位置被引用,将来它附近的位置也会被引用,体现的是顺序执行的过程demo:
const arr = [1, 2, 3, 4, 5, 6]; // 数组内的子项在循环体中按顺序存取,且只会使用一次,因此具有良好的空间局部性 |
Cache 中的地址映像方法
- 直接相联映像 :主存的块与 Cache 块的对应关系是固定的
- 优点:硬件电路设计、地址变换比较简单
- 缺点:冲突率较高、灵活性较差
- 全相联映像 :主存和 Cache 均分成大小相同的块,允许主存的任意一块可以调入 Cache 存储器的任何一个块的空间中
- 优点:冲突率较低、主存的块调入 Cache 的位置不受限制,十分灵活
- 缺点:电路难于设计和实现,只适用于小容量的 cache;无法从主存块号中直接获取 Cache 的块号,变换比较复杂,速度较慢
- 组相联映像 :
- 将 Cache 的块再分成组,
组
采用直接相联映像方式
而块
采用全相联映像方式
。即主存中任何区块的 0 组只能存储到 Cache 的 0 组中,依此类推。组内的块
亦采用的是全相联映像方式
,即一组内的块可以任意存放。进而可以理解主存一组(z0)
中的任意一块可以存入Cache 相应组(c0)
中的任意一个块中。
- 优(缺)点:适用于
直接相联映像
和全相联映像
的折中
- 将 Cache 的块再分成组,
Cache 淘汰算法
常见淘汰算法:
随即替换算法 RAND(random)
:- 使用
随机数发生器
生成需要替换的块号
,再将需要被替换的块号替换出去,以此达到随即替换过程 - 这种以随机数形式来决定淘汰的方式,常被称为“随缘”、“佛系”淘汰
- 使用
先进先出算法 FIFO(First in First out)
:- 可以理解为
队列
的操作,它会将最先进入 Cache 的信息替换出去淘汰
- 可以理解为
近期最少使用算法 LRU(Least Recently Used)
:- 语义化理解就是,会将
近期最久未使用
的 cache 中的信息块替换出去淘汰,cache 中的信息块存放时间越久,越优先淘汰
- 语义化理解就是,会将
最不频繁使用算法 LFU(Least Frequently Used)
:- 引用
计数器
记录访问页面次数,访问次数越多,淘汰率越低
- 引用
优化替换算法
:- 需要
先执行一遍程序
,统计 cache 的替换情况,在下次执行时
才会根据最有效的方式进行替换
- 需要
读写过程(三种):
Cache 内容是对主存内容的直接复制,在复制完成之后,Cache 才会在 CPU 调度下被使用,在使用过程中如果存在对 Cache 的修改,则会产生跟主存之间不一致的情况,这时候我们需要下面
读写算法
进行区分修改情况写直达
:同时写 Cache 和内存,效率慢、性能损耗大
写回
:只写 Cache,淘汰页面时,写回内存标记法
:只写内存,并将标志位清零,若是再用到此数据,只需要再次调取即可- 每次修改,直接修改内存,修改时同时对
Cache做修改标志
,在后续再使用该数据时,就可以直接从主存重新调取数据
,反之则从 Cache 中返还,不用则不再调取
- 每次修改,直接修改内存,修改时同时对
内存(主存)
内存在与 Cache 进行交互,是通过
硬件
实现的,反之同理
- 由
DRAM/RAM
构成,其特点是在系统异常重启/切断电源后,会丢失存储的数据。与其相反的则是ROM
(只读存储器),一般会拿来存储BIOS
相关内容
外存(辅存)
外存在与内存的交互,则是通过
软件
和硬件
结合实现的,反之同理
- 外存指的是
电脑硬盘
或外部附加的存储器
,如SSD 固态硬盘
、机械硬盘
、光盘
、U 盘
等
此文章版权归作者所有,商业转载请联系作者获取授权,非商业转载请标明出处,感谢!