文章目录

  • 1.背景介绍
  • 2.MMU地址空间
  • 3.MMU的映射粒度
    • 3.1 4KB映射粒度
    • 3.2 16KB映射粒度
    • 3.3 64KB映射粒度
  • 3.64KB的MMU映射分析
  • 4. 参考资料

1.背景介绍

之前有介绍过ARM32的MMU介绍,在ARMv8-A引入了64位的架构,从而也引入了64位的MMU的技术,原理是和ARM32类似的,之前分配的粒度有所区别,arm32中有支持2级页表映射,在arm64中,最大支持为4级页表映射。

2.MMU地址空间

在arm32中,可以映射的地址为2的32次方为4GB的地址空间。
在arm64中,可以映射的地址为2的64次方为16EB的地址空间(1EB=1024PB=1024*1024TB),可以看出arm64的地址空间比arm32多了好多,arm官方其实只使用了一部分,如图:

将其分为内核空间与用户空间以及保留部分:
用户空间:0x0000 0000 0000 0000-0x0000 FFFF FFFF FFFF
内核空间:0xFFFF 0000 0000 0000-0xFFFF FFFF FFFF FFFF
对于64的地址,ARMV8-A支持48或者52bit的虚拟地址,并不是所有的都支持52bit,以通常使用的48bit进行说明,其中bit[47:0]共48bit使用;bit[63:48]全部为0或者全部为1。

3.MMU的映射粒度

在学习映射之前我们先查看下MMU的映射粒度,映射粒度只是ARM将虚拟地址按照一定的方式进行划分bit而已。
下图是对ARM64的48bit的虚拟地址的对比:

Level of table 4KB granule 4KB granule 16KB granule 16KB granule 64KB granule 64KB granule
size per entry bits used to index size per entry bits used to index size per entry bits used to index
0 512GB 47:39 128TB 47 - -
1 1GB 38:30 64GB 46:36 4TB 47:42
2 2MB 29:21 32MB 35:25 512MB 41:29
3 4KB 20:12 16KB 24:14 64KB 28:16

3.1 4KB映射粒度

在4k的粒度下,mmu采用L0-L3四级映射方式,每一级别使用9bit进行映射,最后一级bit[11:0]直接映射到4k的物理地址。
L0页表:页表项条目,512个(bit[47:39] 2^9 = 512),采用9bit映射;
L1页表:页表项条目,512个(bit[38:30] 2^9 = 512),采用9bit映射;
L2页表:页表项条目,512个(bit[29:21] 2^9 = 512),采用9bit映射;
L3页表:页表项条目,512个(bit[20:12] 2^9 = 512),采用9bit映射;

3.2 16KB映射粒度

在16k的粒度下,mmu采用L0-L3四级映射方式,最后一级bit[13:0]直接映射到16k的物理地址。
L0页表:页表项条目,2个 (bit[47] 2^1 = 2), 采用1bit映射;
L1页表:页表项条目,2048个(bit[46:36] 2^11= 2048),采用11bit映射;
L2页表:页表项条目,2048个(bit[35:25] 2^11= 2048),采用11bit映射;
L3页表:页表项条目,2048个(bit[24:14] 2^11= 2048),采用11bit映射;

3.3 64KB映射粒度

在64k的粒度下,mmu采用L1-L3三级映射方式,最后一级bit[15:0]直接映射到64k的物理地址。
L1页表:页表项条目,64个 (bit[47:42] 2^6 = 64),采用6bit映射;
L2页表:页表项条目,8192个(bit[41:29] 2^13= 8192),采用13bit映射;
L3页表:页表项条目,8192个(bit[28:16] 2^13= 8192),采用13bit映射;

3.64KB的MMU映射分析

以64KB的粒度+42bit的虚拟地址进行说明分析:


1.bit[63:42] = 1,选择TTBR1作为页表的基地址;bit[63:42] = 0,选择TTBR0作为页表的基地址;
2.通过页表的基地址找到L2的页表,此时计算页表的页表项条目共8192个(bit[41:29],2^13 = 8192),页表项的大小为64bit;
通过bit[41:29]找到L2页表中的页表项;
3.MMU检测L2页表中的页表项有效性以及读写权限校验,如果有效则进行下一步;
4.通过L2的页表项查找到L3的页表基地址;
5.bit[47:16]可以找到L2的页表中的页表项,以及找到L3的页表基地址;
6.bit[28:16]扎到L3页表中的页表项;
7.MMU检测L3页表中的页表项有效性以及读写权限校验,如果有效则进行下一步;
8.L3页表项指向64KB的页;
9.最后便实现了VA->PA的映射转换;

注意:
开始看这个图可能比较模糊,在此需要明确几个概念,
1. 页表、页表基地址、页表位宽、页表条目是什么?
这些都是页表相关的,页表基地址是物理地址,ARM64的页表位宽是64bit,
L2页表条目 = 8192个(bit[41:29],2^13 = 8192)
L3页表条目 = 8192个(bit[28:16],2^13 = 8192)
2.页表项、页表描述符;
页表项即页表里面的一个条目,页表描述符即ARM规定的页表项的格式,

4. 参考资料

