ILD

ARMv8-A Programmer Guide学习笔记1
作者:Herbert Yuan 邮箱:yuanjp@hust.edu.cn
发布时间:2018-4-11 站点:Inside Linux Development

Preface

2013年,ARM发布了64位ARMv8架构,这是自2007年的ARMv7架构以来,ARM架构的第一次主要改变。


Chapter 1 Introduction

ARMv8包含32位执行状态和64位执行状态。

AArch64用来描述64位执行状态。

AArch32用来描述32位执行状态,其基本上和ARMv7一样。

GNU和Linux的文档,有时将AArch64称为ARM64.

ARMV8-A的许多基本概念和ARMv7-A相同。


Cortex-A系统包含ARMv8-A和ARMv7-A

Cortex-A5/7/8/9/15/17为ARMv7-A架构。

Cortex-A53/57为ARMv8-A架构


ARMv8处理器通过AArch32执行环境仍然支持ARMv7-A软件(除了一些例外)。


64位处理器有一些性能提升:

- 支持通过寄存器传递8个参数。

- 64位寄存器

- 更大的虚拟地址空间。


Chapter 2 ARMv8-A Architecture and Processors


2.1 ARMv8-A

ARMv8-A是用于Application Profile的最新一代ARM架构。


Large physical address


64-bit virtual addressing


Automatic event signaling

    可实现power-efficient和高性能spinlocks。


Larger register files

    31个64位通用寄存器


Efficient 64-bit immediate generation


Large PC-relative addressing range

    +/- 4GB的地址范围,共享库和位置无关代码的寻址更大了。


Additional 16KB and 64KB translation granules

    减小了TLB miss的几率和page walk的深度。


New exception model

    减小了OS和hypervisor的复杂性。


Efficient cache management


Hardware-accelerated cryptography


Load-Acquire, Store-Release instructions

    为C++11, C11, Java内存模型设计,通过产生显式的内存屏障指令提高线程安全代码的性能。


NEON double-precision floating-point advanced SIMD


2.2 ARMv8-A processors properties


Cortex-A53 processor

中等,低功耗处理器,可以有1到4核,每个核有一个L1 cache。可选的L2 cache。

A53可以和A57组成big.LITTLE配置。

A53具有下列特性

- In-order, 8 stage pipeline

...


Cortex-A57 processor

A57用于手机和商业电脑应用。

具有以下特性:

Out-of-order, 15+ stage pipeline


Chapter 3 Fundamentals of ARMv8


有4个Exception levels,EL决定privilege level。


EL0 Normal user applications.

EL1 Operating system kernel typically described as priviledged.

EL2 Hypervisor.

EL3 Low-level firmware, including the Secure Monitor.


ARMv8-A提供两种security states:Secure和Non-secure。Non-secure状态也被称为为Noraml World。



ARMv8-A也提供虚拟化支持,但是只在Normal world支持。


3.1 Execution states

ARMv8有两种执行状态:AArch64和AArch32。


在AArch64状态,执行64位指令。在AArch32状态,执行A32或T32指令。


3.2 Changing Exception levels

ARMv7 processor mode


AArch64,处理器模式映射到exception levels。

异常等级改变有下列规则

1 移到更高的异常等级意味着更高的执行权限。

2 异常不能使等级变低。

3 EL0没有异常处理。

4 异常引起程序流的改变,异常包括:

    中断,内存异常,未定义指令,系统调用,secure monitor或者hypervisor traps

5 结束异常,返回到之前的异常等级通过执行ERET指令实现。

6 从一个异常返回,可以留在同一个异常等级或更低的异常等级,不能移到更高的异常等级。

7 改变异常等级不改变安全状态,除了从EL3返回到非安全状态。


3.3 Changing execution state

为了改变同一个异常等级下的执行状态,需要切换到更高的异常等级,然后切回来。


只有在改变异常等级时,才能切换执行状态。EL3不能切换到更高的异常等级,所以不能改变执行状态,只有通过reset才能改变。


总结:

改变到AArch32要求降低异常等级。

改变到AArch64要求提高异常等级。

产生一个异常,或者从异常返回,如果异常等级不变,则执行状态不能改变。

当ARMv8处理器在一个异常等级运行AArch32状态。它有和ARMv7相同的异常模型。



Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.