ARMV8 datasheet學習筆記4:AArch64系統級體系結構之編程模型(1)-EL/ET/ST


1.前言

ARMV8系統級編程模型主要包括異常級別、運行狀態、安全狀態、同步異常、異步異常、DEBUG

本文主要對系統級編程模型做一個概要介紹

2. 異常級別

2.1 Exception level概述

ELx(x<4),x越大等級越高,執行特權越高

執行在EL0稱為非特權執行

EL2 沒有Secure state,只有Non-secure state

EL3 只有Secure state,支持EL0/EL1的Secure 和Non-secure之間的切換

EL0 & EL1 必須要實現,EL2/EL3則是可選實現

當接收到一個異常時,異常級別只能調高或保持;

當從異常返回時,異常級別只能調低或保持

在接收到異常將要切換或保持的異常級別稱為目標異常級別

每個異常級別本身有一個默認固定的目標異常級別,還可以通過寄存器設置目標異常級別,目標異常級別不能為EL0

當PE運行在一個異常級別時,可以訪問如下兩種資源:

  1. 當前異常級別和安全狀態組合下的資源;
  2. 低異常級別可訪問的資源(要符合安全狀態)

2.2  典型的Exception Level使用模型

異常級別

運行的軟件

EL0

Application

EL1

Linux kernel- OS

EL2

Hypervisor (可以理解為上面跑多個虛擬OS)

EL3

Secure Monitor(ARM Trusted Firmware)

2.3 異常相關術語

術語

說明

Taking an exception

PE第一次回應一個異常,此時PE state稱為taken from, 之后PE狀態為taken to

Returning from exception

當異常返回指令被提交運行,PE state就是return from exception

異常級別

不同異常級別,異常的優先級不同如EL3的異常高於EL1的異常

精准異常

找到某條指令,這條指令前的所有指令都執行完畢,這條指令之后的所有指令都未執行(執行的需要回退),這樣PE狀態就被記錄下載,異常處理完成后就可以恢復。除了SError irq之外,其它的都是精准異常

同步異常

(1)異常的產生是和cpu core執行的指令或者試圖執行相關

(2)硬件提供給handler的返回地址就是產生異常的那一條指令所在的地址

(3)synchronous exception又可以細分成兩個類別:

a). 一種我們稱之為synchronous abort,例如未定義的指令、data abort、prefetch instruction abort、SP未對齊異常,debug exception等等;

b). 還有一種是正常指令執行造成的,包括SVC/HVC/SMC指令,這些指令的使命就是產生異常。

異步異常

asynchronous exception基本上可以類似大家平常說的中斷,它是毫無預警的,絲毫不考慮cpu core感受的外部事件(需要注意的是:外部並不是表示外設,這里的外部是針對cpu core而言,有些中斷是來自SOC的其他HW block,例如GIC,這時候,對於processor或者cpu(指soc)而言,這些事件是內部的),這些事件打斷了cpu core對當前軟件的執行,因此稱之interrupt。interrupt或者說asynchronous exception有下面的特點:

(1)異常和CPU執行的指令無關。

(2)返回地址是硬件保存下來並提供給handler,以便進行異常返回現場的處理。這個返回地址並非產生異常時的指令

根據這個定義IRQ、FIQ和SError interrupt屬於asynchronous exception。

SError interrupt

SError interrupt是發生了external abort導致的異步異常(或稱中斷)。

external abort來自memory system, 是訪問外部memory system產生的異常(當然不是所有的來自memory system的abort都是external abort,例如來自MMU的abort就不是external abort,這里的external是針對processor而非cpu core而言,因此MMU實際上是internal的)。external abort發生在processor通過bus訪問memory的時候(可能是直接對某個地址的讀或者寫,也可能是取指令導致的memory access),processor在bus上發起一次transaction,在這個過程中發生了abort,abort來自processor之外的memory block、device block或者interconnection block,用來告知processor,搞不定了,你自己看着辦吧。external abort可以被實現成synchronous exception(precise exception),也可以實現成asynchronous exception(imprecise exception)。如果external abort是asynchronous的,那么它可以通過SError interrupt來通知cpu core

 3. exeution state

 

