Cache-IA32

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

80486的片上高速缓冲存储器
80486片上Cache 采用指令和数据共用的统一Cache 结构,对软件是透明的。

1、片上Cache 的结构
片上Cache 采用4路组合地址映射方式,如图4.7所示。

它把8KB 容量分成了4个2KB 的Cache ,2KB Cache 分成128个行,每个Cache 行为16个字节128位。

每个Cache 行对应一个21位的标签存储器,因为“221 = 4GB 主存÷2KB Cache = 232/211”。

2、伪LRU 算法
片上Cache 的每个Cache 行都有一个有效位,表明此行中的数据是否有效可用。

当处理器复位或Cache 被清洗时,所有有效位均被清除。

伪LRU 算法的流程如图4.8。

当必须替换一个Cache 行时,Cache 控制器首先用B0选择4路Cache 中每组相同行号的4个Cache 行都对应3位LRU 位,用于实现“伪近期最少使用LRU ”替换算法。

假设4路Cache 分别标为L0、L1、L2、L3。

B0位说明最近
图4.7 80486片上Cache 的结构
4×128行(8KB )Cache 4路 标签 数据 行号 C0 0~127 C1 0~127 C2 0~127 C3
0~127
21位
16字节
7位 主存地址n
标签t 行s 字w 32 =
21
7
4
B2 B1 B0 C2 C1 C0
图4.8 80486片上Cache 的LRU 算法流程
访问是L0/L1其中之一(B0=1),还是L2/L3其中之一(B0=0);B1位说明最近访问是L0/L1其中的L0(B1=1),还是L1(B1=0);B2位说明最近访问是L2/L3其中的L2(B2=1),还是L3(B2=0)。

L0/L1和L2/L3中哪一个最近最少使用,然后再确定这相应2个行哪一个最近最少使用。

当处理器复位或Cache被清洗时,所有128组的3个LRU位均被清零。

3、Cache的操作
80486的控制寄存器CR0新增了用于控制Cache操作的2个标志位:
• CD(D30) 高速缓存禁止位(Cache disable),控制允许使用Cache(CD=0),即允许主存块数据填入Cache行;还是禁止使用Cache(CD=1)。

•NW(D29) 直写禁止位(not write through),控制允许直写和行无效性控制(NW=0),还是禁止直写和行无效性控制(NW=1)。

行无效性控制是80486进行总线监测的一种控制方法,详见后文论述。

⑴CD=0、NW=0 正常操作
这是系统正常运行时,让Cache发挥其高速缓冲作用的操作状态。

⑵CD=0、NW=1 无效
这是一个不应有的组合状态。

如果被设置为这个组合,处理器将产生一般保护故障异常。

⑶CD=1、NW=0 禁止填入,允许直写
这种组合状态下,不允许向Cache填入新的数据,但可以直写和行无效性控制,以保持Cache仍然有效。

例如,软件需要短时间禁止Cache,然后重新允许而又不清除原来Cache 中的内容,那么,就可以利用这个组合状态。

⑷CD=1、NW=1 禁止填入,禁止直写
这种组合状态下,不允许向Cache填入新的数据,也不可以进行直写和行无效性控制操作;但是Cache中的数据仍然可用,仍然可以实现高速缓存的读命中。

例如,我们可以利用这个状态,将片上Cache用做快速ROM。

通过“预先装入”某些区域的内容,然后使CD=NW=1,这样由于不允许对Cache进行填入和直写,即不会改变Cache中的内容,所以预先装入的内容就被“冻结”在Cache中。

当处理器读取这部分主存内容时,都可以从Cache中得到,不用访问较慢的主存区。

由于这种状态不禁止Cache读操作,所以,如果要完全禁止Cache,必须首先使CD=NW=1,然后清洗Cache使其内容无效。

清洗Cache就是将其所有Cache行的有效位置为无效,可以通过处理器引脚FLUSH用硬件实现,也可以执行新增指令INVD和WBINVD用软件实现。

4、缓冲直写式写入策略
486片上Cache采用缓冲直写式写入策略。

如果写操作命中Cache,则除了将信息写入片上Cache外,还要写入“写缓冲器”中,然后由总线接口单元驱动一次外部的写总线周期。

总线接口单元设置了4个写缓冲器(4级锁存器),最多可允许6个连续写操作而无需等待。

因为在4个写缓冲器被填满之前,第1个写操作已经完成;而在第6个写操作
出现之前,完全可以把第2个写操作的内容从写缓冲器中移出去。

如果写操作未命中Cache (即写入的主存块尚未被高速缓冲到Cache),则总线接口单元只将数据写入主存,不进行高速缓存的回填。

这样,虽然写入主存需要几个时钟,但CPU却可以在一个时钟周期执行一条存储指令。

5、Cache行无效性控制
总线监测方法在80486中称为“Cache行无效性控制”。

