memory-management - 如何在没有 MMU 的情况下实现内存管理系统调用
问题描述
让我们考虑一项任务,为在没有 MMU 的系统(比如相当小的嵌入式系统)上运行的 OS 内核设计内存管理。目标是使系统调用集与 UNIX (POSIX) 兼容。出现了支持brk()
/管理数据段(堆)中断或使用标志设置sbrk()
完全管理堆的想法。mmap()
MAP_ANONYMOUS
但是这两种方法都适用于虚拟内存,对吗?
所以在任何一种情况下,系统都必须支持虚拟内存,但是如何在没有 MMU 的情况下做到这一点呢?也许只是MPU?
计算内核中某处的地址转换并从 brk()/sbrk()/mmap() 返回虚拟地址?我可以想象,但是在哪里计算通常由 MMU 完成的从虚拟地址到物理地址的映射?
似乎 POSIX 仅适用于配备 MMU 的硬件,或者?在这么小的嵌入式设备上管理它的方式是什么 - 我希望在 SW 中完成的地址重新计算会导致性能大幅下降......
我只需要澄清这样做的正确方法......
解决方案
推荐阅读
- python - 从源到目的地的矩阵中的广度优先搜索
- javascript - 如何为未定义的窗口对象编写测试用例 | Vue 测试工具 | 笑话框架
- git - 自动计算整个 git 分支上的修改(例如添加/删除的字母)
- html - 如何使img大小受单元格大小限制
- laravel - 如果条件在控制器中不起作用,则在 laravel 中
- javascript - 有没有办法检测从 angular8 中的对象数组动态绑定的 formArray 的 valueChanges
- azure - 在 YAML 配置中排除项目 azure-pipelines
- python - 如果包含 *,则在列上过滤 pandas 数据框
- mysql - 为什么这段代码在 MySQL 中运行良好,但在 SQL Server 中运行良好?
- android - 如何解决显示垂直视口的颤振抽屉被赋予无限高度