0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ARMv7-A处理器模式与特权等级

嵌入式那些事 来源:嵌入式那些事 2023-10-21 16:19 次阅读

对于现代操作系统,通常情况下用户的应用程序运行在用户态,操作系统内核运行在内核态。用户态的应用对于系统硬件资源的访问是受限的,内核态则能够访问所有的系统硬件资源。操作系统的用户态和内核态是根据处理器的特权等级和运行模式进行硬件隔离的,这也极大的提高了操作系统的安全性。

安全扩展和虚拟化扩展

ARMv7-A体系结构支持安全扩展和虚拟化扩展。当处理器实现了安全扩展之后,处理器就存在普通世界(Normal world)和安全世界(Secure world)这两个世界,这在硬件层面上就可以将敏感数据和要求在安全环境运行的应用和普通应用完全隔离,如下图所示:

图片

Snipaste_2023-08-31_19-16-22

当处理器实现了虚拟化扩展之后,处理器就新增了一个hypervisor mode (Hyp),并且也新增了一个特权级模式PL2。支持虚拟化扩展的处理器示意图如下所示:

图片

Snipaste_2023-08-31_19-28-22

虚拟化扩展允许在Normal world运行多个操作系统,Hypervisor只能运行在Normal world。Secure world可以运行Trusted OS和Trusted services。

特权等级

处理器的模式,特权等级和安全状态的关系如下图所示:

图片

Snipaste_2023-08-31_19-48-19

本文仅讨论非安全状态。在非安全状态下,存在3种特权等级(Privilege level):PL0、PL1和PL2,描述如下:

PL0:用户模式(User mode)运行的应用程序处于PL0特权等级。运行在用户模式的程序被称为非特权程序。非特权程序对于系统资源的访问是受限的,对应Linux的用户态。

PL1:除了用户模式和Hyp模式外,其他模式下的程序执行都处于PL1特权等级。PL1模式是指除了用户模式和Hyp模式之外的其他模式。操作系统运行在PL1特权级。

PL2:如果实现了虚拟化扩展,Hyp模式运行的系统管理程序处于PL2特权等级。系统管理程序将控制并启用多个操作系统在同一个处理器系统上共存和执行。

处理器模式

ARMv7-A体系结构提供了9种处理器模式,如下图所示:

图片

Snipaste_2023-09-01_20-59-03

从上图可以知道ARMv7-A提供的处理器模式有User、FIQ、IRQ、Supervisor(SVC)、Monitor(MON)、Abort(ABT)、Hyp、Undefined(UND)、System(SYS)模式,各个处理器模式的描述如下:

User:用户模式,用户程序运行在User模式下,拥有受限的系统资源访问权限。

FIQ:快中断异常处理模式,发生FIQ中断时的处理器模式,相对于中断而言,快中断拥有更高的响应等级和更低的延迟。

IRQ:中断异常处理模式,发生IRQ中断时的处理器模式。

Supervisor(SVC):管理员模式,操作系统内核通常运行在该模式下,在处理器复位或者应用程序调用svc指令的时候将会进入到该模式,系统调用就是通过svc指令完成的。

Abort(ABT):异常终止模式,当发生Data Abort exception或者Prefetch Abort exception异常的时候进入这个模式。

Undefined(UND):未定义指令模式,当执行未定义指令时进入这个模式。

System(SYS):系统模式,系统模式和用户模式共享寄存器视图,并且目前大多数系统未使用该模式,利用这个特性我们可以在处理器启动时通过设置系统模式的SP寄存器来达到设置用户模式堆栈的目的,要设置用户模式的其他寄存器也可以这样操作。

Monitor(MON):监视模式,实现了安全扩展的处理器才有该模式,在该模式下执行Secure和Non-secure处理器状态的切换。

Hyp:实现了虚拟化扩展的处理器才有该模式。

User模式处于PL0特权等级。

FIQ、IRQ、Supervisor(SVC)、Monitor(MON)、Abort(ABT)、Undefined(UND)、System(SYS)这些模式处于PL1特权等级。

Hyp模式处于PL2特权等级。

本文不讨论支持安全扩展和虚拟化扩展的场景,因此对于Monitor模式和Hyp模式也不做深入探讨。

