RAM:可读写多次,具有易失性,读写速度快 ROM:只能写入一次,制造过程固化,非易失 PROM:只能写入一次,可在出厂后通过特定设备写入,非易失 EPROM:可写多次,但写以前需要通过紫外线擦除,非易失 EEPROM:可写多次,电擦除,非易失,每芯片容量小 FLASH:可写多次,电擦除,非易失 由于ROM、FLASH等结构的存储器容量小,写入时间长,无法作为Cache的物理实现,因此只能采用RAM来设计Cache 实现原理 如图,主存储器由2n个可寻址的字组成,为实现映射,我们把该存储器看成由许多定长的块组成,每块有K个字,即有M=2n/K个块。Cache由C个行组成,每行有K个字,C<<M。任何时候,存储器的几个块驻留在Cache行中,如果要读取存储器中的某个字,则整个块被传到Cache的一行中。每行有一个标记,用来识别当前存储的是哪个块 映射 由于Cache的行比主存储器的块少很多,因此需要一种算法把主存储器的块映射到Cache行中,同时,需要一种方法来确定主存储器的哪一块当前占用了Cache行。 映射功能的选择决定了Cache的结构,通常采用三种技术:直接映射、关联映射和组关联映射 直接映射是最简单的映射方法,原理是把主存储器中的每块直接映射到一个固定的Cache行中。 该映射方法表示为: I = j mod m 其中: I=Cache行号 j=主存储器的块号 m=Cache的行数 直接映射的优缺点 优点: 设计简单 缺点: 对于给定的块,有固定的Cache位置,如果一个程序恰好重复引用两个映射到同一行中且来自不同块的字,则这些块会不断的交换到Cache中,命中率将会降低(这种现象被称为抖动) 例如:程序先引用0x010004地址,该地址对应行为0x0001,标记为0x01,接下来程序跳转到0xFE0004,该地址对应行也为0x0001,但标记为0xFE,Cache未命中,且需要将0x0001行的数据更新,即将标记为0xFE的数据放入该行。如果下一步程序又跳转到0x010004,则未命中情况再一次发生,又一次需要将0x0001行的数据刷新。如此往复,程序效率将变得很低。 全关联映射允许每个主存储块装入到Cache中的任意一行,Cache控制器把存储器地址解释为标记(Tag)域和字(Word)域。 Word域的宽度为每块中包含字节的数量,其余的高位地址即为Tag域 例如,共8MB的主存储器地址有24位,若每块大小为4字节,则地址16339C将被划分为: 存储器地址: 0001 0110 0011 0011 1001 1100 (二进制) 1 6 3 3 9 C (十六进制) 标记 00 0101 1000 1100 1110 0111 (二进制) 0 5 8 C E 7 (十六进制) 即,该地址的TAG为058CE7 全关联映射的优缺点 优点: 新、旧块的替换具有很高的灵活性,能设计成命中率最大 无Cache空间被浪费 缺点: 需要复杂的电路来并行检查所有Cache行的标记 组关联映射(Set Associative Mapping) 组关联是一种体现直接映射和关联映射优点而又避免其缺点的折中方法,此种映射中,Cache被分成v个组,每组有k行,关系为: m=v×k i=j mod v 其中: i=Cache组号 j=主存储器的块号 m=Cache的行数 这被称为k路组关联映射 组关联的优缺点 优点 标记部分比全关联映射的小,效率比全关联映射高 一定程度上减少了抖动发生的概率 缺点 可能有部分Cache空间被浪费 仍然无法完全避免抖动的发生 例如:程序先引用0x010004地址,该地址对应组为0x0001,标记为0x002,接下来程序跳转到0xFE0004,该地址对应组为0x0001,但标记为0x1FC,在两路组关联的设计中,两路均被占用了,如果程序下一步跳转到0xFF0004,该地址对应组仍为0x0001,标记为0x1FE,Cache未命中,需要将标记为0x002或0x1FC的数据更新,无论更新哪一个,若下次跳转正好发生在被更新的地址上,则抖动仍然会发生。当然,随着关联路数的增加,抖动的概率就越小,甚至只存在于理论中 替换算法 当新的数据装入Cache时,原存储的一块必须被替换。 对于直接映射,某个特定的块只可能有一个相对应的行,无需特别的算法 对于全关联和组关联,必须设计一种算法。为了获取高速度,这种算法必须由硬件来实现 下面介绍4种最常用的算法 最近最少使用算法(LRU):替换那些在Cache中驻留时间最长且未被引用过的块。这种算法是最常用的 先进先出算法(FIFO):替换掉在Cache中停留时间最长的块 最不经常使用算法(LFU):替换掉Cache中引用次数最少的块 随机替换算法 写策略 任何时候,所有设备从主存储器中某个地址中取出的数据必须保持一致,而Cache的存在使这一问题变得复杂起来。如何保证Cache与主存储器内容的一致性?人们通常采用两种办法: 1、写直达(Write-Through):每次写Cache的同时也把相同的数据写入主存储器。其他有对主存储器有操作权限的处理器随时监视主存储器的访问情况,以保证自己的Cache一致性。这种方法的缺点是产生了大量的存储信息流量,降低了系统性能 2、回写(Write-Back):处理器修改了Cache内容后并不马上修改主存储器的相应单元,只修改与该行相关的修改位(update),当该块被替换时,才将其写回到主存储器 无论采用哪种方法,如果没有一些辅助协议,都无法真正保证Cache内容的一致性! 软件解决方案和硬件解决方案 软件解决方案:由编译程序和操作系统来解决问题 1、不准任何共享数据被高速缓存 2、分析代码来确定共享变量的安全期间 硬件解决方案:通常称为Cache一致性协议。这些方法对程序员是透明的,减轻了软件研制的负担,同时效率更高。 硬件解决方法大致分为两大类:目录协议和监听协议 目录协议 系统中设计一个集中式控制器,收集、维护各个局部Cache内容的全局性状态信息。 当一个处理器向某行写入之前,它必须向控制器申请排他性存取权,控制器接收到该申请后,将向所有高速缓存了该行数据的处理器发消息,强迫每个处理器使自己的副本无效,接收到所有处理器返回的认可后,控制器将排他性存取权交给申请的处理器。授权后,其他处理器企图读取此行时,它将送出未命中指示给控制器,控制器则向持有此行存取权的处理器发出命令,要求它将此行写回主存。 目录协议的缺点在于需要一个中央控制器,容易形成瓶颈,而且中央控制器和各Cache处理器之间的信息交互较大,对性能造成了影响。 监听协议 监听协议将维护Cache一致性的责任分布到了所有Cache控制器上,当对共享的Cache行完成一个修改动作时,它必须通过一种广播机构通知到所有其他的Cache控制器。 监听协议目前有两种:写-无效(Write-invalidate)和写更新(Write-update)。 写-无效:当某个Cache控制器要对某行进行写操作时,它要先发送一个通知,以使其他Cache中此行变成无效,使此行变成该控制器专有。当行变成专有后,拥有者控制器可以对其进行写操作,直到其他处理器要求此同一数据行。 写-更新:当某个Cache控制器要对某行进行写操作时,它将要修改的具体数据广播到各个Cache控制器,其他Cache控制器将作同步修改。因此,写-更新协议又被称为写-广播协议(Write-Broadcast) 两种协议谈不上哪种更好,性能取决于Cache的数量和存储器读写形式。其中写-无效协议被广泛应用于Pentium 4和PowerPC系统中,又被称为MESI协议 Cache数目 最早引入Cache技术时,通常一个系统中只有一个Cache,现在,多个Cache的应用已相当普遍。 多数当前的Cache分为两级,片内的称为L1 Cache,片外的称为L2 Cache。如果没有L2Cache,处理器要访问一个不在L1Cache(一级Cache容量一般较小)的数据时,就需要通过总线访问接口带宽较低的DRAM甚至ROM,造成性能降低。 现在绝大多数设计不使用系统总线作为L2 Cache和处理器之间的传送路径,而是使用专用的L2Cache接口,以减轻系统总线的负担。 随着处理器的发展,部分处理器将L2Cache集成到了芯片内部,甚至出现了L3Cache,大大提高了系统性能。 但是,随着Cache级数的增加,行大小、替换算法、写策略等问题变得更加复杂,此处不再讨论 统一Cache和分立Cache L1Cache常分为指令Cache和数据Cache,最初的时候,L1Cache是统一的。统一的Cache好处有: 1、对于给定的容量来说,统一Cache比分立Cache有更高的命中率,因为它在获取指令和数据时可以自动实现平衡 2、只须设计和实现一个Cache,设计难度低 但是,在PowerPC和Pentium这样的超标量处理器系统中,分立Cache却更加适合。这是因为在这类系统中,处理器一般会提前获取指令,并把要执行的指令装入缓冲器或流水线,如果采用统一Cache,在预取指前若有数据执行任务,则可能会阻塞指令预取,这就干扰了指令流水线的有效使用。
RAM:可读写多次,具有易失性,读写速度快
ROM:只能写入一次,制造过程固化,非易失
PROM:只能写入一次,可在出厂后通过特定设备写入,非易失
EPROM:可写多次,但写以前需要通过紫外线擦除,非易失
EEPROM:可写多次,电擦除,非易失,每芯片容量小
FLASH:可写多次,电擦除,非易失
由于ROM、FLASH等结构的存储器容量小,写入时间长,无法作为Cache的物理实现,因此只能采用RAM来设计Cache
实现原理
如图,主存储器由2n个可寻址的字组成,为实现映射,我们把该存储器看成由许多定长的块组成,每块有K个字,即有M=2n/K个块。Cache由C个行组成,每行有K个字,C<<M。任何时候,存储器的几个块驻留在Cache行中,如果要读取存储器中的某个字,则整个块被传到Cache的一行中。每行有一个标记,用来识别当前存储的是哪个块
映射
由于Cache的行比主存储器的块少很多,因此需要一种算法把主存储器的块映射到Cache行中,同时,需要一种方法来确定主存储器的哪一块当前占用了Cache行。
映射功能的选择决定了Cache的结构,通常采用三种技术:直接映射、关联映射和组关联映射
直接映射是最简单的映射方法,原理是把主存储器中的每块直接映射到一个固定的Cache行中。
该映射方法表示为:
I = j mod m
其中: I=Cache行号
j=主存储器的块号
m=Cache的行数
直接映射的优缺点
优点:
设计简单
缺点:
对于给定的块,有固定的Cache位置,如果一个程序恰好重复引用两个映射到同一行中且来自不同块的字,则这些块会不断的交换到Cache中,命中率将会降低(这种现象被称为抖动)
例如:程序先引用0x010004地址,该地址对应行为0x0001,标记为0x01,接下来程序跳转到0xFE0004,该地址对应行也为0x0001,但标记为0xFE,Cache未命中,且需要将0x0001行的数据更新,即将标记为0xFE的数据放入该行。如果下一步程序又跳转到0x010004,则未命中情况再一次发生,又一次需要将0x0001行的数据刷新。如此往复,程序效率将变得很低。
全关联映射允许每个主存储块装入到Cache中的任意一行,Cache控制器把存储器地址解释为标记(Tag)域和字(Word)域。
Word域的宽度为每块中包含字节的数量,其余的高位地址即为Tag域
例如,共8MB的主存储器地址有24位,若每块大小为4字节,则地址16339C将被划分为:
存储器地址: 0001 0110 0011 0011 1001 1100 (二进制)
1 6 3 3 9 C (十六进制)
标记 00 0101 1000 1100 1110 0111 (二进制)
0 5 8 C E 7 (十六进制)
即,该地址的TAG为058CE7
全关联映射的优缺点
优点:
新、旧块的替换具有很高的灵活性,能设计成命中率最大
无Cache空间被浪费
缺点:
需要复杂的电路来并行检查所有Cache行的标记
组关联映射(Set Associative Mapping)
组关联是一种体现直接映射和关联映射优点而又避免其缺点的折中方法,此种映射中,Cache被分成v个组,每组有k行,关系为:
m=v×k
i=j mod v
其中: i=Cache组号
j=主存储器的块号
m=Cache的行数
这被称为k路组关联映射
组关联的优缺点
优点
标记部分比全关联映射的小,效率比全关联映射高
一定程度上减少了抖动发生的概率
缺点
可能有部分Cache空间被浪费
仍然无法完全避免抖动的发生
例如:程序先引用0x010004地址,该地址对应组为0x0001,标记为0x002,接下来程序跳转到0xFE0004,该地址对应组为0x0001,但标记为0x1FC,在两路组关联的设计中,两路均被占用了,如果程序下一步跳转到0xFF0004,该地址对应组仍为0x0001,标记为0x1FE,Cache未命中,需要将标记为0x002或0x1FC的数据更新,无论更新哪一个,若下次跳转正好发生在被更新的地址上,则抖动仍然会发生。当然,随着关联路数的增加,抖动的概率就越小,甚至只存在于理论中
替换算法
当新的数据装入Cache时,原存储的一块必须被替换。
对于直接映射,某个特定的块只可能有一个相对应的行,无需特别的算法
对于全关联和组关联,必须设计一种算法。为了获取高速度,这种算法必须由硬件来实现
下面介绍4种最常用的算法
最近最少使用算法(LRU):替换那些在Cache中驻留时间最长且未被引用过的块。这种算法是最常用的
先进先出算法(FIFO):替换掉在Cache中停留时间最长的块
最不经常使用算法(LFU):替换掉Cache中引用次数最少的块
随机替换算法
写策略
任何时候,所有设备从主存储器中某个地址中取出的数据必须保持一致,而Cache的存在使这一问题变得复杂起来。如何保证Cache与主存储器内容的一致性?人们通常采用两种办法:
1、写直达(Write-Through):每次写Cache的同时也把相同的数据写入主存储器。其他有对主存储器有操作权限的处理器随时监视主存储器的访问情况,以保证自己的Cache一致性。这种方法的缺点是产生了大量的存储信息流量,降低了系统性能
2、回写(Write-Back):处理器修改了Cache内容后并不马上修改主存储器的相应单元,只修改与该行相关的修改位(update),当该块被替换时,才将其写回到主存储器
无论采用哪种方法,如果没有一些辅助协议,都无法真正保证Cache内容的一致性!
软件解决方案和硬件解决方案
软件解决方案:由编译程序和操作系统来解决问题
1、不准任何共享数据被高速缓存
2、分析代码来确定共享变量的安全期间
硬件解决方案:通常称为Cache一致性协议。这些方法对程序员是透明的,减轻了软件研制的负担,同时效率更高。
硬件解决方法大致分为两大类:目录协议和监听协议
目录协议
系统中设计一个集中式控制器,收集、维护各个局部Cache内容的全局性状态信息。
当一个处理器向某行写入之前,它必须向控制器申请排他性存取权,控制器接收到该申请后,将向所有高速缓存了该行数据的处理器发消息,强迫每个处理器使自己的副本无效,接收到所有处理器返回的认可后,控制器将排他性存取权交给申请的处理器。授权后,其他处理器企图读取此行时,它将送出未命中指示给控制器,控制器则向持有此行存取权的处理器发出命令,要求它将此行写回主存。
目录协议的缺点在于需要一个中央控制器,容易形成瓶颈,而且中央控制器和各Cache处理器之间的信息交互较大,对性能造成了影响。
监听协议
监听协议将维护Cache一致性的责任分布到了所有Cache控制器上,当对共享的Cache行完成一个修改动作时,它必须通过一种广播机构通知到所有其他的Cache控制器。
监听协议目前有两种:写-无效(Write-invalidate)和写更新(Write-update)。
写-无效:当某个Cache控制器要对某行进行写操作时,它要先发送一个通知,以使其他Cache中此行变成无效,使此行变成该控制器专有。当行变成专有后,拥有者控制器可以对其进行写操作,直到其他处理器要求此同一数据行。
写-更新:当某个Cache控制器要对某行进行写操作时,它将要修改的具体数据广播到各个Cache控制器,其他Cache控制器将作同步修改。因此,写-更新协议又被称为写-广播协议(Write-Broadcast)
两种协议谈不上哪种更好,性能取决于Cache的数量和存储器读写形式。其中写-无效协议被广泛应用于Pentium 4和PowerPC系统中,又被称为MESI协议
Cache数目
最早引入Cache技术时,通常一个系统中只有一个Cache,现在,多个Cache的应用已相当普遍。
多数当前的Cache分为两级,片内的称为L1 Cache,片外的称为L2 Cache。如果没有L2Cache,处理器要访问一个不在L1Cache(一级Cache容量一般较小)的数据时,就需要通过总线访问接口带宽较低的DRAM甚至ROM,造成性能降低。
现在绝大多数设计不使用系统总线作为L2 Cache和处理器之间的传送路径,而是使用专用的L2Cache接口,以减轻系统总线的负担。
随着处理器的发展,部分处理器将L2Cache集成到了芯片内部,甚至出现了L3Cache,大大提高了系统性能。
但是,随着Cache级数的增加,行大小、替换算法、写策略等问题变得更加复杂,此处不再讨论
统一Cache和分立Cache
L1Cache常分为指令Cache和数据Cache,最初的时候,L1Cache是统一的。统一的Cache好处有:
1、对于给定的容量来说,统一Cache比分立Cache有更高的命中率,因为它在获取指令和数据时可以自动实现平衡
2、只须设计和实现一个Cache,设计难度低
但是,在PowerPC和Pentium这样的超标量处理器系统中,分立Cache却更加适合。这是因为在这类系统中,处理器一般会提前获取指令,并把要执行的指令装入缓冲器或流水线,如果采用统一Cache,在预取指前若有数据执行任务,则可能会阻塞指令预取,这就干扰了指令流水线的有效使用。
RAM:可读写多次,具有易失性,读写速度快
ROM:只能写入一次,制造过程固化,非易失
PROM:只能写入一次,可在出厂后通过特定设备写入,非易失
EPROM:可写多次,但写以前需要通过紫外线擦除,非易失
EEPROM:可写多次,电擦除,非易失,每芯片容量小
FLASH:可写多次,电擦除,非易失
由于ROM、FLASH等结构的存储器容量小,写入时间长,无法作为Cache的物理实现,因此只能采用RAM来设计Cache
实现原理
如图,主存储器由2n个可寻址的字组成,为实现映射,我们把该存储器看成由许多定长的块组成,每块有K个字,即有M=2n/K个块。Cache由C个行组成,每行有K个字,C<<M。任何时候,存储器的几个块驻留在Cache行中,如果要读取存储器中的某个字,则整个块被传到Cache的一行中。每行有一个标记,用来识别当前存储的是哪个块
映射
由于Cache的行比主存储器的块少很多,因此需要一种算法把主存储器的块映射到Cache行中,同时,需要一种方法来确定主存储器的哪一块当前占用了Cache行。
映射功能的选择决定了Cache的结构,通常采用三种技术:直接映射、关联映射和组关联映射
直接映射是最简单的映射方法,原理是把主存储器中的每块直接映射到一个固定的Cache行中。
该映射方法表示为:
I = j mod m
其中: I=Cache行号
j=主存储器的块号
m=Cache的行数
直接映射的优缺点
优点:
设计简单
缺点:
对于给定的块,有固定的Cache位置,如果一个程序恰好重复引用两个映射到同一行中且来自不同块的字,则这些块会不断的交换到Cache中,命中率将会降低(这种现象被称为抖动)
例如:程序先引用0x010004地址,该地址对应行为0x0001,标记为0x01,接下来程序跳转到0xFE0004,该地址对应行也为0x0001,但标记为0xFE,Cache未命中,且需要将0x0001行的数据更新,即将标记为0xFE的数据放入该行。如果下一步程序又跳转到0x010004,则未命中情况再一次发生,又一次需要将0x0001行的数据刷新。如此往复,程序效率将变得很低。
全关联映射允许每个主存储块装入到Cache中的任意一行,Cache控制器把存储器地址解释为标记(Tag)域和字(Word)域。
Word域的宽度为每块中包含字节的数量,其余的高位地址即为Tag域
例如,共8MB的主存储器地址有24位,若每块大小为4字节,则地址16339C将被划分为:
存储器地址: 0001 0110 0011 0011 1001 1100 (二进制)
1 6 3 3 9 C (十六进制)
标记 00 0101 1000 1100 1110 0111 (二进制)
0 5 8 C E 7 (十六进制)
即,该地址的TAG为058CE7
全关联映射的优缺点
优点:
新、旧块的替换具有很高的灵活性,能设计成命中率最大
无Cache空间被浪费
缺点:
需要复杂的电路来并行检查所有Cache行的标记
组关联映射(Set Associative Mapping)
组关联是一种体现直接映射和关联映射优点而又避免其缺点的折中方法,此种映射中,Cache被分成v个组,每组有k行,关系为:
m=v×k
i=j mod v
其中: i=Cache组号
j=主存储器的块号
m=Cache的行数
这被称为k路组关联映射
组关联的优缺点
优点
标记部分比全关联映射的小,效率比全关联映射高
一定程度上减少了抖动发生的概率
缺点
可能有部分Cache空间被浪费
仍然无法完全避免抖动的发生
例如:程序先引用0x010004地址,该地址对应组为0x0001,标记为0x002,接下来程序跳转到0xFE0004,该地址对应组为0x0001,但标记为0x1FC,在两路组关联的设计中,两路均被占用了,如果程序下一步跳转到0xFF0004,该地址对应组仍为0x0001,标记为0x1FE,Cache未命中,需要将标记为0x002或0x1FC的数据更新,无论更新哪一个,若下次跳转正好发生在被更新的地址上,则抖动仍然会发生。当然,随着关联路数的增加,抖动的概率就越小,甚至只存在于理论中
替换算法
当新的数据装入Cache时,原存储的一块必须被替换。
对于直接映射,某个特定的块只可能有一个相对应的行,无需特别的算法
对于全关联和组关联,必须设计一种算法。为了获取高速度,这种算法必须由硬件来实现
下面介绍4种最常用的算法
最近最少使用算法(LRU):替换那些在Cache中驻留时间最长且未被引用过的块。这种算法是最常用的
先进先出算法(FIFO):替换掉在Cache中停留时间最长的块
最不经常使用算法(LFU):替换掉Cache中引用次数最少的块
随机替换算法
写策略
任何时候,所有设备从主存储器中某个地址中取出的数据必须保持一致,而Cache的存在使这一问题变得复杂起来。如何保证Cache与主存储器内容的一致性?人们通常采用两种办法:
1、写直达(Write-Through):每次写Cache的同时也把相同的数据写入主存储器。其他有对主存储器有操作权限的处理器随时监视主存储器的访问情况,以保证自己的Cache一致性。这种方法的缺点是产生了大量的存储信息流量,降低了系统性能
2、回写(Write-Back):处理器修改了Cache内容后并不马上修改主存储器的相应单元,只修改与该行相关的修改位(update),当该块被替换时,才将其写回到主存储器
无论采用哪种方法,如果没有一些辅助协议,都无法真正保证Cache内容的一致性!
软件解决方案和硬件解决方案
软件解决方案:由编译程序和操作系统来解决问题
1、不准任何共享数据被高速缓存
2、分析代码来确定共享变量的安全期间
硬件解决方案:通常称为Cache一致性协议。这些方法对程序员是透明的,减轻了软件研制的负担,同时效率更高。
硬件解决方法大致分为两大类:目录协议和监听协议
目录协议
系统中设计一个集中式控制器,收集、维护各个局部Cache内容的全局性状态信息。
当一个处理器向某行写入之前,它必须向控制器申请排他性存取权,控制器接收到该申请后,将向所有高速缓存了该行数据的处理器发消息,强迫每个处理器使自己的副本无效,接收到所有处理器返回的认可后,控制器将排他性存取权交给申请的处理器。授权后,其他处理器企图读取此行时,它将送出未命中指示给控制器,控制器则向持有此行存取权的处理器发出命令,要求它将此行写回主存。
目录协议的缺点在于需要一个中央控制器,容易形成瓶颈,而且中央控制器和各Cache处理器之间的信息交互较大,对性能造成了影响。
监听协议
监听协议将维护Cache一致性的责任分布到了所有Cache控制器上,当对共享的Cache行完成一个修改动作时,它必须通过一种广播机构通知到所有其他的Cache控制器。
监听协议目前有两种:写-无效(Write-invalidate)和写更新(Write-update)。
写-无效:当某个Cache控制器要对某行进行写操作时,它要先发送一个通知,以使其他Cache中此行变成无效,使此行变成该控制器专有。当行变成专有后,拥有者控制器可以对其进行写操作,直到其他处理器要求此同一数据行。
写-更新:当某个Cache控制器要对某行进行写操作时,它将要修改的具体数据广播到各个Cache控制器,其他Cache控制器将作同步修改。因此,写-更新协议又被称为写-广播协议(Write-Broadcast)
两种协议谈不上哪种更好,性能取决于Cache的数量和存储器读写形式。其中写-无效协议被广泛应用于Pentium 4和PowerPC系统中,又被称为MESI协议
Cache数目
最早引入Cache技术时,通常一个系统中只有一个Cache,现在,多个Cache的应用已相当普遍。
多数当前的Cache分为两级,片内的称为L1 Cache,片外的称为L2 Cache。如果没有L2Cache,处理器要访问一个不在L1Cache(一级Cache容量一般较小)的数据时,就需要通过总线访问接口带宽较低的DRAM甚至ROM,造成性能降低。
现在绝大多数设计不使用系统总线作为L2 Cache和处理器之间的传送路径,而是使用专用的L2Cache接口,以减轻系统总线的负担。
随着处理器的发展,部分处理器将L2Cache集成到了芯片内部,甚至出现了L3Cache,大大提高了系统性能。
但是,随着Cache级数的增加,行大小、替换算法、写策略等问题变得更加复杂,此处不再讨论
统一Cache和分立Cache
L1Cache常分为指令Cache和数据Cache,最初的时候,L1Cache是统一的。统一的Cache好处有:
1、对于给定的容量来说,统一Cache比分立Cache有更高的命中率,因为它在获取指令和数据时可以自动实现平衡
2、只须设计和实现一个Cache,设计难度低
但是,在PowerPC和Pentium这样的超标量处理器系统中,分立Cache却更加适合。这是因为在这类系统中,处理器一般会提前获取指令,并把要执行的指令装入缓冲器或流水线,如果采用统一Cache,在预取指前若有数据执行任务,则可能会阻塞指令预取,这就干扰了指令流水线的有效使用。