“锁定”在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,
全部0条评论
快来发表一下你的评论吧 !