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

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

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

答案1

即使没有硬件支持(没有内存管理单元),所有指针都代表物理地址。然而,您确实会失去通常通过 MMU 提供的几个关键功能:

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

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

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

答案2

当然,有一些限制是可能的,例如内存保护,这将是一个问题,如上所述。例如μClinuxhttp://www.uclinux.org/支持多进程,无需实现虚拟内存。请注意,某些 CPU(至少像 Analog Devices Blackfin)确实提供 MPU(内存保护单元)http://docs.blackfin.uclinux.org/doku.php?id=bfin:mpu。这使得虚拟内存较少的操作系统仍然允许对内存进行分区。

答案3

这取决于你如何定义过程线程在记忆方面。

虚拟内存的功能之一就是分区。虽然可以在没有任何分区的情况下运行多个进程,但这更像是运行多个线程而不是进程 - 共享相同的地址空间。

相关内容