ARMv8-A相關(guān)歷史文章:
ARM架構(gòu)的早期版本定義了一個基于處理器模式的異常模型府树,針對每一個異常類型燕雁,體系結(jié)構(gòu)都定義了接收異常的模式,稱為異常的目標(biāo)模式蹂窖。針對一個異常,configurable traps,enables逗堵,routing controls能改變處理器的目標(biāo)模式力喷。ARMv8-A的AArch32遵循這個模型刽漂。
當(dāng)處理器接收異常時:
- 保存當(dāng)前程序的狀態(tài)到目標(biāo)模式的SPSR寄存器中;
- 保存異常的返回地址(如果不在Hyp模式弟孟,將地址保存到目標(biāo)模式的LR寄存器中贝咙;如果在Hyp模式,將地址保存到ELR_hyp寄存器中)拂募;
- 跳轉(zhuǎn)到目標(biāo)模式執(zhí)行庭猩,除非是在Monitor模式下窟她,否則不會改變Security狀態(tài);
在ARMv7-A體系架構(gòu)使用PL0-PL2三個特權(quán)級蔼水,在ARMv8-A中震糖,Exception Levels取代了特權(quán)級,但是PL1還能繼續(xù)發(fā)揮特殊作用趴腋。
下圖將描述ARMv7-A處理器的全部模式吊说,包括虛擬化擴(kuò)展和安全擴(kuò)展。ARMv7-A為每個模式分配了執(zhí)行特權(quán)优炬,其中執(zhí)行特權(quán)的定義獨立于安全狀態(tài)颁井。
在ARMv7-A體系架構(gòu)中,處理器模式可以在特權(quán)軟件的控制下進(jìn)行切換蠢护,或者在異常發(fā)生的時候自動切換雅宾。當(dāng)異常發(fā)生時,處理器會保存當(dāng)前的執(zhí)行狀態(tài)和返回地址葵硕,然后進(jìn)入處理異常的目標(biāo)模式秀又,可能會禁止硬件中斷。
- 應(yīng)用程序運行在PL0最低特權(quán)級下贬芥,也就是非特權(quán)級的用戶模式吐辙;
- 操作系統(tǒng)運行在PL1;
- 虛擬化擴(kuò)展和Hypervisor運行在PL2級別蘸劈;
- Secure monitor運行在PL1昏苏,在Secure world和Normal world之間提供通道;
在ARMv8-A中威沫,沒有改變這種異常模型贤惯,但是增加了幾條規(guī)則,來覆蓋在ARMv7-A中不支持的case棒掠,規(guī)則如下:
- 如果EL2使用的是AArch64孵构,那么任何針對Hyp模式的異常都將在EL2處理,并使用AArch64烟很;
- 如果EL3使用的是AArch64颈墅,那么任何針對Monitor模式的異常都將在EL3處理,并使用AArch64雾袱;
在AArch64中恤筛,處理器模式和Exception levels的映射關(guān)系如下圖所示:
當(dāng)異常發(fā)生時,處理器將改變Exception Level(相當(dāng)于ARMv7-A中的處理器模式)來處理異常類型芹橡。Secure monitor在AArch32中時處在PL1狀態(tài)毒坛,在AArch64中處在EL3狀態(tài)。
3.1 Mapping the processor modes onto the Exception levels
安全狀態(tài)下的Exception level取決于EL3是否使用了AArch64,這個會影響處理器模式如何映射到Exception levels煎殷。
-
當(dāng)EL3使用AArch64時屯伞,映射關(guān)系如下:
ARMv7-A中的Monitor模式,在ARMv8-A中不可用豪直,原因是EL3提供了Secure Monitor的功能劣摇,而EL3使用的是AArch64。
-
當(dāng)EL3使用的是AArch32時顶伞,映射關(guān)系如下:
比較兩張圖可以看出饵撑,在Normal world中的映射關(guān)系是一樣的剑梳;在Secure world中唆貌,Supervisor mode、Abort mode垢乙、IRQ mode锨咙、FIQ mode、Undefined mode還有System mode從EL1提升到了EL3追逮,這是因為:
- EL3提供了Secure Monitor功能酪刀;
- ARMv6 Security擴(kuò)展將Monitor mode定義為安全狀態(tài)模式,與Supervisor mode钮孵、Abort mode骂倘、IRQ mode、FIQ mode巴席、Undefined mode和System mode同一級別历涝。Secure Monitor在EL3中,這些模式也就與Secure Monitor就一起處在EL3的狀態(tài)了漾唉。
這種重新映射對處理器的操作沒有任何影響荧库,AArch32狀態(tài)內(nèi)的操作完全按照處理器模式之間的交互來定義的,沒有涉及到關(guān)聯(lián)的特權(quán)級別或Exception levels赵刑。
3.2 Privilege levels in ARMv8-A
在Secure狀態(tài)中分衫,處理器模式(Supervisor、Abort般此、IRQ蚪战、FIQ、Undefined铐懊、Syste)在EL3使用AArch32時屎勘,是EL3模式;在其他情況下則是EL1模式居扒。
為了避免這些復(fù)雜的描述概漱,這些模式可以被描述為PL1模式,反映它們在ARMv7-A中的特權(quán)級別喜喂,與此相關(guān)的:
- 在這些模式下影響執(zhí)行的控制瓤摧,都稱為PL1控制竿裂;
- 用于在這些模式或User mode中執(zhí)行的轉(zhuǎn)換系統(tǒng),稱為PL1&0 轉(zhuǎn)換體制照弥;