運行狀態

特點

AArch32

提供13個32bit通用寄存器R0-R12,一個32bit PC指針 (R15)、堆棧指針SP (R13)、鏈接寄存器LR (R14)

提供一個32bit異常鏈接寄存器ELR, 用於Hyp mode下的異常返回

提供32個64bit SIMD向量和標量floating-point支持

提供兩個指令集A32(32bit)、T32(16/32bit)

兼容ARMv7的異常模型,映射到ARMV8異常模型

使用32bit虛擬地址

使用CPSR來保存當前PE狀態

協處理器只支持CP10\CP11\CP14\CP15

AArch64

提供31個64bit通用寄存器X0-X30(W0-W30),其中X30是程序鏈接寄存器LR 

提供一個64bit PC指針、堆棧指針SPx 、異常鏈接寄存器ELRx

提供32個128bit SIMD向量和標量floating-point支持

定義ARMv8異常等級ELx(x<4),x越大等級越高,權限越大

提供64bit虛擬地址

定義一組PE state寄存器SPSR_ELx來保存 PSTATE(NZCV/DAIF/CurrentEL/SPSel等),用於保存PE當前的狀態信息

沒有協處理器概念,系統寄存器帶后綴n標志最低的異常訪問級別

 

注:AArch32與AArch64的切換稱為interprocessing, interprocessing只能發生在(1)reset ;(2)異常級別的轉換時

3.1 決定Execution State的條件

SPSR_EL1.M[4] 決定EL0的執行狀態,為0 =>64bit ,否則=>32bit

HCR_EL2.RW 決定EL1的執行狀態,為1 =>64bit ,否則=>32bit

SCR_EL3.RW確定EL2 or EL1的執行狀態,為1 =>64bit ,否則=>32bit

AArch32和AArch64之間的切換只能通過發生異常或者系統Reset來實現.(A32 -> T32之間是通過BX指令切換的)

4. Secure state

Non-secure

EL0/EL1/EL2, 只能訪問Non-secure 物理地址空間

Secure

EL0/EL1/EL3, 可以訪問Non-secure 物理地址空間 & Secure 物理地址空間,可起到物理屏障安全隔離作用

4.1 EL3對secure state的影響

實現EL3

  1. EL3只有secure state;
  2. Non Secure state到secure state只能發生在EL3接收到異常;
  3. secure state到non secure state只能發生在異常從EL3返回;
  4. 如果EL2實現,只有non secure state.

未實現EL3

  1. 如果沒有實現EL2,則secure state由SOC廠商決定;
  2. 如果實現EL2, 則只有non secure state

4.2 EL3使用AArch64 or AArch32的影響

 

Common

User mode(AArch32才有) 只執行在Non- Secure EL0 or Secure EL0

SCR_EL3.NS決定的是low level EL的secure/non-secure狀態,不是決定自身的

EL2只有Non-secure state

EL0 既有Non-secure state 也有Secure state

 

EL3使用

AArch64

若EL1使用AArch32,那么Non-Secure {SYS/FIQ/IRQ/SVC/ABORT/UND} 模式執行在Non-secure EL1,Secure {SYS/FIQ/IRQ/SVC/ABORT/UND}模式執行在Secure EL1

若 SCR_EL3.NS == 0,則切換到Secure EL0/EL1狀態,否則切換到Non-secure EL0/EL1狀態

Secure state 有Secure EL0/EL1/EL3

 

EL3使用

AArch32

若EL1使用AArch32,那么Non- Secure {SYS/FIQ/IRQ/SVC/ABORT/UND} 模式執行在Non-secure EL1,Secure {SYS/FIQ/IRQ/SVC/ABORT/UND}模式執行在EL3

Secure state只有Secure EL0/EL3,沒有Secure EL1

 5. execution state與secure state組合

  • EL3使用AArch64

圖 EL3使用AArch64時execution state和secure state組合

  • EL3使用AArch32

 圖 EL3使用AArch32時execution state和secure state組合

 

6. 參考文檔

[1] DDI0487A_k_armv8_arm_iss10775.pdf

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM