上一篇介绍了虚拟化和hypervisor的基本概念。为了配合虚拟化,ARM做了许多工作,首先是定义了四个异常等级(Exception Level,简称EL)。
前面介绍异常和特权的文章中有介绍,此处再啰嗦几句。每个异常级别都有编号,分别是EL0-3,权限级别越高,对应的编号越高。用户程序运行在EL0,操作系统运行在EL1,虚拟机监控程序(hypervisor)运行在EL2,固件程序(firmware)运行在EL3。
这里插一句,在intel的体系中,类似的概念是ring0-3。

在ARM的架构下,系统寄存器在不同的异常等级下是独立的寄存器,在指令集中有自己的编码,并在硬件中单独实现。这些系统寄存器可以根据后缀区分出可以访问的等级。例如,TTBR0_EL1是保存转换表基址的寄存器。如果EL0访问此寄存器,将会触发一个异常。
在高异常等级下可以访问低异常等级的寄存器,虽然大多数情况下不会这么做。但在某些场景下,还是需要的。比如在上下文切换或电源管理操作期间,更多特权级别有时会访问与较低异常级别关联的寄存器,以实现虚拟化功能或读写寄存器集,作为保存和还原操作的一部分。
除了异常等级,还有两个概念:执行状态(exec

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



