arm的cache 介绍

ARM 105浏览

cache是一个法语单词,意思是"隐藏的存储场所".写缓冲器是一个容量很小的FIFO缓冲器,其主要作用就是对由cache中写到主存的数据提供缓冲.cache控制器将cache行以较高的速度放到写缓冲器中,之后写缓冲器以较低的速度将该cache行写入主存中.


    逻辑cache,在虚拟地址空间中存储数据,它位于处理器和MMU之间.处理器可以直接通过逻辑cache访问数据,而无须通过MMU.逻辑cache又被称作虚拟cache.

    物理cache,使用物理地址存储数据,它位于MMU和主存之间.当处理器访问存储器时,MMU必须先把虚拟地址转换成物理地址,cache存储器才可以向内核提供数据.

    带有cache的ARM内核采用了两种总线结构:冯.诺依曼结构和哈佛结构.这两种总线结构的区别在于,是否在内核与主存之间将指令和数据通道分离.在冯.诺依曼结构的处理器内核中,只有一个数据和指令公用的cache.这种类型的cache被称作统一cache,它可以存储指令和数据.哈佛结构将指令总线和数据总线分离,以改善系统的综合性能,但是支持两种总线需要两种cache:指令cache(I-cache)和数据cache(D-cache).这种类型的cache被称作分离cache.

    cache的两个主要组成部分是cache控制器和cache存储器.

    cache存储器是一个专用的存储阵列,其访问单元称为cache行.每一个cache行都有目录存储段,状态信息段,数据项段来表示.cache使用目录存储段来记录每个cache行是由主存的社么地方拷贝而来.该目录项被称作cache标签(cache-tag).在计算cache容量时,用来存储cache标签和状态信息位的那部分cache存储器不计算在内.

    cache控制器是一种硬件,它将主存中的数据或者代码自动拷贝到cache存储器中.cache控制器在不为应用软件所知的情况下,自动完成搬移工作.读写存储器的请求在被传送到存储器控制器之前,会被cache控制器截获,cache控制器将该请求的地址信息分成3部分:标签域,组索引域,数据索引域.

    如果在某一cache行中的数据虽然是有效的,但是与之对应的是主存中其它的地址块,而非处理器所要求的地址,那么整个cache行中内容将被删除,并被替换为与处理器内核所要求的地址相对应的cache行.

    写缓冲器缩短了写小块序列数据到主存时的处理器时间.写缓冲器同时还改善了cache的性能,这体现在cache行被替换时.当cache控制器要替换出一个脏的cache行时,它只将该cache行放入写缓冲器中,而不写入主存.写缓冲器中的数据在没有被写入主存之前,是不能被读取的.同样,被替换的cache行在写缓冲器中时也不能被进行读操作.

    处理器向存储器写数据时,cache控制器可以有2种可选择的写策略:直写法--可以同时向cache行和相应的主存位置中写入数据,将存储在2个位置上的数据一起更新;回写法--可以只把数据写入相应的cache行,而不写入主存,只有当相应的cache行被替换或者清理cache行时,才被写入主存.

    当内核进行数据写操作时,如果cache未命中,那么cache控制器将会分配一个cache行.如果被替换出的cache行中包含有效数据,那么在主存将新的内容放入该cache行之前,控制器会将该行的内容先写入主存.如果该行的数据无效,那么它将直接被主存中的新数据覆盖.分配的cache行被填充后,控制器才将内核数据写到该cache行的相关位置.对于直写cache,数据将会同时被写入到主存中.