Arm-v8 中的 PSTATE

PSTATE 的本质

愉快的打开 Arm® Architecture Reference Manual for A-profile architecture 查看 D1.4 中对 PSTATE 的介绍

Process state, or PSTATE, is an abstraction of process state information.

翻译过来大概是:PSTATE 是处理器的状态信息。完全没有说 PSTATE 是个寄存器,所以很多文章轻巧的说 PSTATE 是个寄存器,要么是因为作者存在误解,要么就是作者接受了这个对新手存在误导的习惯。

PSTATE 是处理器的状态信息,它的各个域指示处理器当前的状态,如下图,A, I, F 域指示中断屏蔽的情况:

这些信息一定是可以体现在硬件上的,否则它怎么发挥相应的功能呢。所谓“体现在硬件上”,也就是 CPU 可以感知这些域的值,软件也可以读取或者设置这些域。为做到这些,我们需要知道 PSTATE 在物理上是怎么存储的。

实际上,PSTATE (本质上是状态信息)存储在一些分散的特殊寄存器里,Reference Manual 的 C5.2 节开头列举了这些寄存器(我不知道全不全)。比如 DAIF 寄存器(这才是真正的寄存器)保存了 PSTATE 中的 D, A, I, F 位,而 CPU 和软件实际上是通过 DAIF 寄存器来得知 PSTATE 中的 D, A, I, F 位的。

所以可以认为 arm 中有一系列寄存器如 DAIF 可以设置处理器的状态,人们统一把这些寄存器保存的信息称为 PSTATE。

SPSR 寄存器

SPSR 寄存器和 PSTATE 有密不可分的关系,文章中经常能看到这样的描述:SPSR 保存陷入异常前的 PSTATE。这容易让人错误的认为 SPSR 就是所谓 “PSTATE”寄存器。现在我们已经知道了 PSTATE 实际上存储在哪里,SPSR 只是在切换上下文时作为缓冲使用。(不过它确实把 PSTATE 整合起来保存在一个寄存器里了)。

具体来说,能够 “take to”的异常级都有自己的 SPSR 寄存器,也就是 SPSR_ELx,x 从 1 到 3。比如当发生异常并陷入到 el2 时,异常前的 PSTATE(也许是一部分)被硬件自动保存到 SPSR_EL2。当使用 eret 从这个异常处理返回时,SPSR_EL2 中保存的 PSTATE 会被自动恢复到前文说的保存 PSTATE 的寄存器中。这就是 SPSR 的作用,可以参考 Reference Manual 的 C5.2.19 节中对 SPSR 各个位的解释和描述。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值