高速缓存概述

图片及主要内容源自mooc讲义

1. 存储器层次结构

1.1 层次结构

为了利用 寄存器、SRAM/ADRAM、硬盘的的优点,需要构建层次化的存储器结构

每次传输的数据的最小单位是定义的,称为块

由于程序访问的局部性特点(时间如循环,空间如数据),我们这种层次化结构是有效的

2. Cache基本概述

在CPU和主存之间设置一个快速小容量的存储器,其中总是存放最活跃 (被频繁访问)的程序和数据,由于程序访问的局部性特征,大多数情 况下,CPU能直接从这个高速缓存中取得指令和数据,而不必访问主存。

2.1 Cache简述

2.2 Cache的操作过程

CPU访问首先是在Cache中,若未命中,则去主存中访问并将相关内容放进cache,若此时cache已满,则需要淘汰一些块

2.3 Cache的实现

首先提出一些问题:如何判断是否命中?如何保证一致性?如何映射?如何设计淘汰策略?。。。

3. Cache映射方式

3.1 映射&如何映射

3.2 直接映射

 拿到一个主存地址:首先看他的槽号(即Cache索引,是中间的4位),然后根据Cache索引去看他的标记,如果Cache中的标记和主存地址中的标记相同,则表示是来自同一块群,此时若有效位为1,则表示命中

对于Cache冲刷指令,一般是os才能下的,例如在进行进程切换时,需要使用Cache保存其他进程的程序和数据,就需要进行Cache冲刷

直接联映射例子:

数据区为64K的Cache,一个主存块的16B,那么Cache中就能够划分出64K/16B=4K的行;4K的行号需要12位地址空间来保存;另外需要4位来作为块内地址(16B的主存块,需要4位作为块内地址);那么剩下的就都是TAG占据的位数,即为32-12-4=16位。

判断命中过程:首先拿到主存地址的槽号(索引)去Cache中找到相应的行,然后比较主存地址中高16位的标记和Cache对应行中的索引是否相同,如果相同并且有效位为1,那么表示命中

取数据:根据低位的块偏移地址和字节偏移地址,在Cache的数据区中取出数据

直接映射的特点:

3.3 全相联映射 

主存地址只保存了主存块号和块内地址(没有槽号,因为主存块可以任意映射到任一Cache行中)

我们的Cache行的标记就是块地址,因此需要将Cache的每一行的标记与主存地址的前11位(目标块的块地址)均进行比较,实际上Cache的每一行都有一个比较器(导致成本和占据的空间增大了),这样的每行的比较是并行完成的,最终所有比较结果只要有一个为true,就表示命中。

 全相联的特点:

 3.4 组相连映射

主存地址包括标记(主存的组群号)、槽号(Cache索引)和块内地址;

判断命中:首先拿着主存地址的Cache索引,可以找到数据在Cache的哪一组,然后在组内分别将Cache的标记和主存地址的标记对比,若有一个相同则表示命中,没有相同表示未命中。

 例子:

4. Cache的命中率(hit)和缺失率(miss)

平均访问时间和命中率相关,一般我们的Cache能够轻松的达到98%左右(需要coder能写局部性较好的code)

5. 缺失率与关联度

5.1 基本概念

我们根据索引得到某一组,然后将组内每行的标记与地址中的标记通过比较器并行的做对比,比较结果通过或门运算,若果为1,则表示命中,同时通过多路选择器确定某一行,然后根据块内地址取得数据。

 5.2 标记位大小与关联度

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值