ARMV8 datasheet學習筆記4:AArch64系統級體系結構之編程模型(4)- 其它


1. 前言

 

2.可配置的指令使能/禁用控制和trap控制

  • 指令使能/禁用

當指令被禁用,則這條指令就會變成未定義

  • 指令Trap控制

控制某條或某些指令在運行時進入陷阱,進入陷阱的指令會產生trap異常,路由規則如下:

(1)當前為EL1,則陷阱異常傳遞給EL1(HCR_EL2.TGE定義為1時,會路由到EL2);

(2)當前為EL2,則陷阱異常傳遞給EL2;

(3)當前為EL3,則陷阱異常傳遞給EL3;

 

3. 系統調用

  • SVC

默認情況下SVC產生supervisor call,同步異常目標級別為EL1,使得運行EL0的軟件可以調用EL1下的操作系統或軟件的接口

  • HVC

如果實現了EL2,默認情況下HVC產生hypervisor call,同步異常目標級別為EL2

注:HVC指令在EL0和secure EL1沒有定義

  • SMC

如果實現了EL3,默認情況下SMC產生Secure monitor Call,同步異常目標級別為EL3

注:SMC指令在EL0未定義

注:

1.此處說的默認情況需滿足如下兩個條件:

(1)系統調用指令的運行等級低於或等於目標異常級別;

(2)系統調用指令沒有被trap控制到其他異常級別???

2. 如果運行HVC和SVC的異常級別高於目標異常級別,會引發異常,並被傳遞給當前異常級別;

3. EL3和EL2可以禁用HVC系統調用;

4. EL2可通過trap(配置陷阱異常)的方式調用SMC;

5. EL3可以禁用SMC

4. 低功耗模式機制

  • Send Event指令

(1)SEV指令,在多處理器系統中,event會被發送給所有的PE;

(2)SEVL指令,設置本地event  Register;

 

注:

(1)建議SEV前加DSB保證內存訪問完成;

(2)SEVL與WFE在同個PE執行,不需要加屏障

所有的異常級別都可以執行SEV和SEVL指令;

  • Event Register

Event register對應每個PE都有一個bit,如果置位說明有一個事件發生,PE要請求某些行為。有如下事件均可導致event register置位:

(1)執行SEV指令;

(2)當前PE執行SEVL指令;

(3)異常返回;

(4)global monitor中關於本PE的標記位被清除;

(5)來自於generic timer event stream的事件;

(6)發送自定義事件

 

  • Wait for Event(WFE)

PE可以通過使用WFE指令進入低功耗狀態,依賴Event register的值,如果接收到WFE wake-up event,會離開低功耗狀態。利用WFE指令可以減少spin lock機制的功耗;

WFE指令

  1. 如果PE的event  register值置位,執行WFE指令后,則會清空event register的值,並立即結束;
  2. 如果PE的event register值是空的,PE可以暫停執行並進入低功耗狀態,保持直到PE接收到WFE wake-up event

WFE wake-up event in AArch64

  1. 多處理器系統中任何PE執行SEV指令;
  2. 沒有被EDSCR.INTdis屏蔽的物理SError,IRQ,  FIQ;
  3. 在NS-EL1或EL0, 沒有被EDSCR.INTdis屏蔽的虛擬SError,IRQ,  FIQ;
  4. 異步外部debug request debug event(如果允許halting);
  5. 由timer event stream發送的事件;
  6. 清除Global monitor的PE標記引起的事件;
  7. 自定義實現發送的事件。

注:並不是如上所有事件都會設置event register

  •  Wait for Interrupt(WFI)

WFI

軟件可以通過使用WFI命令讓PE進入低功耗狀態。PE進入低功耗狀態后,如果接收到WFI wake-up event,會離開低功耗狀態

WFI wake-up event

  1. PE接收到的物理SError,IRQ,  FIQ;
  2. Ns EL1或EL0,PE接受到的任何虛擬SError,IRQ,  FIQ;
  3. 異步的外部debug request debug事件;
  4. 一些自定義機制發送的事件

 

5. Self-hosted debug

  • debugger

