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

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

3天内不再提示

MMU虚拟地址空间布局

麦辣鸡腿堡 来源:TrustZone 作者:Hcoco 2023-11-26 16:35 次阅读

当然虚拟地址空间划分不只是如此。因为目前应用程序没有那么大的内存需求,所以ARM64处理器不支持完全的64位虚拟地址,实际支持情况如下。

(1)-虚拟地址位宽

虚拟地址的最大宽度是48位 内核虚拟地址在64位地址空间的顶部,高16位是全1,范围是[0xFFFF 0000 0000 0000,0xFFFF FFFF FFFF FFFF];

用户虚拟地址在64位地址空间的底部,高16位是全0,范围是[0x00000000 0000 0000,0x0000 FFFF FFFF FFFF];

高16位是全1或全0的地址称为规范的地址,两者之间是不规范的地址,不允许使用。

如果处理器实现了ARMv8.2标准的大虚拟地址(Large Virtual Address,LVA)支持,并且页长度是64KB,那么虚拟地址的最大宽度是52位。这个也就是大页表,可以提升内存与访问速度。

可以为虚拟地址配置比最大宽度小的宽度,并且可以为内核虚拟地址和用户虚拟地址配置不同的宽度。

转换控制寄存器(Translation Control Register)TCR_EL1的字段T0SZ定义了必须是全0的最高位的数量,字段T1SZ定义了必须是全1的最高位的数量,用户虚拟地址的宽度是(64-TCR_EL1.T0SZ),内核虚拟地址的宽度是(64-TCR_EL1.T1SZ)。(全是0是代表的用户,全是1代表的是内核。)

(2)编译ARM64架构的Linux内核时,可以选择虚拟地址宽度

• (1)如果选择页长度4KB,默认的虚拟地址宽度是39位。

• (2)如果选择页长度16KB,默认的虚拟地址宽度是47位。

• (3)如果选择页长度64KB,默认的虚拟地址宽度是42位。

• (4)可以选择48位虚拟地址。

在ARM64架构的Linux内核中,内核虚拟地址和用户虚拟地址的宽度相同。

• 所有进程共享内核虚拟地址空间,

• 每个进程有独立的用户虚拟地址空间,

• 同一个线程组的用户线程共享用户虚拟地址空间,内核线程没有用户虚拟地址空间。

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

    关注

    68

    文章

    18275

    浏览量

    222164
  • ARM
    ARM
    +关注

    关注

    134

    文章

    8651

    浏览量

    361816
  • 内存
    +关注

    关注

    8

    文章

    2767

    浏览量

    72765
  • MMU
    MMU
    +关注

    关注

    0

    文章

    91

    浏览量

    17943
收藏 人收藏

    评论

    相关推荐

    请问ARM的虚拟地址映射有“扩大”内存范围的作用吗

    我最开始看关于MMU的知识的时候,是在http://blog.chinaunix.net/uid-20698426-id-136197.html里面说了因为物理内存不够,装不下程序。可以用虚拟地址
    发表于 01-19 23:02

    请问ARM虚拟地址 物理地址 加载地址 运行地址的联系是什么?

    简单的理解:ARM的加载地址即程序在Flash的存储位置。运行地址即内存中运行时的位置。虚拟地址和物理地址MMU中映射,那么这四者之间的联
    发表于 04-25 03:16

    【HarmonyOS】虚拟地址<->物理地址是如何映射的

    MMU的本质虚拟地址(VA): 就是线性地址, 鸿蒙内存部分全是VA的身影, 是由编译器和链接器在定位程序时分配的,每个应用程序都使用相同的虚拟内存地址
    发表于 11-03 16:20

    鸿蒙内核源码分析(内存映射篇):虚拟地址与物理地址之间是如何映射的

    MMU的本质虚拟地址(VA): 就是线性地址, 鸿蒙内存部分全是VA的身影, 是由编译器和链接器在定位程序时分配的,每个应用程序都使用相同的虚拟内存地址
    发表于 11-19 10:52

    物理地址虚拟地址的转换步骤

    上是不行的,在Linux上,如果想要操作硬件,需要先把物理地址转换成虚拟地址,因为Linux使能了MMU,所以我们在Linux上不能直接操作物理地址
    发表于 12-24 07:42

    探讨一下ARM中的MMU虚拟地址

    提到MMU就要提到一个概念,虚拟地址(Virtual Address)。前面的文章中反复提到过虚拟地址的概念。使用虚拟地址的好处是它允许管理软件,例如操作系统(OS)来控制呈现给软件的
    发表于 04-08 17:17

    linux kernel实现物理地址虚拟地址空间的切换方法

    1、arm linux 临时页表的建立linux kernel的主要特点之一就是运行在虚拟地址空间上,但是怎么才能实现物理地址虚拟地址空间
    发表于 05-13 10:21

    鸿蒙内核中虚拟地址与物理地址之间是如何映射的

    内存空间上。CPU只知道虚拟地址,向虚拟地址要数据,但在其保护模式下很悲催地址信号在路上被MMU拦截了,
    发表于 11-19 14:45 9次下载
    鸿蒙内核中<b class='flag-5'>虚拟地址</b>与物理<b class='flag-5'>地址</b>之间是如何映射的

    内核逻辑地址和内核虚拟地址到底有什么区别

    了( 这跟用户态的0-3G的用户虚拟地址相对应) ,在3G-4G这段范围内,有段子集3G -3G+main_memory_size,这段主存大小的虚拟地址空间,由于在MMU页表映射时是
    发表于 03-11 10:10 6次下载

    虚拟地址和逻辑地址的区别是什么?

    先解释下一个困扰了我很久的问题:虚拟地址(vitural address)和逻辑地址(logical address)的区别。 大部分操作系统的书籍要么写的是虚拟地址,要么写的是逻辑地址
    的头像 发表于 06-17 14:08 2.1w次阅读
    <b class='flag-5'>虚拟地址</b>和逻辑<b class='flag-5'>地址</b>的区别是什么?

    虚拟地址物理地址等众多地址MMU相关知识

    虚拟地址物理地址等众多地址MMU相关知识先聊聊存储器STM32单片机存储器关于编译器生成的文件数据在存储器上的存储结构物理地址
    发表于 12-08 12:36 12次下载
    <b class='flag-5'>虚拟地址</b>物理<b class='flag-5'>地址</b>等众多<b class='flag-5'>地址</b>及<b class='flag-5'>MMU</b>相关知识

    为什么要用MMU?为什么要用虚拟地址

    既然MMU开启后,硬件会自动的将虚拟地址转换成物理地址,那么还需要我们软件做什么事情呢?即创建一个页表翻译都需要做哪些事情呢?或者说启用一个MMU需要软件做什么事情呢?
    的头像 发表于 04-26 14:37 3868次阅读

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

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

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

    过程,这其实也是MMU的工作原理。 我们知道,在Linux中,每个进程都有自己独立的地址空间,且互不干扰。每个进程的地址空间又分为用户
    的头像 发表于 10-08 11:40 505次阅读
    Linux<b class='flag-5'>虚拟地址</b><b class='flag-5'>空间</b>和物理<b class='flag-5'>地址</b><b class='flag-5'>空间</b>的关系

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

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