漫谈CPU缓存与主存

1、概述

每一个现代处理器(CPU)都配置高速缓存(Cache)。目前CPU高速缓存级别主要分为L1/L2/L3三个级别;三个级别的高速缓存,缓存大小逐级增加同时访问速度逐次降低。高速缓存存在的主要原因是解决CPU寄存器与主存在处理速度上不匹配问题,从而极大提高CPU使用效率。

2、缓存和主存之间的区别

通常情况下,高速缓存均是依托于静态随机访问存储器(SRAM),而主存一般是依托于动态随机访问存储器(DRAM),即两个依赖的硬件不同。那么SRAM和DRAM又有何不同呢?

(1)SRAM的访问速度要优于DRAM;

(2)SRAM由CMOS技术和晶体管制成,而DRAM则使用电容器和晶体管;

(3)SRAM不必刷新,效率更高,DRAM需要不断刷新(由于漏电);

3、三种级别缓存之间的区别

漫谈CPU缓存与主存_第1张图片

如上图所示,L1缓存分数据缓存和指令缓存,数据缓存用来存放CPU指令处理前后相关的数据;指令缓存主要用来存放处理数据的相关指令,而且两个Cache可以同时被CPU访问,减少了争用Cache所造成的冲突,提高了处理器效能。

通常L1和L2缓存都是不同内核单独享有的,但是L3缓存是多个内核之间共享的。较早的处理器只含有L1和L2,不包括L3。 

4、存储设备层次结构

在处理器和一个较大较慢的设备(例如主存)之间插入一个更小更快的存储设备(例如高速缓存)的想法已经成为一个普遍的观念。每个计算机系统中的存储设备都被组织成了一个存储器层次结构,在这个层次结构中,从上至下,设备的访问速度越来越慢、容最越来越大,并且每字节的造价也越来越便宜,寄存器文件在层次结构中位于最顶部,也就是第0 级或记为L0。存储器层次结构的主要思想是上一层的存储器作为低一层存储器的高速缓存。

漫谈CPU缓存与主存_第2张图片

 5、高速缓存相关概念

5.1、缓存读取顺序

CPU要读取一个数据时,首先从Cache中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入Cache中,可以使得以后对整块数据的读取都从Cache中进行,不必再调用内存。

正是这样的读取机制使CPU读取Cache的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在Cache中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先Cache后内存。

5.2、缓存命中与缓存未命中

简单讲,当CPU需要数据时,它首先搜索关联内核的L1缓存。如果找不到,则接下来搜索L2和L3缓存。如果找到了必要的数据,则称为缓存命中。另一方面,如果缓存中不存在数据,则CPU必须请求将其从主内存或存储设备加载到缓存中。这需要时间,并且会对性能产生不利影响。这称为缓存未命中

为了保证CPU访问时有较高的命中率,Cache中的内容应该按一定的算法替换。一种较常用的算法是“最近最少使用算法”(LRU算法),它是将最近一段时间内最少被访问过的行淘汰出局。因此需要为每行设置一个计数器,LRU算法是把命中行的计数器清零,其他各行计数器加1。当需要替换时淘汰行计数器计数值最大的数据行出局。这是一种高效、科学的算法,其计数器清零过程可以把一些频繁调用后再不需要的数据淘汰出Cache,提高Cache的利用率。

5.3、内存映射

系统内存如何与高速缓存进行通信,称为缓存或内存映射。高速缓冲存储器分为块或组。这些块又分为n个64字节行。系统存储器被划分为与高速缓存相同数量的块(组),然后将两者链接在一起。

^(* ̄(oo) ̄)^:这一概念涉及内容比较多,后续单独写文章讲解,届时更新链接到此处。

你可能感兴趣的:(嵌入式开发,CPU缓存)