0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一级页表虚拟地址转换为物理地址示例

冬至配饺子 来源:芯片验证工程师 作者:验证哥布林 2022-07-28 17:58 次阅读

本文我们展示一个只有一级页表,虚拟地址转换为物理地址的示例。

其中VA为32比特(共4GB地址空间),每个页大小为1MB,所以一共4096个页表项。

每个页表项指向的都是1MB页表大小的页表项,其中会给出物理地址的高位比特([31:20])。

pYYBAGLiXVmAcUVcAABLaWj_Gzo390.png

上图中的页表基地址Translation Table Base Address(TTBA)是由软件指定的。当MMU执行硬件页表转换时,需要根据页表的基地址和VA[31:20] index获取VA-PA映射关系,以页表粒度完成VA-PA的转换,例如1MB粒度,那么

VA[19:0]=PA[19:0]

上图中页表的基地址为0x12300000,每个页表项的大小为4Byte,VA为0x00100000,高12比特(0x001)作为页表的索引index。所以这个VA-PA需要使用到的页表项存储地址为

Base addr + 0x001 * 4 bytes = 0x12300004

poYBAGLiXWuAYM7NAAB-H96BrOM739.png

最后,根据拿到的VA-PA映射关系就可以拿到PA了,具体的页表格式根据不同的实现而异。

pYYBAGLiXX2AKKS_AACO19FcqOI653.png

上图是个示例的32比特页表格式,根据低2比特确定这个页表项的类型。

2`b00:invalid 页表,上报异常,由软件处理。

2`b10:指向的是物理地址。

2`b01:指向的是下一级页表的基地址。

假设低2比特为2’b10,那么这个页表项中的内容就是实际指向的物理地址。页表项中除了指定了物理地址,还包含了页的内存属性(访问权限、cache属性、buffer属性等等)。

简单来说就是指定了访问物理地址空间所需的全部信息


审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储
    +关注

    关注

    12

    文章

    3859

    浏览量

    84670
  • Cache
    +关注

    关注

    0

    文章

    127

    浏览量

    27985
  • 内存交换
    +关注

    关注

    0

    文章

    2

    浏览量

    6326
收藏 人收藏

    评论

    相关推荐

    没有虚拟地址的处理器是怎么工作的?

    看看没有虚拟地址的处理器是怎么工作的,编译环境除了将高级语言转换成机器码外,linker把众多分散开发文件串起来,使得增量编译
    的头像 发表于 12-07 10:29 209次阅读

    如何绑定ip地址与mac物理地址呢?

    如何绑定ip地址与mac物理地址呢? 绑定IP地址与MAC物理地址是一种网络管理和安全措施,可以帮助确保网络设备的身份验证和安全性。在这篇文章中,我们将详细介绍如何进行IP
    的头像 发表于 12-07 09:33 1288次阅读

    MMU虚拟地址空间布局

    当然虚拟地址空间划分不只是如此。因为目前应用程序没有那么大的内存需求,所以ARM64处理器不支持完全的64位虚拟地址,实际支持情况如下。 (1)-虚拟地址位宽 虚拟地址的最大宽度是48
    的头像 发表于 11-26 16:35 575次阅读

    linux系统查看物理地址

    在Linux系统中,访问和查看物理地址是一个非常重要的任务,因为它提供了对硬件设备的直接访问。本文将详细介绍如何在Linux系统中查看物理地址,包括不同的方法和工具,以及如何解释和使用这些地址。我们
    的头像 发表于 11-16 16:47 1477次阅读

    虚拟内存到物理地址转换

    根据虚拟地址的bit[31:20]作为索引值()4K页表,在一级页表中找到页表项。一级页表一共有4 096个页表项。 第一级页表的表项中存放有二级页表的
    的头像 发表于 10-30 17:34 395次阅读
    <b class='flag-5'>虚拟</b>内存到<b class='flag-5'>物理地址</b>的<b class='flag-5'>转换</b>

    Linux虚拟地址物理地址转换过程

    虚拟地址物理地址转换过程 虚拟地址物理地址都被划分了两部分: 虚拟地址
    的头像 发表于 10-08 11:45 861次阅读
    Linux<b class='flag-5'>虚拟地址</b>到<b class='flag-5'>物理地址</b><b class='flag-5'>转换</b>过程

    Linux虚拟地址空间和物理地址空间的关系

    很多人接触Linux的内存管理是从malloc()这个C语言库函数开始,也是从那时开始就知道了虚拟内存的概念。但很多人可能并不知道虚拟地址是如何转换物理地址的,今天带你搞懂
    的头像 发表于 10-08 11:40 509次阅读
    Linux<b class='flag-5'>虚拟地址</b>空间和<b class='flag-5'>物理地址</b>空间的关系

    Linux中sv39 mmu介绍

    物理地址、PTE格式如下: 虚拟地址格式: 物理地址格式: PTE格式: 虚拟地址使用39位表示,其中低12位代表pageoffset,高位划分为了三部分:VPN[0]、VPN[1]
    的头像 发表于 10-08 11:07 603次阅读
    Linux中sv39 mmu介绍

    Linux系统为什么需要引入虚拟地址

    ,这 4GB 的内存空间按照 3:1 的比例进行分配,其中用户进程享有 3G 的空间,而内核独自享有剩下的1G 空间,如下所示: 虚拟地址会通过硬件MMU(内存管理单元)映射到实际的物理地址空间中,建立虚拟地址
    的头像 发表于 10-07 17:28 544次阅读
    Linux系统为什么需要引入<b class='flag-5'>虚拟地址</b>

    虚拟地址翻译物理地址的流程有哪些呢?

    现代的操作系统将可执行文件加载后,创建了进程,进程中每一条指令和数据都被分配了一个虚拟地址,CPU获取到这个虚拟地址后,需要翻译成内存的物理地址后,才能访问指令和数据
    的头像 发表于 08-14 10:30 570次阅读
    <b class='flag-5'>虚拟地址</b>翻译<b class='flag-5'>物理地址</b>的流程有哪些呢?

    ARM系统内存管理单元架构规范SMMU架构2.0版

    : ·操作系统为其自身的内存访问以及在其下运行的应用程序的访问定义转换。 它这样做是因为它认为它将处理器使用的虚拟地址(VA)映射到物理内存系统中的
    发表于 08-12 06:25

    Armv8-A地址翻译技术解读

    转换转换虚拟地址 物理地址。MMU将在必要时自动读取翻译 这个过程被称为Table Wa
    发表于 08-02 17:29

    为什么Linux操作寄存器要ioremap

    1. 原因 这里只考虑有 MMU 的芯片,Linux 为了实现进程虚拟地址空间,在启用 MMU 后,在内核中操作的都是虚拟地址,内核访问不到物理地址。 如果在驱动里直接访问物理地址,等
    的头像 发表于 07-20 10:23 1256次阅读
    为什么Linux操作寄存器要ioremap

    内存是怎么映射到物理地址空间的?内存是连续分布的吗?

    如果我们将两个4G内存插入内存插槽,得到的内存地址空间是0到8G吗?是不是0到4G是第一根内存,4到8G是第二根内存呢?实际情况相差甚远,内存在物理地址空间的映射是分散的。
    的头像 发表于 06-30 15:59 2031次阅读
    内存是怎么映射到<b class='flag-5'>物理地址</b>空间的?内存是连续分布的吗?

    图文详解Linux分页机制

    分页机制是 80x86 内存管理机制的第二种机制,分段机制用于把虚拟地址转换为线性地址,而分页机制用于把线性地址转换为
    发表于 05-30 09:10 299次阅读
    图文详解Linux分页机制