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体系 ...
随机推荐
- 自学工业控制网络之路1.1-工业控制系统发展历程CCS DCS FCS
返回 自学工业控制网络之路 自学工业控制网络之路1.1-工业控制系统发展历程CCS DCS FCS 工业控制系统是对诸如图像.语音信号等大数据量.高速率传输的要求,又催生了当前在商业领域风靡的以太网与 ...
- pthread_cond_wait() 函数的使用
1. 首先pthread_cond_wait 的定义是这样的 The pthread_cond_wait() and pthread_cond_timedwait() functions are us ...
- 【洛谷P1072】Hankson 的趣味题
题目大意:给定四个数字 a,b,c,d,求满足 \(gcd(a,x)=b,lcm(c,x)=d\) 的 x 的个数. 题解: 解法1:根据 lcm 的性质,x 一定为 d 的约数.因此,直接枚举 d ...
- (转)Java程序员的面试经历和题库
背景:最近我在找工作,前期就像打了鸡血的一样,隔一段时间没有面试,就又松懈了下来,看到别人写的面经,感觉就像打脸一般,以后要多多总结前人的经验,时刻保持压力状态才是. 作者:nuaazhaofeng2 ...
- selectionStart和selectionEnd属性
在网上看了很多用js在光标处插入文字的代码,很多都没有用,互抄而已,浪费时间.最近用到一个新方法,可以到达这个需求.IE支持document.selection,Firefox,Chrome,Safa ...
- MyEclipse添加模板注释
只有两个步骤: 1.设置模板 Windows—Preference—Java—Code Style—Code Templates 图中, Configure generated code and co ...
- 洛谷 P4378 [USACO18OPEN]Out of Sorts S(树状数组求冒泡排序循环次数)
传送门:Problem P4378 https://www.cnblogs.com/violet-acmer/p/9833502.html 要回宿舍休息了,题解明天再补吧. 题解: 定义一数组 a[m ...
- 获取Field成员变量类
位于java.lang.reflect.Field包中 getModifiers() 成员变量修饰符(public.private) getName() 成员变量名字 getType() 成员变量类型 ...
- C# 线程手册 第三章 使用线程 实现一个数据库连接池(实战篇)
在企业级软件开发过程中,为了改善应用程序的性能需要通常使用对象池来控制对象的实例化.例如,在我们每次需要连接一个数据库时都需要创建一个数据库连接,而数据库连接是非常昂贵的对象.所以,为了节省为每次数据 ...
- loadrunner之WebServices协议脚本编写(三种请求模式)
以天气预报网站为例:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl 一.web_service_call模式 步骤如下 ...