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


8

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


可能是题外话?除非仅与UNIX系统有关。
Maciej Piechotka 2011年

Answers:


10

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

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

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

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


在第二个要点中,“当找不到给定虚拟地址的物理页面时”应该改为“拒绝访问与给定虚拟地址相对应的页面时”。内核拥有的页面很可能驻留。
罗斯兰

@Ruslan当页面未在进程中映射时,MMU通常包含不映射到物理页面的信息。MMU可能包含进程无法访问的物理页面的地址,但这是例外,而不是规则,如果内核使用MMU的此功能,则该规则用于内核内存(Linux会这样做) 。
吉尔(Gilles)'所以


0

这取决于您如何在内存方面定义进程线程

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


是的,没有。可以在没有虚拟内存的情况下强制执行内存分离。一些微控制器具有硬件内存保护,但没有虚拟内存(请参阅jlliagre的答案)。即使没有硬件支持,您也可以通过静态分析来实现内存分离(这并不容易,但可行)。
吉尔(Gilles)“所以,别再邪恶了”,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.