嵌入式Linux--MMU的作用及工作过程

MMU内存管理单元相关知识点总结 1.MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统。   2.虚拟内存由来:许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规... 阅读详情

MMU的作用及工作过程

     MMU(Memory Management Unit)是内存管理单元的简称,读者朋友在学习嵌入式的时候应该听说过µCLinux,这是适合没有MMU的微控制器使用的嵌入式Linux操作系统,比如ARM7。由于没有MMU,所以在µCLinux上实现多任务功能是一个非常棘手的问题。从而引出了本节的关注点:MMU的作用是什么?简单地说,MMU的作用有两点:地址翻译、内存保护。

1、地址翻译

      在处理器上一般会运行一个操作系统,如Linux,用户编写的源程序需要经过编译、链接得到可执行文件,然后被操作系统加载执行。编译、链接的过程在第2章实验环境搭建中有过描述,在链接的时候需要指定一个链接描述脚本,链接描述脚本有很多作用,其中一项是控制可执行文件中Section和符号的内存布局,也就是控制可执行程序在内存中是如何放置的,操作系统会按照可执行文件的要求将其加载到内存对应地址并执行。假如用户A编写了程序ProgramA,并且ProgramA占用的内存空间是0x100-0x200,用户B编写了程序ProgramB,并且ProgramB要求的内存空间也是0x100-0x200,这是完全有可能的,因为给操作系统提供程序的用户很多,不可能限定每个用户使用不同部分的内存。这样当ProgramA被加载执行时,ProgramB就不能被加载执行,一旦ProgramB也被加载了就会破坏ProgramA的执行,因为后者会覆盖ProgramA占用的内存。为了解决这个问题,将操作系统和处理器都做了修改,添加了MMU,在其中进行地址翻译,程序加载入内存的时候为其建立地址翻译表,处理器执行不同程序的时候使用不同的地址翻译表,如图10.1所示。

 

 

      ProgramA被加载到地址0x500-0x600处,ProgramB被加载到地址0x700-0x800处,同时建立了各自的地址翻译表,当处理器要执行ProgramB时,会使用ProgramB对应的地址翻译表,比如读取ProgramB地址0x100处的指令,那么经过地址翻译表可知0x100对应实际内存的0x700处,所以实际读取的就是0x700处的指令。同样的,当处理器要执行ProgramA时,会使用ProgramA对应的地址翻译表,这样就避免了之前提到的内存冲突问题,有了MMU的支持,操作系统就可以轻松实现多任务了。

      图10.1中CPU给出的地址称之为虚拟地址(OR1200中称之为有效地址EA),经过MMU翻译后的地址称之为物理地址。

      MMU的地址翻译功能还可以为用户提供比实际大得多的内存空间。用户在编写程序的时候并不知道运行该程序的计算机内存大小,如果在链接的时候指定程序被加载到地址Addr处,而运行该程序的计算机内存小于Addr,那么程序就无法执行,有了MMU后,程序员就不用关心实际内存大小,可以认为内存大小就是“2^指令地址宽度”。MMU会将超过实际内存的虚拟地址翻译为物理地址进行访问。

      地址翻译表存储在内存中,如果采用图10.1中的方式:地址翻译表的表项是一个虚拟地址对应一个物理地址,那么会占用太多的内存空间,为此,需要修改翻译方式,常用的有三种:页式、段式、段页式,这也是三种不同的内存管理方式。

      页式内存管理将虚拟内存、物理内存空间划分为大小固定的块,每一块称之为一页,以页为单位来分配、管理、保护内存。此时MMU中的地址翻译表称为页表(Page Table),每个任务或进程对应一个页表,页表由若干个页表项(PTE:Page Table Entry)组成,每个页表项对应一个虚页,内含有关地址翻译的信息和一些控制信息。在页式内存管理方式中地址由页号和页内位移两部分组成,其地址翻译方式如图10.2所示。

 

 

      使用虚拟地址中的虚页号查询页表得到对应的物理页号,然后与虚拟地址中的页内位移组成物理地址。比如:页大小是256字节,虚拟地址是0x104,可知对应的虚页号是0x1,页内位移是0x4,假如通过页表翻译得到的对应物理页号是0x7,那么0x104对应的物理地址就是0x704。使用页表方式进行地址翻译可以有效减少地址翻译表占用的内存空间,还是以图10.1为例,页大小是256字节,此时每个程序对应的页表就只有两项,如图10.3所示。

 

 

      段式内存管理将虚拟内存、物理内存空间划分为段进行管理,段的大小取决于程序的逻辑结构,可长可短,一般将一个具有共同属性的程序代码和数据定义在一个段中。每个任务和进程对应一个段表(Segment Table),段表由若干个段表项(STE:Segment Table Entry)组成,内含地址映像信息(段基址和段长度)等内容。在段式虚拟存储器中,地址分为段号、段内位移两部分,使用段表进行地址翻译的过程与使用页表进行地址翻译的过程是相似的。

      段页式内存管理是在内存分段的基础上再分页,即每段分成若干个固定大小的页。每个任务或进程对应有一个段表,每段对应有自己的页表。在访问存储器时,由CPU经页表对段内存储单元进行寻址。

      OR1200处理器中的MMU使用页表进行地址翻译,所以本章对段式、段页式不做过多着墨,同时,下文介绍内存保护、TLB时都默认是页式内存管理。

 

      2、内存保护

      MMU除了具有地址翻译的功能外,还提供了内存保护功能。采用页式内存管理时可以提供页粒度级别的保护,允许对单一内存页设置某一类用户的读、写、执行权限,比如:一个页中存储代码,并且该代码不允许在用户模式下执行,那么可以设置该页的保护属性,这样当处理器在用户模式下要求执行该页的代码时,MMU会检测到并触发异常,从而实现对代码的保护。下文在分析OR1200处理器中MMU模块时会具体介绍内存保护的实现机制。


