ARMV8概要アーキテクチャ:アーキテクチャのAArch64システムレベルのプログラミングモデル(1)-EL / ET / ST

1.はじめに

ARMV8システムレベルのプログラミング・モデルは、異常なレベル、動作状態、セキュリティ状態、異常な同期、非同期の例外、DEBUGを含みます

本論文では、概要を作るためにシステムレベルのプログラミングモデルに焦点を当てて

2.異常なレベル

2.1例外レベルの概要

ELX(X <4)、xのより大きな、より高いレベル、より高い実行権限

行っEL0は、非特権実行と呼ばれます

EL2なしセキュア状態、唯一の非セキュアな状態

EL3のみセキュア状態、セキュア及び非セキュアEL0 / EL1との間の支持ハンドオーバ

EL0&EL1が達成されなければならない、EL2 / EL3は、オプションの実現であります

異常を受信した場合、異常だけレベルを増加または維持することができます。

異常からの復帰時、異常なレベルは、低下または残ることができます

目標レベルと呼ばれる受信異常に交換または維持するための異常レベルの例外

各例外デフォルトのレベル自体はある一定レベルの異常、異常な目標レベルは、レジスタによって提供されている、対象が異常なレベルEL0ありません

PEは珍しいレベルで実行されている場合は、次の2つのリソースにアクセスすることができます。

  1. 異常なレベルと現在のセキュリティ状態の組み合わせの下でリソース;
  2. 異常な低レベルのリソースにアクセス可能(安全状態に準拠します)

2.2例外レベルの典型的な使用モデル

異常なレベル

ソフトウェアを実行しています

EL0

応用

EL1

LinuxのOS kernel-

EL2

ハイパーバイザ(上記ラン複数の仮想OSとして理解することができます)

EL3

セキュアモニター(ARMは、ファームウェアの信頼)

2.3用語の異常に関連します

用語

説明

例外を取ります

状態がPEに運ばれた後、例外に応答して初めてPEは、この時間は、から取られたPE状態と呼ばれます

例外からの復帰

操作例外復帰命令が送信されると、PEの状態は、例外からの復帰であります

異常なレベル

そのようなEL1 EL3の異常な異常とは異なる優先順位として異常、異常の異なるレベル

異常プレシジョン

命令を見つけ、すべてのコマンドの前に、この命令は、すべての命令は、PEの状態がダウンロードを記録しているので、例外処理の完了後に復元することができ、のいずれも(実行はロールバックが必要)した後、この命令を実行、実行されます。加算SErrorのIRQで、その他の異常が正確です

同期例外

(1)異常であると命令実行CPUコアまたは関連実行します

リターンアドレスを提供するアドレス(2)ハードウェアは、命令例外ハンドラであります

(3)同期例外は、2つのカテゴリに分けることができます。

。我々は同期アボート、例えば未定義命令、データアボート、プリフェッチ命令アボート、SPずれ例外、デバッグ例外などを呼び出すことA)。

B)。通常の命令実行の結果は、SVC / HVC / SMC命令を含む、もあり、これらの命令の使命は例外です。

非同期例外

外は外部ここで平均周辺機器は、CPUコアの目的であるされていません。我々は通常ことに注意してください(これは警告なしに、外部イベントのCPUコアの感情を考慮していないされていることを言って、非同期例外基本的には同様のブレークそのようなGIC、プロセッサまたはCPUのためのこの時間(SOCを参照)、これらのイベント)などのSOCからいくつかの割り込み他のHWブロックは、これらのイベントは、いわゆる、現在の内部ソフトウェアのCPUコアの実装を中断しました割り込み。割り込みまたは非同期例外は、次の特性があります。

(1)異常な独立した命令は、CPUによって実行されます。

(2)リターンアドレスが保存され、ダウンウェアハンドラ、サイトを処理するための例外復帰に提供されます。リターン命令アドレスは異常ではありません

この定義の非同期例外に属し、割り込みIRQ、FIQとSErrorによります。

SError割り込み

異常により非同期外部アボートで割り込みSErrorが発生します(またはブレーク)。

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

发布了90 篇原创文章 · 获赞 34 · 访问量 3万+

おすすめ

転載: blog.csdn.net/l471094842/article/details/104059613