FORM;https://www.jianshu.com/p/4b37b4c1e8b7
Arm架构构成了每个Arm处理器的基础。 ARM架构基于RISC(精简指令集计算机)原则,同时也包含:
基于增强的RISC 架构,使ARM处理器能够在高性能,小代码尺寸,低功耗和小硅片面积之间有着良好的平衡。 Arm架构随着时间的推移而不断进化,在整个进化历史中引入了几个扩展的架构,包括:
Arm设计了一系列处理器,它们共享通用指令集和编程模型,并具有一定程度的向后兼容性。 实现Arm架构的处理器会遵循特定版本的架构。 这些架构版本是:
最新版本(Armv8架构)
最新的Armv8架构针对不同的市场有三种不同的变体来描述处理器架构:
原文
[1] https://developer.arm.com/products/architecture/cpu-architecture
作者:赵国开
链接:https://www.jianshu.com/p/4b37b4c1e8b7
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
FORM:https://www.jianshu.com/p/8119986a39c5
Armv8-A架构是针对应用程序('A')设计的最新一代Arm架构。
它引入了可用的64位和32位执行状态(Execution state ),分别称为AArch64和AArch32。 AArch64执行状态支持A64指令集,可以在64位寄存器中保存地址,并允许基本指令集中的指令使用64位寄存器进行处理。 AArch32执行状态是一个32位执行状态,它保留了与Armv7-A体系结构的向后兼容性,并增强了该体系结构,可以支持AArch64状态中包含的某些功能。 它支持T32和A32指令集。
Armv8-A是唯一支持AArch64的profile ,其中AArch64和AArch32之间的关系被称为interprocessing。 另外,Armv8-A架构允许支持不同等级的AArch64和AArch32,例如:
Armv8-A架构引入了许多变化,可以设计出可实现的性能更高的处理器。
Armv7-A体系结构引入了architecture profiles的概念,并且继续被引入Armv8架构。 它实现了具有多种模式的传统Arm架构,支持基于内存管理单元(MMU)的虚拟内存系统架构(VMSA),并支持Arm(A32)和Thumb(T32)指令集。
架构扩展
这个架构也支持多个扩展。 包括:
原文
https://developer.arm.com/products/architecture/a-profile
作者:赵国开
链接:https://www.jianshu.com/p/8119986a39c5
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
FORM:https://www.jianshu.com/p/563c43ec6a3d
在ARMv8-A中,程序会运行在四个异常级别中的一个。 在64位执行状态下,异常级别决定了执行权限级别,类似于ARMv7-A中定义的权限级别。
异常级别的概念是ARMv8-A架构的基础。 所有操作都在定义的异常级别进行,一个寄存器可以存在一个或多个异常级别。 在一个异常级别更改寄存器中的某个位可以在另一个异常级别有不同的效果。
异常级别提供了软件执行权限的逻辑分离,该软件执行权限适用于ARMv8-A体系结构的所有操作状态。 系统软件确定异常级别,从而确定运行软件的权限级别。 异常级别与计算机科学中常见的分层的保护域(hierarchical protection domains)类似,并且支持这一概念。
通常在每个异常级别运行的软件类型是:
如果一个异常级别(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)可以在系统上运行并托管多个客户机操作系统。 然后每个客户操作系统在虚拟机上运行。 每个操作系统并没有意识到它与其他客户操作系统共享系统时间。
这意味着普通世界由以下部分组成:
安全世界有以下组件:
原文
https://developer.arm.com/products/architecture/a-profile/docs/100878/latest/fundamentals-of-armv8-a
作者:赵国开
链接:https://www.jianshu.com/p/563c43ec6a3d
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
FROM:https://www.jianshu.com/p/04401286278d
ARMv8-A架构定义了两个执行状态AArch64和AArch32。 AArch64状态对于ARMv8-A是唯一的并且使用64位通用寄存器,而AArch32状态则使用32位通用寄存器向后兼容ARMv7-A。 GNU和Linux文档(Redhat和Fedora发行版除外)有时将AArch64称为ARM64。
AArch32执行状态与包含虚拟化扩展,安全扩展和大型物理地址扩展的ARMv7-A实现兼容。 ARMv8-A架构允许使用AArch32或AArch64来执行不同的软件层(比如应用程序,操作系统内核或Hypervisor层)。 ARMv8-A体系结构定义了AArch32和AArch64如何交互。
下图显示了在AArch64中异常级别的组织。
aarch64_exception_levels.png
下图显示了在AArch32中异常级别的组织。
aarch32-processor_modes.png
在AArch32状态下,可信的操作系统软件在安全EL1中执行,在AArch64状态下,它主要在安全EL3中执行。
原文
https://developer.arm.com/products/architecture/a-profile/docs/100878/latest/execution-states
作者:赵国开
链接:https://www.jianshu.com/p/04401286278d
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
FORM:https://www.jianshu.com/p/1886f93677af
之前版本的ARM架构定义了基于处理器模式的异常模型。 对于每种异常类型,体系结构都定义了异常所采用的模式。 这种模式被称为异常的目标模式(target mode)。 然而可配置的陷入,使能和路由控制常常可以更改异常的目标模式。 ARMv8-A 的AArch32遵循此模型。
当处理器发生异常时:
ARMv7-A体系结构使用从PL0到PL2的特权级别。 在ARMv8-A中,异常级别已经取代了权限级别,但本节将介绍如何对PL1继续进行特殊使用。 下表显示了包含虚拟化扩展和安全扩展的ARMv7-A处理器的全套处理器模式。 它还显示了ARMv7-A分配给每个模式的特权级别,这些模式定义了其执行权限。 执行权限是在每个安全状态中独立定义的。
模式 | 功能 | 安全状态 | ARMv7-A特权级别 |
---|---|---|---|
User (USR) | 非特权模式(大多数应用程序都运行在该模式) | Both | PL0 |
FIQ | FIQ中断异常时进入 | Both | PL1 |
IRQ | IRQ中断异常时进入 | Both | PL1 |
Supervisor (SVC) | 重置时进入或执行监督调用指令(SVC)时进入 | Both | PL1 |
Monitor (MON) | 当执行SMC指令(安全监视器调用)时或处理器进入Monitor 模式异常用于支持安全状态和非安全状态之间的切换。 | Secure only | PL1 |
Abort (ABT) | 内存访问异常时进入 | Both | PL1 |
Undef (UND) | 在执行未定义的指令时进入 | Both | PL1 |
System (SYS) | 特权模式,与用户模式共享寄存器视图 | Both | PL1 |
Hyp (HYP) | 由Hypervisor调用和Hyp陷入异常时进入 | Non-secure only | PL2 |
在ARMv7-A体系结构中,处理器模式可以在特权软件控制下更改,或者在发生异常时自动更改。 当发生异常时,内核保存当前执行状态和返回地址,进入处理异常所需的模式,并可能禁用硬件中断。 在以前没有特权的用户模式,应用程序以最低级别的特权PL0运行。
操作系统在PL1上运行。 在具有虚拟化扩展的系统中,Hypervisor在PL2上运行。 安全监视器作为在安全世界和普通世界之间切换的网关,也在PL1上运行。
ARMv8-A不更改此异常模型,但添加了以下规则以涵盖ARMv7-A中不可能出现的情况:
在AArch64中,处理器模式被映射到的异常级别如下图所示。
aarch32-processor_modes .png
当发生异常时,处理器把异常级别切换到能处理该异常类型的异常级别(相当于ARMv7-A中的处理器模式)。 在AArch32中安全监视器(Secure monitor)在PL1上运行,而在AArch64中安全监视器在EL3上运行。
处理器模式映射到异常级别
安全状态下的异常级别取决于EL3是否使用AArch64。 这会影响处理器模式如何映射到异常级别。
下图显示了当EL3使用AArch64时,AArch32处理器模式如何映射到异常级别:
map_processor_modes_to_aarch64.png
ARMv7-A中使用的monitor模式在ARMv8-A中不存在。这是因为正在使用AArch64的EL3提供了Secure monitor功能。
当EL3使用AArch32时,AArch32处理器模式映射到异常级别如下:
map_processor_modes_to_aarch32.png
比较这两个图,在普通世界中映射没有变化,但是在安全世界中,Supervisor 模式,Abort 模式,IRQ模式,FIQ模式,Undefined 模式和System 模式从EL1升级到EL3。 这是因为:
这个重映射对处理器的操作没有影响。 在AArch32状态内的操作完全根据处理器模式之间的交互来定义,而不涉及任何关联的权限级别或异常级别。
ARMv8-A中的权限级别
当EL3使用AArch32时,这些模式集(Supervisor,Abort,IRQ,FIQ,Undefined,System)是处于安全状态的EL3模式,在所有其他情况下都是EL1模式。
为了避免这种复杂的描述,这些模式可以被描述为PL1模式,反映它们在ARMv7-A中的特权级别。 与此相关的是:
原文
https://developer.arm.com/products/architecture/a-profile/docs/100878/latest/changing-exception-levels
作者:赵国开
链接:https://www.jianshu.com/p/1886f93677af
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
FORM:https://www.jianshu.com/p/6d4049388a7c
有时你系统的执行状态必须改变。 例如,如果您正在运行AArch64操作系统,并希望在EL0上运行32位应用程序, 为此,系统必须切换到AArch32。 您只能通过更改“异常”级别来更改“执行”状态。 发生异常时异常可以将执行状态从AArch32更改为AArch64,并且从异常返回时可以将其从AArch64更改为AArch32。
当应用程序运行结束或执行返回到操作系统时,系统可以切换回AArch64。 下图显示哪些你能做,哪些不能做。 AArch32操作系统无法托管64位应用程序。 如下图所示:
move_between_32_and_64.png
在两个状态之间的切换是在安全监视器,管理程序或操作系统层级执行的。 以AArch64状态执行的管理程序或操作系统可以支持较低特权级别的AArch32操作。 这意味着在AArch64中运行的操作系统可以同时承载AArch32和AArch64应用程序。 同样,AArch64的管理程序可以同时承载AArch32和AArch64的客户操作系统。 但是,32位操作系统无法托管64位应用程序,而32位的管理程序无法托管64位客户操作系统。
要在同一个异常级别下更改执行状态,系统必须切换到较高的异常级别,改完之后在返回到原先的异常级别。
例如,您可能会在64位操作系统下运行32位和64位应用程序。 在这种情况下,32位应用程序可以执行和生成监督调用(SVC)指令,或者通过接收中断,以此切换到EL1和AArch64。 之后OS进行任务切换并返回到EL0中的AArch64。 实际上,这意味着你不能拥有一个混合32位和64位的应用程序,因为它们之间没有直接的调用方式。
在AArch64和AArch32执行状态之间切换的要点可以总结如下:
对于实现的最高异常级别(大多数ARMv8-A处理器上的EL3),当发生异常时用于每个异常级别的执行状态是固定的。 异常级别只能通过重置处理器来更改。 对于EL2和EL1,当不是实现的最高级别的异常级别时,可通过更高权限级别(使用系统寄存器)进行控制。
原文
https://developer.arm.com/products/architecture/a-profile/docs/100878/latest/changing-execution-state
作者:赵国开
链接:https://www.jianshu.com/p/6d4049388a7c
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。