ARM Cortex-A学习(3):MMU内存管理单元

内存管理单元(MMU)负责虚拟地址到物理地址的转换。MMU通过翻译表将程序使用的虚拟地址映射到实际的物理内存位置,实现对内存的动态管理和隔离。这不仅允许更灵活的内存分配,还提高了系统的安全性和稳定性。了解MMU的工作原理对于开发底层代码、BootLoader和驱动程序都很重要。

文章目录

  • 1 虚拟地址和物理地址
  • 2 MMU
    • 2.1 表的条目
    • 2.2 表的查找
    • 2.3 多级页表
  • 3 例:ARMv8-A的地址空间
  • 4 总结

1 虚拟地址和物理地址

关于虚拟地址的概念,可以参考我的这篇文章:物理地址、链接地址、加载地址、虚拟/逻辑地址的区别

虚拟地址允许操作系统控制呈现给应用程序的内存视图,如操作系统可以控制内存的可见性和访问权限。这使得操作系统能够对应用程序进行沙盒化,并提供对底层硬件的抽象。它的好处如下:

  • 操作系统可以将多个分散的物理内存区域呈现为一个连续的虚拟地址空间供应用程序使用。

  • 软件开发人员无需关心物理内存,地址转换是由操作系统和硬件共同完成的。

在实际应用中,每个应用程序可以使用自己的一组虚拟地址,将其映射到物理系统中的不同位置。当操作系统将控制权从一个应用程序转移到另一个应用程序时,它会更新内部的映射表,以确保当前运行的应用程序的虚拟地址正确地映射到物理内存中的相应位置。这样,即使不同应用程序使用相同的虚拟地址,它们实际上指向不同的物理内存位置,从而实现了应用程序之间的隔离和独立性。

虚拟地址和物理地址之间通过翻译页表进行映射:

在这里插入图片描述

翻译页表存储在内存中,通常由操作系统进行管理。页表的映射可以通过软件配置,从而改变虚拟地址和物理地址之间的映射关系。

2 MMU

MMU执行地址转换操作,它包含以下组成部分:

  • 表遍历单元:包含从内存读取翻译页表的逻辑
  • 翻译后备缓冲区(TLBs,Translation Lookaside Buffers):用于缓存最近使用的页表翻译转换结果,这可以加快内存的访问速度

由软件发出的内存地址都是虚拟的,虚拟地址传递给MMUMMU检查TLBs缓存,若缓存未命中,则表遍历单元将从主存中读取数据并缓存,如下所示:

在这里插入图片描述

在访问内存之前,虚拟地址必须被翻译为物理地址。另外,在Armv6及更高版本的处理器上,数据缓存使用物理地址(物理标记的地址)存储数据。所以,在进行缓存查找时,需要提前将虚拟地址翻译为物理地址。

2.1 表的条目

翻译页表通过将虚拟地址空间分成相等大小的块,并为每个块在表中提供一个条目来实现。

  • 翻译表的每个条目对应着虚拟地址空间中的一个块,而这些块会被映射到物理地址空间的相应块。
  • 表中的第0个条目对应着虚拟地址空间中的块0,第1个条目对应着块1,以此类推。
  • 表中条目包含相应物理内存块的地址以及访问该物理地址时要使用的属性(如读/写/缓存策略等)。

在这里插入图片描述

2.2 表的查找

表查找发生在虚拟地址转化为物理地址的时候。此时,由软件发出的虚拟地址被分为两部分:

在这里插入图片描述

上图为单层查找的例子。其中:

  • Which entry:应该查找哪个块条目,并将其用作对表的索引,该块条目包含虚拟地址对应的物理地址
  • Offset in block:块内的偏移,翻译过程中不会改变

2.3 多级页表

在2.1中的图为单级查找,虚拟地址空间被分割成相等的大小。但在实际的页表实现中是使用多级页表实现的。

一级表将虚拟地址空间分割成大块,该表中的每个条目可以指向相等大小的物理内存块,或者它可以指向另一个表,该表将块细分为更小的块。下图是三级多级页表的示例:

在这里插入图片描述

在Armv8-A架构中,多级表的最大级别为四级(0到3)。虚拟地址空间被划分为不同级别的表,第一级表负责将虚拟地址空间分成大块,而每个表项可以指向相等大小的物理内存块,或者指向另一个表,该表将块细分为更小的块。这种多级结构的设计使得系统可以同时处理大范围的内存块和较小的内存块,从而在灵活性和效率之间找到平衡。

  • 大块相对于小块需要更少的读取级别来进行转换,大块在TLB中缓存更高效
  • 小块使软件能够对内存分配进行精细控制,但小块在TLB中的缓存效率较低,因为小块需要通过多个级别进行多次读取以进行转换
  • 为了平衡使用大映射的效率与使用小映射的灵活性以获得最佳性能,操作系统必须管理这种权衡

