ARMv8-A 与异常相关的指令

与异常相关的指令

最近一直在学习 ARMv8-A 的东西,记录一下与异常相关的指令。下面的内容基于AArch64讨论,暂不考虑 AArch32。
与异常生成相关的指令如下所示。下面主要学习 SVCHVC
在这里插入图片描述

1. SVC

SVC (Supervisor Call) 产生一个路由到 EL1 的异常,可以调用系统服务这些。此时,ESR_ELx.EC = 0x15

2. HVC

个人认为这个应该就是用于实现虚拟化相关的指令,要通过 Hypercall 调用虚拟机管理器的一些服务。因为 Hypervisor 的 EL2 就是 Non-Secure,所以要使用 HVC 应该是只能从 Non-Secure EL1 调用,应该就是指 Guest OS 的内核态了。

HVC (Hypervisor Call) 指令用于生成针对 EL2 的异常。就是说,调用这个指令后,会产生一个异常,陷入到 EL2,通常也就是 Hypervisor 会处理这个异常。
在 EL1 运行的非安全软件会调用 Hypervisor 请求一个服务,让 Hypervisor 帮忙做一些事情。但是 EL0 和 Secure EL1 是不可以通过 HVC 陷入 EL2 调用 Hypervisor 的服务的,产生的异常也是 Undefined。按理来说,只有 Non-Secure EL1 才可以顺利执行 HVC 指令。

执行 HVC 指令之后,产生异常,走到异常向量表。通过 ESR_ELx 判断异常的原因,ESR_ELx.EC = 0x16,判断是 HVC类型的异常后,就可以进入我们自己定义好的 Hypercall 处理程序啦。

ESR_ELx 还是一个挺重要的寄存器的。它包含了陷入 ELx 异常的 syndrome (综合征?) 信息。EC 就是异常类型!

在这里插入图片描述

3. ERET (异常返回指令)

ERET 是异常返回指令,它会使用当前异常级别的 ELRSPSR
执行这个指令时,会从 SPSR 中恢复 PSTATE,然后跳转到 ELR 中存放的地址。

肯定是不能在 EL0 里面调用这个指令的!

与内存屏障相关的指令

这部分有点难,主要学习了一下 ISB

1. DMB

2. DSB

DSB 用于同步执行流(execution stream)和内存访问(memory accesses)。

3. ISB

有时候看到操作完 GICv3 的系统寄存器后,还会专门执行 ISB 指令。
ISB 全称是 Instruction Synchronization Barrier,指令同步屏障。

ISB 会刷新CPU的流水线,比如清掉一些预取的指令。只有当 ISB 完成后,才会从缓存或内存中读取 ISB 之后的指令。

Instruction Synchronization Barrier flushes the pipeline in the PE, so that all instructions following the ISB are fetched from cache or memory, after the instruction has been completed.

对于一些系统控制器,它们会控制系统行为。
比如说GICv3中的一些系统寄存器(CPU接口寄存器这些),对它们进行写操作之后是很有必要使用 ISB 同步一下的。个人觉得,GICv2 因为里面的寄存器都是MMIO,所以应该不会使用 ISB 同步。

It ensures that the effects of context changing operations executed before the ISB instruction are visible to the instructions fetched after the ISB. Context changing operations include changing the ASID, TLB maintenance instructions, and all changes to the System registers.

在该指令之后的指令也会受此影响,所以需要同步一下再往下面执行。

In addition, any branches that appear in program order after the ISB instruction are written into the branch prediction logic with the context that is visible after the ISB instruction. This is needed to ensure correct execution of the instruction stream.

备注:图片来自 ARMv8-A 手册。

  • 31
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值