ARM(2)ARMv8基础知识

目录

一、异常

1.1异常等级的定义

1.2异常的种类

1.2.1同步异常和异步异常

1.3改变异常等级

1.4异常后的处理

1.4.1异常处理相关寄存器

1.4.2系统调用

1.4.3对EL2/EL3的系统调用

1.4.4异常返回

1.4.5异常处理流程

二、安全状态

三、执行状态


本文介绍以下内容:

  1. 四个异常级别:EL0~EL3
  2. 两种安全状态:安全、非安全
  3. 两种执行状态:AArch64、AArch32

一、异常

        在ARMv8架构中,异常是指CPU在执行指令时遇到的一些特殊情况,例如访问非法地址、除以零、硬件故障等。这些事件会打断正在执行的程序,并且需要处理器转而执行一些特定的代码来处理这些事件。为了处理这些异常情况,ARMv8架构定义了一套异常处理机制,其中每个异常都有一个预定义的处理程序。

1.1异常等级的定义

在 ARMv8 中,程序执行发生在四个异常级别中的一个。在AArch64中,异常级别决定了权限级别。因此在ELn执行对应于权限PLn。同样,数字越小,异常越低,权限越低。异常级别提供了软件执行权限的逻辑分离,适用于ARMv8架构的所有操作状态。它类似于并支持计算机科学中常见的分层保护域的概念。

以下是在每个异常级别上运行的软件的典型例子:

  1. EL0 : 普通用户应用程序。
  2. EL1 : 操作系统内核通常被描述为有特权的。
  3. EL2 : 虚拟化管理程序。
  4. EL3 : 低级别的固件,包括Secure Monitor。

        一般来说,一个软件,如应用程序、操作系统的内核或管理程序,只占用一个异常级别。这一规则的一个例外是内核内的管理程序,如KVM,它在EL2和EL1之间运行。ARMv8-A提供两种安全状态:安全和非安全。非安全状态也被称为 "正常世界"。这使得操作系统(OS)可以在同一硬件上与受信任的操作系统并行运行,并提供对某些软件攻击和硬件攻击的保护。ARM TrustZone技术使系统可以在正常世界和安全世界之间进行划分。与ARMv7-A架构一样,安全监视器作为网关在正常世界和安全世界之间移动。
 

1.2异常的种类

  • 中断

    在ARM中,FIQ的优先级要高于IRQ,在SOC内部会有一个中断控制器负责中断优先级调度,然后发送中断信号给处理器。中断属于异步模式的异常。

  • 中止

    中止异常分为数据中止和指令中止,MMU(Memory Management Unit)能够捕获错误并汇报给处理器。

  • 复位

    复位是处理器中优先级最高的异常,通常分为上电复位和软件复位。

  • 软件产生的异常

    ARMv8提供了3种软件产生的异常,发生此异常的原因是软件企图进入更高的异常等级。

    a) SVC是Supervisor Call的缩写,可以允许用户模式下的程序请求操作系统(OS)服务。当用户模式下的程序需要执行特权指令或者需要访问受保护的资源时,就会触发SVC异常。此时处理器会切换到特权模式,操作系统会接收到该异常并执行相应的服务。

    b) HVC是Hypervisor Call的缩写,是一种虚拟化技术中的指令。在虚拟化环境中,HVC指令可以用来切换虚拟机和宿主机之间的控制权,从而实现虚拟机和宿主机之间的交互。当客户机需要执行特权指令或者需要访问主机上受保护的资源时,就会触发HVC异常。此时处理器会切换到虚拟化模式,并将该异常传递给主机上运行的虚拟化软件进行处理。

    c) SMC是Secure Monitor Call的缩写,可以允许普通世界(非安全世界)中运行的程序请求安全服务。当普通世界中运行的程序需要执行受保护指令或者需要访问受保护资源时,就会触发SMC异常。此时处理器会切换到安全世界,并将该异常传递给安全监控程序进行处理。

1.2.1同步异常和异步异常

同步异常必须等待cpu处理完当前异常才可以继续执行指令。

常见的同步异常:

    a) 访问其他等级的寄存器,比如当前是EL1,如果访问EL2的寄存器就会出现异常

    b) SP(Stack Pointer,栈指针)未对齐    

    c) SVC、HVC和SMC

    d) 地址翻译错误/地址权限

常见的异步异常:

    a) 物理中断 IRQ、FIQ和系统错误SError  

    b) 虚拟中断 vIRQ、vFIQ、vSError