3 例:ARMv8-A的地址空间

不同的异常等级(Exception Level,EL)通常对应于不同的特权级别和内存空间。每个EL都有其自己的地址空间和访问权限。这种设计提供了对系统资源的分隔和管理,同时允许在不同特权级别上运行不同的软件实体,如用户空间应用程序、操作系统内核、虚拟化管理器等。

这里以ARMv8-A为例,在ARMv8-A架构中有以下4种EL

  • EL0(用户空间): 通常用于运行普通应用程序代码,访问受限制的用户空间内存。
  • EL1(内核空间): 用于运行操作系统内核代码,具有更高的特权级别和对系统资源的更广泛访问权限。
  • EL2(hypervisor级别): 通常用于虚拟化支持,允许运行多个虚拟机实例。它有自己的地址空间和控制权,可以管理虚拟机的运行。
  • EL3(监管者级别): 可能用于处理一些与系统安全性相关的任务,例如启动过程中的安全任务。它也有自己的地址空间和特权级别。

在这里插入图片描述

  • 图中EL前面的NS表示Non-Secure,图表中未显示Secure EL0Secure EL1Secure EL2的虚拟地址空间,实际上EL0-EL3也是有安全空间的。

  • 由于存在多个虚拟地址空间,指定一个地址属于哪个地址空间变得很重要

    • 例如,NS.EL2:0x8000指的是在非安全hypervisor级别(NS.EL2)的虚拟地址空间中的0x8000。在其它的EL中也可以有自己的0x8000.

虚拟化

从上图还可知,Non-secure EL0Non-secure EL1的虚拟地址经过两组表。这些表支持虚拟化,并允许hypervisor(即虚拟机监控程序,位于NS.EL2)虚拟化虚拟机所看到的物理内存视图。

虚拟化分为两个阶段:

(1)第一阶段:表由操作系统控制,它将虚拟地址翻译为中间物理地址(intermediate physical addresses,IPA)。在第一阶段中,操作系统认为这些IPAs是物理地址空间。

(2)第二阶段:虚拟机监控程序(hypervisor)控制第二组翻译,它将IPAs翻译为物理地址

在这里插入图片描述

尽管表格格式存在细微的差异,但通常阶段1和2的地址翻译过程是相同的。

4 总结

本文大概地介绍了一下ARM中MMU的概念,主要是了解一下在Cortex-A核中有这样一个内存管理单元,它可以将虚拟地址转化为物理地址。对于具体地,内存是如何映射的,TLB表格是如何缓存的等知识,都与操作系统的实现有关,后续我们学到Linux再介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/594993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】二叉树的创建和遍历:前序遍历,中序遍历,后序遍历,层次遍历

