是否可以在不支持虚拟内存的情况下支持多个进程?

Sen*_*Sen 8 process memory

是否可以在不支持虚拟内存的情况下支持多个进程?如果是这样,我想了解更多。

Gil*_*il' 10

即使没有硬件支持(没有MMU),您也可以运行多进程操作系统,所有指针都代表一个物理地址。但是,您确实会丢失一些通常通过 MMU 提供的关键功能:

  • 由于指针始终指向 RAM 中的特定位置,因此您不能进行交换(或仅以非常有限的方式)。通常,当 MMU 找不到给定虚拟地址的物理页面时,它会引发异常,并且操作系统提供的异常处理程序从交换中获取页面。
  • 由于一个指针是在没有检查的情况下取消引用的,所以每个进程都可以访问其他进程的内存和内核内存。通常,当 MMU 找不到给定虚拟地址的物理页面时,它会引发异常,并且操作系统提供的异常处理程序会终止尝试无效访问的进程。
  • 由于相同的指针在不同的进程中具有相同的含义,因此无法轻松实现fork。通常, 的作用fork是制作进程物理内存的副本¹,并创建从相同虚拟地址到新物理地址的新虚拟内存映射。

有一些类 Unix 操作系统可以在没有 MMU 的系统上运行。

¹在现代 unices 中,这通常是惰性完成的(写时复制),这再次依赖于 MMU 在找不到物理页面时引发异常。