arm64缓存可以从EL0刷新吗?

时间:2018-01-25 22:17:51

标签: assembly arm arm64

我正在阅读一篇学术论文,其中指出“ARM架构还包括驱逐缓存行的指令。但是,这些指令只能在处理器处于提升权限模式时使用。”

这是真的吗?我一直在搜索ARM文档,我没有看到任何暗示我无法在“ARM Cortex-A系列程序员ARMv8-A指南”第11.5章http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.den0024a/BABJDBHI.html

2 个答案:

答案 0 :(得分:2)

这是可配置的。

ARMv8 Architecture Reference Manual,第D3-1988页:

  

EL0缓存维护说明的可访问性

     

SCTLR_EL1.UCI位启用DC CVAUDC CVACDC CVAPDC CIVACIC IVAU指令的EL0访问权限。当EL0使用这些指令因SCTLR_EL1.UCI == 0而被禁用时,在EL0执行这些指令之一会为EL1生成一个陷阱,使用EC = 0x18进行报告。

     

对于这些说明,需要读取访问权限。当SCTLR_EL1.UCI的值为1时,

     
      
  • 对于DC CVAUDC CVACDC CVAPDC CIVAC指令,如果指令在EL0执行且参数中指定的地址无法在EL0读取,生成权限错误。
  •   
  • 对于IC IVAU指令,如果指令在EL0上执行且参数中指定的地址无法在EL0读取,则IMPLEMENTATION DEFINED是否生成了权限错误。
  •   
     

软件可以读取CTR_EL0以发现缓存维护说明所需的步幅。 SCTLR_EL1.UCT位允许EL0访问CTR_EL0。当禁止EL0访问高速缓存类型寄存器时,使用EC = 0x18将EL0上执行的寄存器访问指令捕获到EL1。

答案 1 :(得分:2)

这篇论文确实是对的。如果您阅读了ARMV8参考手册(在此处https://static.docs.arm.com/ddi0487/ca/DDI0487C_a_armv8_arm.pdf)的C5.3部分,您可以看到缓存维护指令始终可以在异常级别EL1到EL3中访问。

用户空间程序在EL0中运行,而内核在EL1或EL2中(EL2用于管理程序),EL3用于安全监视器代码。可以从EL0访问某些缓存维护指令,但这可以根据确切的指令禁用或捕获。