1、執行64位寬的寄存器,又兼容ARMv7架構的軟件,即既支持32bit,又支持64bit,AArch64 & AArch32
2、分離了privilege和mode,ARMv7是一體的
在ARMv8中,安全狀態下,有PL3、PL1、PL0,沒有PL2,可以訪問安全內存空間
非安全狀態下,有PL2、PL1、PL0,沒有PL3,不可訪問安全內存空間
每一個PL級別, 決定一套指令和寄存器集。
3、Exception Levels(EL)
EL也有4級,EL0、EL1、EL2(僅在非安全狀態下存在)、EL3(僅在安全狀態下存在)
在AArch64下,EL決定PL,當前執行在ELx,PL也就為PLx。
EL的切換:發生一個異常or從一個異常返回
發生一個異常:EL >= 當前EL
從一個異常返回:EL <= 當前EL
EL的決定性:決定當前執行狀態,如哪種寄存器,PL,寄存器位寬等
EL的級別:數字越大,級別越高,相當於權限越大。
一般應用程序使用EL0,OS內核使用EL1,Hypervisor使用EL2,Security Monitoe使用EL3
4、寄存器位寬
EL級別變大,寄存器位寬變大或者不變;EL級別變小,寄存器位寬變小或者不變。
EL0的寄存器位寬,由EL1中的HCR/SCR寄存器中某bit決定,只能通過從異常返回來設置
EL1的寄存器位寬,由EL2中的HCR寄存器或者EL3中的SCR寄存器中某bit決定,根據安全非安全狀態決定是EL3還是EL2。
EL2、EL3的寄存器位寬, 由復位時的配置管腳設置
5、指令集
A32: 兼容ARMv7架構中的32bit ARM指令集
T32: 兼容ARMv7架構中的16bit & 32bit Thumb指令集
T32EE:兼容ARMv7架構中的16bit & 32bit ThumbEE指令集
A63:ARMv8新定義的64bit指令集
6、AArch32
如果最高級別的EL如EL2orEL3使用AArch32,則整個系統必須使用AArch32;
AArch32下,ARMv8下的執行就跟ARMv7一樣,只是虛擬化擴展和大物理地址擴(LPAE)展有點改變
7、異常返回狀態
AArch64下,異常返回狀態由ELR(Exception Link Register)和SPSR(Saved Processor State Register)寄存器決定。
ELR中保存異常返回地址,SPSR保存處理器狀態。
8、堆棧指針選擇
EL0下,堆棧指針為SP_EL0,其他為SP_ELx。
9、安全模型
在ARMv7下,安全擴展引入了Monitor模式,該模式來實現安全和非安全狀態的切換。
ARMv8下,當EL3使用AArch32,為了兼容ARMv7,在安全模式下不區分EL,只有一個EL3
Non-secure state Secure State
EL0 Application
EL1 OS
EL2 Hypervisor
EL3 Secure Monitor ->Secure OS ->Secure Application
ARMv8下,當EL3使用AArch64,EL和安全是分離的
Non-secure state Secure State
EL0 Application Secure Application
EL1 OS Secure OS
EL2 Hypervisor
EL3 Secure Monitor
10、執行模式
ARMv7中的模式包括user、FIQ、IRQ、Supervisor、Monitor、Abort、Hyp、Undefined、System,混合了各種概念。
ARMv8在AArch64中的模式EL0t、EL1t & EL1h、EL2t & EL2h、EL3t & EL3h,后綴t表示SP_EL0堆棧指針,h表示SP_ELx堆棧指針
