Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6465068
  • 博文数量: 579
  • 博客积分: 1548
  • 博客等级: 上尉
  • 技术积分: 16635
  • 用 户 组: 普通用户
  • 注册时间: 2012-12-12 15:29
个人简介

http://www.csdn.net/ http://www.arm.com/zh/ https://www.kernel.org/ http://www.linuxpk.com/ http://www.51develop.net/ http://linux.chinaitlab.com/ http://www.embeddedlinux.org.cn http://bbs.pediy.com/

文章分类

全部博文(579)

文章存档

2018年(18)

2015年(91)

2014年(159)

2013年(231)

2012年(80)

分类: 嵌入式

2013-02-21 12:04:19

Cache 是位于 CPU与主存储器DRAM(Dynamic RAM,动态存储器)之间的少量超高速静态存储器 SRAM(static RAM),其是为了解决 CPU 与 主存之间速度匹配问题而设置的,不能由用户直接寻址访问。


    具有 Cache 的计算机,当 CPU 需要进行存储器存取时,首先检查所需数据是否在 Cache中。如果存在,则可以直接存取其中的数据而不必插入任何等待状态,这是最佳状态,称为高速命中;当 CPU 所需信息不在 Cache 中时,则需切换存取主存储器,由于速度较慢,需要插入等待,这种情况称为 高速未命中;在CPU存取主存储器的时候,按照最优化原则将存储信息同时写入到 Cache 中以保证下次可能的高速缓存命中。因此,同一数据可能同时存储在主存储器和 Cache 中。


    传统的 Socket 架构通常采用两级缓冲结构,即在 CPU 中集成了 一级缓存(L1 Cache),在主板上装二级缓存(L2 Cache)。

    CPU 首先在 L1 Cache 中查找数据,如找不到,则在 L2 Cache 中查找,如果数据在 L2 Cache 中,控制器在传输数据的同时,修改 L1 Cache;若数据既不在 L1 Cache中,也不在 L2 Cache中,控制器则从主存储器中获取数据,将数据提供给CPU的同时修改两级 Cache。


    在主存储器--Cache存储体系中,所有的指令和数据都存在主存储器中,Cache只是存放主存储器中的一部分程序块和数据块的副本,只是一种以块为单位的存储方式。Cache 和 主存储器被分为块,每块有多个字节组成。


    CPU访问存储器时,送出访问单元的地址,由地址总线传送到 Cache 控制器中的主存储器地址寄存器 MA 中,主存储器 -- Cache 地址转换机从 MA 获取地址并判断该单元内容是否已在 Cache中存在副本,如果副本已存在于Cache 中,即命中。当命中时,立即把访问地址变换成其在Cache 中的地址,然后访问Cache。

    如果CPU要访问的内容不再 Cache 中,即不命中,则CPU转去直接访问主存储器,并将包含此存储单元的整个数据块(包括该块数据的地址信息)传到 Cache 中,使得以后的若干次对内存的访问可转化为对 Cache 的访问。若 Cache 存储器已满,则需在替换控制部件的控制下,根据某种替换算法/策略,用此块信息替换掉 Cache 原有的某块信息。

   

   ARM处理器中的 Cache 和 Write Buffer:


Cache 分类

根据不同的分类标准可以按以下 3 种方法对 Cache 进行分类。

1,数据 cache 和 指令 cache

* 指令 cache :指令预取时使用的 cache。

* 数据 cache :数据读写时使用的 cache。


    如果一个存储系统中指令 cache  和 数据 cache 是同一个 cache,称系统使用了统一的cache。反之,如果是分开的,那么称系统使用了独立的cache;如果系统中只包含指令cache或者数据cache,那么在配制系统时可以作为独立的cache使用。


    使用独立的数据 cache 和指令 cache,可以在同一个时钟周期中读取指令和数据,而不需要双端口的 cache,但这时要注意保证指令和数据的一致性。


2,写通(write-throught)cache 和 写回(write-back)cache

*写回 cache

    CPU在执行写操作时,被写的数据只写入 cache,不写入主存储器中,仅当需要替换时,才把已经修改的cache块写回到主存储器中。

    在使用这种更新算法的cache 块表中,一般有一个修改位,当一块中的任何一个单元被修改,这一块的修改位被设置为 1,否则这一块的修改位仍保持为 0;在需要替换这一块时,如果对应的修改位为 1,则必须先把这一块写到主存储器中去之后,才能调入新的块,否则,只要用新调入的块覆盖该块即可。


*写通 cache

CPU 在执行写操作时,必须把数据同时写入 cache 和主存储器中,这样,在 cache的块表中就不需要“修改位”,当某一块需要替换时,也不必把这一块写回到主存储器中,新调入的块可以立即直接把这一块覆盖掉。



3,读时分配(read-allocate)cache 和 写时分配(write-allocate)cache

* 读时分配 cache

当进行数据写操作时,如果cache没命中,只是简单的将数据写入到主存储器中,主要在数据读取时,才进行 cache 内容预取。


* 写时分配 cache

在进行数据写操作时,如果cache没命中,cache 系统将会进行 cache 内容预取,从主存储器中将相应的块读取到 cache 中相应的位置,并执行写操作,把数据写入到 cache 中。对于写通类型的cache,数据将会同时写入到主存储器中,对于写回类型的 cache,数据将在合适的时候写回到主存储器中。


ARM 处理器中的 Cache 和 Write Buffer 操作是通过 CP15 的 C7 寄存器来实现的。访问 CP15 的 C7 寄存器的指令格式如下:

    mcr p15, 0, , , crm,



以 am335x 为实例:



am335x arm cortex a8 中 Cache :

    Cache

        |------L1 Cache

        |             |------L1 Icache         (32 KB 独立的指令 cache)

        |             |------L1 Dcache        (32 KB 独立的数据 cache )

        |------L2 Cache                         (256KB)

L1 C ac h e
一级高速缓存,其容量一般为几十~ 几百K B ,频率与C P U 相同。 L 1 C ac h e 可以提
高C P U 的运行效率,它的容量和结构对C P U 的性能影响较大。 L 1 C ac h e 越大,系统性
能提高越明显。

L2 C ac h e
二级高速缓存,其容量一般相当于L 1 C ac h e 的4 ~ 8 倍。 L 2 C ac h e 的容量和频率对
C P U 的性能影响也较大,L 2 C a c h e 的时钟频率一般为C P U 主频的1 /2 、2 /5 和1 /3

阅读(7740) | 评论(3) | 转发(2) |
给主人留下些什么吧!~~

andyhzw2013-06-15 22:26:26

kangear:能列出你写这个文章参考的PDF吗?我想了解更多东西,我下载了Cortex-A8的手册,似乎都没有你这里介绍的清楚一些。

《AM335x ARM Cortex-A8 Microprocessors (MPUs) Technical Reference Manual.pdf》
《AM335x_datasheet.pdf》
《am3359.pdf》
这些文档你可以到TI的官网上找,也可以直接google/baidu

回复 | 举报

kangear2013-06-15 17:25:02

能列出你写这个文章参考的PDF吗?我想了解更多东西,我下载了Cortex-A8的手册,似乎都没有你这里介绍的清楚一些。