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的系统。

审核编辑:汤梓红

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

    关注

    4983

    文章

    18286

    浏览量

    288509
  • soc
    soc
    +关注

    关注

    38

    文章

    3746

    浏览量

    215706
  • 操作系统
    +关注

    关注

    37

    文章

    6288

    浏览量

    121890
  • 内存管理
    +关注

    关注

    0

    文章

    163

    浏览量

    14057
  • MMU
    MMU
    +关注

    关注

    0

    文章

    91

    浏览量

    17945

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

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

收藏 人收藏

    评论

    相关推荐

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

    Linux系统中,查看系统运行状态(或者故障排除),比如内存或者CPU使用率的时候,可以使用top命令,它提供了系统
    发表于 11-25 16:37 3678次阅读
    <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 552次阅读
    为什么<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

    Linux运行的最低要求是什么

    我们经常可以看到初学者在单片机论坛中询问他们是否可以在他们微不足道的小的8位微机中运行Linux。这些问题的结果通常是带来笑声。我们也经常看到,在Linux论坛中,询问Linux
    发表于 08-20 06:26

    ARM存储系统中的大/小端及MMU简析

    到SDRAM地址运行就可以了。针对具有MMU的ARM处理器可以移植Linux for arm操作系统,针对没有
    发表于 04-20 09:23

    stm32用ucos还是linux

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

    uClinux和Linux的具体异同

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

    Linux到底能不能在8位MCU上运行

    我们经常可以看到初学者在单片机论坛中询问他们是否可以在他们微不足道的小的8位微机中运行Linux。这些问题的结果通常是带来笑声。我们也经常看到,在Linux论坛中,询问Linux
    的头像 发表于 04-06 12:48 3679次阅读

    linux无法解析域名怎么办

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

    linux下如何安装虚拟机

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

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

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

    RTOS多线程必须要MMU才行?

    前两天看到有人说:计算机的多线程,必须要有MMU才行,否则系统不能正常运行MMU:Memory Management Unit,即内存管理单元,它是一个“好东西”,在大型的操作
    的头像 发表于 10-11 18:56 1854次阅读

    什么是MMUlinux为什么需要MMU

    在内存管理方面,MMU可以通过页面表(Page Table)实现虚拟内存管理。页面表是一种数据结构,记录了每个虚拟页面和其对应的物理页面之间的映射关系。
    发表于 10-09 11:27 536次阅读
    什么是<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 473次阅读

    MMU中的页命中、缺页介绍

    页命中、缺页 (1)页命中 • a) 处理器要对虚拟地址VA进行访问。 • b) MMU的TLB没有命中,通过TWU遍历主存页表中的PTEA(PTE地址)。 • c) 主存向MMU返回PTE
    的头像 发表于 11-26 16:19 433次阅读
    <b class='flag-5'>MMU</b>中的页命中、缺页介绍