通常情况下,应用程序运行在User模式(PL0),运行在User模式下的应用程序对硬件没有直接访问权,所有的硬件操作都需要通过系统调用向内核进行申请。操作系统内核运行在管理员模式(PL1),对系统调用、中断、异常等系统事件进行响应、处理并返回,以这种硬件隔离的方式保证了操作系统内核的安全。

以Linux操作系统为例,虽然ARMv7-A体系结构的处理器有9种模式,但是操作系统只工作在SVC和USR模式,SVC处于内核态,USR处于用户态。至于其他的异常模式,Linux只是简单的略过。比如中断模式irq,Linux只有很短的汇编代码在irq模式运行,主要是保存上下文,然后就立马切换到了SVC模式,由内核进行统一处理。

寄存器集

ARMv7-A体系结构的处理器在不同处理器模式下,对于通用寄存器的使用情况也有所不同,如下图所示:

图片

Snipaste_2023-09-01_21-20-36

上图中蓝色背景的寄存器属于bank寄存器,也就是相同的寄存器名对应不同的寄存器实体。从上图可以看出:

R0~R7,PC在所有模式下是共享的。

系统模式和用户模式共享寄存器视图,系统模式没有bank寄存器。

FIQ 模式下,R8~R12、SP、LR 都是该模式专门的寄存器,FIQ比IRQ响应和处理速度更快,也得益于FIQ模式具有比IRQ模式更多的bank寄存器。

FIQ、IRQ、ABT、SVC和UND模式,都有他们自己模式下专用的SP和LR,也就是说,在模式切换的时候,不需要针对这两个寄存器进行现场保护和恢复;

FIQ、IRQ、ABT、SVC和UND模式,都有他们自己模式下专用的SPSR。在处理器发生中断或者异常时,处理器会自动的从一个模式A进入到另一个模式B,模式A的CPSR/APSR将会自动保存到模式B的SPSR中,这样模式B中的处理程序能够通过访问SPSR寄存器得到模式A下CPSR寄存器的信息

处理器模式切换

ARMv7-A体系结构的处理器,处理器模式是由状态寄存器CPSR的M域(BIT[4:0])来控制的。对于用户模式而言,是没有权限操作CPSR寄存器的M域的,只能通过svc指令进入到SVC模式。对于SYS、FIQ、IRQ、ABT、SVC和UND模式而言,可以通过给CPSR寄存器的M域赋值来达到切换处理器模式的目的。各个模式的编码如下图所示:

图片

Snipaste_2023-09-01_20-59-03

下述代码简单的演示了处理器模式切换:

Reset_Handler:
cpsid i

// ...
// 切换到IRQ模式,并设置IRQ模式的堆栈
cps #0x12
ldr sp, =0x9FF00000

// 切换到SYS模式,并设置SYS模式的堆栈
// 由于SYS模式和USR模式共享寄存器视图,SYS模式一般情况下没有被使用,
// 因此这里相当于在设置USR模式的堆栈
cps #0x1f
ldr sp, =0x9FE00000

// 切换到SVC模式,并设置SVC模式的堆栈
cps #0x13
ldr sp, =0x9FD00000
// ...

cpsie i

// ...

在上述代码中,使用了cps #mode指令来完成处理器模式的切换,在切换到相应模式之后,设置了对应模式的堆栈。

在上述代码中,为什么不直接切换到USR模式,再设置USR模式的堆栈,而要借助SYS模式来设置USR模式的堆栈呢?这个问题相信大家在学习了本节内容之后,应该还是比较简单的。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19155

    浏览量

    229040
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9040

    浏览量

    366724
  • 内核
    +关注

    关注

    3

    文章

    1362

    浏览量

    40216
  • 操作系统
    +关注

    关注

    37

    文章

    6727

    浏览量

    123181

原文标题:ARMv7-A 那些事 - 4.处理器模式与特权等级

