ARM的MMU内存管理工作原理

2023-10-26


旨在系统理解mmu,带着问题来理解原理,本文以armv7进行说明。

1.虚拟地址 物理地址 逻辑地址 线性地址 运行地址之间的联系?

逻辑地址是由编译器所产生的符号表里面的地址(可以使用binutils工具查看可执行文件的符号表);
(逻辑地址通过段映射为线性地址(虚拟地址为中间层),如果未开启二级映射,其实就是物理地址。这个是x86中的说法)因为arm将最开始的地址称为VA即virtual address,即虚拟地址,然后有一个中间层的地址,最后到物理地址。
不要被这些地址的名字所蒙蔽,先看原理再回过头看看就是有清晰的认知。
物理地址、运行地址是一样的,比如符号表产生的汇编代码的地址为0x12345678,在没有mmu的情况下,运行地址也必须是0x1234567才能保证指令的正确运行,否则有可能会出错。mmu的出现便是一种较好的解决方法。

2.MMU是什么?以及有mmu有什么作用?

MMU即memory management unit内存管理单元,提供了关于内存的重要功能,使得多任务变得可能,可以使得内核任务的所访问地址是独立的,然后通过mmu转换为实际的物理地址,而无需人为的重定位。

3.MMU、RAM与arm core之间的关系?

在这里插入图片描述
arm核访问虚拟地址,通过mmu转换为实际的物理地址,可以简单认为mmu就是一个转换表,实现虚拟地址到物理地址之间的转换。

4.MMU的TLB与配置

何为TLB,缩写为Translation Lookaside Buffe,其实还是个表格,只不过这个表格的查找速率远远大于RAM内部的表格,转换虚拟地址至物理地址的时候,是先从TLB进查找,如果找不到在尝试RAM中的,当然如果再找不到,那就是缺页异常了。
MMU的配置
MMU的配置管理主要通过arm的CP15协处理器进行操作配置的,可参考Arm的协处理器的介绍(在arm专栏中)。对于内核来讲,其实就是作为mmu的使用者,主要是页表的填充,和打开以及关闭mmu等操作。

5.MMU的地址映射

armv7的映射一共有两级映射,分为:
一级映射,16M 、1M大小的section
二级映射,64K 、4K大小的page size

5.1 1M的section映射方式

在这里插入图片描述
第一步:其中Translation Table base address为一级页表的基地址,存储在CP15协处理器的TTBR0或者TTBR1当中;
第二步:找到第一级页表的基地址后,通过虚拟地址找到页表里面的页表项,因为是 1M的映射方式,需要映射4G的内存大小,所以一共有4096个页表项;
第三步:找到对应的页表项后,通过一级页表项的bits[31:20]与虚拟地址的bits[19:0]之后便可以计算出物理地址。
对于一级页表,需要明确两个概念,页表是一个表,其中包含了4096个页表项。在一级页表项中页表项一共有4中格式,1M的页表项只是其中的一种
一级页表对应的4096个页表项:
在这里插入图片描述

一级页表项的格式:
在这里插入图片描述
在armv7中,一级页表项的格式一共有其中,分别代表为缺页即无映射、二级映射、1M的section映射、16M的section的映射。其中bits[1:0]用来区分是否为缺页映射,bit18用来区分section与supersection的映射方式。

5.2 二级映射4k的页映射

在这里插入图片描述
第一步:首先先取页表的基地址,此其实与上面的section映射是一样的,然后通过虚拟地址的bits[31:20]来找到页表里面的页表项;
第二步:上面已经介绍过,页表项的格式一共有四种,其中bits[1:0]用来代表为二级的页映射;
第三步:同理来取二级页表存储的基地址,然后通过虚拟地址的bits[19:12]字段来找到二级页表里面的页表项;
第四步:找到对应的二级页表项后,通过二级页表项的bits[31:12]与虚拟地址的bits[11:0]之后便可以计算出物理地址。
二级页表项的格式:
在这里插入图片描述
其中armv7的二级页表项的格式一共有三种:缺页异常、4K的小页、64K的大页映。
二级页表的大小为256个页表项(对应为4K映射),页表大小为16个页表项(对应64K映射)。
二级页表对应的二级页表项(以4K说明):
在这里插入图片描述
在此需要搞清楚页表、页表项、页表基地址、页表项描述符之间联系:
页表:就是一个表,里面装的就是页表项;
页表项:对应的一级页表项描述符有4种格式,二级页表项描述符有3种格式;
页表基地址:一级页表基地址是存储在ttbr0或者ttbr1中,二级页表是通过一级页表项与虚拟地址计算得出,需要说明的是页表基地址指的是物理地址,而不是虚拟地址。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARM的MMU内存管理工作原理 的相关文章