目录 一、二叉树的定义 1、二叉树的定义 2、二叉树的五种形态 二叉树的子树 : 3、满二叉树与完全二叉树 4、二叉树的性质 5、二叉树的存储结构 1、顺序存储 ​编辑 2、链式存储 二、二叉树的遍历 按照前序序列构建二叉树 1、前 (先) 序遍历(Preorder …

神经网络:激活函数的介绍

神经网络的激活函数是一种非线性函数,它被应用于每个神经元的输出,以引入非线性性质到网络中。 激活函数的目的是将输入转换为输出,并且将输出限制在特定的范围内。它们非常重要,因为线性变换(例如加法和乘法&#xf…

【UEFI基础】EDK网络框架(环境配置)

环境配置 为了能够让使用测试BIOS的QEMU与主机(就是指普通的Windows系统,我们使用它来编译BIOS和启动QEMU虚拟机)通过网络连接,需要额外的配置。 首先是下载和安装OpenVPN(这里安装的是OpenVPN-2.5.5-I601-amd64.msi…

重新认识一下 vue3 应用实例

重新认识一下 vue 应用实例 💕 创建应用实例 每个 Vue 应用都是通过 createApp 函数创建一个新的 应用实例 应用实例必须在调用了 .mount() 方法后才会渲染出来。该方法接收一个“容器”参数,可以是一个实际的 DOM 元素或是一个 CSS 选择器字符串 //…

【GoLang入门教程】Go语言几种标准库介绍(四)

编程语言的未来? 文章目录 编程语言的未来?前言几种库fmt库 (格式化操作)关键函数:示例 Go库标准库第三方库示例 html库(HTML 转义及模板系统)主要功能:示例 总结专栏集锦写在最后 前言 上一篇,我们介绍了debug、enco…

魔术表演Scratch-第14届蓝桥杯Scratch省赛真题第1题

1.魔术表演(20分) 评判标准: 4分:满足"具体要求"中的1); 8分:满足"具体要求"中的2); 8分,满足"具体要求"中的3&#xff09…

GPU的硬件架构

SM: streaming Multiprocessor 流多处理器 sm里面有多个(sp)cuda core 32个线程称为一个warp,一个warp是一个基本执行单元 抽象概念:grid 网格 block 块 thread 线程 块中的线程大小是有讲究的,关乎到资源的调度,一般是128&#x…

关于“Python”的核心知识点整理大全59

目录 19.3.2 将数据关联到用户 1. 修改模型Topic models.py 2. 确定当前有哪些用户 3. 迁移数据库 注意 19.3.3 只允许用户访问自己的主题 views.py 19.3.4 保护用户的主题 views.py views.py 19.3.6 将新主题关联到当前用户 views.py 往期快速传送门&#x1f44…

[DevOps-02] Code编码阶段工具

一、简要说明 在code阶段,我们需要将不同版本的代码存储到一个仓库中,常见的版本控制工具就是SVN或者Git,这里我们采用Git作为版本控制工具,GitLab作为远程仓库。 Git安装安装GitLab配置GitLab登录账户二、Git安装 Git官网 Githttps://git-scm.com/

卫星互联网与MEC融合方案研究

卫星互联网与MEC融合方案研究 作者:温特、王立中、司鹏、颜明明、马恬、郭伊蒙 中国卫通集团股份有限公司 本文首发:第十九届卫星通信学术年会 摘 要:在卫星互联网中引入移动边缘计算(MEC)技术可有效提高用户体验质量,降低运营成…

MySQL基础篇(一)SQL

视频地址: 黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括 SQL,全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了一套操作关系型数据库统一 标准。 一、SQL通用语…

electron自定义菜单

创建menu.js const { app, Menu } require("electron"); const createMenu () > {const menu [{label: "菜单",submenu: [{label: "新增",click: () > {},}, ],},{label: "关于",submenu: [{label: "新增",click:…

Java数据结构:1. 数据结构前置知识

文章目录 一、初识数据结构二、初识集合框架1. 什么是集合框架2. 集合框架的重要性3. 背后所涉及的数据结构以及算法 三、时间复杂度空间复杂度1. 算法效率2. 时间复杂度(1)概念(2)大O的渐进表示法(3)推导大…

计算机系统基础

C 语言相关内容省略,复习自用,仅供参考~ 概述 冯诺伊曼结构 存储程序工作方式:将事先编好的程序和原始数据送入主存后才能执行程序,程序被启动执行后,计算机能在不需要操作人员干预下自动完成逐条指令取出和执行的任…

奋楫扬帆,奔赴新程 | 2023 年图扑大事记回顾,与您携手共迎 2024

2023.01 工信部公示了 2022 年度智能制造示范工厂揭榜单位和优秀场景名单。图扑软件和上海洲邦合作建设的宁波甬友数字孪生工厂被评为优秀场景,全国共有 369 个智能制造典型场景入选。 2023.01 在第十一届中国创新创业大赛全国赛(新一代信息技术&#…

RabbitMQ(八)消息的序列化

目录 一、为什么需要消息序列化?二、常用的消息序列化方式1)Java原生序列化(默认)2)JSON格式3)Protobuf 格式4)Avro 格式5)MessagePack 格式 三、总结 RabbitMQ 是一个强大的消息中间…

通信基础——带宽

随着信息社会的发展和数字化进程的加速,通信技术已经成为现代社会最为重要的基础设施之一。而在通信技术中,带宽作为一个重要的概念,对于我们理解和应用现代通信技术具有至关重要的意义。本文将以“通信基础——带宽”为主题,对带…

高性能NVMe Host Controller IP

NVMe Host Controller IP 介绍 NVMe Host Controller IP可以连接高速存储PCIe SSD,无需CPU和外部存储器,自动加速处理所有的NVMe协议命令,具备独立的数据写入AXI4-Stream/FIFO接口和数据读取AXI4-Stream/FIFO接口,非常适合于超高…

华芯微特MCU之TIMER触发ADC

01 TIMER定时器之脉冲发送功能 我们今天详细讲解一下TIMER的ADC触发功能。 SWM190的TIMER2/3支持SAR ADC触发功能,此功能配置为定时器或脉冲发送均有效,可通过配置相应寄存器实现。 将SAR ADC CTRL寄存器中TRIG设置为TIMER2触发或TIMER3触发。TIMER可作…

技术旅程分享:收获与成长的探索

2023年对我而言是充满挑战和机遇的一年,我在这段时间里积累了丰富的技术经验和个人成长。通过不懈努力和持续学习,我在技术领域迈出了一系列坚实的步伐。在这篇文章中,我将分享我在这段时间中的收获和技术成长经历,与CSDN的朋友们…