1.简介

CPU发出的虚拟地址经过MMU转换后得到物理地址,然后使用物理地址访问真实的硬件。虚拟地址和物理地址的映射关系保存在页表中,MMU需要遍历页表,才能将虚拟地址转换成物理地址。ARM64现在有两种大小的页表描述符,分别是ARMv8的64-bit描述符(一个页表描述符8字节),ARMv9的128-bit描述符(一个页表描述符16字节)。本文只介绍ARMv8的64-bit描述符。

2.页表类型

如下图所示,页表描述符的bit[1:0]表示类型。ARMv8的页表有四种类型,分别是Invalid descriptor、Block descriptor、Table descriptor和Page descriptor,具体如下:

  1. bit[1:0] == 0b0x:表示Invalid descriptor,此时MMU若使用该页表描述符进行地址转换,会触发Translation Fault。
  2. bit[1:0] == 0b10:如果不是第三级页表,则为Block descriptor。如果是第三级页表,则保留,可以看作是无效的页表描述符。Block descriptor和Page descriptor类型一样,定义了访问物理内存的属性和地址,并且没有下一级页表。Block descriptor专门应用于HugePage的映射,有的情况下只需要一个页表描述符即可完成地址映射,无需多级页表,这样可以加快MMU地址转换速度。比使用48位虚拟地址和4级页表的情况下,当映射1GB内存时,只需要一个level1 Block descriptor即可.
  3. bit[1:0] == 0b11:如果不是第三级页表,则为Table descriptor,如果是第三级页表,则为Page descriptor。Table descriptor为中间页表,用于指向下一级页表。Page descriptor为最后一级页表,定义了访问物理内存的属性和地址。

页表类型

3.页表格式

下面介绍Block descriptor、Table descriptor和Page descriptor三种页表描述符的格式。

3.1.Table descriptor

下图是不同地址宽度和不同页表大小情况下,Table descriptor的格式。我们主要关注48-bit地址位宽和4KB页表大小时Table descriptor的格式,在这种情况下m==12,下一级页表的基地址保存在bit[47:12],下一级页表属性保存在bit[63:59]。
Table_descriptor
页表属性如下图所示。

Table_descriptor页表属性

3.2.Block descriptor

下图是不同地址宽度和不同页表大小情况下,Block descriptor的格式。当地址位宽为48-bit,页表大小为4KB时,Block descriptor只能是level1或者level2的页表,level1页表n==30,level2页表n==21,转换后的物理内存基地址保存在bit[47:n]。当地址位宽为52-bit,页表大小为4KB时,Block descriptor只能是level0、level1或者level2的页表,level0页表n==39,level1页表n==30,level2页表n==21,转换后的物理内存基地址OA[51:48]保存在bit[15:12],其他地址保存在bit[47:n]。

Block_descriptor

Block descriptor转换的物理内存的访问属性如下图所示。

Block_descriptor内存属性

3.3.Page descriptor

下图是不同地址宽度和不同页表大小情况下,Page descriptor的格式。当地址位宽为48-bit,页表大小为4KB时,bit[47:12]定义了访问物理内存的基地址,Upper attributes和Lower attributes定义了物理内存的访问属性。

Page_descriptor

4.地址转换过程

下图展示了MMU将虚拟地址转换成物理地址的过程。

4.1.39bit-3Level-4KB

39bit-3Level-4KB

4.2.48bit-4Level-4KB

48bit-4Level-4KB

4.3.48bit-3Level-16KB

48bit-3Level-16KB

参考资料

  1. Arm ® Architecture Reference Manual for A-profile architecture。
  2. ARM® Cortex ® -A Series Programmer’s Guide for ARMv8-A。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92724.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92724.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/92724.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构---二叉树(概念、特点、分类、特性、读取顺序、例题)、gdb调试指令、时间复杂度(概念、大O符号法、分类)

一、二叉树1、树1)概念 树是 n(n > 0) 个结点的有限集合。若 n0 ,为空树。在任意一个非空树中:(1)有且仅有一个特定的根结点;(2)当 n>1 时,其余结点可分为 …

安全基础DAY1-安全概述

信息安全现状及挑战常见术语信息安全的脆弱性及常见攻击网络环境的开放性其实就是人人可以上网,网上零成本。协议栈自身的脆弱性及常见攻击协议栈自身的脆弱性常见安全风险网络的基本攻击模式物理层--物理攻击前置知识 1.打开Apache服务 cd /etc/init.d ./apache2 s…

Claude Code 的核心能力与架构解析

