目录

Cache相关的操作

清除操作-invalidate-使数据失效

清理操作-clean-使数据同步

清空操作-zero-清空数据

清理清除操作对象

ALL,所有

MVA或VA,虚拟地址

Set or Way,通过Set和way的编号

指令格式


有时候,软件很有必要去clean或者invalidate 缓存,这种情况通常是:

  • 外部内存的内容已经被改变,而cache中还是以前的数据,所以很有必要移除cache中陈旧的数据。
  • MMU相关的活动,比如:
    • 改变了内存的访问权限
    • 改变了缓存策略(WB、WT等)
    • 改变了虚拟地址(VA)到物理地址(PA)的映射关系
  • 需要同步指令缓存(I-Cache)和数据缓存(D-Cache)

需要注意的是,ARMv8-A架构中并没有提供可以invalidate 整个cache的指令,如果软件层面必须invalidate 整个cache,必须考虑cache的几何结构,即逐个Set/Way的方式来遍历cache,进行invalidate操作。此外,处理器在reset或者初始化后,其cache将会自动被invalidate,除非控制其DBGL1RSTDISABLE 或者 L2RSTDISABLE两个pin脚。

Cache相关的操作

清除操作-invalidate-使数据失效

invalidate操作主要是针对 cache line中的valid bit(有效位)进行操作。通过对有效位进行清零,从而使cache line中的数据失效,达到清除数据的目的。比如在上电或者重置操作后,cache中的内容是未定义的,此时它的valid bit为0。

清理操作-clean-使数据同步

clean操作主要针对cache line 中的 dirty bit(脏位)

某个cache line中的dirty bit为1,说明该line中的数据与内存中的数据不一致,我们就可以对该cache line描述为变“脏”了。

清除cache或cache line意味着将标记为“脏”的cache line内容写入下一级缓存或主内存,并清除cache line中的脏位。这使得当前的cache line中的数据与下一级缓存,或主存中的的内容相同。此操作仅适用于写回策略(WB)的数据缓存(data-cache)。

清空操作-zero-清空数据

这将使缓存中的内存块归零,而无需首先从外域读取其内容。这仅适用于数据缓存。

对于上述操作,可以选择具体操作的对象:

清理清除操作对象

ALL,所有

清理清楚的对象可以是整个的cache,但这不适用于数据缓存(DC)和统一缓存(unified cache)。

MVA或VA,虚拟地址

清理清除与虚拟地址相关的cache line。

Set or Way,通过Set和way的编号

通过set和way的编号定位到具体的cache line,从而进行清除清理操作。

指令格式

<cache> <operation>{, <Xt>}

对于VA操作,这些指令接收一个保存有虚拟地址的64位寄存器,对此地址没有对齐限制。

对于set/way操作,指令接收包含Set/Way/Level参数的64位寄存器,它的低32位遵从ARMv7架构的格式。

所有指令缓存维护指令都可以按照相对于其他指令缓存维护指令、数据缓存维护指令以及加载和存储的任何顺序执行,除非在指令之间执行DSB。
指定地址的数据缓存操作(DC ZVA除外)只有在指定相同地址时才能保证以相对的程序顺序执行。指定地址的操作按照相对于所有未指定地址的维护操作的程序顺序执行。

前两条指令按顺序执行,因为它们引用相同的地址。但是,最终指令可能会相对于前面的操作重新排序,因为它引用了不同的地址。

