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

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

3天内不再提示

MMU内存管理单元的工作原理和作用

嵌入式开发爱好者 来源:嵌入式开发爱好者 2023-08-03 10:03 次阅读

先来看一张图

6c148260-314e-11ee-9e74-dac502259ad0.jpg

第一:MMU内存管理

MMU(Memory Management Unit,内存管理单元)是一种硬件模块,用于在CPU和内存之间实现虚拟内存管理。

其主要功能是将虚拟地址转换为物理地址,同时提供访问权限的控制和缓存管理等功能。MMU是现代计算机操作系统中重要的组成部分,可以提高系统的稳定性和安全性。

在内存管理方面,MMU可以通过页面表(Page Table)实现虚拟内存管理。页面表是一种数据结构,记录了每个虚拟页面和其对应的物理页面之间的映射关系。

当CPU发出一个虚拟地址时,MMU会通过页面表查找并将其转换为对应的物理地址。

此外,MMU还可以通过页面表实现内存保护和共享等功能,从而提高系统的安全性和效率。

总之,MMU是内存管理中一个重要的硬件组件,可以实现虚拟内存管理、内存保护、共享和缓存等功能,为现代计算机操作系统的稳定性和安全性提供支持。

第二:举个例子

假设我们有一个程序,它需要访问两个内存区域:一个是只读的代码区域,一个是可读写的数据区域。

我们现在想要在一个没有 MMU 的系统上运行这个程序。如果没有 MMU,代码区域和数据区域就只能被映射到两个固定的物理地址上。这就意味着,如果程序尝试访问一个不正确的地址,可能会导致系统崩溃。

现在,如果我们在一个具有 MMU 的系统上运行这个程序,情况会有所不同。MMU 可以将程序尝试访问的地址映射到不同的物理地址,这样可以使得代码区域和数据区域在物理内存中不再是固定的位置。

这意味着,如果程序尝试访问不正确的地址,MMU 可以通过重新映射来保护系统不崩溃。

MMU 还可以将多个虚拟地址映射到同一个物理地址上,这就是所谓的页共享(page sharing),可以减少物理内存的使用。

如果没有MMU,程序访问内存时只能使用物理地址,而物理地址是直接映射到内存芯片上的地址,程序可以随意访问任何一个物理地址。

这种情况下,程序如果访问了错误的地址或试图访问未被授权的地址,就会产生访问错误或非法访问,可能导致系统崩溃、数据丢失等问题。

而有了MMU,程序访问的是虚拟地址,由MMU负责将虚拟地址映射到物理地址上,这样程序就无法直接访问物理地址。

同时,MMU可以根据内存访问权限来限制程序对内存的访问,确保系统的安全性和稳定性。

因此,没有MMU时,程序可能会访问到其他地址,而有了MMU,程序只能访问被允许访问的地址,可以有效地避免非法访问的问题。

6c232950-314e-11ee-9e74-dac502259ad0.png

第三:为什么相同的虚拟地址空间在物理地址不会发生冲突呢?

相同的虚拟地址空间在不同的进程中可能会映射到不同的物理地址,这个映射的过程是由MMU完成的。在操作系统中,每个进程都有独立的虚拟地址空间,且这些虚拟地址空间互不干扰。

MMU会将每个进程的虚拟地址映射到对应的物理地址上,使得不同进程间的内存访问不会相互干扰。同时,MMU也会提供一些安全机制,如页面保护等,来防止进程越界访问内存或访问其他进程的内存。

因此,MMU起到了保护进程间内存互不干扰的作用,也是现代操作系统的重要组成部分。

第四:页表是什么?

页表是一种用于存储虚拟内存地址与物理内存地址映射关系的数据结构。在使用虚拟内存的系统中,每个进程都有自己的虚拟地址空间,而这些虚拟地址空间被分割成许多页(通常大小为4KB或更大),而不是一整块连续的内存。

因此,当进程需要访问某个虚拟地址时,需要将其翻译成对应的物理地址。这个翻译过程就是通过页表来完成的。

页表的基本原理是将虚拟地址划分成一个页号和一个偏移量。

页号用于在页表中查找对应的物理页帧号,而偏移量则用于计算该虚拟地址在物理页帧中的偏移量。通过这种方式,就可以将虚拟地址映射到物理地址,使得进程可以访问对应的内存区域。

页表一般由操作系统来维护,因为操作系统需要掌握虚拟地址和物理地址之间的映射关系。

在使用MMU(Memory Management Unit)的硬件支持的系统中,当进程访问虚拟地址时,MMU会通过页表将虚拟地址转换为物理地址,并将访问指向正确的物理地址。这样,进程就可以在不知道自己真实物理地址的情况下访问内存。

第五:为什么没有MMU就无法运行Linux系统?

这是因为 Linux 内核将虚拟地址空间分为多个页面,并将这些页面映射到物理地址空间上,以实现内存隔离、保护和虚拟内存等功能。

没有 MMU,就无法实现这种映射,从而无法运行 Linux 系统。

第六:为什么有些较为简单的SOC可能没有MMU,但仍然可以运行一些嵌入式操作系统或者裸机程序?

RTOS可以运行在没有MMU的系统上,因为RTOS通常不需要进行内存保护和虚拟地址映射等高级特性。

相反,RTOS的设计侧重于实时性和低延迟,因此通常只需要简单的内存管理和任务调度即可。

