1.前言

本文主要从应用的角度介绍ARMV8的编程模型和存储模型

2. AArch64应用级编程模型

从应用的角度看到的ARM处理器元素:

可见的元素(寄存器/指令)

说明

可见的寄存器

R0-R30、SP、    PC、 V0-V31、 FPCR、   FPSR

可见的PSTATE

NZCV DAIF

可见的系统寄存器

Cache ID registers

Debug registers

Performance Monitors registers

Thread ID registers

Timer registers

性能监控支持

可通过高一级的异常级别修改PMUSERENR_EL0寄存器来使能EL0的性能监控功能

异常处理

通过SVC指令引发系统调用异常(异常处理是由高于EL0的异常级别执行的)

等待中断与等待事件

WFI和WFE指令

Yield指令

为提高整体性能,某个线程让给其它线程,用于多线程执行下的性能优化

Cache管理

很少的cache管理指令供EL0使用,通过高异常级别设置SCTLR_EL1,来使能cache管理指令

Debug事件

应用级软件对大部分Debug事件不可见,仅有的包括:

BKPT指令:引起BKPT指令事件发生;

DBG指令:给debug系统提供暗示??

HLT指令:引发进入debug状态

表 AARCH64下从应用的角度可以看到的寄存器或指令集

3. AArc64应用级存储模型

3.1 地址空间

  • 采用64bit寄存器计算地址;
  • 高8位可由supervisory软件配置作为tag信息;
  • 高8位配置为tag信息将不做有效性检查,也不会传递给PC;
  • supervisory软件决定有效地址范围,如果访问非法地址会导致MMU fault.

3.2 存储类型

  • Normal

主要用于大块内存的读写、只读操作;

  • Device

禁止随机读写操作,如大部分的IO寄存器

3.3 Cache与存储层级

内存系统的实现非常依赖各个处理器的具体实现,ARMV8体系结构定义了与内存系统交互的应用级接口,包括带有多级caches的存储层级系统

  • cache

Cache是一种高速的存储块。包含很多的存储项,每个存储项包含主存的地址(称为tag)和数据信息。利用时间局部性和空间局部性提高了内存的访问速度;

Cache line: 将cache分成一些固定大小的存储空间, 这些存储空间叫做Cache Line.

Cache hit:cache命中,访问的数据存在于cache中;

Cache miss:cache失效,访问的数据不在cache中;

  • PoU(Point of Unification)

PoU是一个存储层级的点,data cache,  instruction cache和translation table walks看到的都是相同的copy. 那么这个点就是该PE的Point of Unification。

假设一个4核cpu,每个core都有自己的L1 instruction cache和L1 Data cache,所有的core共享L2 cache。在这样的一个系统中,PoU就是L2 cache,只有在该点上,特定PE的instruction cache、data cache和translation table walk硬件单元访问memory的时候看到的是同一个copy

  • PoC(Point of Coherency)

可以认为是Point of System,它和PoU的概念类似,只不过PoC是以系统中所有的agent(bus master,又叫做observer,包括CPU、DMA engine等)为视角

这些agents在进行memory access的时候看到的是同一个copy的那个“点”。例如上一段文章中的4核cpu例子,如果系统中还有一个DMA controller和main memory(DRAM)通过bus连接起来,在这样的一个系统中,PoC就是main memory这个level,因为DMA controller不通过cache访问memory,因此看到同一个copy的位置只能是main memory了。

  • Cacheablily和shareablity

用来描述多处理器系统中的存储层级属性.

Cacheablity:定义了是否某段内存被指定给了一个cache;

Shareablity:定义了某段内存位置在整个系统中是共享的. 指当前内存页表项的数据是否可以同步到其它CPU上,多核CPU调用带有该属性页表项的数据,一旦某个CPU修改了数据,那么系统将自动更新到其它CPU的数据拷贝,实现内存数据一致性

3.4 应用访问cache相关功能

体系结构定义了一组cache维护指令,应用软件可以用来管理cache一致性。运行在EL1或更高异常等级的软件可以使能/禁用EL0的一些功能:

(1)SCTLR_EL1.UCI == 1

运行在EL0的软件可以访问数据cache维护指令(DC CVAC/DC CVAU/DC CIVAC)和指令cache维护指令(IC IVAU)

(2)SCTLR_EL1.UCT== 1

运行在EL0的软件可以访问cache type register.

(3)SCTLR_EL1.DZE== 1

运行在EL0的软件可以访问1数据cache zero指令(DC ZVA)

