Cache(高速缓存)技术详解
1.CPU修改Cache后的处理
对于CPU修改了Cache的数据,如何使主存中相应单元的数据也随之修改的问题。通常有三种不同的处理方式。
一种方式称为"直写式(write-through)",其原理是在CPU向Cache写入的同时,也把数据写入主存储器,以保证Cache和主存中相应单元数据的一致性。直写式系统简单可靠,但由于CPU每次更新Cache时都要对主存储器写入,习此速度受到了影响。
第二种方式称为"缓冲直写式(Posted Write)",其原理是CPU在更新Cache时不直接更新主存中的数据,而是把更新的数据送入一个缓冲器中暂存,这样CPU就不必等待主存写入造成的延时而直接进入下一周期的操作在适当的时候再把缓冲器中的内容写入主存中(例如在CPU读Cache的同时;把缓冲器的内容写入主存)。这种方式在一定程序上提高了速度,但由于缓冲器的容量有限,只能锁存--次写入的数据,如果发生连续的写操作则CPU仍需要等待。上述的直写式或缓冲直写式不仅速度低,而且在很多时候向主存写入是不必要的。例如CPU可能多次对同一个Cache单元更新内容,实际上只需把最后更新结果写入主存即可,而不必更新一次Cache,就向主存写入一次。根据这种思想提出了第三种方式,称为"回写式(Write-back)"。有的资料中也称为"写回"。这种方式的原理是CPU修改了Cache的内容后并不立即修改主存中相应的单元,而在被修改的Cache单元的内容将从Cache中淘汰时(如更换页面)才把它写入主存储器的相应单元中。回写式系统速度快,避免了不必要的冗余写操作,但结构上比较复杂。当前的微机普遍采回写式系统。
2.多处理器或DMA直接访问主存储器后的处理
多处理器或DMA直接访问主存储器造成主存和cache中的数据不一致发生在以下情形:当主存中某单元内容调入Cache后,又由其它处理器或DMA更新了主存储器该单元的内容。为了避免这种情况下的数据不一致,通常采用以下三种处理办法。
一种办法称为"总线监视",即由cache控制器随时监视系统的地址总线,若有其它部件向主存中写入了内容,则把Cache中相应单元的内容置为无效,CPU必须重新从主存中读人该单元的内容。
第二种方式称为"主存监视"、由Cache控制器监视所有主存储器的读写操作所有对主存的访问都必须通过Cache来完成。这样,凡对主存的写入也就对Cache中的相应单元进行拷贝从而保证了两者数据的一致性。
第三种方式是设置"不可Cache区 (Non Cacheable Block)",这种方式的基本思想是在主存中开辟一块区域,该区域中数据不受cache控制器的管理,不能调入Cache,CPU只能直接读写该区域的内容。其它总线设备也只能把数据直接写入该区域中。由于该区域不与Cache发生关系,也就不存在数据不一致的问题。不可Cache区方式是微机中最主要的方式,不少BIOS设置程序允许用户设置不可Cache区的首地址和尺寸、以及可Cache区的地址范围。
Cache在微机系统中获得了广泛应用。除了CPU中的cache外,硬盘、光盘甚至主存中部可找到它的踪影。
1 CPU中的Cache
从486CPU开始,在CPU芯片内集成了Cache,称为片内Cache。此时由于受到工艺上的限制,片内Cache的容量很小,只有8KB。片内Cache的最大优点是,CPU对它的访问是在芯片内部进行的,不需要通过总线传送数据因此速度很快;但是由于其容量很小,而处理器的时钟频率又很高,一旦出现片内cache末命中的情况,性能将明显化。因此在处理器芯片之外的主板上再加Cache,称为二级Cache(L2Cache),或称为板载Cache。
在实际使用中,进入Cache的内容既可以是指令也可以是数据,而CPU对于这两者的处理是不完全相同的。为了使系统效率达到最佳状态,从Pentium处理器开始把片内Cache容量增加到16KB。其中指令CBche和数据Cache各占8KB。
Intel公司在1995年末推出了Pentium Pro(P6),为了进一步改善系统性能,P6采用了双穴封装,即除了CPU外,还把256/5l2KB的二级Cache也封装在同一个陶瓷片内。这样,L2也能以处理器的时钟高速运行,大大地提高了系统效率。
由于P6采用的方式成本很高,在InteI随后推出的Pentium II中,把L2又从CPU陶瓷封装中分立出来,和CPU共同安装在一块称为SEC的卡盒内,而Pentium II处理器则采用了双独立总线结构,其中一条总线联接L2高速缓存,另一条负责主存。由于Pentium II的L2只能以CPU时钟的一半工作。因此比Pentium Pro的L2慢一些。作为一种补偿,Intel将Pentium II上的Ll高速缓存从16K加倍到32K,从而减少了对L2高速缓存的调用频率。而在非Intel CPU中,L1的容量则更大,以期求得更好的系统性能。
为了匹配硬盘和主存在数据传送速度上的矛盾,微机系统中毫无例外地采用了硬盘高速缓存,或称为硬盘Cache。硬盘高速缓存分为两种:硬件高速缓存和软件高速缓存。软件高速缓存是利用软件工具(如Smart Drive)在系统主存中开辟的一块区域作为数据传送缓冲区,硬件高速缓存则是在磁盘控制器中安装的一块RAM,通过RAM缓冲区读写数据可以得到更高的访问速度。早期硬盘中的cache很小,只有数十KB到数百KB,目前新型硬盘的高速缓存均达到2MB。在选购硬盘时除了注意容量、带宽、转速等参数外,还应该考虑Cache的容量,越大越好。当Cache容量大时,能够保证较稳定的突发数据传送;而如果Cache容量较小,在读写大型图形或视频文件时,由于连续传送的数据量很大,缓冲区则不能表示出其优越性,使得数据传送不再能处于突发传送方式,而处于持续传送方式,降低了数据带宽。
3.光盘
以CD-ROM驱动器为例,其中配置的Cache通常为128KB或者256KB,高档CD-ROM驱动器中的Cache容量可达512KB甚至更高。在CD ROM中配置Cache的目的仍然是作为光盘的高速缓存,以便减少读盘的次数,这对于改善CD RoM的性能是很有好处的。
同样,其它品种的光盘驱动器,如CD-R、CD-RW、M0、DVD-ROM等,也都配置了Cache。
4.主存储器中的Cache
主存通常是采用DRAM(动态随机存取存储器)器件制作的,而Cache一般采用速度更高的SRAM(静态随机存取存储器)制作。一种新型的增强DRAM)采用了在DRAM芯片上集成一个小容量SRAM的办法,我们可以把这一小片SRAM称为主存中的Cache。这个Cache在突发式读写时非常有利,使DRAM芯片的性能得到了明显的提高。
- ARM920T的Cache(介绍Cache最好的一篇文章)(03-08)
- 多核处理器的九大关键技术(03-02)
- 一种带Cache的嵌入式CPU的设计与实现(07-30)
- SPARC V8处理器断点调试的设计与实现研究(04-18)
- 片上多处理器中Cache一致性协议的验证(07-24)
- 提高存储器子系统效率的三种方法(04-07)