ARMv8-A相關(guān)歷史文章:
ARM架構(gòu)的早期版本定義了一個(gè)基于處理器模式的異常模型,針對(duì)每一個(gè)異常類型,體系結(jié)構(gòu)都定義了接收異常的模式,稱為異常的目標(biāo)模式。針對(duì)一個(gè)異常,configurable traps,enables,routing controls能改變處理器的目標(biāo)模式。ARMv8-A的AArch32遵循這個(gè)模型。
當(dāng)處理器接收異常時(shí):
- 保存當(dāng)前程序的狀態(tài)到目標(biāo)模式的SPSR寄存器中;
- 保存異常的返回地址(如果不在Hyp模式,將地址保存到目標(biāo)模式的LR寄存器中;如果在Hyp模式,將地址保存到ELR_hyp寄存器中);
- 跳轉(zhuǎn)到目標(biāo)模式執(zhí)行,除非是在Monitor模式下,否則不會(huì)改變Security狀態(tài);
在ARMv7-A體系架構(gòu)使用PL0-PL2三個(gè)特權(quán)級(jí),在ARMv8-A中,Exception Levels取代了特權(quán)級(jí),但是PL1還能繼續(xù)發(fā)揮特殊作用。
下圖將描述ARMv7-A處理器的全部模式,包括虛擬化擴(kuò)展和安全擴(kuò)展。ARMv7-A為每個(gè)模式分配了執(zhí)行特權(quán),其中執(zhí)行特權(quán)的定義獨(dú)立于安全狀態(tài)。

在ARMv7-A體系架構(gòu)中,處理器模式可以在特權(quán)軟件的控制下進(jìn)行切換,或者在異常發(fā)生的時(shí)候自動(dòng)切換。當(dāng)異常發(fā)生時(shí),處理器會(huì)保存當(dāng)前的執(zhí)行狀態(tài)和返回地址,然后進(jìn)入處理異常的目標(biāo)模式,可能會(huì)禁止硬件中斷。
- 應(yīng)用程序運(yùn)行在PL0最低特權(quán)級(jí)下,也就是非特權(quán)級(jí)的用戶模式;
- 操作系統(tǒng)運(yùn)行在PL1;
- 虛擬化擴(kuò)展和Hypervisor運(yùn)行在PL2級(jí)別;
- Secure monitor運(yùn)行在PL1,在Secure world和Normal world之間提供通道;
在ARMv8-A中,沒(méi)有改變這種異常模型,但是增加了幾條規(guī)則,來(lái)覆蓋在ARMv7-A中不支持的case,規(guī)則如下:
- 如果EL2使用的是AArch64,那么任何針對(duì)Hyp模式的異常都將在EL2處理,并使用AArch64;
- 如果EL3使用的是AArch64,那么任何針對(duì)Monitor模式的異常都將在EL3處理,并使用AArch64;
在AArch64中,處理器模式和Exception levels的映射關(guān)系如下圖所示:

當(dāng)異常發(fā)生時(shí),處理器將改變Exception Level(相當(dāng)于ARMv7-A中的處理器模式)來(lái)處理異常類型。Secure monitor在AArch32中時(shí)處在PL1狀態(tài),在AArch64中處在EL3狀態(tài)。
3.1 Mapping the processor modes onto the Exception levels
安全狀態(tài)下的Exception level取決于EL3是否使用了AArch64,這個(gè)會(huì)影響處理器模式如何映射到Exception levels。
-
當(dāng)EL3使用AArch64時(shí),映射關(guān)系如下:
ARMv7-A中的Monitor模式,在ARMv8-A中不可用,原因是EL3提供了Secure Monitor的功能,而EL3使用的是AArch64。
-
當(dāng)EL3使用的是AArch32時(shí),映射關(guān)系如下:
比較兩張圖可以看出,在Normal world中的映射關(guān)系是一樣的;在Secure world中,Supervisor mode、Abort mode、IRQ mode、FIQ mode、Undefined mode還有System mode從EL1提升到了EL3,這是因?yàn)椋?/p>
- EL3提供了Secure Monitor功能;
- ARMv6 Security擴(kuò)展將Monitor mode定義為安全狀態(tài)模式,與Supervisor mode、Abort mode、IRQ mode、FIQ mode、Undefined mode和System mode同一級(jí)別。Secure Monitor在EL3中,這些模式也就與Secure Monitor就一起處在EL3的狀態(tài)了。
這種重新映射對(duì)處理器的操作沒(méi)有任何影響,AArch32狀態(tài)內(nèi)的操作完全按照處理器模式之間的交互來(lái)定義的,沒(méi)有涉及到關(guān)聯(lián)的特權(quán)級(jí)別或Exception levels。
3.2 Privilege levels in ARMv8-A
在Secure狀態(tài)中,處理器模式(Supervisor、Abort、IRQ、FIQ、Undefined、Syste)在EL3使用AArch32時(shí),是EL3模式;在其他情況下則是EL1模式。
為了避免這些復(fù)雜的描述,這些模式可以被描述為PL1模式,反映它們?cè)贏RMv7-A中的特權(quán)級(jí)別,與此相關(guān)的:
- 在這些模式下影響執(zhí)行的控制,都稱為PL1控制;
- 用于在這些模式或User mode中執(zhí)行的轉(zhuǎn)換系統(tǒng),稱為PL1&0 轉(zhuǎn)換體制;

