ARM使用术语清除(flush)和清理(clean)表示对cache的两种基本操作

    清除cache的意思是清除cache中存储的全部数据。对处理器而言,清除操作只要清零相应cache行的有效位即可。当存储器配置上有变化时,整体或部分cache可能需要进行清除操作。有时也用术语作废(invalidate)来代替术语“清除”。然而,对于采用写回策略的D-cache,就需要使用清理(clean)操作。
    清理cache的意思是把脏的(即被改写过的)cache行强制写到主存,并把cache行中的脏位清零。清理cache可以重建cache与主存之间的一致性,它只用在使用写回策略的D-cache上。
    改变系统的存储器配置可能要执行清除和清理cache的操作。访问权限、cache和缓冲策略的变化或者重新映射虚拟地址等操作都需要清理或清除cache。
    在分离cache中执行自修改代码之前,cache也需要执行清理和清除操作。自修改代码包括将代码简单地从一个地方拷贝到另一个地方。清理和清除操作是由两种可能的情况引起的:第一,自修改代码可能别承载在D-cache中,因此,不可能作为一条指令从主存中进行加载;第二,I-cache中现存的指令可能会屏蔽写到主存中的新指令。
    如果cache使用写回策略并且自修改代码被写入主存中,那么第一步就是将指令以数据块的形式写到主存中某处;稍后,程序跳转到主存中,以指令流的形式从主存中的该处开始执行。其中,当代码作为数据写入到主存中时,如果cache存储器中代表自修改代码被写入的主存位置的cache行有效,那么代码有可能会被写入到cache中(没有写入主存)。这些cache行会被拷贝到D-cache,而不是被拷贝到主存。如果发生了这种情况,那么当程序跳转到自修改代码所在的地方(主存某处)时,就会执行原来数据表示的代码,因为自修改代码此时实际上还在D-cache中。为了防止这种情况发生,可以进行D-cache的清理操作,把指令代码强制作为数据存到主存中,从而这些数据就可以作为指令流从主存中读出来。
    D-cache被清理后,新的指令就被写到主存中。但是,I-cache中可能会有效cache行存储新数据(代码)地址对应的指令。接下来,在新代码所在的地址读取指令时,仍然会得到I-cache中的老代码,而不是主存中的新代码。清除I-cache可以防止这种情况的发生。
    在linux的代码中涉及到自搬运代码的地方有:
1.    应用程序的装载:
Load_aout_binary
Load_aout_libary
Load_aout_interp
Load_flat_file

2.    Fiq代码的搬运:
3.    Signal.c中:
Setup_frame
Setup_rt_frame

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Cleanflush是与缓存一致性相关的操作。 Clean操作是将缓存中的脏数据(即被修改过的数据)强制写回到主存,并将缓存行中的dirty位清零。这样可以确保缓存中的数据与主存中的数据保持一致。在CPU改写了一段内存后,调用clean操作可以将缓存中的脏数据写回主存,以保证后续访问该内存时使用的是最新的数据。\[2\] Flush操作是将缓存行的valid位设置为无效。当CPU写入新内容到内存的某个地址时,如果缓存中被修改的部分被写入的主存位置的缓存行是有效的,那么代码可能只会被写入到缓存中,而没有写入主存。这可能导致程序在执行该处指令代码时,执行的是主存中的原代码,而不是修改后的代码。通过调用flush操作,可以强制将缓存行的valid位设置为无效,从而重建缓存与主存之间的一致性。\[2\] 总结起来,clean操作是将脏数据写回主存,flush操作是将缓存行的valid位设置为无效。这两个操作都是为了保持缓存与主存之间的一致性。 #### 引用[.reference_title] - *1* *3* [刷cache的3种操作:clean/invalid/flush](https://blog.csdn.net/weixin_37515325/article/details/118496921)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [内存CACHE中invaild、cleanflush的作用](https://blog.csdn.net/qq_44760112/article/details/126573416)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值