在ARMv8-A中,程序会运行在四个异常级别中的一个。 在64位执行状态下,异常级别决定了执行权限级别,类似于ARMv7-A中定义的权限级别。
异常级别的概念是ARMv8-A架构的基础。 所有操作都在定义的异常级别进行,一个寄存器可以存在一个或多个异常级别。 在一个异常级别更改寄存器中的某个位可以在另一个异常级别有不同的效果。
异常级别提供了软件执行权限的逻辑分离,该软件执行权限适用于ARMv8-A体系结构的所有操作状态。 系统软件确定异常级别,从而确定运行软件的权限级别。 异常级别与计算机科学中常见的分层的保护域(hierarchical protection domains)类似,并且支持这一概念。
通常在每个异常级别运行的软件类型是:
- EL0
普通用户应用程序。 EL0对应于最低特权级别,通常被描述为非特权级别,而在EL0之上的任何异常级别执行的通常被称为特权执行。 - EL1
操作系统内核。通常被描述为特权。 - EL2
虚拟机管理程序(Hypervisor)。 - EL3
低级固件,包括安全监视器等。
如果一个异常级别(ELn)比另一个异常级别的n更大,则n更大的异常级别更高,被认为是处于较高的异常级别。 反之n值更小的则异常级别更低。
一般来说,一个软件(如应用程序,操作系统的内核或hypervisor)占用一个异常级别。 一个例外是内核管理程序,比如KVM,在EL2和EL1上都有运行。
ARMv8-A还提供了两个安全状态。 ARM®体系结构参考手册使用术语安全(Secure )和非安全(Non-secure)来指代这些系统安全状态。 这里,非安全状态被称为普通世界(Normal world)。 非安全状态并不表示任何安全漏洞,而是指正常操作,因此与普通世界相同。 “世界”(‘world’ )这个词是用来强调安全世界和这个设备能够拥有的其他状态之间的关系。
操作系统(OS)在普通世界中运行,与在同一硬件上运行在安全世界中的可信操作系统并行运行。 ARMTrustZone®技术使系统能够在普通世界和安全世界之间进行区分。 这可以防止某些软件攻击和硬件攻击。 安全监视器(Secure monitor )充当普通世界和安全世界之间移动的网关。 ARMv8-A体系结构中的安全监视器比起所有其他软件有着更高的异常级别。
exception_levels在普通世界和安全世界中的ARMv8-A异常级别
ARMv8-A还为虚拟化提供硬件支持。 在普通世界中,虚拟化使得多个操作系统能够在同一个系统上共存和操作。 这意味着管理程序(hypervisor )或虚拟机管理器(VMM)可以在系统上运行并托管多个客户机操作系统。 然后每个客户操作系统在虚拟机上运行。 每个操作系统并没有意识到它与其他客户操作系统共享系统时间。
这意味着普通世界由以下部分组成:
- 应用
运行在普通世界的应用程序。 - 客户操作系统
这些包括在非安全EL1中运行的Linux或Windows。在虚拟机管理程序下运行时,操作系统内核可以作为客户机或主机运行,具体取决于虚拟机管理程序模式。 - 管理程序(Hypervisor)
这在EL2上运行。当管理程序出现并启用时,可以在多个客户操作系统之间进行切换操作。
安全世界有以下组件:
- 安全固件(Secure firmware)
在应用处理器上,安全固件必须是系统启动的第一个程序。它提供了多种服务,包括平台初始化,可信操作系统的安装以及路由安全监视器的调用。安全固件在EL3上执行。 - 可信的操作系统
可信的操作系统为普通世界提供安全服务,并为执行安全或受信任的应用程序提供运行时环境。它在EL3使用AArch64时在安全EL1上执行,在EL3使用AArch32时在安全EL3上执行。
原文
https://developer.arm.com/products/architecture/a-profile/docs/100878/latest/fundamentals-of-armv8-a
网友评论