这使得RTOS可以运行在许多嵌入式系统上,包括一些没有MMU的系统。

审核编辑:汤梓红

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

    关注

    40

    文章

    3430

    浏览量

    128221
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10442

    浏览量

    206564
  • 内存管理
    +关注

    关注

    0

    文章

    162

    浏览量

    14056
  • MMU
    MMU
    +关注

    关注

    0

    文章

    91

    浏览量

    17943
收藏 人收藏

    评论

    相关推荐

    为什么没有MMU就无法运行Linux系统呢?

    MMU(Memory Management Unit,内存管理单元)是一种硬件模块,用于在CPU和内存之间实现虚拟
    发表于 08-03 10:05 546次阅读
    为什么没有<b class='flag-5'>MMU</b>就无法运行Linux系统呢?

    ARM的内存管理MMU)是如何实现的?

    平板式的地址映射机制对其操作,或需要使用虚拟地址对其进行读写;系统中,需引入存储保护机制,增强系统的安全性。为适应如此复杂的存储体系要求, ARM 处理器中引入了存储管理单元管理存储系统。一
    发表于 10-23 15:29

    MMU存储管理单元工作原理是什么?如何实现其流程呢

    MMU,Memory Management Unit,存储管理单元MMU工作流程为:首先,配置一个地址映射表的基地址。然后,每输入一个虚
    发表于 05-13 09:56

    Arm CoreLink MMU‑700系统内存管理单元技术参考手册

    MMU‑700是一个系统级内存管理单元(SMMU),用于将输入地址转换为输出地址。此转换基于MMU‑700内部寄存器和转换表中可用的地址映射
    发表于 08-08 07:44

    ARM CORELINK™MMU-600AE系统内存管理单元技术参考手册

    MMU-600AE是MMU-600系统级内存管理单元(SMMU)的功能安全(FUSA)变体,可将输入地址转换为输出地址。此转换基于
    发表于 08-09 06:28

    ARM系统内存管理单元架构规范SMMU架构2.0版

    ARM系统MMU(SMMU)体系结构为存储器管理单元(MMU)实施提供了灵活的实施框架,具有多个实施定义的选项。 该体系结构可用于系统级的MMU
    发表于 08-12 06:25

    ARM 内存管理单元MMU详细图解资料

    ARM 内存管理单元MMU详细图解资料 本文描述基于存储器管理单元的系统结构, 包含以下内容:
    发表于 03-03 16:22 94次下载

    S3C2410内存管理单元MMU基础实验

    (11)实验十一:MMU 在理论上概括或解释MMU,这不是我能胜任的。我仅基于为了理解本实验中操作MMU的代码而对MMU做些说明,现在先简单地描述虚拟地址(VA)、变换后的虚拟地址(M
    发表于 01-01 02:29 17次下载

    ARM存储管理单元MMU详解

    15.5 存储管理单元MMU 在创建多任务嵌入式系统时,最好有一个简单的方式来编写、装载及运行各自独立的任务。目前大多数的嵌入式系统不再使用自己定制的控制系统,而使用操作系统来简化这个过程。较高
    发表于 10-17 16:24 4次下载

    浅谈ARM MMU工作原理和过程

    在没有使用虚拟存储器的机器上,虚拟地址被直接送到内存总线上,使具有相同地址的物理存储器被读写。而在使用了虚拟存储器的情况下,虚拟地址不是被直接送到内存地址总线上,而是送到内存管理
    发表于 03-12 09:17 3452次阅读
    浅谈ARM <b class='flag-5'>MMU</b><b class='flag-5'>工作原理</b>和过程

    MMU工作原理梳理

    本文从内存管理的发展历程角度层层递进,介绍 MMU 的诞生背景,工作机制。而忽略了具体处理器的具体实现细节,将 MMU
    的头像 发表于 12-17 16:13 1.3w次阅读
    <b class='flag-5'>MMU</b>的<b class='flag-5'>工作原理</b>梳理

    Linux内核虚拟内存管理中的mmu_gather操作

    本文讲解Linux内核虚拟内存管理中的mmu_gather操作,看看它是如何保证刷tlb和释放物理页的顺序的,又是如何将更多的页面聚集起来统一释放的。
    的头像 发表于 05-20 14:37 1605次阅读

    一文解读内存管理单元 (MMU)

    一般MMU会有一种disable的模式,即不使能MMU,所有虚拟地址都直接映射到相应的物理地址,VA=PA。
    的头像 发表于 07-28 18:09 3949次阅读
    一文解读<b class='flag-5'>内存</b><b class='flag-5'>管理</b><b class='flag-5'>单元</b> (<b class='flag-5'>MMU</b>)

    为什么没有MMU就无法运行Linux系统

    MMU(Memory Management Unit,内存管理单元)是一种硬件模块,用于在CPU和内存之间实现虚拟
    的头像 发表于 04-23 10:48 585次阅读
    为什么没有<b class='flag-5'>MMU</b>就无法运行Linux系统

    MMU内存管理单元的宏观理解

    (Memory Management Unit,内存管理单元)是一种硬件模块,用于在CPU和内存之间实现虚拟内存
    的头像 发表于 11-26 15:21 240次阅读
    <b class='flag-5'>MMU</b><b class='flag-5'>内存</b><b class='flag-5'>管理</b><b class='flag-5'>单元</b>的宏观理解