每当其它控制器(而不是CPU 本身)向主存写入数据时,系统的控制电路就产生一个“无效性总线周期”。

在无效性周期中,首先,系统就是向80486发出有效的“地址保持信号AHOLD”,强制80486立即放弃其地址总线;然后,系统就把这个主存地址送到80486的地址总线A31~A4上,同时发出有效的“外部地址信号EADS”。

这时,80486就用提供的地址与片上Cache的标签存储器保存的地址进行比较,若发现相同,就使那个Cache行无效。

通常CPU的地址总线是单向输出的,但由于在总线监测时,外部要向CPU输入地址,所以80486的地址线A31~A4是双向的。

6、不可高速缓存控制
80486还可以采用不可高速缓冲存储器的方法解决数据一致性问题。

它提供了硬件和软件2种方式。

硬件上,80486用引脚KEN实现某个主存块是否允许高速缓冲。

每当处理器读取主存数据时,系统控制电路通过设置KEN引脚决定该主存块是否填入对应Cache行。

31 12 11 9 8 7 6 5 4 3 2 1 0
(a)CR3 页目录地址AVL 0 0 0 0 PCD PWT 0 0 0
31 12 11 9 8 7 6 5 4 3 2 1 0
(b)页目录项页表地址AVL 0 0 0 A PCD PWT U/S R/W P
31 12 11 9 8 7 6 5 4 3 2 1 0
(c)页表项页面地址AVL 0 0 D A PCD PWT U/S R/W P
图4.9 80486的页目录项和页表项
软件上,80486通过PCD位实现某个主存区是否允许高速缓冲。

80486在CR3、页目录项和页表项中新增了2个Cache控制位,如图4.9:
• PWT(D3) 页直写(page write throught),控制2级Cache的写入策略。

当PWT=1表明当前页面采用直写策略;PWT=0则采用回写策略。

由于80486片上Cache采用直写策略,所以不受该位控制。

• PCD(D4) 页高速缓存禁止(page cache disable),控制主存该页面是否可以被高速缓存。

当PCD=1,则禁止该页面被高速缓存;PCD=0允许被高速缓存,但是否真正被高速缓存,还要由引脚KEN、CR0中的CD和NW位确定。

Pentium 的片上高速缓冲存储器
Pentium 采用指令和数据分离的Cache 结构,每种都是8KB ,共16KB ,如图4.10。

8KB Cache 采用2路组合映射方式,分成2个4KB Cache ;每个Cache 分成128行,每个Cache 行为32个字节。

Pentium 片上Cache 也采用LRU 算法,但每对Cache 行只需要1位表示。

数据Cache 采用回写策略,但可以动态设置为直写策略。

Pentium 支持外部L2 Cache ,它应采用2路组合映射结构,可以是256KB 或512KB ,使用32/64/126字节行长。

为了解决L1和L2级Cache 数据一致性问题,Pentium 支持MESI 协议,所以每个Cache 行的标签存储器中都有2位表达MESI 协议。

下面我们从L1 Cache 角度看一下,Pentium 如何利用MESI 协议实现L1和L2 Cache 的数据一致,参见表4.1。

•当处理器复位或Cache 被清洗后,L1、L2 Cache 的数据均无效,L1的MESI 状态位为“无效I ”。

‚当新主存块读入时,数据进入L2 Cache 行,再进入 L1 Cache 行;此时,L1的状态位为“共享S ”。

再对该Cache 行的读入操作将不影响它们的状态。

ƒ当处理器对该Cache 行第1次进行写入时,该L1 Cache 行数据被更新。

为了防止数据不一致,对该L1 Cache 行第1次进行写入的同时,处理器启动一次直写操作,修改该L 2 Cache 行的数据。

此时,L1的状态位改为“唯一E ”。

…当再次对该L1 Cache 行进行写操作时,(采用回写策略)不再改变该L2 Cache 行;但此时,L1的状态位更换为“修改M ”。

…当发生替换时,如果该L1 Cache 处于S 或E 状态,则不必对该L2 Cache 进行写入;如果该L1 Cache 处于M 状态,则必须对该L2 Cache 进行写入,并将L1 Cache 进行清洗。

当新数据进入L1 Cache 行时,L1的状态位又回到“共享S ”。

表4.1 MESI 协议实现L1/L2 Cache 的数据一致
操 作 L1状态 L1数据 L2数据 • 复位或清洗后 ‚ 读入数据 ƒ 第1次写入 … 再次写入 … 发生替换后
无效I 共享S 唯一E 修改M 共享S
无效 有效 有效 有效 有效
无效 有效 有效 无效 有效
LRU 位 B0
128行
图4.10 Pentium 片上Cache 的结构
2×128行(8KB )Cache
状态 标签 数据 行号 0~127 0~127
32字节
20位
7位
主存地址n
标签t 行s 字w 32 =
20
7
5
2位。

相关文档
最新文档