【问题标题】:Virtual memory and MMU confusion in embedded systems [closed]嵌入式系统中的虚拟内存和 MMU 混淆
【发布时间】:2018-04-18 18:07:14
【问题描述】:

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

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

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

【问题讨论】:

  • mmu 可能会有性能损失,因为必须查找每个事务。如果您一直访问相同的地址空间,则 mmu 中相当于一个小型缓存,但每个事务仍然需要花费额外的时间。好处正如 Clifford 所描述的那样,mmu 允许您控制总线/系统的可缓存范围和其他功能,如果不使用操作系统,您可以使虚拟地址 = 物理以使生活更轻松你自己……
  • 如果您只是使用 mmu 来控制内存空间的属性,则可以将其设为静态。不断变化的是人们正在分配和释放并且操作系统正在加载和加载程序等。单任务您可以根据需要设置一次,或者可以在运行时使用它,您的设计是您的选择。

标签: memory-management embedded microcontroller mmu cortex-a


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢。对于MMU,页表条目必须由操作系统等软件输入吗?或者如果没有明确设置,MMU 是否会有一些从虚拟地址到硬件物理地址的默认映射?只是一个我还没有完全理解的概念
  • @Engineer999 :请参阅您的部件的数据表。如果您打算自己管理 MMU,无论如何您都需要这样做。在 ARM Cortex-A8 上,MMU 在启动时被禁用 - 您在启用它之前对其进行配置。没有它,所有内存都通过物理地址访问,并且将被读/写。
  • 我们实际上使用了带有简单 RTOS (threadx) 的 MMU 来支持来自非线性闪存设备的代码的按需分页。它允许我们执行比我们的片上 SRAM (~256KB) 更大的模式程序,而无需为每种模式进行显式的代码交换。它还允许我们拥有一个带有 SDRAM 的系统,并将片上 SRAM 用作二级缓存。在这两种情况下,它都需要我们分析代码并管理代码的位置,以便我们可以锁定“热门”页面,但效果很好。
猜你喜欢
  • 2016-06-07
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 2011-08-19
  • 2019-05-24
  • 1970-01-01
  • 2011-12-30
相关资源
最近更新 更多