综述
如今的CPU的速度远远高于现代存储器的速度因此出现了cache。按和CPU距离分为L1级和L2级(SM)等。这里主要记录一下本身对cache的工做方式的学习理解。
cache工做方式
cahe是对内存数据的缓存从而加快CPU对数据的访问,那么前提确定是以前从内存中读取过数据才会有缓存一说。那么该如何保证下次对同一块内存的访问时能够找到cache中的缓存呢?这就是cache的作工原理核心。先抛开cache的后续优化版本,从最简单的实现方式理解学习。最简单的就是使用 地址信息+data的key-val的方式来进行缓存就能按地址招待数据缓存这就是cache-line。那么这里data数据是多少byte合适呢?这取决于实现以最多见的32byte的大小来理解,在此此种状况下cache-line中的地址信息就不用记录最低的5bit从而简化设计;直接使用地址的低5bit来做为单缓存行行内的字节寻址,这就是cache映射的基本原理。根据这个原理cache的的映射分为以下几种。
cache映射方式分类缓存
全关联
这个不清楚。学习
直接映射
直接映射就是上面原理介绍的方式,cache是一个单列的cache-line表以下图示意,而由于cache远小于内存因此cache仅能映射部份内存区域因此一个时间段他映射了内存的不一样地址空间且是线性的映射,因此有可能发生“颠簸”。缘由是假若有cache总共有四条缓存行,而地址0x*08都会映射到同一行,程序恰好要循环访问0x****10800和0x****20800这两个地址则就会出现cache被循环的换入换出,这里的08就是cache的index的概念。因此后来优化有了以下的方式来解决这个问题。
优化
组相连
直接映射他的缺点就是在有些状况下会致使cache的“颠簸”。因此后来就想到了让同一个index的缓存行对应到两个缓存行上就造成了cache的组的概念,即index相同的cache称为一个组(set),这样一个index就会对应到组宽度n个cache-line,若是n为2则前面颠簸换出的概念就是原来的1/n即0.5这就是组映射。既然同一个index对应到不止一个cacae-line因此就会加上TAG的概念来区分同一个组的cache-line。组映射这里最后还有一个概念就是way,他就是一个cache所能映射的index区域,即若是index有5bit则一个way就是五个cache-line以下示意图所示的:
设计
这样就是现代cache的缓存映射使用的策略,后续在介绍更加细节的内容。
cache 按组织方式分类blog
最先是所有使用虚拟地址做为index和tag的,可是由于存在多个虚拟地址映射到同一个物理地址的状况因此会形成cache的别名(浪费)且在多任务发生任务切换时的清空cache。因此后来优化使用了虚拟地址做为index物理地址做为TAG就能有效解决前面的问题,可是VIPT的仍是会有cache别名的问题,因此后来又优化出了PIPT即所有使用物理地址从而完全避免别名可是这种方式的最大问题就是硬件电路实现复杂。索引