Cache内容锁定是什么

描述

  “锁定”在cache中的块在常规的cache替换操作中不会被替换,但当通过C7控制cache中特定的块时,比如使某特定的块无效时,这些被“锁定”在cache中的块也将受到相应的影响。

  用LINELEN表示cache的块大小,用ASSOCIATIVITY表示每个cache组中的块数,用NSETS表示cache中的组数。

  cache的“锁定”是以锁定块(lockdown block)为单位进行的。每个锁定块中包括cache中每个组中各一个块,这样cache中最多可有ASSOCIATIVITY个锁定块,编号为0~ASSOCIATIVITY-1。

  其中编号为0的锁定块中包含cache组0中的0号块、组1中的0号块,一直到ASSOCIATIVITY-1中的0号块。

  “N锁定块被锁定”是指编号为0~N-1的锁定块被锁定在cache中,

  编号为N~ASSOCIATIVITY-1的锁定块可用于正常的cache替换操作。

  实现N锁定块被锁定的操作步骤说明如下:

  •1)确保在整个锁定过程中不会发生异常中断,否则必须保证与该异常中断相关的代码和数据位于非缓冲(uncachable)的存储区域。

  •2)如果锁定的是指令cache或者统一的cache,必须保证锁定过程所执行的代码位于非缓冲的存储区域。

  •3)如果锁定的是数据cache或者统一的cache,必须保证锁定过程所涉及的数据位于非缓冲的存储区域。

  •4)确保将要被锁定的代码和数据位于缓冲(cachable)的存储区域。

  •5)确保将要被锁定的代码和数据尚未在cache中,可以通过使无效相应cache中的块达到这一目的。

  •6)对于I=0到N-1,重复执行下面的操作:

  •a)Index=I写入CP15的C9寄存器,当使用B格式的锁定寄存器时,令L=1;

  •b)在锁定块I中的各cache块内容从主存中预取到cache中,对于数据cache和统一cache可以使用LDR指令读取一个位于该块中的数据,将块预取到cache中;对于指令cache,通过操作CP15的C7寄存器,将相应的块预取到指令cache中。

  •7)将index=N写入CP15的C9寄存器,当使用B格式的锁定寄存器时,令L=0。解除N锁定块被锁定只须执行以下操作:将index=0写入CP15的C9寄存器,当使用B格式的锁定寄存器时,令L=0。

  Cache和Writer Buffer编程接口

  ARM处理器中的Cache和Write Buffer操作是通过写CP15的C7寄存器来实现的。访问CP15的C7寄存器的指令格式如下所示:

   mcr p15, 0, , , crm,

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分