• cache操作:clean、invalidate与flush的含义


    前言

    本文试图搞清楚cache几个操作:clean、invalidate与flush的含义。由于只用过ARM和RISC-V,所以是从ARM和RISC-V的角度来说明。

     

    cache line

    cache line是cache的基本访问单元。

    cache line一般都会包含valid和dirty两个状态位,如下图的v和d。

    valid位表示当前cache line的内容是否有效。dirty位表示当前cache line的内容是否比内存上的要更新(即是否修改过)。

      

    cache操作

    clean和invalidata两个操作都可以在ARM官方文档上找到描述,但是flush没找到。而RISC-V则都没找到。

    clean

    clean表示把cache line的dirty位清0,并把cache line的数据同步到内存上,目的是保证cache与内存的数据一致性。仅适用于使用回写(write-back)策略的D-cache。

    Applies to write-back data caches, and means that if the cache line contains stored data that has not yet been written out to main memory, it is written to main memory now, and the line is marked as clean.

    invalidate

    invalidate表示把cache line的valid位清0。

    Means that the cache line (or all the lines in the cache) is marked as invalid, so that no cache hits occur for that line until it is re-allocated to an address. For write-back data caches, this does not include cleaning the cache line unless that is also stated.

    flush

    flush有查到两种含义:

    • flush = invalidate

    在《arm system developer‘s guide》中有描述到:

    The term invalidate is sometimes used in place of the term flush.

    • flush = clean + invalidate

    SiFive(提供基于RISC-V指令集CPU IP的公司)关于cache有一条自定义命令:CFLUSH.D.L1,其中有描述:

    writes back and invalidates line(s) in the L1 data cache

    所以这里flush相当于clean + invalidate。

     

    参考资料

    《ARM Architecture Reference Manual (2nd Edition)》

    《ARM System Developer‘s Guide》

    《SiFive E76-MC Core Complex Manual》

  • 相关阅读:
    1、VIVADO软件bit文件和bin文件烧写方法
    spring5(二):IOC容器概述
    mysql主从复制搭建
    [附源码]计算机毕业设计springboot港口集团仓库管理系统
    调整Windows键盘上只能看到拼音而无法看到实际的文本以及关闭输入法悬浮窗方法
    基于DBC Signal Group生成Autosar SR接口(1)
    数据挖掘小参考资料推荐
    Docker 进阶之镜像分层详解
    快来体验快速通道,netty中epoll传输协议详解
    人脸识别三部曲
  • 原文地址:https://www.cnblogs.com/robinlaw/p/17933882.html