ARMv8 TTBRx寄存器
ARMv8 TTBRx寄存器
- 1 TTBR0_ELx and TTBR1_ELx
- 2 TTBR0_ELx
- 2.1 TTBR0_EL1
- 2.2 TTBR0_EL2
- 2.3 TTBR0_EL3
- 3 TTBR1
- 3.1 TTBR1_EL1
- 3.2 TTBR1_EL2
- 4 访问TTBRx寄存器
- 4.1 TTBR0_ELx
- 4.2 TTBR1_ELx
- 5 TTBRx保留的是物理地址还是虚拟地址
- 5.1 保存的是物理地址还是虚拟地址
- 5.2 为什么是物理地址而不是虚拟地址
1 TTBR0_ELx and TTBR1_ELx
Selection between TTBR0_ELx and TTBR1_ELx when two VA ranges are supported.
支持两个 VA 范围时,在 TTBR0_ELx 和 TTBR1_ELx 之间进行选择。
Every translation table walk starts by accessing the translation table addressed by the TTBR_ELx for the stage 1 translation for the required translation regime.
每个转换表遍历都从访问由 TTBR_ELx 寻址的转换表开始,以实现所需转换机制的第 1 阶段转换。
For a stage 1 translation that can support two VA ranges, Figure D5-14 shows this VA range split when using 48-bit
VAs, and:
对于可支持两个 VA 范围的第 1 阶段转换,图 D5-14 显示了在使用 48 位 VA 时的 VA 范围划分。
- TTBR0_ELx points to the initial translation table for the lower VA range, that starts at address 0x0000000000000000
- TTBR0_ELx 指向从地址 0x0000000000000000 开始的低 VA 范围的初始转换表
- TTBR1_ELx points to the initial translation table for the upper VA range, that runs up to address 0xFFFFFFFFFFFFFFFF.
- TTBR1_ELx 指向 VA 上限值范围的初始转换表,该表最高可达地址 0xFFFFFFFFFFFFFFFF。

As Figure D5-14 shows, for 48-bit VAs: - The address range translated using TTBR0_ELx is 0x0000000000000000 to 0x0000FFFFFFFFFFFF.
- 使用 TTBR0_ELx 转换的地址范围为 0x000000000000 至 0x0000FFFFFFFF。
- The address range translated using TTBR1_ELx is 0xFFFF000000000000 to 0xFFFFFFFFFFFFFFFF.
- 使用 TTBR1_ELx 转换的地址范围为 0xFFFF000000000000 至 0xFFFFFFFFFFFFFFFF。
Which TTBR_ELx is used depends only on the VA presented for translation. The most significant bits of the VA must all be the same value and:
使用哪个 TTBR_ELx 仅取决于所提供的 VA 是否需要转换。VA 的最高有效位必须全部为相同的值,并且: - If the most significant bits of the VA are zero, then TTBR0_ELx is used.
- 如果 VA 的最有效位为零,则使用 TTBR0_ELx。
- If the most significant bits of the VA are one, then TTBR1_ELx is used.
- 如果 VA 的最有效位为 1,则使用 TTBR1_ELx。
2 TTBR0_ELx
2.1 TTBR0_EL1
TTBR0_EL1, Translation Table Base Register 0 (EL1)
The TTBR0_EL1 characteristics are:
Purpose
Holds the base address of the translation table for the initial lookup for stage 1 of the translation of an address from the lower VA range in the EL1&0 translation regime, and other information for this translation regime.
保存转换表的基地址,用于在 EL1&0 转换机制中从较低 VA 范围转换地址的第 1 阶段初始查找,以及该转换机制的其他信息。
Configurations
AArch64 System register TTBR0_EL1[63:0] is architecturally mapped to AArch32 System register TTBR0[63:0].
AArch64 系统寄存器 TTBR0_EL1[63:0]在架构上映射到 AArch32 系统寄存器
Attributes
TTBR0_EL1 is a 64-bit register.
Field descriptions
The TTBR0_EL1 bit assignments are:

ASID, bits [63:48]
An ASID for the translation table base address. The TCR_EL1.A1 field selects either TTBR0_EL1.ASID or TTBR1_EL1.ASID.
翻译表基址的 ASID。TCR_EL1.A1 字段选择 TTBR0_EL1.ASID 或 TTBR1_EL1.ASID。
If the implementation has only 8 bits of ASID, then the upper 8 bits of this field are RES0.
如果实现只有 8 位 ASID,则该字段的高 8 位为 RES0。
This field resets to an architecturally UNKNOWN value.
该字段重置为一个架构上未知的值。
BADDR, bits [47:1]
Translation table base address, A[47:x] or A[51:x], bits[47:1].
转换表基址,A[47:x] 或 A[51:x],位 [47:1]。
Note:
- Translation table base addresses of 52 bits, A[51:x], are supported only in an implementation that includes ARMv8.2-LPA and is using the 64KB translation granule.
- 只有在包含 ARMv8.2-LPA 并使用 64KB 转换粒度的实施中,才支持 52 位的转换表基址 A[51:x]。
- A translation table must be aligned to the size of the table, except that when using a translation table base address larger than 48 bits the minimum alignment of a table containing fewer than eight entries is 64 bytes.
- 翻译表必须根据表的大小对齐,但当使用的翻译表基址大于 48 位时,包含少于 8 个条目的翻译表的最小对齐方式为 64 字节。
2.2 TTBR0_EL2
TTBR0_EL2, Translation Table Base Register 0 (EL2)



A translation table must be aligned to the size of the table, except that when using a translation table base address larger than 48 bits the minimum alignment of a table containing fewer than eight entries is 64 bytes.
2.3 TTBR0_EL3
TTBR0_EL3, Translation Table Base Register 0 (EL3)



3 TTBR1
3.1 TTBR1_EL1
TTBR1_EL1, Translation Table Base Register 1 (EL1)



3.2 TTBR1_EL2
TTBR1_EL2, Translation Table Base Register 1 (EL2)