3.5 应用程序员关于cache的一些隐含问题

  • 数据一致性问题

可以通过如下方法解决数据一致性问题:

(1)不使用cache。使用non-cached memory,直写memory; 不要使能系统中的cache;

(2)使用cache维护指令来管理软件中的一致性问题;

(3)通过使用硬件一致性机制来保证不同共享域的观察者所见的内存访问是一致的;

  • 数据与指令访问的同步和一致性问题

下面以修改一条指令为例说明如何保证数据一致性:

(1)STR Wt, [Xn]

将新的修改的指令存入Xn指向的内存(实际存入了data cache);

(2)DC CVAU, Xn

将data cache中数据真正刷入内存;

(3)DSB ISH

等前面的DC指令执行完成后再执行后面的指令;

(4)IC IVAU, Xn

无效指令cache到PoU的数据;

(5)DSB ISH

等前面的IC指令执行完成;

(6)ISB

3.6 Preload caches

将指令或数据提前放入cache来加快内存访问速度

3.7 对齐支持

3.7.1 Instruction alignment

A64指令必须是word(32bits)对齐,试图从一个PC未对齐的位置取指会引发PC对齐错误

3.7.2 Data  alignment

  • 对device memory的访问

必须对齐,否则会引发unalignment fault;

  • 对normal memory的访问

(1) Load-Exclusive/Store-Exclusive and Load-Acquire/Store-Release

任何访问地址没有对齐到访问元素将会产生对齐错误

(2) 其它情况

a). SCTLR_ELx.A==1,使能对齐检查,任何访问地址没有对齐到元素将会产生对齐错误;

b). SCTLR_ELx.A==0,不使能对齐检查,支持对非对齐的访问

注:SCTLR_EL1.A只能在EL1访问,设置的EL0和EL1的对齐检查

  • 对齐检查失败将会导致对齐错误,会捕获data abort异常

(1)  如果从Non-secure EL0或EL1访问,如果齐检查失败发生在地址转换的第一阶段,异常将传递给EL1;

(2)  如果从Non-secure EL0或EL1访问,如果对齐检查失败发生在地址转换的第二阶段,异常将传递给EL2;

(3)  对于除(1)(2)的其它情况,如果对齐检查失败,异常将传递给能处理此异常的最低异常级别,但要遵循异常发生时异常等级不能降低的原则:

EL0或EL1下的对齐异常会传给EL1;

EL2下的对齐异常会传给EL2;

EL3下的对齐异常会传给EL3;

3.7.3 Unaligned data access restrictions

(1)除字节外,单次拷贝不能保证是原子的;

(2)相比于对齐访问,非对齐访问会花费额外的时钟;

(3)非对齐访问会跨越页边界,执行两次访问,会比单次访问更容易引发data abort异常

3.8 端支持

  • 端的通常描述

大端存储:高位存在低地址,低位存在高地址;

小端存储:高位存在高地址,低位存在低地址;

  • 指令大小端描述

A64指令固定为32bit,且为小端存储

  • 数据大小端描述

在EL1或更高的异常级别通过配置SCTLR_EL1.E0E来决定EL0下数据为大端还是小端

3.9 Atomicity

见 ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Atomicity 一文

3.10 指令修改与执行的并行化

当PE正在修改指令时,要保证没有其它PE在执行此指令;

单处理器:PE修改了内存(cached)中的指令,需要清data cache,无效指令cache;

多处理器:通过广播告知所有PE无效指令cache,每个PE需通过ISB等待修改操作完成

3.11 memory order

见 ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Memory order 一文

3.12 Memory Type and Attributes

见 ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Memory Type and Attributes 一文

3.13 Synchronization and semapores

见 ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Synchronization and semapores 一文

4. 参考文档

[1] DDI0487A_k_armv8_arm_iss10775.pdf

[2] ARMv8之Atomicity

