全部博文(584)
分类: LINUX
2010-08-19 08:47:58
ARM cache架构由cache存储器和写缓冲器(write-buffer) 组成,其中写缓冲器是CACHE按照FIFO原则向主存写的缓冲处理器。下图是ARM V5核的CACHE位置
Cache 位于MMU前面靠近CPU称为逻辑CACHE又 叫虚拟Cache。CPU可以直接访问CACHE的数据,而ARM 11(ARMV6)的结构是CACHE 在MMU后 面CPU访问CACHE要通过MMU地址转换
在DM6446的core用的是哈佛结构,即把CACHE分 为8K的D-CACHE(数据CACHE)和16K的I-cache(指 令CACHE)
一个完整的CACHE分为CACHE控制器和CACHE存 储器
见下图:
Davinci DM6446 D-cache行应为512行 ,cache存 储器主要分为三个部分:目录存储段(driectory-story),状态信息段(status information)和数据项段(data section)每一行cache都 包括这三部分。Cache用目录存储段来存储主存的地址,数据项段存放的是主存的数据,在cache中 用状态信息段来记录状态信息,其中v表示有效位,d表示脏位,有效位记录当前cache行 是活动的,cache行的数据和主存中的数据是一致的,处理器可以读取。脏位则表示cache行 的数据和主存中的数据不一致。
在读写请求到达存储器前会被CACHE捕获,cache存储器将该请求分成三部分 标签,组索引和数据索引域,cache通过组索引域确定可能包含地址和数据cache的行,cache存 储器检查匹配的CACHE 行的状态标签,如果是V表示(cache hit)命中,否则cache失效(cache miss)在cache失 效时从主存吧cache行考到CACHE存储器
主存中的部分内容存放在cache中的最简单方式是直接映射,在一个直接映射中,主存的地址唯一对应cache行, 因为主存容量很大所以主存的很多地址映射到同一个cache行
见下图:
在DM6446 中内存为128M (bootargs 设 为128M)8K的D-CACHE则128×1024/8 = 16384映射一个cache行。由于cache的速度大大大于低速的主 存速度,因此需要写缓冲器。
Cache的写策略分为直写策略和回写策略。同时向cache行和相应的主存位置 写数据,同时更新这两个地方的数据的方法称为直写策略(writethrough),把数据写入cache行, 不写入主存的或者只有当cache被替换时或清理cache行时才写入主存的策略称为回写策略 (writeback)。采用回写策略时,当处理器cache命中,只向cache存 储器写数据,不写入主存,主存里的数据就和cache里不一致,cache里的数据是最新的, 主存里的数据是早前的。这就用cache存储器信息状态标志位了,当向cache存储器里某行 写数据时,置相应行的信息标志脏位为1,那么主控制器下次访问cache存储器就知道cache里 有主存没有的数据了,把数据写回到主存中去。
当一个cache访问失效时,cache控制器必须 从当前有效行中取出一个cache行存储从主存中取到的信息,被选中替换的cache行称为丢 弃者,如果这个cache行中脏位为1则应把该cache行中的 数据回写到主存中,而替换策略决定了那个cache行会被替换,在arm926ejs中ARM支 持两种策略:轮转策略和伪随机策略。轮转策略就是取当前cache行的下一行,伪随机策略是控制器随机产生一个值。
当cache失效时,ARM采取两种方式分配cache行, 一种是读操作(read-allocate)还有一种是读-写分配策略(read-write-allocate), 当cache未命中时对于读操作策略,在对cache存储器读操作时才会分配cache行