ARM64的MMU内存管理工作原理
文章目录
- 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内存管理工作原理相关推荐
- MMU相关概念及工作原理介绍
MMU相关概念及工作原理介绍 笔者这篇文章主要从使用者的角度介绍MMU的相关概念和工作原理. 一. MMU是什么,为什么要用它 在了解MMU之前需要了解下面几个概念: 物理地址(Physical Ad ...
- c++内存池工作原理
6.1 自定义内存池性能优化的原理 如前所述,读者已经了解到"堆"和"栈"的区别.而在编程实践中,不可避免地要大量用到堆上的内存.例如在程序中维护一个链表的数据 ...
- 利用图文和代码深度解析操作系统OS的内存管理实现原理机制和算法
利用图文和代码深度解析操作系统OS的内存管理实现原理机制和算法. 内存作为计算机系统的组成部分,跟开发人员的日常开发活动有着密切的联系,我们平时遇到的Segment Fault.OutOfMemory ...
- 内存的工作原理和时序介绍
内存的工作原理及时序介绍 内存是PC配件中结构最简单的,但在BIOS中却是最难调的,很多玩家超频都卡在内存上.并且,内存的原理.结构与时序多年不会改变,无论将来内存技术如何进步,相信这篇文章的存在价值 ...
- MMU内存管理单元简介
MMU 全称叫做 Memory Manage Unit,也就是内存管理单元. 在老版本的 Linux 中要求处理器必须有 MMU,但是现在 Linux 内核已经支持无 MMU 的处理器了. MMU 主 ...
- Cortex-M MMU内存管理单元和 Linux
一.Cortex-M的定位 二.内存管理单元 内存管理单元简称MMU,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查. 在多用户.多进程的操作系统中,MMU使得各个用户进程都有独立的 ...
- 深入研究glibc内存管理器原理及优缺点
最近查清了线上内存占用过大和swap使用频繁的原因:由于linux使用的glibc使用内存池技术导致的堆外内存暴增,基于这个过程中学习和了解了glibc的内存管理原理,和大家分享,如有错误请及时指出. ...
- 内核该怎么学?Linux进程管理工作原理(代码演示)
前言:Linux内核里大部分都是C语言.建议先看<Linux内核设计与实现(Linux Kernel Development)>,Robert Love,也就是LKD. Linux是一种动 ...
- MMU内存管理单元详解
MMU 诞生之前: 在传统的批处理系统如 DOS 系统,应用程序与操作系统在内存中的布局大致如下图: 应用程序直接访问物理内存,操作系统占用一部分内存区. 操作系统的职责是"加载" ...
最新文章
- XenServer中Windows 7与XP多vCPU支持配置
- 解决 Ext.Ajax.request 同步请求实现问题 (Ext3.0)
- lcl手术和飞秒区别_干货科普:目前市面上4种近视手术方式有何区别(全飞秒、半飞秒、全激光、晶体植入)...
- SVN:冲突解决 合并别人的修改
- JBPM工作流入门总结
- Javascript 链式运动框架——逐行分析代码,让你轻松了解运动的原理
- android网络请求库volley方法详解
- 不要相信 errno 可靠
- 第二十三届高交会闭幕 奇安信三项产品获评“优秀产品奖”
- UBuntu CMake工程配置基础
- MySQL 宣布停止使用 master、slave!
- 【错误记录】Ubuntu 编译 ffmpeg 报错 ( nasm/yasm not found or too old. Use --disable-x86asm for a crippled bu )
- 顶级摄影师的磨皮美白利器Portraiture,支持搭配微设证件大师使用
- 创业案例:如何调整股权,才不伤害合伙人感情?
- 电赛无人机特征匹配(二):ORB算法+BFM算法+D-P轮廓检测算法
- 文件上传漏洞攻击与防御
- html模版i7,2017万元级专业制图 Intel最新七代i7-7700K专业建模渲染设计师电脑配置推荐...
- 第七天 黑马十次方 吐槽列表与详细页、发吐槽与评论功能、问答频道功能、掌握DataURL和阿里云OSS
- html p标签行间距怎么调,css怎么设置行距?
- Unity 内置访问安卓权限