Cache扫盲

什么是Cache

它是一种位于处理器核心和主存之间的高速缓冲存储器,用于存储频繁访问的数据以加速数据的检索。Cache的基本工作原理基于计算机程序执行的局部性特性,即在一定时间内,CPU会倾向于访问最近访问过的数据或附近的数据。

为什么要用Cache

Cache是为了提供快速的CPU存储访问而设计的,它的存在可以显著提高处理器的数据处理速度。在程序运行过程中CPU需要不断的从内存读取指令和数据,受限于内存访问速度,CPU需要等待指令或数据读取完成,这就造成了CPU的浪费。Cache就是用来减少CPU等待浪费的问题。Cache的读、写速度要比片内或片外内存快很多,使用Cache能大大提高程序的执行效率。

Cache的机制

Cache系统一般包括多个Cache line,每个Cache line通常包含一个数据块和一个标记。数据块是实际存储的数据,而标记则包含了该数据块的一些元信息,如数据块所在的内存地址、数据块的状态等。

当CPU需要读取某个内存地址的数据时,会首先查看对应的Cache line是否已被加载到Cache中。如果已经被加载,这个过程就被称为“命中”,则直接从Cache中读取该数据,这大大提高了处理速度;否则,如果Cache中没有所需的数据,这个过程被称为“未命中”,CPU则需要从主存储器中读取数据,并将其放入Cache中以备后用。

在写数据时,通常有两种主要的策略:write through(写通)和write back(写回)。

  • 在write through策略中,当CPU执行写操作并在Cache中命中时,不仅会更新Cache中的数据,还会直接更新主存中的数据。这样可以保证Cache和主存的一致性,但可能会降低处理器的处理能力和占用总线带宽。

  • 在write back策略中,CPU向内存中写数据,首先检查Cache中是否有数据备份,如果有则数据写入操作只写入Cache并标记为dirty,而并不会立即将数据更新到内存中,等待合适的时机会自动将数据更新到内存。如果没有则将会在Cache中分配空间,备份写入到内存的数据。

根据MPU设置的不同,Cache读、写不同属性的内存会采用不同的策略。

MPU介绍:MPU扫盲

S32K312 Cache简述

Cache属于内核外设,Cortex_M3与Cortex_M4没有Cache,Cortex_M7新增了Cache功能。

Cortex-M7内核Cache分为I-cache 和D-cache,在S32K312中,它们的大小均为8K。

  • I-cache与D-cache 可以独立的打开和关闭

  • I-cache用于存储指令/缓存代码,所以我们不必关心。

  • D-cache用于存储数据,因为涉及到DMA等问题,D-cache使用不当会导致一些错误。

D-Cache一致性问题

开启Cache的RAM,在CPU和DMA对RAM多主访问的情况下,会出现数据一致性问题。

问题原因是CPU和DMA短时间内访问同一块内存区域。主要分为以下两种情况。

  1. 未及时更新内存:当CPU向内存中写数据,如果Cache策略是“write back”CPU会将数据写入到Cache并且不会立即更新到内存中,如果此时DMA读取内存中的数据则读取得到的是旧数据,即出现数据一致性问题。

  2. 未及时更新Cache:DMA更新了地址N中的数据,并且没有将更改更新到Cache。CPU从地址N读数据,并且在Cache中找到了地址N的数据备份,此时CPU得到的是旧的数据。

解决该问题的方法有两种:

  1. 手动更新Cache,这需要对外设的机制较为了解,且要找到合适的时机清理或无效Cache。

    Note:

    • Cache清理并不是删除Cache中的内容,而是将Cache中的内容更新到各自对应的内存中。

    • 缓存无效化是指,Cache中的内容失效,效果如同删除了Cache中的数据备份,CPU再次读数据时将直接从内存中读取。

  2. 将内存属性设置为non-cacheable的。

打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021-2025 wrd
  • 访问人数: | 浏览次数:

      请我喝杯咖啡吧~

      支付宝
      微信