转载地址: https://blog.youkuaiyun.com/leishangwen/article/details/27088305

【MMU】认识 MMU 及内存映射的流程 阅读详情

相关推荐

有mmu可以跑linux,那么mmu是什么?stm32嵌系统与不嵌系统有什么区别?mmu是什么?

stm32嵌系统与不嵌系统有什么区别? ,可以说STM32是ARM的核心,性能很强,可以运行OS,而MCU性能很差,不应该运行OS,但一定程度上可以运行RTOS。可以说ARM是一款性能很强的MCU,但已经不算是MCU了。 stm32能跑linux操作系统吗,和s3c2440最大的区别是什么? 运行linux,芯片需要MMU,STM32没有MMU,所以不能运行Linux,WinCE等。但是可以运行ucosii、uLinux、vxWorks等。 原创文章,作者:小编,如若转载,请注明出处:http://www.

dianqicyuyan的博客 3826

MMU的作用及工作过程

以下内容摘自《步步惊芯——软核处理器内部设计分析》一书的第10章 MMU剖析     MMU的作用及工作过程       MMU(Memory Management Unit)是内存管理单元的简称,读者朋友在学习嵌入式的时候应该听说过µCLinux,这是适合没有MMU的微控制器使用的嵌入式Linux操作系统,比如ARM7。由于没有MMU,所以在µCLinux上实现多任务功能是一个非常棘手的

leishangwen的专栏 1万+

嵌入式Linux能否在无MMU处理器上运行?

Linux操作系统依赖虚拟内存机制实现进程隔离、内存保护与按需分页,其核心基础是内存管理单元(MMU)。当硬件缺失MMU时,标准Linux内核因深度耦合页表管理、缺页异常和Copy-on-Write等机制而无法直接运行。此时需转向专为微控制器优化的uClinux分支,它通过实地址映射、vfork替代fork、FLAT可执行格式等技术重构内存模型,在无MMU平台提供轻量级多任务能力。该方案广泛应用于电表、PLC等超低功耗、高确定性场景,但牺牲了内存保护与动态内存扩展能力。理解MMU原理与uClinux适配逻辑

weixin_33622085的博客 523

什么是mmu?为什么要用mmu?

MMU即内存管理单元(Memory Manage Unit),是一个与软件密切相关的硬件部件,也是理解linux等操作系统内核机制的最大障碍之一。可以说,不懂MMU使很多人一直停滞在单片机与无OS的时代。博主之前对MMU也一直是雾里看花,似懂非懂。最近终于自认为云开雾散后,回头总结,感觉有几个概念是阻碍人们理解MMU的元凶。 1)虚拟地址/物理地址 如果处理器没有MMU,CPU内部执行单元产生的内存地址信号将直接通过地址总线发送到芯片引脚,被内存芯片接收,这就是物理地址(physical address),