1.3改变异常等级

        在ARMv7架构中,处理器模式可以在特权软件控制下或在发生异常时自动改变。当异常发生时,内核会保存当前的执行状态和返回地址,进入所需的模式,并可能禁用硬件中断。 这在下面的表格中进行了总结。应用程序在最低的权限水平上运行,即PL0,以前的非特权模式。操作系统在PL1运行,而在具有虚拟化扩展的系统中的管理程序在PL2运行。安全监控器,作为在安全和非安全(正常)世界之间移动的网关,也在PL1运行。

        在AArch64中,处理器模式被映射到Exception级别上,如下图所示。如同在ARMv7(AArch32)中,当出现异常时,处理器会改变到支持处理异常的异常级别(模式)。

异常级别之间的切换遵循以下规则:

  • 移动到更高的异常级别,例如从EL0到EL1,表示软件执行权限的增加。
  • 一个异常不能被带到较低的异常级别。
  • 在EL0层没有异常处理,异常必须在更高的异常层处理。
  • 一个异常会导致程序流程的改变。异常处理程序的执行在高于EL0的异常级别开始,从一个定义的向量开始,与所发生的异常有关。异常包括:
  •        中断,如IRQ和FIQ。
  •        内存系统中止。
  •        未定义的指令。
  •        系统调用。这些允许无特权的软件对操作系统进行系统调用。 操作系统的系统调用。
  •        安全监控器或管理程序陷阱。
  • 结束异常处理并返回到上一个异常级别是通过执行ERET指令进行的。
  • 从异常中返回可以停留在同一个异常级别或进入一个较低的异常级别。它不能移动到更高的异常级别。
  • 安全状态会随着异常级别的改变而改变,除了从EL3返回到非安全状态时。

1.4异常后的处理

1.4.1异常处理相关寄存器

    a) 异常综合寄存器(ESR_ELn)

    b) 故障地址寄存器(FAR_ELn):

        为异常处理程序提供关于同步异常原因的信息。ESR_ELn保存了异常原因,而FAR_ELn保存了所有同步指令和数据中止以及对齐故障的故障虚拟地址。

    c) 异常链接寄存器ELR_ELn:

        保存了导致中止数据访问的指令的地址(对于数据中止)。这些在内存故障后被更新,但在其他情况下也会被设置,例如,通过分支到错位的地址。如果一个异常从AArch32中的异常级别进入使用AArch64的异常级别,并且该异常写入了与目标异常级别相关的故障地址寄存器。

    d) 异常综合寄存器ESR_ELn:

        包含了允许异常处理程序确定异常原因的信息。它只对同步异常和SError进行更新。它不对IRQ或FIQ进行更新,因为这些中断处理程序通常从通用中断控制器(GIC)的寄存器中获取状态信息。

图.ESR_ELn寄存器

Bit[31:26](ESR_ELn.EC)表示异常类别,它使处理程序能够区分各种可能的异常原因(如未分配的指令,从MCR或MRC到CP15的异常,FP操作的异常,SVC、HVC或SMC的执行,数据中止,以及对齐异常)。例如,EC=101111是一个SError中断。

Bit[25](ESR_ELn.IL)表示被困指令的长度(16位指令为0,32位指令为1),并对某些异常类别进行设置。

Bit[24:0] (ESR_ELn.ISS)构成指令特定综合症(ISS)字段,包含该异常类型的特定信息。例如,当一个系统调用指令(SVC、HVC或SMC)被执行时,该字段包含与操作码相关的即时值,如SVC为0x123456。

注:被困指令是一种特殊的指令,用于在处理器执行过程中发生异常或错误时,将处理器状态(当前的程序计数器和程序状态寄存器等关键寄存器的值保存到内存中)保存到内存中,以确保系统在出现异常或错误时能够正确地响应,并避免进一步的损坏或数据丢失。

1.4.2系统调用

    一些指令或系统功能只能在特定的异常级别进行。例如,如果运行在较低Exception级别的代码必须执行一个特权操作,例如当应用程序代码(EL0)向内核(EL1)请求功能时。一种方法是通过使用SVC指令来实现。这允许应用程序产生一个异常。参数可以在寄存器中传递,或者在系统调用中编码。

1.4.3对EL2/EL3的系统调用

        SVC指令可以用来从EL0的用户应用程序调用到EL1的内核。HVC和SMC系统调用指令以类似的方式将处理器移动到EL2和EL3。

        注意:当处理器在EL0(应用程序)执行时,它不能直接调用管理程序(EL2)或安全监视器(EL3)。这只有在EL1和以上的地方才有可能。因此,应用程序必须使用SVC来调用内核,并允许内核代表它们调用更高的异常级别。

        在操作系统内核(EL1),软件可以用HVC指令调用管理程序(EL2),或用SMC指令调用安全监视器(EL3)。

        同样,从管理程序代码(EL2)中,程序可以用SMC指令调用安全监视器(EL3)。如果在EL3时进行SMC调用,它仍然会在同一个异常级别上引起一个同步异常,该异常级别的处理程序可以决定如何响应。

