首页 > 解决方案 > 如何在没有 MMU 的情况下实现内存管理系统调用

问题描述

让我们考虑一项任务,为在没有 MMU 的系统(比如相当小的嵌入式系统)上运行的 OS 内核设计内存管理。目标是使系统调用集与 UNIX (POSIX) 兼容。出现了支持brk()/管理数据段(堆)中断或使用标志设置sbrk()完全管理堆的想法。mmap()MAP_ANONYMOUS

但是这两种方法都适用于虚拟内存,对吗?

所以在任何一种情况下,系统都必须支持虚拟内存,但是如何在没有 MMU 的情况下做到这一点呢?也许只是MPU?

计算内核中某处的地址转换并从 brk()/sbrk()/mmap() 返回虚拟地址?我可以想象,但是在哪里计算通常由 MMU 完成的从虚拟地址到物理地址的映射?

似乎 POSIX 仅适用于配备 MMU 的硬件,或者?在这么小的嵌入式设备上管理它的方式是什么 - 我希望在 SW 中完成的地址重新计算会导致性能大幅下降......

我只需要澄清这样做的正确方法......

标签: memory-managementoperating-systemsystem-callsvirtual-memorymmu

解决方案


推荐阅读