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体系 ...
随机推荐
- 【题解】 bzoj3450 JoyOI1952 Easy (期望dp)
题面戳我 Solution 期望的题目真心不太会 定义状态\(f[i]\)表示到第\(i\)期望长度,\(dp[i]\)表示期望分数 如果上一步的持续\(o\)长度为\(L\),那么贡献是\(L^2\ ...
- 恕我直言,在座的各位根本写不好Java!
其实,本不想把标题写的那么恐怖,只是发现很多人干了几年 Java 以后,都自认为是一个不错的 Java 程序员了,可以拿着上万的工资都处宣扬自己了,写这篇文章的目的并不是嘲讽和我一样做 Java 的同 ...
- 自学Linux Shell18.3-sed实用工具
点击返回 自学Linux命令行与Shell脚本之路 18.3-sed实用工具 1. 加倍行间距 命令格式: .......
- 洛谷P1012 拼数 string
又是大水题... 这一题过水,令人无法接受...... 但是如果我们不知道string的一个神奇的性质的话,就会很难受. 我一开始手写 < 号,但是发现如果 string a 的前一部分恰好是 ...
- Mac下Vim编辑快捷键小结(移动光标)
Mac下Vim编辑快捷键小结(移动光标) 1.移动到行尾"$",移动到行首"0"(数字),移动到行首第一个字符处"^" 2.移动到段首&qu ...
- (string 高精度) Lovekey hdu 2100
Lovekey Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- 【CSS】元素样式
1.使用CSS的三种方式: 方式一.通过元素的style属性来设置元素的样式 方式二.在HTML头部标签<head>中通过<link>标签引入一个外部的CSS资源,通常是一个C ...
- Hadoop生态圈-HUE环境部署
Hadoop生态圈-HUE环境部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HUE简介 1>.HUE的由来 HUE全称是HadoopUser Experienc ...
- LVS+keepalived 的DR模式的两种做法
LVS DR模式搭建 准备工作 三台机器: dr:192.168.13.15 rs1:192.168.13.16 rs2: 192.168.13.17 vip:192.168.13.100 修改DR上 ...
- Hbase记录-ZooKeeper介绍
ZooKeeper是一个分布式协调服务来管理大量的主机.协调和管理在分布式环境的一个服务是一个复杂的过程.ZooKeeper 简单解决了其结构和API这个问题.ZooKeeper允许开发人员能够专注于 ...