1.4.4异常返回

    当操作系统的异常处理完成后,执行一条 ERET 指令即可从异常返回。

    ERET 指令会自动完成以下动作。 - 从 ELR_ELx 寄存器中恢复 PC 指针 - 从 SPSR_ELx 寄存器恢复 PSTATE 处理器的状态。 

    当中断发生时,CPU 会将 PSTATE 寄存器的值保存到对应的目标异常等级的 SPSR_ELx 中, 并且把 PSTATE 寄存器里的 D,A,I, F 标志位都设置为1, 这相当于把本地 CPU 的中断关闭。

    当中断完成后,操作系统调用 ERET 指令返回中断现场,并且会把 SPSR_ELx 恢复到 PSTATE 寄存器中,这相当于把中断打开。

    异常入口和返回的流程如下图:

异常入口和返回的流程示意图

当异常处理结束之后,调用了 ERET 指令返回时是否需要切换执行模式,需要查看 SPSR 寄存器。

SPSR.M[3:0] 字段记录了返回哪个异常等级

SPSR.M[4] 字段记录了返回哪个执行状态

0:表示 AArch64 执行状态

1:表示 AArch32 执行状态

1.4.5异常处理流程

异常处理流程主要包括以下几个步骤:

    1. 异常产生:当处理器执行指令时,如果遇到了错误或者特殊情况,就会产生异常。例如,访问非法地址、除零操作、外部中断等。

    2. 中断响应:当CPU检测到一个异常时,从异常向量表读取预定义的地址,执行对应的处理程序。

    3. 异常处理:每个类型的异常都有自己独立的处理例程。当CPU跳转到对应的预定义地址后,它会执行相应类型的处理例程来完成具体操作。例如,对于外部中断,可以保存当前现场状态并跳转到中断服务程序;对于非法指令,则可以直接终止程序并输出错误信息。

    4. 中断返回:CPU完成对异常进行处理后,需要返回到原来被打断的指令继续执行。ARMv8架构定义了一套异常返回机制,可以在处理程序中使用。

二、安全状态

ARMv8‑A 提供两种安全状态,安全和非安全。使用ns表示。(注:目前扩展为2bit: ns,nse)

为什么分安全状态和非安全状态?

        在ARMv8-A中,每个处理器核心都可以同时运行多个操作系统或应用程序。为了保证各个操作系统或应用程序之间的隔离和安全性,ARMv8-A提供了两种不同的处理器状态:安全状态和非安全状态。

        安全状态是一种特殊的处理器模式,它可以访问所有的系统资源,包括内存、寄存器和外设等。在这种状态下,可以执行所有的指令,并且可以访问所有的内存地址空间。但是,在安全状态下运行的软件需要满足一定的安全要求,比如必须经过认证、授权等。

        非安全状态是一种普通的处理器模式,它不能访问系统中的所有资源。在这种状态下运行的软件只能访问被分配给它们的资源和内存地址空间。这样可以保证系统中不同软件之间互相隔离,从而提高了系统的安全性和稳定性。

        通过使用这两种不同的处理器状态,ARMv8-A能够提供更高的系统安全性和隔离性。

PS:特权组件是指只能被特权级别高于或等于当前执行级别的软件访问的组件。这些特权组件是ARM体系结构中重要的组成部分,可以提供强大的功能支持和保护机制。

Normal World(对应于非安全状态)具有以下特权组件:

    1. Guest OS kernels。此类内核包括在非安全 EL1 中运行的 Linux 或 Windows。在管理程序下运行时,操作系统内核可以作为来宾或主机运行,具体取决于管理程序模型。

    2. Hypervisor。在EL2上运行,它始终是非安全的。虚拟机管理程序在存在并启用时,可为操作系统内核提供虚拟化服务。

Secure World具有以下特权组件:

    1. Secure firmware。在应用处理器上,该固件必须是在启动时运行的第一件事。它提供了多种服务,包括平台初始化、可信操作系统的安装以及安全监视器调用的路由。

    2. Trusted OS 受信任的操作系统为普通世界提供安全服务,并为执行安全或受信任的应用程序提供运行时环境。

     在ARM处理器中,正常世界和安全世界之间通过一些特殊的接口进行通信,例如SMC(Secure Monitor Call)和HVC(Hypervisor Call)等。这些接口可以确保正常世界和安全世界之间的数据传输是安全可靠的。