4 访问TTBRx寄存器
4.1 TTBR0_ELx
读TTBR0_ELx寄存器的值到普通寄存器中
mrs <Xt>, TTBR0_ELx
将普通寄存器Xt的值写入TTBR0_ELx寄存器中
msr TTBR0_ELx, <Xt>
4.2 TTBR1_ELx
读TTBR1_ELx寄存器的值到普通寄存器中
mrs <Xt>, TTBR1_ELx
将普通寄存器Xt的值写入TTBR1_ELx寄存器中
msr TTBR1_ELx, <Xt>
5 TTBRx保留的是物理地址还是虚拟地址
5.1 保存的是物理地址还是虚拟地址
在ARMv8架构中,TTBR(Translation Table Base Register)寄存器保存的是一级页表的物理地址。
ARMv8架构使用了分页内存管理方式。页表包含了虚拟地址到物理地址的映射,当CPU需要访问内存时,硬件会根据虚拟地址查找页表,以获得对应的物理地址。
页表本身也在内存中,因此需要有一个方式让硬件知道它在哪里。这就是TTBR寄存器的用途。当页表需要被查找时,硬件会从TTBR寄存器中读出页表的物理地址,然后再根据虚拟地址在页表中查找对应的物理地址。因此,TTBR寄存器中保存的是一级页表的物理地址。
5.2 为什么是物理地址而不是虚拟地址
使用物理地址而非虚拟地址的主要原因是为了避免递归和降低复杂性。
如果TTBR保存的是虚拟地址,那在转换虚拟地址为物理地址时,就需要先找到页表的物理地址,而页表的虚拟地址又需要做同样的转换,这就形成了无限递归,无法完成寻址。
其次,从虚拟地址转化到物理地址是一个非常频繁的操作,如果在这个过程中还要再次进行地址转化,效率将极其低下。从物理地址直接索引可以减少时间和复杂性。
保存物理地址还降低了处理器在地址转换时的硬件实现复杂性,处理器每次进行地址转换时,可以直接从TTBR加载页表的物理基地址,不需要再经过一次虚拟到物理的转换。
因此,为了解决这种递归问题,同时提高处理器的效率和简化硬件设计,页表的地址需要是物理地址。
相关文章:
ARMv8 TTBRx寄存器
ARMv8 TTBRx寄存器 1 TTBR0_ELx and TTBR1_ELx2 TTBR0_ELx2.1 TTBR0_EL12.2 TTBR0_EL22.3 TTBR0_EL33 TTBR13.1 TTBR1_EL13.2 TTBR1_EL2 4 访问TTBRx寄存器4.1 TTBR0_ELx4.2 TTBR1_ELx 5 TTBRx保留的是物理地址还是虚拟地址5.1 保存的是物理地址还是虚拟地址5.2 为什么是物理地…...
C51智能小车(循迹、跟随、避障、测速、蓝牙、wifie、4g、语音识别)总结
目录 1.电机模块开发 1.1 让小车动起来 1.2 串口控制小车方向 1.3 如何进行小车PWM调速 1.4 PWM方式实现小车转向 2.循迹小车 2.1 循迹模块使用 2.2 循迹小车原理 2.3 循迹小车核心代码 3.跟随/避障小车 3.1 红外壁障模块分析编辑 3.2 跟随小车的原理 3.3 跟随小…...
回归预测 | MATLAB实现PCA-BP主成分降维结合BP神经网络多输入单输出回归预测
回归预测 | MATLAB实现PCA-BP主成分降维结合BP神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现PCA-BP主成分降维结合BP神经网络多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现PCA-BP主成分降维算法结合BP神经网络多输入单输出回…...
Kubernetes(k8s)部署高可用多主多从的Redis集群
Kubernetes部署高可用多主多从的Redis集群 环境准备准备Kubernetes准备存储类 部署redis准备一个命名空间命令创建yaml文件创建(推荐) 准备redis配置文件准备部署statefulset的资源清单文件执行文件完成部署初始化集群 环境准备 准备Kubernetes 首先你…...
算法专题:前缀和
文章目录 Acwing:前缀和示例2845.统计趣味子数组的数目思路容易理解的写法:前缀和两层循环存在问题:超时 优化写法:两数之和思路,转换为哈希表 前缀和,就是求数组中某一段的所有元素的和。 求子数组中某一…...
bs4库爬取天气预报
Python不仅用于网站开发,数据分析,图像处理,也常用于爬虫技术方向,最近学习了解下,爬虫技术入门一般先使用bs4库,爬取天气预报简单尝试下。 第一步:首先选定目标网站地址 网上查询,…...
l8-d8 TCP并发实现
一、TCP多进程并发 1.地址快速重用 先退出服务端,后退出客户端,则服务端会出现以下错误: 地址仍在使用中 解决方法: /*地址快速重用*/ int flag1,len sizeof (int); if ( setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &a…...
编写中间件以用于 Express 应用程序
概述 中间件函数能够访问请求对象 (req)、响应对象 (res) 以及应用程序的请求/响应循环中的下一个中间件函数。下一个中间件函数通常由名为 next 的变量来表示。 中间件函数可以执行以下任务: 执行任何代码。对请求和响应对象进行更改。结束请求/响应循环。调用堆…...
【2023年数学建模国赛】D题解题思路
2023年数学建模国赛D题解题思路 为了解决问题1、问题2和问题3,我们可以采用动态规划方法来制定生产计划,考虑了不确定性因素和多种可能情况的预案集。首先,我们需要定义一些变量和符号: T T T:总的养殖周期࿰…...
python爬虫之正则表达式学习
网络安全离不开脚本和工具的开发,python很多又需要正则表达式。 这是一个很好的学习正则表达式的项目 https://github.com/ziishaned/learn-regex/blob/master/translations/README-cn.md 基本匹配 正则表达式其实就是在执行搜索时的格式,它由一些字…...
智慧能源方案:TSINGSEE青犀AI算法中台在能源行业的应用
一、方案背景 互联网、物联网、人工智能等新一代信息技术引领新一轮产业革命,加快能源革命步伐。尤其是随着人工智能技术的不断发展,AI智能检测与识别技术在能源行业的应用也越来越广泛。与此同时,国家出台多项政策,将智慧能源纳…...
达梦数据库awr报告收集
1、找出快照点snap_id与时间的对应关系 SYS.WRM$_SNAPSHOT表中记录了快照点snap_id与时间的对应关系 例如如下语句可以得出2023-09-04这一天各个时间点对应的快照点snap_id select snap_id,end_interval_time from SYS.WRM$_SNAPSHOT where end_interval_time between to…...
c语言练习43:深入理解strcmp
深入理解strcmp strcmp的主要功能是用来比较两个字符串 模拟实现strcmp 比较两个字符串对应位置上的大小 按字典序进行比较 例如: 输入:abc abc 输出:0 输入:abc ab 输出:>0的数 输入:ab abc …...
NUC980webServer开发
目录 1.RTL8189FTV驱动移植 2.wifi配置工具hostapd移植 1.openssl-1.0.2r交叉编译 2.libnl-3.2.25.tar.gz交叉编译 3.hostapd-2.9.tar.gz交叉编译 4.移植相关工具到开发板 1.RTL8189FTV驱动移植 1. 把驱动文件源码放在linux源码的drivers/net/wireless/realtek/rtlwifi/目录…...
驱动开发--day2
实现三盏灯的控制,编写应用程序测试 head.h #ifndef __HEAD_H__ #define __HEAD_H__#define LED1_MODER 0X50006000 #define LED1_ODR 0X50006014 #define LED1_RCC 0X50000A28#define LED2_MODER 0X50007000 #define LED2_ODR 0X50007014#endif mychrdev.c #inc…...
用户促活留存新方式——在APP中嵌入小游戏
随着APP同类产品的不断出现,APP开发者们面临着激烈的竞争,很多APP下载后被新的APP取代,获客成本越来越高。同时开发者还会面临用户粘性差、忠诚度低、用完即走、留存困难,商业化价值被大大缩减。 在APP中植入小游戏来提高用户活跃…...
MySQL 8.0.34(x64)安装笔记
一、背景 从MySQL 5.6到5.7,再到8.0,版本的跳跃不可谓不大。安装、配置的差别也不可谓不大,特此备忘。 二、过程 (1)获取MySQL 8.0社区版(MySQL Community Server) 从 官网 字样 “MySQL …...
物流供应商实现供应链自动化的3种方法
当前影响供应链的全球性问题(如新冠肺炎疫情)正在推动许多物流供应商重新评估和简化其流程。运输协调中的摩擦只会加剧供应商无法控制的现有延误和风险。值得庆幸的是,供应链专业人员可以通过端到端的供应链自动化消除延迟,简化与合作伙伴的沟通…...
Mysql更新时间列只改日期为指定日期不更改时间
场景 Mysql分表后同结构不同名称表之间复制数据以及Update语句只更新日期加减不更改时间: Mysql分表后同结构不同名称表之间复制数据以及Update语句只更新日期加减不更改时间_霸道流氓气质的博客-CSDN博客 上面通过如下方式实现日期列增加指定天数。 UPDATE bus…...
实时测试工具 Visual Studio 扩展 NCrunch 4.18 Crack
NCrunch Visual Studio 扩展 .NET 的终极实时测试工具 在编码时查看实时测试结果和内联指标。 下载v4.18 发布于 2023 年 7 月 17 日 跳过视频至: 代码覆盖率 指标 分布式处理 配置 发动机模式 Visual Studio 自动并发测试 NCrunch 是一个完全自动化的测试扩展&a…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...
招商蛇口 | 执笔CID,启幕低密生活新境
作为中国城市生长的力量,招商蛇口以“美好生活承载者”为使命,深耕全球111座城市,以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子,招商蛇口始终与城市发展同频共振,以建筑诠释对土地与生活的…...
