Assembly 可以从EL0刷新arm64缓存吗?
我正在读一篇学术论文,其中指出“ARM体系结构还包括清除缓存线的指令。但是,这些指令只能在处理器处于提升权限模式时使用。” 这是真的吗?我一直在搜索ARM文档,在第11.5章“ARM Cortex-A系列ARMv8-A程序员指南”的EL0中,我没有看到任何可以说明我不能这样做的内容,这是可配置的 摘自第D3-1988页: EL0缓存维护说明的可访问性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
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缓存刷新而不会出现问题。