ARMV8 datasheet学习笔记4:AArch64系统级体系结构之VMSA
1. 前言
2. VMSA概述
2.1 ARMv8 VMSA naming
|
VMSAv8 |
整个转换机中,地址转换有一个或两个stage |
|
VMSAv8-32 |
由运行AArch32的异常级别来管理 |
|
VMSAv8-64 |
由运行AArch64的异常级别来管理 |
2.2 某些异常级别使用AArch32的ARMv8 VMSA
|
2.3 VMSA地址类型和地址空间
- 地址类型
|
Virtral address(VA) |
虚拟地址主要用在指令中作为数据或指令地址,在PC/LR/SP/ELR中得都是虚拟地址 |
|
Intermediate physical address(IPA) |
(1)对支持两个stages地址转换的regimes,IPA是: 第一转换stage的输出地址; 第二转换stage的输入地址 (2)对于支持一个stage地址转换的regime,IPA与PA相同,可以假定IPA不存在 |
|
Physical Address(PA) |
(1)物理地址是PE输出给内存系统的输出地址; (2)EL3和secure EL1针对secure 和 non-secrue提供了单独的PA地址空间: Secure状态下访问VA可以转换为secure或non-secure的PA; Non-secure状态下访问VA只能转换为non-secure的PA |
- VA space
最大地址宽度为48bit,256TB,支持两种VA ranges:
(1)转换stage有一个VA range(0x0000000000000000 to 0x0000FFFFFFFFFFFF.);
(2)转换stage有两个VA ranges,一个在64bit的底部(0x0000000000000000 to 0x0000FFFFFFFFFFFF.),一个在64bit的顶部(0xFFFF000000000000 to 0xFFFFFFFFFFFFFFFF)
2.4 AArch64运行状态的地址tagging
|
高8位地址将被忽略的情况 |
|
|
地址tag的控制 |
1. 对于支持2个VA范围,使用1 stage的地址 (1)VA[55]==0: 决定由TCR_ELx.TBI0来决定是否使用地址tag,同时如果stgage 1 tanslation 使能,决定由TTBR0_ELx还是来保存translation table的base address (2)VA[55]==1: 决定由TCR_ELx.TBI1来决定是否使用地址tag,同时如果stgage 1 tanslation 使能,决定由TTBR1_ELx还是来保存translation table的base address (3)如果TBIn为1,则load到PC的地址的VA[63~56]按VA[55]做符号扩展 2. 对于支持1个VA范围,使用1 stage的地址 (1)TCR_ELx.TBI决定是否使用地址tag; (2)同时如果stgage 1 tanslation 使能,决定由TTBR0_ELx还是来保存translation table的base address (3)如果TBIn为1,则load到PC的地址的VA[63~56]强制为0 |
|
地址tag使能位对PC值的影响??? |
|
|
Relaxation of the tagged address handling requirements on an Illegal exception return |
3. VMSAv8-64 地址转换系统
3.1 术语说明
|
MMU |
控制地址转换、存储访问权限、存储属性的检测和检查 |
|
MMU模型 |
|
|
转换粒度 |
|
|
Translation tables |
将地址转换及相关联的内存属性放在一个映射表中,这个映射表就叫tanslation tables |
|
Levels of lookup |
一个tanslation table lookup只涉及一部分VA bits,因此一次VA查找需要经过多级查找才能最终得到PA |
|
TLB |
Translation talbe的项可以放到Translation Lookaside Buffer,TLB也就成为了tanslation table的cache |
|
Translation entry |
定义了下面的一些属性:
|
|
AArch64转换机制 |
实例:
|
|
地址转换与IA范围 |
|
|
VMSAv8-64转换表格式 |
|
3.2 控制地址转换stage
|
地址转换stage |
一个寄存器bit使能地址转换的stage |
|
一个寄存器bit决定了tanslation table lookup的端 |
|
|
Translation control regsister控制了地址转换的stage |
|
|
(Translation table base register)TTBR指明了translation table的基地址 |
|
|
和MMU操作相关的系统寄存器 |
![]() |
|
地址大小配置 |
PA大小 OA大小 IA大小 IPA大小 |
|
Atomicity of register changes on changing virtual machine |
|
|
Use of out-of-context translation regimes |
当从一个异常级别切换到另一个异常级别,则之前的异常级别下的内存访问,在当前的异常级别下都不会被观察到. (1) 当运行在EL3,EL2或secure EL1,PE不能使用non-secure EL1和non-secure EL0的translation机制进行内存的随机访问; (2) 当运行在EL3或secure EL1,PE不能使用EL2的translation机制进行内存的随机访问; (3) 当运行在EL3,EL2或non-secure EL1,PE不能使用secure EL1的translation机制进行内存的随机访问; |
3.3 内存translation粒度size
|
Translation 粒度 |
(1)Translation table的大小; (2)Page的大小 |
|
粒度大小对转换过程的影响(以4k页为例) |
(1) VA[n~0] page offset,对4k page,则n=12; (2) VA[n-3] 表示一级tanslation table的bits。由于一个translation table大小一般是一个page,每个translation talbe entry用8个字节表示,则有PAGE_SIZE/8个tranlation table entry,需要用n-3个bit来表示 以4k页为例,则4k/8=512,因此需要9个bit,也就是12-3 |
|
粒度大小对Translation table addressing和indexing的影响 |
|
|
减少的IA宽度的影响 |
(1) 第一级Translation talbe size减小; (2) 需要更多的TTBR位来存放更多的base address |
|
Concatenated translation tables |
(1) 增加第一级Translation talbe size; (2) 需要更少的TTBR位来存放更少的base address |
3.4 Translation table和translation过程
|
Translation table walks |
(1) PA,如果是在secure状态下访问,将返回访问的是secure PA space还是non-secure PA space; (2) 目标存储区域的属性; (3) 目标存储区域的权限
(1) 如果是walk的最后一项,则包含OA; (2) 如果还有下一级的lookup,则返回下一级lookup的基地址; (3) 如果描述符是无效的,内存将返回一个translation fault. |
|
访问translation table walks内存的顺序 |
|
|
Translation table walks的安全状态 |
|
|
Translation table walks的控制 |
对于支持2个 ranges的1 stage的translation,TCR_ELx. {EPD0, EPD1}位决定stage使用的translation tables是否是合法有效的 |
3.5 VMSA-v8-64地址转换stage 概览
|
VMSAv8-64地址转换概览(4K粒度) |
|
4.参考文档
[1] DDI0487A_k_armv8_arm_iss10775.pdf
ARMV8 datasheet学习笔记4:AArch64系统级体系结构之VMSA的更多相关文章
- ARMV8 datasheet学习笔记3:AArch64应用级体系结构
1.前言 本文主要从应用的角度介绍ARMV8的编程模型和存储模型 2. AArch64应用级编程模型 从应用的角度看到的ARM处理器元素: 可见的元素(寄存器/指令) 说明 可见的寄存器 R0-R30 ...
- ARMV8 datasheet学习笔记5:异常模型
1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文 3. 异常处理路由对比 AArch32.AArch64架 ...
- ARMV8 datasheet学习笔记1:预备知识
1. 前言 ARMv8的架构继承以往ARMv7与之前处理器技术的基础; 除了支持现有的16/32bit的Thumb2指令外,也向前兼容现有的A32(ARM 32bit)指令集. 基于64bit的AAr ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST
1.前言 ARMV8系统级编程模型主要包括异常级别.运行状态.安全状态.同步异常.异步异常.DEBUG 本文主要对系统级编程模型做一个概要介绍 2. 异常级别 2.1 Exception level概 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之Generic timer
1.前言 2.generate timer 2.1 概述 提供了一个系统计数器,用来实时测量流逝的时间: 提供了一个虚拟计数器,用来测量某个虚拟机上流逝的虚拟时间: 定时器,每隔一段时间会触发事件,支 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之存储模型
1.前言 关于存储系统体系架构,可以概述如下: 存储系统体系结构的形式 VMSA 存储属性 2. 存储系统体系结构 2.1. 地址空间 指令地址空间溢出 指令地址计算((address_of ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(4)- 其它
1. 前言 2.可配置的指令使能/禁用控制和trap控制 指令使能/禁用 当指令被禁用,则这条指令就会变成未定义 指令Trap控制 控制某条或某些指令在运行时进入陷阱,进入陷阱的指令会产生trap异常 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(3)- 异常
1.前言 本文介绍异常相关内容,包括异常类型,异常进入,异常返回,异常层次结构,异常的路由等 2. RESET ARMV8体系结构支持两种类型的RESET Cold reset:Reset PE所有 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(2)- 寄存器
1. 前言 2. 指令运行与异常处理寄存器 ARM体系结构的寄存器分为两类: (1)系统控制和状态报告寄存器 (2)指令处理寄存器,如累加.异常处理 本部分将主要介绍如上第(2)部分的寄存器,分为AA ...
随机推荐
- 实现 60fps 的网易云音乐首页
网易云音乐是一款很优秀的音乐软件,我也是它的忠实用户.最近在研究如何更好的开发TableView,接着我写了一个Model驱动的小框架 - MDTable.为了去验证框架的可用性,我选择了网易云音乐的 ...
- 自学Linux Shell6.1-环境变量概念
点击返回 自学Linux命令行与Shell脚本之路 6.1-环境变量概念 环境变量 在Linux中,很多程序和脚本都通过环境变量来获取系统信息.存储临时数据和配置信息: bash shell使用环境变 ...
- 架构师成长之路4.4-多维监控体系_zabbix
点击返回架构师成长之路 点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 架构师成长之路4.4-多维监控体系_zabbix 自学Zabbix之路[第 ...
- luogu4267 TamingtheHerd (dp)
设f[i][j]为让前i天发生j次暴动需要改变的最少的值 则f[i][j]=min{f[k][j-1]+(x[k+1]!=0)+(x[k+2]!=1)+...+(x[i]!=(i-k-1))} $O( ...
- http和https的作用与区别
PS: https就是http和TCP之间有一层SSL层,这一层的实际作用是防止钓鱼和加密.防止钓鱼通过网站的证书,网站必须有CA证书,证书类似于一个解密的签名.另外是加密,加密需要一个密钥交换算法, ...
- mod(%)之规律(除数与被除数的正负分析)
首先注意“-9 % 4”,根据运算符优先级,负号运算符优先级大于余数(取模),所以执行的是“(-9) % 4”. 其次 % = mod ,只是在不同地方表示方法不同而已. 被除数无论是正数和负数结果都 ...
- 质量不合格_区分excel两列不同的值
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...
- jenkins master-slave配置
如果要想自动化构建,需要slave主机能够从源码库上拉代码,并打包构建 选取指定的slave进行构建 jenkins + docker 实现slave的动态构建和销毁 https://www.cnbl ...
- centos7环境下安装mysql5.6-----解压安装包的方法
参考连接:https://blog.csdn.net/qq_17776287/article/details/53536761 linux下有很多服务,如何查看服务是否启动,以mysql为例子 使用命 ...
- JAVA实现二叉树(简易版--实现了二叉树的各种遍历)
1,个人感觉二叉树的实现主要还是如何构造一颗二叉树.构造二叉树函数的设计方法多种多样,本例采用 addNode 方法实现.以下程序通过定义内部类来表示二叉树的结点,然后再实现了二叉树这种数据结构的一些 ...