KUNPLAYBOY的博客 2万+

单细胞分析(19)—— 单细胞转录组基因集评分方法

在单细胞RNA测序(scRNA-seq)分析中,基因集评分(Gene Set Scoring)是一项关键任务,能帮助研究者识别细胞功能状态

阅读文献,记录学习笔记 2440

从STM32转战华大HC32F4A0:我的踩坑实录与10个USART的灵活配置心得

本文分享了从STM32迁移至华大HC32F4A0的实战经验,重点解析了10个USART的灵活配置技巧及常见问题解决方案。通过对比STM32F407,详细介绍了HC32F4A0在外设灵活性、IO功能组设计及多串口应用中的优势,帮助开发者快速掌握国产芯片的开发要点。

weixin_30514745的博客 524

linux内核可以不使用mmu,Linux内核的嵌入式系统应用

随着多媒体技术与通讯技术相结合的信息技术的快速发展和互联网的广泛应用,PC 时代也过渡到了后PC时代。在数字信息技术和网络技术高速发展的后PC时代,嵌入式技术越来越与人们的生活紧密结合。操作系统为用户使用计算机及其外部设备提供最基本的接口程序,管理计算机上的资源。随着应用领域的扩大,为了适应不同的应用场合,考虑到系统的灵活性、可伸缩性以及可裁剪性,一种以应用为中心、以计算机技术为基础、软硬件可裁剪...

weixin_35713233的博客 1056

CGNS快速入门到实战(一):CGNS静态链接库编译

近期,由于需要将CGNS格式加入到教研组自编CFD求解器DUBHE中,所以本人展开了对于CGNS的学习。CGNS快速入门到实战这一系列分成三篇文章展开叙述,具体有:(一)CGNS静态链接库编译;(二)VS配置调用CGNS静态链接库编写;(三)CGNS文件及案例展示。本篇文章重点讲述CGNS静态链接库编译。

ahang_99的博客 3819

嵌入式Linux之我行——ARM MMU工作原理剖析

嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。 共享资源,欢迎转载:http://hbhuanggang.cublog.cn 一、MMU的产生

嵌入精灵 1065

别再只会用QTcpSocket了!手把手教你用QSslSocket为你的Qt网络应用加上SSL/TLS加密(附完整代码示例)

本文详细介绍了如何将Qt网络应用从QTcpSocket迁移到QSslSocket,实现SSL/TLS加密传输。通过对比API差异、解析核心机制和提供完整代码示例,帮助开发者快速掌握安全网络编程技巧,有效防范数据窃听和中间人攻击等安全风险。

weixin_30654583的博客 400

网易 广州 梦幻西游端游 客户端社招笔试题 2024

4道算法题,时间2小时,牛客网笔试注:采用OJ模式,需要自己处理输入、输出。

z2014z的博客 1813

【转载】ARM 原理MMU

分类:嵌入式 原文地址:嵌入式Linux之我行——ARM MMU工作原理剖析作者:y307921462 一、MMU的产生 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之...

u012923751的博客 244

从零解析:富斯i6遥控器与STM32的IBUS协议通信实战

本文详细解析了富斯i6遥控器与STM32通过IBUS协议通信的实战指南,涵盖硬件准备、协议解析、驱动实现及常见问题解决。特别适合机器人及智能小车开发者,提供低成本、高可靠性的无线控制方案,助力快速实现多通道控制功能。

weixin_29193359的博客 440

ARM MMU工作原理剖析

嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。共享资源,欢迎转载:http://hbhuanggang.cublog.cn<br />一、MMU的产生<br />      许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求

zhw888888的专栏 1303

华为od 面试八股文_测试/测试开发_02_含答案

华为od 面试八股文_测试/测试开发_02_含答案

MISAYAONE的博客 2161

YOLO11训练中的批量大小(Batch Size)选择策略:分析Batch Size对训练速度、显存占用和模型性能的影响

