Skip to content

CPU的Cache和MMU

· 5 min

一、缓存#

多数精简指令集的嵌入式MCU内核都没有配备高速缓存,例如cortexM4。在ARMv7-M中,cortexM7配备了L1的高速缓存。ARMv7-A的CPU都配备了高速缓存。

随着CPU制程的提升, CPU的运行频率也不断提高,但是Flash或者SRAM的速度却没有对应的提升,在嵌入式系统中可以看到总线频率往往是CPU的分频,也就是说CPU速度和访存速度不匹配。缓存就是用来缓解二者之间的不匹配问题的。

**缓存行:**每次从主存读取到缓存中的字数被称为缓存行长度,不同的缓存设计有不同的缓存行长度。CortexM7的缓存行长度为8个word,也就是32个字节。

1.缓存组织方式#

2.缓存策略#

写策略

其中写回写分配搭配使用,写通非写分配搭配使用

读策略

3.缓存和DMA一致性#

DMA全称DirectMemoryAccess,用来实现内存IO设备之间的直接访问,不需要CPU的参与。

而当CPU和DMA访问同一块内存区域时,这块内存区域又已经被缓存,就会出现数据一致性问题

解决:

  1. 在DMA写入内存之前,将Cache中的对应内存缓存失效,这样下次CPU读取内存就只能从内存中读取。
  2. 缓存清除,也就是在写回策略中,DMA读取数据之前,将对应的缓存清除掉,那么“脏“数据就会更新到内存中。

缓存的行为受到硬件的管理,在DMA时需要手动调用管理Cache的MPU或者MMU。很多操作系统中已经集成了对缓存的管理。

4.CPU和缓存一致性#

对简单的嵌入式MCU来说,可能没有高速缓存或者只有一级高速缓存。但是对于高性能的CPU来说,可能会有三级缓存。

三级缓存的组织形式一般是:

在多核CPU中由多个L1缓存,为了保证数据一致性,使用一致性协议MESI