1.Armv8-A Address Translation
2.ARM Cortex-A Series Programmer’s Guide for ARMv8-A( DEN0024A)
3.Learn the architecture - AArch64 memory management(Document ID: 101811_0102_00_en Version 1.2)

ARM64的MMU内存管理工作原理相关推荐

  1. MMU相关概念及工作原理介绍

    MMU相关概念及工作原理介绍 笔者这篇文章主要从使用者的角度介绍MMU的相关概念和工作原理. 一. MMU是什么,为什么要用它 在了解MMU之前需要了解下面几个概念: 物理地址(Physical Ad ...

  2. c++内存池工作原理

    6.1 自定义内存池性能优化的原理 如前所述,读者已经了解到"堆"和"栈"的区别.而在编程实践中,不可避免地要大量用到堆上的内存.例如在程序中维护一个链表的数据 ...

  3. 利用图文和代码深度解析操作系统OS的内存管理实现原理机制和算法

    利用图文和代码深度解析操作系统OS的内存管理实现原理机制和算法. 内存作为计算机系统的组成部分,跟开发人员的日常开发活动有着密切的联系,我们平时遇到的Segment Fault.OutOfMemory ...

  4. 内存的工作原理和时序介绍

    内存的工作原理及时序介绍 内存是PC配件中结构最简单的,但在BIOS中却是最难调的,很多玩家超频都卡在内存上.并且,内存的原理.结构与时序多年不会改变,无论将来内存技术如何进步,相信这篇文章的存在价值 ...

  5. MMU内存管理单元简介

    MMU 全称叫做 Memory Manage Unit,也就是内存管理单元. 在老版本的 Linux 中要求处理器必须有 MMU,但是现在 Linux 内核已经支持无 MMU 的处理器了. MMU 主 ...

  6. Cortex-M MMU内存管理单元和 Linux

    一.Cortex-M的定位 二.内存管理单元 内存管理单元简称MMU,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查. 在多用户.多进程的操作系统中,MMU使得各个用户进程都有独立的 ...

  7. 深入研究glibc内存管理器原理及优缺点

    最近查清了线上内存占用过大和swap使用频繁的原因:由于linux使用的glibc使用内存池技术导致的堆外内存暴增,基于这个过程中学习和了解了glibc的内存管理原理,和大家分享,如有错误请及时指出. ...

  8. 内核该怎么学?Linux进程管理工作原理(代码演示)

    前言:Linux内核里大部分都是C语言.建议先看<Linux内核设计与实现(Linux Kernel Development)>,Robert Love,也就是LKD. Linux是一种动 ...

  9. MMU内存管理单元详解

    MMU 诞生之前: 在传统的批处理系统如 DOS 系统,应用程序与操作系统在内存中的布局大致如下图: 应用程序直接访问物理内存,操作系统占用一部分内存区. 操作系统的职责是"加载" ...

最新文章

  1. XenServer中Windows 7与XP多vCPU支持配置
  2. 解决 Ext.Ajax.request 同步请求实现问题 (Ext3.0)
  3. lcl手术和飞秒区别_干货科普:目前市面上4种近视手术方式有何区别(全飞秒、半飞秒、全激光、晶体植入)...
  4. SVN:冲突解决 合并别人的修改
  5. JBPM工作流入门总结
  6. Javascript 链式运动框架——逐行分析代码,让你轻松了解运动的原理
  7. android网络请求库volley方法详解
  8. 不要相信 errno 可靠
  9. 第二十三届高交会闭幕 奇安信三项产品获评“优秀产品奖”
  10. UBuntu CMake工程配置基础
  11. MySQL 宣布停止使用 master、slave!
  12. 【错误记录】Ubuntu 编译 ffmpeg 报错 ( nasm/yasm not found or too old. Use --disable-x86asm for a crippled bu )
  13. 顶级摄影师的磨皮美白利器Portraiture,支持搭配微设证件大师使用
  14. 创业案例:如何调整股权,才不伤害合伙人感情?
  15. 电赛无人机特征匹配(二):ORB算法+BFM算法+D-P轮廓检测算法
  16. 文件上传漏洞攻击与防御
  17. html模版i7,2017万元级专业制图 Intel最新七代i7-7700K专业建模渲染设计师电脑配置推荐...
  18. 第七天 黑马十次方 吐槽列表与详细页、发吐槽与评论功能、问答频道功能、掌握DataURL和阿里云OSS
  19. html p标签行间距怎么调,css怎么设置行距?
  20. Unity 内置访问安卓权限

热门文章

  1. Matnote_2_数据的同质性 Data Homogeneity
  2. javascript技巧——消灭星星
  3. 云服务器文件电脑版,UCloud云主机文件管理工具
  4. win7 计算机 局域网共享,四大方法 - 让Windows 7的局域网共享速度更快
  5. 电脑录像软件哪个好用?录屏大神的技巧分享
  6. vue30秒刷新一次
  7. 微信内置浏览器不支持下载APK(APP)软件的解决方法
  8. 玩转自定义View之大学问特色蛛网评分控件
  9. 如何使用UE5进行骨骼动画重定向UE5 Retarget Skeleton
  10. ue4 读取本地文件