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运行在一个异常级别时,可以访问如下两种资源:
|
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 |
|
|
未实现EL3 |
|
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
ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST的更多相关文章
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(4)- 其它
1. 前言 2.可配置的指令使能/禁用控制和trap控制 指令使能/禁用 当指令被禁用,则这条指令就会变成未定义 指令Trap控制 控制某条或某些指令在运行时进入陷阱,进入陷阱的指令会产生trap异常 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(3)- 异常
1.前言 本文介绍异常相关内容,包括异常类型,异常进入,异常返回,异常层次结构,异常的路由等 2. RESET ARMV8体系结构支持两种类型的RESET Cold reset:Reset PE所有 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(2)- 寄存器
1. 前言 2. 指令运行与异常处理寄存器 ARM体系结构的寄存器分为两类: (1)系统控制和状态报告寄存器 (2)指令处理寄存器,如累加.异常处理 本部分将主要介绍如上第(2)部分的寄存器,分为AA ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之存储模型
1.前言 关于存储系统体系架构,可以概述如下: 存储系统体系结构的形式 VMSA 存储属性 2. 存储系统体系结构 2.1. 地址空间 指令地址空间溢出 指令地址计算((address_of ...
- ARMV8 datasheet学习笔记5:异常模型
1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文 3. 异常处理路由对比 AArch32.AArch64架 ...
- ARMV8 datasheet学习笔记3:AArch64应用级体系结构
1.前言 本文主要从应用的角度介绍ARMV8的编程模型和存储模型 2. AArch64应用级编程模型 从应用的角度看到的ARM处理器元素: 可见的元素(寄存器/指令) 说明 可见的寄存器 R0-R30 ...
- ARMV8 datasheet学习笔记1:预备知识
1. 前言 ARMv8的架构继承以往ARMv7与之前处理器技术的基础; 除了支持现有的16/32bit的Thumb2指令外,也向前兼容现有的A32(ARM 32bit)指令集. 基于64bit的AAr ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之Generic timer
1.前言 2.generate timer 2.1 概述 提供了一个系统计数器,用来实时测量流逝的时间: 提供了一个虚拟计数器,用来测量某个虚拟机上流逝的虚拟时间: 定时器,每隔一段时间会触发事件,支 ...
- ARMV8 datasheet学习笔记2:概述
1. 前言 本文主要概括的介绍ARMV8体系结构定义了哪些内容,概括的说: ARM体系结构定义了PE的行为,不会定义具体的实现 ARM体系结构也定义了debug体系结构和trace体系结构 ARM体系 ...
随机推荐
- mysql中存储过程
存储过程procedure 存储过程,其本质还是函数——但其规定:不能有返回值: 定义形式: 说明: 1,in:用于设定该变量是用来“接收实参数据”的,即“传入”:默认不写,就是in 2,out:用于 ...
- 自学Python5.2-类和对象概念
自学Python之路 自学Python5.2-类和对象概念 面向对象编程的2个非常重要的概念:类和对象 对象是面向对象编程的核心: 在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出 ...
- 简易版AC自动机
为什么说是简易版? 因为复杂度大概是\(O(M*\overline N)\),而似乎还有另一种大概是\(O(M+\sum N)\)的. 不过据说比赛不会卡前一种做法,因为模式串一般不会很长. 那么步入 ...
- Android编程心得-在Assets文件夹中放入.sql文件实现创建SQlite表的操作
当我们在使用SQLiteOpenHelper时,经常使用db.execSQL(String sql)方法写入对应语句实现创建表的操作,这样的确可以实现业务逻辑.与此同时还有一种更灵活的方法,从asse ...
- 树莓派使用iperf3测量网络带宽
这个工具需要两台设备都安装iperf3工具,一台作为服务端,一台作为客户端.客户端通过链接服务端测量吞吐量. 安装iperf3 sudo apt install iperf3 开启服务端 假设在一台I ...
- JDBC详解(二)
一:Statement与PreparedStatement的注意点 存在sql注入的危险,如果用户传入的id为“2 or 1=1”,将删除表中的所有数据.而PreparedStatement有效的防止 ...
- tp3 save操作小bug误区
$china_area->save(['is_del' => 1,'updatetime' => time()]); SHOW COLUMNS FROM `tf_china_area ...
- java代码示例(3)
/** * 需求分析:根据输入的天数是否是周六或是周日, * 并且天气的温度大于28摄氏度,则外出游泳,否则钓鱼 * @author chenyanlong * 日期:2017/10/14 */ pa ...
- vue2.0 之表单控件绑定
表单控件绑定v-model 1.文本 <template> <div> <input type="text" name="" v- ...
- TCP详解——传输控制协议(总述)
初次熟读TCP,随着TCP的发展路线对他深入了解,真心觉得TCP协议的美妙之处.他比UDP这家伙更加可靠,深得我们信任.通过一个个英文简写,例如CRC.ARQ.RTT.ACK.SACK.DACK等,组 ...