Self-hosted debug:PE自身擁有debugger調試器,debugger調試器通過編程讓PE產生debug異常

Externel debug:PE受外部debugger調試器的控制,debugger調試器通過編程讓PE產生debug事件,這樣可以讓PE進入debug狀態,在debug狀態,PE被halted

  • Debug異常

Debug異常包括:

(1)Breakpoint Instruction exceptions

(2)Breakpoint exceptions.

(3)Watchpoint exceptions.

(4)Vector Catch exceptions.

(5) Software Step exceptions

要產生debug異常,需要滿足2個條件:

(1)使能Debug異常;

(2)當前的EL和secure state使能debug異常

  • Debug mask bit

當目標異常級別是當前異常級別時PSTATE的D bit可以maskWatchpoint, Breakpoint, and Software Step exceptions

6. Performance Monitor Extension

PMU(Performance Monitor Unit)提供如下:

1. 一個64bit時鍾計數器

2.一個自定義數目的32bit事件計數器,每個事件計數器記錄某一事件的發生次數

7. Interprocessing

Interprocessing

用來描述AArch32與AArch64運行狀態切換的術語

運行狀態切換時機

運行狀態只能在異常級別變化的時候才能進行切換,也即運行狀態只能發生在捕獲到異常時傳遞給高異常級別或從異常返回時返回到低異常級別

當捕獲一個異常並切換到更高的異常級別,運行狀態可以保持不變 或 32->64

當從一個異常返回切換到更低的異常級別,運行狀態可以保持不此案或 64->32

 

8.  自定義實現對編程模型的影響

  •  ARMv8三個自定義選項

(1)實現的異常級別的數目;

(2)哪些異常級別支持AArch32,哪些異常級別支持AArch64;

(3)SIMD和Float-point是否支持

  • 異常級別實現暗含的內容

1. 所有實現必須包含EL0和EL1;

2. EL2和EL3是可選的

3. 可選的組合方式有:

(1)EL0、EL1和EL2­­,只支持non-secure state;

(2)EL0、EL1和EL3,只支持secure state;

(3)EL0、EL1,只能實現一種安全狀態,secure state或non-secure state;

(4)EL0、EL1、EL2、EL3均實現

  • 異常級別、運行狀態、安全狀態的組合方式

實現的異常級別

secure state

EL3

EL2

EL1

EL0

EL0/EL1/EL2/EL3

Sec&non-sec

AArch64/AArch32

AArch64/AArch32

AArch64/AArch32

AArch64/AArch32

AArch64

AArch64

AArch64/AArch32

AArch64/AArch32

AArch64

AArch64

AArch64

AArch64/AArch32

AArch64

AArch64

AArch64

AArch64

AArch32

AArch32

AArch32

AArch32

EL0/EL1 /EL3

Sec&non-sec

AArch64

\

AArch64/AArch32

AArch64/AArch32

AArch64

\

AArch64

AArch64/AArch32

AArch64

\

AArch64

AArch64

AArch32

\

AArch32

AArch32

EL0/EL1/EL2

Non-sec only

\

AArch64

AArch64/AArch32

AArch64/AArch32

\

AArch64

AArch64

AArch64

EL0/EL1

Sec or non-sec

\

\

AArch64

AArch64/AArch32

\

\

AArch64

AArch64

\

\

AArch32

AArch32

  • 五類經典組合圖示(EL0/EL1/EL2/EL3都實現)

  • 如果沒有實現全部4個異常級別的影響

(1)中斷不會路由到這些異常級別;

(2)沒有異常通過陷阱進入這些異常級別;

(3)所有從低異常級別通過系統調用切換到未實現的異常級別被作為未定義處理;

(4)不支持從未實現異常級別做地址轉換

(5)任何要通過異常返回到未實現的異常級別被視為非法的異常返回

(6)任何和未實現異常級別相關的寄存器都被視為RES0(具有切換到低異常級別功能的相關寄存器除外)

9.參考文檔

[1] DDI0487A_k_armv8_arm_iss10775.pdf




免責聲明!

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



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