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…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...