在深度学习训练过程中,Batch Size(批量大小)是一个至关重要的超参数,它指的是单次迭代中用于更新模型权重的样本数量。简单来说,当我们训练神经网络时,不会一次性将所有数据喂给模型,而是将数据分成若干个小批次(batch),每个批次包含一定数量的样本,这个数量就是Batch Size。 Batch Size的核心作用在于平衡训练效率与模型性能。较小的Batch Size意味着每次更新权重时参考的信息较少,可能导致训练过程更加随机,但有时能带来更好的泛化能力;较大的Batch Size则能提供更稳定的梯

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 323

[转载]ARM MMU工作原理剖析

原文链接:http://blog.youkuaiyun.com/zhw888888/archive/2010/06/08/5656662.aspx 嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。 共享资源,欢迎转载:http://hbhuanggang.cublog.cn 一、MMU的产生       许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以 K为

linux内核探索 1195

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

嵌入式MMU功能与作用详解

MMU(Memory Management Unit,内存管理单元)是计算机硬件中的一个专用部件,通常集成在处理器(CPU)内部。它的核心工作是处理CPU发出的内存访问请求,负责将虚拟地址转换为物理地址。你可以把它想象成一个非常高效且聪明的“翻译官”和“交通警察”,负责管理CPU和物理内存之间的所有访问。功能作用带来的好处地址翻译将虚拟地址转换为物理地址为每个进程提供统一的、独立的地址空间,简化编程内存保护控制对内存区域的访问权限(读、写、执行)提升系统稳定性和安全性,防止进程间非法访问虚拟内存。

我的博客 1026

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

嵌入式 Linux 入门(一、Linux 基本介绍及文件结构)

嵌入式 Linux入 门第一课,嵌入式 linux 基础说明以及 Linux 文件结构。

不浮夸,不将就,认真对待学知识的我们 4万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

嵌入式Linux中的MMU

嵌入式MMU

caichen0710的博客 909

[嵌入式Linux] 详细讲解MMU

嵌入式LInux之MMU

959 1120

嵌入式Linux运行一定需要MMU吗

然而对于嵌入式uClinux系统而言,由 于所运行的程序往往是在出厂前已经固化的,不存在危害系统安全的程序侵入的隐患,因此只要应用程序经过较完整的测试,出现问题的概率就可以控制在有限的范 围内。Linux下所有标准的可执行文件的格式在uCLinux并不被支持,因为这些格式也用到了虚拟内存的一些功能.uCLinux使用的 是另外一种扁平格式.扁平格式是一种简洁高效的可执行文件格式,它值包含可执行的代码和数据,还有一些把可执行文件加载到内存任意位置所需要的可重定位的 信息.在编译时,可以指定程序的堆栈大小。

youzhangjing_的博客 278

嵌入式Linux--MMU

目录什么是MMU一、MMU的产生虚拟存储器的基本思想:二、MMU工作过程 什么是MMU 全称:memory management unit 【内存管理单元】 1、CPU中用来管理虚拟存储器、物理存储器的控制线路 2、同时也负责虚拟地址映射为物理地址 3、以及提供硬件机制的内存访问授权 一、MMU的产生  许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的

似水流年 732

linux 内存 切换 mmu,4,嵌入式Linux之内存管理单元MMU

4,嵌入式Linux之内存管理单元MMU一,MMU的原理1),虚拟地址《=》物理地址映射:2),物理地址和虚拟地址映射的方法:VA= function(PA);段映射:32为的cpu可以发出4G的地址我们建立页表将4G的内存和虚拟地址以1M段对应起来如图:二,MMU的实例点灯程序:1),设置页表如图:2),相关的代码Head.S代码:@*******...

weixin_32042443的博客 392

Cache 和 MMU作用

Cache 和 MMU作用

m0_69992925的博客 491

ARM64是否需要MMU才能运行Linux系统

本文深入解析ARM64架构下Linux必须启用MMU的原因,涵盖地址空间隔离、内存保护和虚拟内存机制,结合内核启动流程与编译配置,说明MMU在系统稳定性与安全性中的核心作用,揭示无MMU无法支持现代操作系统功能的根本限制。

river的博客 1046
上一篇: 嵌入式Linux--menuconfig详解
下一篇: 嵌入式Linux--NFS挂载rootfs
奔向星辰花海
博客等级 码龄10年 113粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值