文章出处:【微信号:嵌入式那些事,微信公众号:嵌入式那些事】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    armv7 generic timer使用笔记

    armv7-A架构中每个CPU核心都包含自己的私有定时,所有cpu的定时共享一个System counter, System counter负责产生计数,传递到每个核心的私有定时
    的头像 发表于 09-27 15:10 2443次阅读
    <b class='flag-5'>armv7</b> generic timer使用笔记

    ARM处理器7种工作模式介绍

    ` ARM微处理器支持7种运行模式,分别如下: 用户模式(usr):ARM处理器正常的程序执行状态。快速中断
    发表于 03-20 11:15

    从Cortex-M到Cortex-A认识ARM处理器

    图:2Cortex-A先进的处理器1.Cortex-A5可定制的处理器,可在低功耗配置中实现高性能可扩展的多功能性,适用于对成本敏感的低功耗应用可配置选项为最小的设备提供丰富的OS支持
    发表于 08-23 10:04

    ARM中的异常和特权是怎样去定义的

    异常(exception)和特权(privilege)是在ARMv8-A中定义的两个概念。现代软件期望被分成不同的模块,每个模块对系统和处理器资源具有不同的访问级别。这方面的一个例子是操作系统内核
    发表于 04-11 16:06

    浅析ARMv7-A体系架构下的MMU的基本原理

    ARMv7-A 架构的虚拟内存系统架构,与 VMSA 对应的还有 PMSA,这个是 ARMv7-R 系列的处理器支持的内存保护系统架构,这里不做研究,仅仅初探 ARMv7-A 系列相
    发表于 05-24 16:54

    Cortex-A9处理器技术参考手册

    Cortex-A9处理器是一款高性能、低功耗的ARM宏单元,具有L1缓存子系统,可提供完整的虚拟内存功能。Cortex-A9处理器实现ARMv7-A
    发表于 08-02 16:29

    ARM体系结构参考手册ARMv7-AARMv7-R版本

    提前(AOT)编译的特定支持。 ·决定处理器如何运行的模式和状态,包括当前的执行特权和安全性。 ·例外模式。 ·内存模型,定义内存排序和内存管理: -
    发表于 08-12 07:46

    基于ARMv8-M处理器的安全堆叠密封

    本建议概括介绍了软件对识别为CVE-2020-16273的漏洞的影响和缓解措施。 本咨询中讨论的方案涉及基于ARMv8-M的处理器,包括Cortex-M23、Cortex M33
    发表于 08-17 06:31

    ARM Cortex-A15 MPCore处理器参考手册

    Cortex-A15 MPCore处理器是一款高性能、低功耗的多处理器,采用ARMv7-A架构。 Cortex-A15 MPCore
    发表于 08-17 07:37

    ARMv8-A处理器的裸机引导代码

    熟悉ARM软件开发。 它旨在帮助您编写ARMv8-A处理器的引导代码。 您可以参考本应用笔记中的引导代码示例,并为基于ARMv8-A处理器的裸机系统编写自己的引导代码。
    发表于 08-23 06:20

    如何将软件应用程序从ARMv5迁移到ARMv7-A/R

    5。 本应用笔记还假设您具有ARMv5的软件开发经验。 假设主目标平台是围绕ARMv7-A处理器构建的。 由于ARMv7-AARMv7-R
    发表于 08-29 06:51

    Cortex-A15高性能工业控制处理器的技术参考手册

    Cortex-A15 MPCore处理器是一种实现ARMv7-a架构的高性能、低功耗处理器。Cortex-A 15 MPCore
    发表于 07-28 08:00 2次下载
    Cortex-<b class='flag-5'>A</b>15高性能工业控制<b class='flag-5'>处理器</b>的技术参考手册

    ARMv7ARMv7的体系结构参考手册免费下载

    ARM® Architecture Reference Manual ARMv7-A and ARMv7-R edition
    发表于 09-28 08:00 27次下载
    <b class='flag-5'>ARMv7</b>和<b class='flag-5'>ARMv7</b>的体系结构参考手册免费下载

    Cortex A7 MPCore的技术参考手册

    Cortex-A7 MPCore处理器是实现ARMv7-a架构的高性能、低功耗处理器。Cortex-A7 MPCore
    发表于 12-09 08:00 9次下载
    Cortex <b class='flag-5'>A7</b> MPCore的技术参考手册

    ARMv7-A工作模式介绍

    意思就是 64 位和 32 位,其中 AArch32 和 ARMv7基本一样(会多一些其他操作指令)。 安全不能仅仅依靠软件来实现,也是需要硬件支持的,比如 ARM处理器就有不同的运行等级,运行在低
    的头像 发表于 09-11 16:31 933次阅读
    <b class='flag-5'>ARMv7-A</b>工作<b class='flag-5'>模式</b>介绍