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

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

3天内不再提示

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

Linux爱好者 来源:Linux爱好者 2023-04-23 10:48 次阅读

5d294436-e016-11ed-bfe3-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,程序只能访问被允许访问的地址,可以有效地避免非法访问的问题。

5d3cb908-e016-11ed-bfe3-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的系统。

审核编辑:汤梓红

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

    关注

    5068

    文章

    19008

    浏览量

    302990
  • soc
    soc
    +关注

    关注

    38

    文章

    4115

    浏览量

    217900
  • 操作系统
    +关注

    关注

    37

    文章

    6727

    浏览量

    123182
  • 内存管理
    +关注

    关注

    0

    文章

    168

    浏览量

    14122
  • MMU
    MMU
    +关注

    关注

    0

    文章

    91

    浏览量

    18263

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

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Linux中如何查看系统运行信息

    Linux系统中,查看系统运行状态(或者故障排除),比如内存或者CPU使用率的时候,可以使用top命令,它提供了系统
    发表于 11-25 16:37 3986次阅读
    <b class='flag-5'>Linux</b>中如何查看<b class='flag-5'>系统</b><b class='flag-5'>运行</b>信息

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

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

    mini2440烧写运行mmu裸机程序led不亮

    我使用的开发板是mini2440,交叉编译器版本为友善官方提供的arm-linux-gcc-4.4.3,主机环境是物理机上的ubuntu12.04,使用jlink-V8和SEGGER官网提供
    发表于 06-28 05:45

    stm32用ucos还是linux

    ,不带MMU控制器,不可能运行Linux,Clinux不算Linux的。 基于STM平台且满足实时控制要求操作系统,有以下5种可供移植选择。
    发表于 10-10 14:51 1.4w次阅读

    ARM存储管理单元MMU详解

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

    uClinux和Linux的具体异同

    uCLinux是针对控制领域的嵌入式linux操作系统,它从Linux 2.0/2.4内核派生而来,沿袭了主流Linux的绝大部分特性。适合不具备内存管理单元(
    发表于 11-04 10:42 2次下载

    linux内核无法启动

     Linux在启动过程中会出现一些故障,导致系统无法正常启动,本文列举了几个应用单用户模式、GRUB命令操作、Linux救援模式的典型故障修复案例帮助读者了解此类问题的解决。
    发表于 11-14 17:26 2973次阅读
    <b class='flag-5'>linux</b>内核<b class='flag-5'>无法</b>启动

    Linux为什么无法取代Windows

    Linux系统诞生二十多年了,全球几百万开发者维护并使用Linux,堪称全人类智慧的结晶。为什么却始终无法取代Windows,统一操作系统
    的头像 发表于 04-18 11:46 4007次阅读

    linux无法联网怎么解决

    linux无法联网的解决方法如下
    发表于 05-13 09:11 1.6w次阅读
    <b class='flag-5'>linux</b><b class='flag-5'>无法</b>联网怎么解决

    linux无法解析域名怎么办

    由于linux没有DNS导致无法解析域名。
    发表于 05-21 09:23 2316次阅读
    <b class='flag-5'>linux</b><b class='flag-5'>无法</b>解析域名怎么办

    linux下如何安装虚拟机

    如今,越来越多的人正在使用Linux系统,现在许多国家的操作系统都基于Linux内核。 尽管有很多软件可以在Linux
    发表于 09-18 16:54 1799次阅读

    MMU的工作原理梳理

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

    修复win10、Linux系统无法启动的故障

    修复win10、Linux系统无法启动的故障的方法步骤。
    发表于 05-10 17:55 0次下载

    什么是MMUlinux为什么需要MMU

    在内存管理方面,MMU可以通过页面表(Page Table)实现虚拟内存管理。页面表是一种数据结构,记录了每个虚拟页面和其对应的物理页面之间的映射关系。
    发表于 10-09 11:27 1309次阅读
    什么是<b class='flag-5'>MMU</b>?<b class='flag-5'>linux</b>为什么需要<b class='flag-5'>MMU</b>?

    嵌入式Linux运行一定需要MMU吗?为什么需要MMU

    嵌入式Linux运行一定需要MMU吗?为什么需要MMU?  嵌入式Linux运行需要
    的头像 发表于 10-29 16:28 765次阅读