、执行状态

    ARMv8 架构定义了两种执行状态:

  1. AArch64:执行A64 指令集
  2. AArch32:执行A32/T32 指令集

    下图显示了 AArch64 和 AArch32 中异常级别的组织。

     AArch64:

     AArch32:

在 AArch32 状态下,Trusted OS 软件在 Secure EL3 中执行,而在 AArch64 状态下,它主要在Secure EL1 中执行。

ARMv7的五个特权级别:

1. 用户模式(User Mode):最低特权级别,用于运行普通应用程序。

2. FIQ模式(FIQ Mode):比用户模式高一级的特权级别,用于处理快速中断请求。

3. IRQ模式(IRQ Mode):比FIQ模式高一级的特权级别,用于处理标准中断请求。

4. 监管者模式(Supervisor Mode):比IRQ模式高一级的特权级别,用于执行系统管理任务和操作系统内核代码。

5. 系统模式(System Mode):最高特权级别,可访问所有资源和硬件设备,并可以执行所有指令。

        在ARMv7中,每个特权级别都有自己的寄存器集合和访问权限。这些权限包括对内存、设备和其他资源的读写权限、对指令集的使用权限以及对其他特权级别的切换权限等。通过这些不同的特权级别,ARMv7能够实现多任务操作系统和安全性保护等功能。

参考链接:

【ARMv8基础篇】异常等级_arm异常等级-CSDN博客

超详细的ARM处理器异常处理(含视频教学~) - 知乎

ARMv8的异常等级(Exception Level)以及执行状态(AArch64/AArch32)-CSDN博客

ARM64简介 - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/609828.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

KUKA机器人X11投入运行模式

KUKA机器人出厂时有个X11外部安全插头,外部急停和安全门就是从其中引出双回路接线。正常使用时需要将插头内部短接,不短接则会出现外部安全停止等报警信息,导致机器人无法上使能,不能转动。 通过设置【投入运行模式】可以暂时屏蔽…

Linux 操作系统TCP、UDP

1、TCP服务器编写流程 头文件&#xff1a; #include <sys/socket.h> 1.1 创建套接字 函数原型&#xff1a; int socket(int domain, int type, int protocol); 参数&#xff1a; domain: 网域 AF_INET &#xff1a; IPv4 AF_INET6 &a…

大数据面试题 —— 数据库

目录 关系型数据库与非关系型数据库的区别数据库三范式MySQL中 drop、delete、truncate的区别MySQL中 char和 varchar 的区别MySQL中inner join、left join、right join以及full join的区别MySQL中 having 和 where 的区别count(*)、count(1)、count(列名)的区别MySQL中视图和表…

【C++】-类模板-002

1创建类模板 &#xff08;1&#xff09;新建工程 &#xff08;2&#xff09; &#xff08;3&#xff09; &#xff08;4&#xff09; &#xff08;5&#xff09;模板运行结果 2【UI】设计器 &#xff08;1&#xff09;跳转到【UI】设计器 &#xff08;2&#xff09;添加…

神经网络中的归一化

我们今天介绍一下神经网络中的归一化方法~ 之前学到的机器学习中的归一化是将数据缩放到特定范围内&#xff0c;以消除不同特征之间的量纲和取值范围差异。通过将原始数据缩放到一个特定的范围内&#xff0c;比如[0,1]或者[-1,1]&#xff0c;来消除不同特征之间的量纲和取值范围…

Ti雷达CFG阅读技巧

Ti雷达CFG阅读技巧 使用TI雷达测量数据前&#xff0c;需要考虑不同的设计参数之间的区别&#xff0c;虽然Ti雷达的说明文档非常清晰&#xff0c;直接查询mmwave_sdk_user_guide文档就可以了&#xff0c;但是用的多了&#xff0c;参数都知道可能是什么含义&#xff0c;来回查询…

Springboot集成Mybatispuls操作mysql数据库-04

MyBatis-Plus&#xff08;简称MP&#xff09;是一个MyBatis的增强工具&#xff0c;在MyBatis的基础上只做增强而不做改变。它支持所有MyBatis原生的特性&#xff0c;因此引入MyBatis-Plus不会对现有的MyBatis构架产生任何影响。MyBatis-Plus旨在简化开发、提高效率&#xff0c;…

商务分析方法与工具(七):Python的趣味快捷-异常处理结构

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

布局全球内容生态,酷开科技Coolita AIOS以硬核品质亮相

