关于CPU的介绍(四)----CMO(Cache Maintenance Operations)
2026/6/19 6:45:34 网站建设 项目流程

在阅读ACE协议spec的时候,有关于CMO的介绍,下面详细介绍下CMO操作:

一、CMO 的定义

CMO(Cache Maintenance Operations,缓存维护操作)是一套硬件指令或总线事务,用于主动管理缓存的状态,解决缓存与主存、多核心缓存之间的数据一致性问题,是复杂 SoC 中保证系统正确性的关键机制。


二、两类核心 CMO 操作

1. Cache cleaning(缓存清理)
  • 核心作用:将缓存中 “脏”(Dirty)的缓存行内容写回主存,确保这些写入操作对非一致性代理(Non-coherent agents,如 DMA、外设)可见。
  • 触发场景
    • 当需要让外设(非一致性代理)读取最新数据时,必须先清理缓存,将脏数据同步到主存。
    • 系统休眠、复位前,清理缓存以避免数据丢失。
  • 关键特点
    • 仅对脏缓存行(被修改过、与主存不一致的缓存行)执行写回。
    • 写回后,缓存行仍保留在缓存中(状态变为 “干净” Clean),后续读操作仍可命中缓存。
2. Cache invalidation(缓存失效)
  • 核心作用:使缓存中的指定缓存行失效,确保后续对该地址的加载操作会直接从主存读取,而非使用缓存中的旧数据。
  • 触发场景
    • 外设(非一致性代理)向主存写入数据后,需要使 CPU 缓存中对应地址的缓存行失效,避免 CPU 读取旧数据。
    • 多核心场景下,其他核心修改了共享数据,需要使本核心缓存中的对应行失效。
  • 关键特点
    • 失效操作会直接标记缓存行为 “无效”,不会写回数据(因此若缓存行是脏的,需先清理再失效)。
    • 失效后,所有代理(一致性 / 非一致性)都可以安全地更新该地址的数据。

三、两类操作的核心区别

操作类型目标对脏缓存行的处理缓存行最终状态典型使用场景
Cache cleaning同步缓存到主存写回主存保留在缓存中,状态变为 Clean让外设读取最新数据、系统休眠前数据持久化
Cache invalidation丢弃缓存中的旧数据不写回(需提前清理)从缓存中移除 / 标记为 Invalid外设写入后让 CPU 读主存、多核心共享数据更新

四、典型组合场景

在实际系统中,这两个操作经常配合使用:例如,当 DMA 需要读取 CPU 写入的数据时,流程为:

  1. Cache cleaning:CPU 将脏缓存行写回主存,确保数据对 DMA 可见。
  2. DMA 从主存读取数据。
  3. DMA 写入数据到主存后,触发Cache invalidation:使 CPU 缓存中对应地址的缓存行失效。
  4. CPU 后续读取该地址时,会直接从主存加载最新数据。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询