如何为所有任务提供单一的公共地址空间。如果它像这样发生,我们可以避免虚拟到物理内存的映射。
如果所有任务共享公共地址空间,那么我们如何避免虚拟到物理内存映射。
有一些现代(研究)操作系统可以做到这一点,比如Singularity,并且有性能优势,主要是因为它不再需要进行上下文更改,并且文件/符号加载器不再需要为全局缓存和内核函数进行地址转换.
您确实需要更具体地了解您要查找的内容。您将帖子标记为 OSX 和 Linux,两者都需要虚拟内存。在没有 MMU(因此没有虚拟内存)的系统上运行时,它会模拟它,我相当肯定你无法绕过它。我无论如何都不是专家。
uClinux是在缺少 MMU(如 ARM7)的处理器上运行的 Linux 实现,因此根据定义,所有任务必须有一个单一的地址空间。
所以“如何”的一个答案是“使用 uClinux”。
你标记了这个 VxWorks,还有另一个答案;VxWorks 支持平面内存。事实上,当我上次使用它时,MMU 保护是一个(昂贵的)附加组件。许多其他为微控制器设计的 RTOS 同样不支持 MMU,例如 eCOS 和 FreeRTOS。
在支持 MMU 的 RTOS 中, QNX 可能是最强大和最成熟的,同时仍保持高性能。
我不确定您为什么要禁用虚拟内存映射 - 它是 cpu 的内置功能,在运行操作系统以正确隔离进程时非常重要。
大多数操作系统允许您禁用虚拟内存,这样您的内存容量就会受到物理内存的限制。但是,A 进程的地址空间仍然是虚拟的,并且虚拟到物理的映射仍在发生。
获得所需内容的一种方法是运行以实模式执行的操作系统,例如 DOS 或 Windows 3.0,或者编写自己的操作系统。
虚拟内存的优点远大于缺点。为什么要避免虚拟内存。
这就是一些较旧的操作系统,甚至一些缺乏 VM 的现代操作系统仍然可以工作的方式。它对于桌面和服务器应用程序等有很多缺点,但它在嵌入式和/或实时环境中很有用,或者在硬件最少的情况下很有用。
VxWorks AE(高级版支持)偏离了所有任务的公共地址空间的概念。因此它可以有效地在有MMU和没有MMU的系统中使用。所有任务的公共地址空间称为平面内存模型和单独的不同任务的地址空间称为重叠内存模型或分段内存模型。您不应将内存模型与内存布局混淆,如目标文件中将数据划分为代码段、数据段、BSS 等的内存布局。两者都是不同的东西 :)。
堆栈溢出中的此链接将有助于更好