随机推荐

  • mybatis系列九:利用业务实体类和hashmap进行关联

    其实mybatis的关联是很灵活的 可以不用任何关联配置 这里介绍两种关联方式 可以针对于任何关联操作 不管是几对几 方式一 利用业务实体类进行关联 sql配置
  • windows cmd编码-chcp命令

    为什么80 的码农都做不了架构师 gt gt gt 参考资料 windows cmd 编码 1 chcp命令作用 功能 显示或设置活动代码页编号 不加参数键入 CHCP 显示活动代码页编号 2 chcp用法 CHCP nnn nnn 指定代
  • validation校验规则

    空检查 Null 验证对象是否为null NotNull 验证对象是否不为null 无法查检长度为0的字符串 NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0 只对字符串 且会去掉前后空格 NotEmpty 检查
  • PCB各层的含义 (solder paste 区别)

    PCB各层的含义 solder paste 区别 PCB层的定义 阻焊层 solder mask 是指板子上要上绿油的部分 因为它是负片输出 所以实际上有solder mask的部分实际效果并不上绿油 而是镀锡 呈银白色 助焊层 paste
  • 软件测试基础知识 —— 白盒测试

    白盒测试 白盒测试 White Box Testing 又称结构测试 透明盒测试 逻辑驱动测试或基于代码的测试 白盒测试只测试软件产品的内部结构和处理过程 而不测试软件产品的功能 用于纠正软件系统在描述 表示和规格上的错误 是进一步测试的前
  • Ant Design of Blazor 教程 从0-1搭建 3.环境搭建

    1 Ant Design 引入 安装nuget包 找到Client的Program cs项目 我这里使用的是 NET 6 NET 5及以下直接写在方法体里面就ok了 在client的index html中引入对应的css和js 在 Impo
  • 逻辑结构与存储结构关系

    概述 逻辑结构是数据元素之间的关系 存储结构是数据元素一起关系在计算机中的存储方式 逻辑结构 逻辑结构是数据元素之间抽象化的关系 与数据的存储无关 独立于计算机 它是从具体问题中抽象出来的数学模型 集合 数据元素键除同属一个集合外 无其他联
  • 三维模型进行孔洞填充 (附 c++ 代码)

    代码的主要作用是对一个三维模型进行孔洞填充 并通过可视化工具展示填充后的结果 代码主要流程如下 加载原始三维模型数据 使用孔洞填充算法对模型进行孔洞填充 将填充后的模型数据保存到文件中 使用可视化工具展示填充后的模型 具体的代码解释如下 使
  • [改善Java代码]适时选择getDeclaredxxx和getxxx

    Java的Class类提供了很多的getDeclaredxxx方法和getxxx方法 例如getDeclaredmethod和getMethod成对出现 getDeclaredConstructors和getConstructors也是成对
  • LSC(Lens Shading Correction)——镜头阴影矫正

    产生原因 由于镜头原因导致光线丢失 注意红线 此时颜色就分离了 校正方法 网格化或者半径化方法 用一张灰度图来储存增益 各个像素点 增益恢复到最终的情况 网格化的方法通过划分网格节约存储空间 代码 不考虑像素存储 function LSCC
  • python二手房交易预测及展示系统

    一 项目目的及意义 项目的目的是在采集自贝壳二手房交易平台的成都市二手房成交数据的基础上 对数据进行处理和挖掘 以网站为载体实现二手房交易分析 卖方价格预测和买方房屋推荐三个主要功能 二手房交易分析功能服务于统计人员 对成都的二手房交易做完
  • 树莓派配置WiFi热点,远程播放视频小项目手把手教学

    1 安装树莓派OS镜像 Raspberry Pi OS Raspberry Pihttps www raspberrypi com software 下载官方镜像32位 一定不能下载最新版 下载最新版会导致后面步骤无法正常进行 我是用的是2
  • 51单片机点亮LED灯以及实现2盏LED灯的交替闪烁

    点亮LED灯 根据单片机原理图 将LED灯1和LED灯2介入单片机的口设为低电平即可 代码如下 include reg52 h sbit led1 P3 7 void main led1 0 给led1一个低电平 点亮 结果图 图中有一盏L
  • c# 创建只接收消息的窗口

    如果用自带的form 必须show后再hide 不是很好用 用以下代码即可 public class NotifierNativeWindow NativeWindow const string WindowName MessageOnly
  • Java源码 JavaWeb开发框架 代码 SSH SSM OA ERP CRM Java项目[Java通用框架源码及开发视频教程]

    Java源码 JavaWeb开发框架 代码 SSH SSM OA ERP CRM Java项目 功能简介 A 代码生成器 开发利器 生成Java各层次的类和JSP等文件 提高开发效率 B 阿里巴巴数据库连接池Druid 性能好的数据库连接池
  • python基础学习(4)—文件处理

    python学习基础之文件处理 文件和目录管理 os os path os walk open打开文件 文件和目录管理 python能够快速大量地处理计算机系统中地文件与文件夹 可以用OS包进行目录地创建与删除 文件删除 执行操作系统等操作
  • vue 登录页面记住密码功能

    vue iview element 一般用来快速搭建后台管理系统 登录页的记住密码功能也是必不可少的 记住密码快速登录功能 iview ui 思路 首次登录 记住密码 将密码存储到cookie中 退出登录 下次进来的时候 读取cookie登
  • chatgpt赋能python:PythonSave函数:保存和保护你的数据

    Python Save函数 保存和保护你的数据 Python Save函数是Python编程中最常用的函数之一 它允许开发者将数据保存到文件或数据库中 在未来的操作中访问和使用 无论你是处理大数据集还是需要保护数据免受未经授权访问 Pyth
  • c++ 文件操作

    1 根据需要引用头文件 include
  • ARM的MMU内存管理工作原理

    文章目录 1 虚拟地址 物理地址 逻辑地址 线性地址 运行地址之间的联系 2 MMU是什么 以及有mmu有什么作用 3 MMU RAM与arm core之间的关系 4 MMU的TLB与配置 5 MMU的地址映射 5 1 1M的section