作者:罗宇哲,中国科学院软件研究所智能软件研究中心
鲲鹏处理器采用 ARM 架构,欧拉系统可以运行在鲲鹏架构的服务器上,想要了解欧拉操作系统对硬件的支持,首先需要了解一些 ARM 架构的基础知识。操作系统中硬件相关的部分集中体现在汇编指令和对寄存器的操作中,因此我们对 ARM 体系结构的介绍也围绕 ARMv8-A 的汇编指令和寄存器来展开。
处理器架构是处理器厂商为同一个系列的处理器规定的一个规范。ARM 架构是一种精简指令集(RISC)架构,具有以下 RISC 架构特点:
- 较大的通用寄存器堆。
- load/store 体系结构,其中数据处理操作仅对寄存器内容进行操作,而不是直接对内存内容。
- 简单寻址模式,所有 load/store 地址由寄存器内容和指令确定。
该体系结构定义了处理单元与内存(包括缓存)的交互,并包括内存地址翻译系统。它还描述了多个处理单元如何相互作用。面积小、性能强和非常低的功耗是 ARM 体系结构的关键特性。本小节主要以 ARMv8-A 架构为例来介绍ARM体系结构的基本特性。ARMv8-A 体系结构的一个重要特性是向后兼容,可以支持诸多标准和应用场景下的最优设计。ARMv8-A 架构支持 64bit 的执行模式(AArch64)和 32bit 的执行模式(AArch32),这一模式兼容之前的 ARM 架构。两种执行状态都支持 SIMD 和浮点指令。
一、AMRv8架构概要
ARM 体系结构自推出以来已经有了显著的发展,并且 ARM 还在继续开发它。到目前为止,已经有八个主要版本,由版本号1到8表示。其中前三个版本现在已经过时了。
通用名称 AArch64 和 AArch32 描述了64位和32位执行状态。AArch64 是64位执行状态,意味着地址保存在64位寄存器中,并且基本指令集可以使用64位寄存器进行处理。AArch64 支持 A64 指令集。AArch32 是32位执行状态,这意味着地址保存在32位寄存器中,并且基本指令集使用32位寄存器进行处理。Arch32 支持 T32 和 A32 指令集。
ARM支持三种架构配置:
- A 系列,面向应用场景的架构(Application Profile)。该系列支持基于内存管理单元(MMU)的虚拟内存系统体系结构(VMSA)。它支持 A64、A32和T32 指令集。
- R 系列,面向实时场景的架构配置。该系列支持基于内存保护单元(MPU)的受保护内存系统体系结构(PMSA)。它支持 A32 和 T32 指令集。
- M 系列,面向微处理器的架构。该系列实现了一个为低延迟中断处理而设计的程序员模型(programmers’ model),该模型具有寄存器硬件堆栈和对中断处理程序的高级语言支持。它支持 T32 指令集的变种。
注:内存保护单元(MPU)是 ARM 中配备的有效保护系统资源的一种硬件,提供了内存区域保护功能。
二、ARMv8-A指令集
在 ARMv8-A 中,可能的指令集取决于执行状态:
- AArch64:AArch64 state 只支持 A64 指令集。这是一个固定长度的指令集,使用32位指令编码。
- AArch32:AArch32 state 支持以下指令集:
- A32:这是一个固定长度的指令集,使用32位指令编码。它是与 ARMv7 ARM 指令集兼容。
- T32:这是一个可变长度指令集,它同时使用16位和32位指令编码。它与 ARMv7 Thumb® 指令集兼容。
ARM指令的基本格式如下[2]ÿ