Cache Maintenance-关于cache 清除(invalidate)和清理(clean)操作的基础知识相关推荐

  1. 【转载】Java Cache系列之Cache概述和Simple Cache

    原文地址:http://www.blogjava.net/DLevin/archive/2013/10/15/404770.html 前记:最近公司在做的项目完全基于Cache(Gemfire)构建了 ...

  2. Elasticsearch搜索引擎之缓存:Request Cache、Query Cache、Fielddata Cache

    ElasticSearch 查询需要占用 CPU.内存资源,在复杂业务场景,会出现慢查询,需要花费大量的时间.为了提高系统的性能,除了增加集群硬件配置这种成本高昂的开销外,还可以使用 ES 的缓存,下 ...

  3. android清除缓存 代码,Android应用开发之Android应用清除缓存一般清理目录和代码的教程...

    本文将带你了解Android应用开发Android应用清除缓存一般清理目录和代码的教程,希望本文对大家学Android有所帮助. 一个应用安装完成,会有缓存,缓存一般分为内部存储的和外置的,内存中路径 ...

  4. Cache总义Cache用法之页面声明

    Cache总义Cache用法之页面声明 <%@ outputCache Duration="#ofseconds" Location="Any|Client|Dow ...

  5. HttpContext.Current.Cache和HttpRuntime.Cache的区别,以及System.Runtime.Caching

    先看MSDN上的解释:       HttpContext.Current.Cache:为当前 HTTP 请求获取Cache对象.       HttpRuntime.Cache:获取当前应用程序的C ...

  6. java cache框架_java Cache框架

    各类开源的缓存解决方案 JBossCache/TreeCache JBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改善性能.缓存数据被自动复制,让你轻松进行Jboss服 ...

  7. 【ARM/cache】CPU cache:组织及一致性

    掌握cache,对写出高效能代码,以及优化Linux系统的性能是至关重要的. L1 cache的icache(指令)和dcache(数据)是分离的,这样可以实现指令和数据的并行访问,CPU可以同时lo ...

  8. Linux系统中的Page cache和Buffer cache

    Free命令显示内存 首先,我们来了解下内存的使用情况: Mem:表示物理内存统计 total:表示物理内存总量(total = used + free) used:表示总计分配给缓存(包含buffe ...

  9. 学习笔记:cache 和spring cache 技术(1)

    title: 学习笔记:cache 和spring cache 技术(1) author: Eric liu tags: [] categories: hexo 缓存是实际工作中非常常用的一种提高性能 ...

最新文章

  1. 周末都花费在智能车实验室,结果......
  2. apache公司主要是做什么的
  3. Java技术分享之变量命名
  4. 一个Lex/Yacc完整的示例(可使用C++)
  5. 15 - java 继承
  6. js语句连接mysql数据库_js中require()的用法----JS如何连接数据库执行sql语句或者建立数据库连接池...
  7. discuz x2.5 DIY模块模板语法详解
  8. 双十一期间快递员凌晨送件 将下班程序员误认成小偷
  9. UCenter Home 1.5的基本配置与技巧
  10. Java——变量和数据类型
  11. 90天吃透阿里P8推荐的625页Java编程兵书pdf,直接入职阿里定级P6
  12. 大数据与python-零起点Python大数据与量化交易 PDF 下载
  13. 无线通信算法工程师知识地图
  14. 试算平衡表示例图_科目汇总表代试算平衡表
  15. Git学习8 Git分支操作
  16. win2003系统的序列号
  17. [爬虫]一个关于课堂派课件的爬虫
  18. 基于STM32_HAL库GY-30(BH1750FLV)驱动
  19. 抛物线与双曲线、抛物面与锥面
  20. 计算机哪里应用了静电场原理,实验二静电场物理模拟

热门文章

  1. [2022软工第二次作业]软件评测——CSDN技能树
  2. python安装docx库_Python-docx的安装
  3. 计算机毕设Python+Vue余庆金阳驾校管理系统(程序+LW+部署)
  4. C语言printf函数格式字符
  5. 使用最大离散重叠小波变换MODWT和支持向量回归 SVR的金融时间序列预测
  6. Ventuz发布vpr显示鼠标
  7. 飞天加速之星得主怎样选择云服务器ECS?
  8. 微信公众号 语音转文字api_配音秀小程序(免费版文字转语音软件)公众号
  9. QQ分享报错 非官方应用(错误码:901102)
  10. 我的世界服务器java启动脚本_我的世界 如何让服务器自动重启呢 自动重启脚本方法...