当前&#xff0c;全球产业链供应链格局持续重构&#xff0c;成为影响中国对外经济发展的重要因素。2024年4月15至5月5日&#xff0c;历史久、规模大、层次高&#xff0c;作为中国外贸风向标的第135届中国进出口商品交易会&#xff08;即广交会&#xff09;在美丽的广州隆重举行…

matlab打开文件对话框

在使用matlab GUI制作时&#xff0c;为了便于用户交互使用&#xff0c;经常设置文件打开对话框&#xff0c;让用户根据实际需要选择打开的文件。下面以打开一张图片为例&#xff0c;matlab代码如下&#xff1a; [temp_filepath,temp_filename]uigetfile(*.jpg,请选择要打开的图…

探秘Tailwind CSS:前端开发的加速器(TailwindCSS让CSS编写更简洁)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Tailwind CSS 📒📝 快速体验📝 深入学习⚓️ 相关链接 ⚓️📖 介绍 📖 在这个快速迭代的互联网时代,前端开发效率和设计质量的双重要求,使得开发者们不断寻求更高效的工具和方法。今天,我们要介绍的是一个能够极大…

如何在Python中调用系统命令或执行外部程序?详细教程来了!

基本原理 在Python中执行程序或调用系统命令是一项非常实用的技能&#xff0c;这允许Python脚本与操作系统进行交互&#xff0c;执行各种外部程序。Python提供了多种方法来实现这一功能&#xff0c;包括os.system(), subprocess模块等。 示例代码 示例1&#xff1a;使用os.s…

LLM生态下爬虫程序的现状与未来

最近出现一批与LLM有关的新的爬虫框架&#xff0c;一类是为LLM提供内容抓取解析的&#xff0c;比如 Jina Reader 和 FireCrawl &#xff0c;可以将抓取的网页解析为markdown这样的对LLM友好的内容&#xff0c;例如markdown&#xff0c;这类本质上还是传统的爬虫解决方案。还有一…

[C++] const 成员函数

标题&#xff1a;[C] this指针 & const 成员函数 水墨不写bug 正文开始&#xff1a; 目录 &#xff08;一&#xff09;Cpp的面向对象编程 &#xff08;二&#xff09;this指针 &#xff08;三&#xff09;const修饰的成员函数 在正式讲解const修饰成员函数之前&#x…

在做题中学习(55):一维前缀和模板

【模板】前缀和_牛客题霸_牛客网 (nowcoder.com) 题目解释&#xff1a; 注意&#xff1a;下标从1开始的。 l 和 r就是对这n个整数去取一个区间&#xff0c;例如示例一&#xff1a; (1,2) 区间 就是算出1 2 4 中 1&#xff0c;2下标对应值的和&#xff0c;12 3 同理,(2,3) …

vscode正则匹配技巧

写正则表达式 下面是匹配加粗的单词或空格 \*\*[a-zA-Z\s]*\*\*vscode提取加粗的内容 altenter&#xff0c;再ctrlC复制选中的内容出来

前端 | iframe框架标签应用(三)| 点击指定部分,进行外部页面搜索,内置iframe返回搜索结果

文章目录 &#x1f4da;实现效果&#x1f4da;模块实现解析 &#x1f4da;实现效果 点击单词列表内的任意单词↓ 弹出对应单词的搜狗翻译搜索结果&#xff0c;点击关闭按钮关闭界面。 &#x1f4da;模块实现解析 在列表框搜索功能的基础上加一个click触发效果就好了&#xf…

网络安全在数字时代的重要性:以近期网络安全事件为镜

在当今这个信息化爆炸的时代&#xff0c;互联网如同一张无形的网&#xff0c;将我们的生活、工作、学习紧密相连。然而&#xff0c;这张网在带来便捷的同时&#xff0c;也暗藏着无数的安全隐患。近年来&#xff0c;网络安全事件频发&#xff0c;从个人隐私泄露到企业数据被盗&a…

网站未部署证书有何影响,如何解决?

如果您的网站没有ssl证书会有以下风险 1 浏览器标记为不安全 未安装证书的网站在访问时会有不安全的提示弹窗或者在网址栏直接显示不安全 2 影响企业信誉 当用户访问网站时看到不安全提示&#xff0c;会对网站的真实性和安全性产生怀疑&#xff0c;不敢轻易与该企业合作&…

【NodeMCU实时天气时钟温湿度项目 2】WIFI模式设置及连接

第一专题内容&#xff0c;请参考 【NodeMCU实时天气时钟温湿度项目 1】连接点亮SPI-TFT屏幕和UI布局设计-CSDN博客 第三专题内容&#xff0c;请参考 【NodeMCU实时天气时钟温湿度项目 3】连接SHT30传感器&#xff0c;获取并显示当前环境温湿度数据&#…