技术分析介绍:Claude Code 的核心能力与架构解析一、概述 Claude Code 是由 Anthropic 推出的面向开发者的智能编码助手,它不仅仅是一个代码生成工具,更是一个具备记忆、工具调用、自主规划和环境感知能力的“智能代理”(Agentic …

Mac 电脑放在环境变量中的通用脚本

mac电脑下放在环境变量中,方便提高效率执行 注:相关路径需要根据实际情况进行更新 需要在 .bash_profile 文件中定义如下(路径需要做实际替换): source $HOME/software/scripts/base_profile.sh source $HOME/software…

UE蓝图节点Add Impulse和Add Torque in Radians

​​​​​​​Add Impulse:对刚体施加一次性的线性脉冲(瞬时改变量),改变速度(与质量有关,除非你勾 bVelChange)。Add Torque (in Radians):对刚体施加转矩/旋转力(向量…

大型语言模型幻觉检测与缓解技术研究综述

摘要 本文系统综述了大型语言模型(LLMs)中的幻觉现象及其检测与缓解技术。研究首先从认知机制角度分析了幻觉产生的理论根源,包括模型对语言先验的过度依赖、训练数据偏差以及推理过程中的信息衰减等问题。在技术层面,综述将现有方法归纳为三类&#xff…

【数据结构初阶】--二叉树(二)

😘个人主页:Cx330❀ 👀个人简介:一个正在努力奋斗逆天改命的二本觉悟生 📖个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》 前言:上篇博客我们学习了有关树的概念和相关术语的介绍&…

jmm 指令重排 缓存可见性 Volatile 内存屏障

CPU指令重排 CPU指令重排是指CPU为了提高指令执行效率,可能会对指令的执行顺序进行优化,使得(单线程下)指令的实际执行顺序与代码中的顺序不同,但结果是一致的。 这种优化是通过乱序执行和缓存读写重排来实现的。 乱序…

卡车手机远程启动一键启动无钥匙进入有哪些好处

随着汽车科技的发展,卡车智能化升级已成为趋势,其中手机控车、远程启动、无钥匙进入及一键启动等功能显著提升了驾驶便捷性与安全性。以下从功能特点、技术原理、适用场景及改装建议等方面展开说明。一、核心功能及技术特点1. 无钥匙进入系统自动感应操作…

【pyqt5】SP_(Standard Pixmap)的标准图标常量及其对应的图标

目录 **常见SP_图标分类及用途** **1. 箭头和导航图标** **2. 文件和编辑操作** **3. 系统状态和通知** **4. 应用程序和菜单** **5. 数据视图控件** **完整列表(部分)** **使用建议** **6. 数据操作图标** **7. 编辑和文本操作** **8. 媒体控制图标** **9. 系统和应用状态**…

VS Git巨坑合并分支失败导致多项无关改变

基于主分支创建的临时分支上进行了一些开发,合并回主分支,期间主分支没有进行任何更改还是创建临时分支时的状态,但合并莫名其妙报错 “1 uncommitted …”,我可以确认主分支和临时分支均没有尚未提交的更改。更恶心的是&#xff…

开始记录U9客开过程中听点滴

很久没有更新了。终于有时间可以拾起U9的研究当中。时间长了就生疏了很多,记录下来备查吧。用这个工具可以生成一个VS 2022的项目,在指定的地方写自已的代码既可。BE插件,Busing Plugin 商业插件。总结一下,BE插件是应用于某一个单…

C# 异步编程(使用异步Lambda表达式)

使用异步Lambda表达式 到目前为止,本章只介绍了异步方法。但我们曾经说过,你还可以使用异步匿名方法和异步 Lambda表达式。这些构造尤其适合那些只有少量工作要做的事件处理程序。下面的代码片段将 一个表达式注册为一个按钮点击事件的事件处理程序。 st…

K8S云原生监控方案Prometheus+grafana

目录 1. 概述 1.1 系统架构 1.1.1 架构图 ​编辑 1.2 环境准备 2. 部署prometheus 2.1 创建Namespace 2.2 创建ConfigMap资源 2.3 创建ServiceAccount,Clusterrole,Clusterrolebinding,Service,Deployment,in…

Matplotlib库:Python数据可视化的基石,发现它的美

Matplotlib是Python中最基础、最广泛使用的数据可视化库,它提供了类似MATLAB的绘图接口,能够创建高质量的静态、动态和交互式图表。作为科学计算和数据可视化的核心工具,Matplotlib几乎成为Python数据科学生态系统的标准可视化组件。 今天与…

每日算法刷题Day59:8.9:leetcode 队列8道题,用时2h30min

一、基础 1.套路 1.队列常用在 BFS 中&#xff0c;见 网格图题单 和 图论题单。 2.队列(queue)是容器适配器&#xff0c;功能较少。 队尾插入元素&#xff0c;队首弹出元素&#xff0c;可以访问队首元素、队尾元素和队列长度。 无begin(),end()等迭代器 queue<int> qu…

Java选手如何看待Golang

写在前面&#xff1a;翻了很多博客&#xff0c;一直没有Java选手转行golang的学习经验贴&#xff0c;思考很久&#xff0c;写下这篇Java选手怎么看待golang这个冉冉新星。1.走完所有golang基础之后的感受&#xff08;1&#xff09;最大的不适应有这么几点&#xff1a;---变量定…

Codeforces Round 967 (Div. 2) D. Longest Max Min Subsequence

假设我们要选a[j]为答案数组b[i]&#xff0c;从i从1~m&#xff08;m为a数组中不同数的个数&#xff09;建立一个suf数组&#xff0c;代表以i开头的后缀有多少个不同且在b[1~i-1]中未出现过的的个数&#xff0c;预处理suf&#xff0c;发现后续我们怎么选数改变suf&#xff0c;su…

Linux运维新手的修炼手扎之第27天

mysql服务1 主从复制集群&#xff1a;多主机集群【复制】负载过大解决方案&#xff1a;横向扩展[增加服务器节点分散负载]、纵向扩展[提升单机硬件性能]复制工作原理&#xff1a;前提&#xff1a;基础数据一样&#xff0c;主节点上有同步数据用的账号主角色【二进制日志、binlo…

【Linux】Linux增删改查命令大全(附频率评级)

Linux增删改查命令大全&#xff08;附频率评级&#xff09;* 《Linux命令全景手册&#xff1a;增删改查全场景解析&#xff08;含136个高频命令&#xff09;》 按使用频率★分级 | 测试/运维/开发均适用 | 附思维导图下载一、命令全景表&#xff08;增删改查频率评级&#xff0…