Assembly 可以从EL0刷新arm64缓存吗?

Assembly 可以从EL0刷新arm64缓存吗?,assembly,arm,arm64,Assembly,Arm,Arm64,我正在读一篇学术论文,其中指出“ARM体系结构还包括清除缓存线的指令。但是,这些指令只能在处理器处于提升权限模式时使用。” 这是真的吗?我一直在搜索ARM文档,在第11.5章“ARM Cortex-A系列ARMv8-A程序员指南”的EL0中,我没有看到任何可以说明我不能这样做的内容,这是可配置的 摘自第D3-1988页: EL0缓存维护说明的可访问性 SCTLR_EL1.UCI位启用对DC-CVAU、DC-CVAC、DC-CVAP、DC-CIVAC和IC-IVAU指令的EL0访问。当由于SCTL

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

这是真的吗?我一直在搜索ARM文档,在第11.5章“ARM Cortex-A系列ARMv8-A程序员指南”的EL0中,我没有看到任何可以说明我不能这样做的内容,这是可配置的

摘自第D3-1988页:

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

SCTLR_EL1.UCI
位启用对
DC-CVAU
DC-CVAC
DC-CVAP
DC-CIVAC
IC-IVAU
指令的EL0访问。当由于
SCTLR\u EL1.UCI==0
而禁用EL0对这些指令的使用时,在EL0执行其中一条指令会生成一个陷阱到EL1,该陷阱使用EC=
0x18
报告

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

  • 对于
    DC-CVAU
    DC-CVAC
    DC-CVAP
    DC-CIVAC
    指令,如果指令在EL0处执行,并且参数中指定的地址在EL0处无法读取,则会生成权限错误
  • 对于
    IC IVAU
    指令,如果指令在EL0处执行,并且参数中指定的地址在EL0处无法读取,则是否生成权限错误取决于
    实现定义
软件可以读取
CTR\u EL0
以发现缓存维护说明所需的步长。
SCTLR\u EL1.UCT
位允许EL0访问
CTR\u EL0
。当禁用EL0对缓存类型寄存器的访问时,在EL0执行的寄存器访问指令将使用EC=
0x18
捕获到EL1


这篇论文确实是正确的。如果您通读ARMV8参考手册(见此处)的C5.3节,您可以看到缓存维护说明始终可以在异常级别EL1到EL3中访问


用户空间程序在EL0中运行,而内核在EL1或EL2中(EL2用于管理程序),EL3用于安全监控代码。一些缓存维护指令可以从EL0访问,但这可能会被禁用或捕获,具体取决于具体的指令。

可能该论文引用的是不同的处理器?我非常确信,您也可以从EL0缓存刷新而不会出现问题。