Memory management 嵌入式系统中的虚拟内存和MMU混淆

Memory management 嵌入式系统中的虚拟内存和MMU混淆,memory-management,embedded,microcontroller,mmu,cortex-a,Memory Management,Embedded,Microcontroller,Mmu,Cortex A,这有意义吗?或者如果不运行任何类型的操作系统,在微控制器上安装MMU(内存管理单元)能让我们受益吗 以beaglebone板上使用的基于ARM Cortex A8的芯片为例,该芯片包括一个MMU。据我所知,这提供了一些好处,可以让我们运行嵌入式Linux或其他操作系统 我的困惑是,如果我们不使用操作系统,MMU对我们有用吗?据我所知,虚拟内存是一种由硬件和软件共同提供的内存管理技术。我们是否需要操作系统不断地更新和更改物理地址到虚拟地址的映射,或者这可以在硬件中完成?提前感谢。MMU可以分配只读

这有意义吗?或者如果不运行任何类型的操作系统,在微控制器上安装MMU(内存管理单元)能让我们受益吗

以beaglebone板上使用的基于ARM Cortex A8的芯片为例,该芯片包括一个MMU。据我所知,这提供了一些好处,可以让我们运行嵌入式Linux或其他操作系统


我的困惑是,如果我们不使用操作系统,MMU对我们有用吗?据我所知,虚拟内存是一种由硬件和软件共同提供的内存管理技术。我们是否需要操作系统不断地更新和更改物理地址到虚拟地址的映射,或者这可以在硬件中完成?提前感谢。

MMU可以分配只读、读写、无效和可缓存性等属性。例如,如果在缓存上使用DMA传输启用系统,则后者是必不可少的,如果应用程序访问不存在的内存,则将地址范围设置为无效可以确保出现异常。它还可用于阻止对应用程序未使用的外围设备的访问—同样,它更可能为出错的应用程序生成异常。将ROM空间设置为只读也有类似的错误捕获好处

这些可能不是很大的好处,但如果您有MMU,您也可以使用它,即使它基本上是静态配置。例如,在低端Cortex-M部件上使用MPU也可以实现同样的好处——基本上将MMU用作MPU

这种简单的MMU使用方法适用于操作系统较少且相对简单的RTOS/IPC执行程序,其中许多操作系统没有全面的MMU支持


甚至可以在没有操作系统的情况下实现交换文件系统,但如果您需要如此大的地址空间,您的应用程序可能会从操作系统中受益,或者您将在构建自己的系统的过程中获益。

mmu可能会有性能损失,因为必须查找每个事务。如果您一直访问相同的地址空间,那么mmu中就相当于一个小缓存,但是每个事务仍然需要花费额外的时间。正如Clifford所描述的,mmu允许您控制总线/系统的可计算范围和其他功能,而这些功能是其他任何方式都无法实现的,如果不使用操作系统,您可以使虚拟地址=物理地址以使自己的生活更轻松…如果您只是使用mmu来控制内存空间的属性,则可以将其设置为静态。不断变化的是,当人们在玩mallocing和Free游戏时,操作系统正在加载和加载程序,等等。单任务你可以只设置一次,如果你愿意,也可以在运行时处理它,你的设计就是你的选择。谢谢。对于MMU,页表条目必须由软件(如操作系统)输入?或者,如果没有明确设置,MMU是否会在硬件中有一些从虚拟地址到物理地址的默认映射?只是一个概念,我还没有完全理解understand@Engineer999:请参阅零件的数据表。如果您打算自己管理MMU,则无论如何都需要这样做。在ARM Cortex-A8上,MMU在启动时被禁用-您可以在启用之前对其进行配置。如果没有它,所有的内存都是通过物理地址访问的,并且都是读/写的。我们实际上使用了带有简单RTOS(threadx)的MMU来支持来自非线性闪存设备的代码按需分页。它使我们能够执行比片上SRAM(约256KB)大得多的模式程序,而无需对每种模式进行显式代码交换。它还允许我们拥有一个带有SDRAM的系统,并将片上SRAM用作二级缓存。在这两种情况下,它都要求我们分析代码并管理代码的位置,这样我们就可以锁定“热门”页面,但它工作得很好。