ARMV8 datasheet学习笔记3:AArch64应用级体系结构的更多相关文章

  1. ARMV8 datasheet学习笔记5:异常模型

    1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文 3. 异常处理路由对比 AArch32.AArch64架 ...

  2. ARMV8 datasheet学习笔记1:预备知识

    1. 前言 ARMv8的架构继承以往ARMv7与之前处理器技术的基础; 除了支持现有的16/32bit的Thumb2指令外,也向前兼容现有的A32(ARM 32bit)指令集. 基于64bit的AAr ...

  3. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之VMSA

    1. 前言 2. VMSA概述 2.1 ARMv8 VMSA naming VMSAv8 整个转换机中,地址转换有一个或两个stage VMSAv8-32 由运行AArch32的异常级别来管理 VMS ...

  4. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(4)- 其它

    1. 前言 2.可配置的指令使能/禁用控制和trap控制 指令使能/禁用 当指令被禁用,则这条指令就会变成未定义 指令Trap控制 控制某条或某些指令在运行时进入陷阱,进入陷阱的指令会产生trap异常 ...

  5. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(3)- 异常

    1.前言 本文介绍异常相关内容,包括异常类型,异常进入,异常返回,异常层次结构,异常的路由等 2.  RESET ARMV8体系结构支持两种类型的RESET Cold reset:Reset PE所有 ...

  6. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST

    1.前言 ARMV8系统级编程模型主要包括异常级别.运行状态.安全状态.同步异常.异步异常.DEBUG 本文主要对系统级编程模型做一个概要介绍 2. 异常级别 2.1 Exception level概 ...

  7. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之Generic timer

    1.前言 2.generate timer 2.1 概述 提供了一个系统计数器,用来实时测量流逝的时间: 提供了一个虚拟计数器,用来测量某个虚拟机上流逝的虚拟时间: 定时器,每隔一段时间会触发事件,支 ...

  8. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之存储模型

    1.前言 关于存储系统体系架构,可以概述如下: 存储系统体系结构的形式 VMSA 存储属性   2. 存储系统体系结构 2.1.    地址空间 指令地址空间溢出 指令地址计算((address_of ...

  9. ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(2)- 寄存器

    1. 前言 2. 指令运行与异常处理寄存器 ARM体系结构的寄存器分为两类: (1)系统控制和状态报告寄存器 (2)指令处理寄存器,如累加.异常处理 本部分将主要介绍如上第(2)部分的寄存器,分为AA ...

随机推荐

  1. adb 命令 链接 安装应用

    adb connect 192.168.11.1:5555(可省略) adb kill-server  杀掉服务 adb install xxx.apk

  2. [luogu3258][JLOI2014]松鼠的新家

    题解 我们就在\([a_i,a_{i+1}]\)的路径上都\(+1\),然后单点查询就可以了. ac代码(吸了氧才过的QwQ) # include <bits/stdc++.h> # de ...

  3. [SHOI2013]发牌 解题报告

    [SHOI2013]发牌 题意 对一个\(1\sim n(n\le 7\times 10^5)\)的环,指标最开始在\(1\),每次删去顺时针往后第\(d_i\)个元素,指标移到下一个位置.要求输出每 ...

  4. Linux监控--CPU、内存、I/O

    CPU top命令能够实时监控系统的运行状态,并且可以按照CPU.内存和执行时间进行排序,同时top命令还可以通过交互式命令进行设定显示,通过top命令可以查看即时活跃的进行. 内存 free命令可以 ...

  5. P2569 股票交易

    题目大意: 你初始时有∞ 元钱,并且每天持有的股票不超过 Maxp . 有 T 天,你知道每一天的买入价格( AP[i] ),卖出价格( Bp[i] ), 买入数量限制( AS[i] ),卖出数量限制 ...

  6. JS循环语句!

    <1> for(1.初始值(初始值只有一次):2.判断条件:4.状态改变){ 3.执行语句: //如果判断条件为true,则进入死循环:不设执行语句浏览器会未响应: } <2> ...

  7. 路径或文件名中含有中文的jar文件双击启动不了 -> Java7的Bug?

    至从安装了java7后,才发现部分可执行的jar文件双击都启动不了了. 比如所有的jar文件放在桌面上双击启动不了. 比如所有的文件名中含有中文的jar文件双击启动不了. 比如一个 abc.jar 放 ...

  8. jar文件放在桌面上双击启动不了,但放在其它任何文件夹里都可以双击启动

    今天本来是想尝试一下Java Network Launching Protocol (JNLP,java网络加载协议) 的,写了一个简单的窗口程序,打包成jar保存到桌面上,双击等了半天没显示出来. ...

  9. 按钮JButton,单选按钮JRadioButton,复选框JCheckBox

    1.按钮JButton public class Demo extends JFrame { public Demo() { setBounds(100, 100, 400, 200); setDef ...

  10. 无法SSH服务器的解决过程(openssh-daemon is stopped)

    公司某台服务器不知为何无法ssh连接上,进入现场查看: 1.执行netstat -atnlp|grep ssh,没有找到ssh端口 2.执行ps aux|grep ssh,没找到相关进程 3.执行se ...