处理器具有虚拟内存支持是否需要MMU(内存管理单元)芯片?


14

处理器具有虚拟内存支持是否需要MMU(内存管理单元)芯片?

是否可以在软件中模拟MMU功能?(我知道这可能会对性能产生很大的影响)。


任何功能齐全的计算机都可以模拟其他任何具有足够性能的计算机。或模拟任何硬件。唯一的问题是性能下降的幅度。

如今,每个处理器都需要一个TLB,因此它具有内置的MM单元。
rastafile

Answers:


22

任何模拟包含MMU的系统的系统仿真器都可以有效地模拟软件中的MMU,因此,您对问题的回答为“是”。但是,虚拟内存需要某种方式来执行内存访问控制,或者至少需要地址转换,因此它需要运行被控制软件的CPU的完整软件仿真,或者需要硬件帮助。

因此可以想象,您可以构建一个没有MMU的系统,向其移植QEMU,添加缺失的部分以使虚拟内存真正有用(例如,在主机系统上添加对交换的支持),然后在QEMU中运行需要MMU的操作系统,具有您希望在来宾操作系统中提供的所有保护(除非存在QEMU错误)。

用于提供虚拟内存的无MMU的“仿真”的一个真实且古老的示例是Z-machine,它能够在70年代末和80年代初在8位系统上进行页面调度和交换其代码和数据。 。这是通过在底层真实处理器上模拟虚拟处理器来实现的。这样,解释器就可以完全控制正在运行的程序“看到”的内存布局。

实际上,通常认为至少在操作系统级别,需要MMU来支持虚拟内存。如所示的无MMU内核?,可以构建Linux内核,使其可以在没有MMU的系统上运行,但是最终的配置是非常不寻常的,并且仅适用于非常特定的用例(特别是没有恶意软件的情况)。它可能不支持许多需要虚拟内存的环境(交换,mmap...)。


那么虚拟机应用程序还具有MMU仿真器组件吗?
yoyo_fun

是的-不一定要作为单独的组件,但是它们在仿真中确实具有必要的支持。
斯蒂芬·基特

7
@JenniferAnderson:某些现代CPU具有使仿真器(部分)将MMU仿真卸载到MMU本身的功能。例如,在仿真器内部运行的程序本身将使用多个仿真的内存页面,这些内存页面当然“嵌套”在仿真器使用的内存页面中。较新的高端Intel和AMD CPU都支持嵌套页表,这使仿真器可以在MMU自身内表达此嵌套,而不必(昂贵地)模拟它。
约尔格W¯¯米塔格

的确,@Jörg,感谢您的澄清。尽管大多数管理程序仍然包括某种程度的软件仿真,以便无需额外的硬件支持即可运行。我对问题的“是否可能”一面不知所措;-)。
斯蒂芬·基特

3
@JenniferAnderson:是的,此功能是为准虚拟化专门引入的。(请注意,自从1960年代初以来,大型机领域就不存在硬件辅助的半虚拟化技术。)但是,事实证明,它还可以用于其他有趣的应用程序,例如加快垃圾收集(请参见参考资料)。以Azul的Zing JVM中的C4收集器为例)。但是,请注意,这一切工作在两个方向:以同样的方式,扩展虚拟化支持MMU的无非是一个性能优化和虚拟化...
约尔格W¯¯米塔格

7

这完全取决于您所谓的虚拟内存。一个有趣的模型是旧的Win16模型(从旧的Windows 3.x,而不是Windows NT中知道的最好)。在该模型中,您具有GlobalLockGlobalUnlockLocalLock以及LocalUnlock函数。这些是协作,手动管理虚拟内存的一种形式。由于这是在(应用程序)软件中完成的,因此不需要MMU。内存是虚拟的,即可以将解锁的内存交换到磁盘。

但是,在Win16模型中,不同进程之间没有保护。如果另一个进程将数据保留在内存中,则可以将其覆盖。这不是基本限制。如今,有了快速的固态硬盘,您可以从内存中完全删除一个未运行的进程,并在合理的时间内删除该进程。


7

如果您拥有可以与物理内存交换进程的软件,则不必具有硬件MMU 。

这是早期多任务操作系统的操作模式。在任何给定时间,只有一个进程驻留在内存中,当其时间片期满时,整个进程将全部替换掉​​(您可以看到这对于大型进程来说是有问题的)。当前正在运行的进程看到的内存内容与任何其他进程看到的内存内容都不相同,并且每个内存都有自己的地址空间视图。

某些硬件支持会有所帮助-操作系统自己使用的“受保护”内存区域的概念(例如,只有在超级用户模式下才能访问所有设置了MSB的地址),“中断”值表示正在使用的最高地址,但是内存管理硬件不是虚拟内存的绝对要求;这只是实现它的一种特别有效的方法。


2
不过,这并不是真正的虚拟内存,它只是进程交换...(我们真的需要定义“虚拟内存”才能正确回答该问题!)
Stephen Kitt

每个进程都有自己的地址空间视图-我将进行编辑以阐明我正在使用的定义。
Toby Speight

是的,但是对于所有进程来说都是相同的一对一映射。(从过程的角度看,差异不大,所以那里没有真正的争论……)
Stephen Kitt,2017年

0

最初用于制作VM的商用计算机没有MMU,而是在处理器中内置了VM。我当前的想法是MMU只是将VM置于非VM处理器之上的事后想法。VM是由曼彻斯特大学开发的,Burroughs的设计师确信他们应该包括它-尽管当时非常具有创新性。

Burroughs B5000(现在为Unisys MCP机器)使用了强制执行内存边界的内存描述符-超出边界,您的程序就被丢弃(尊重边界是良好社会的基础,但是有些滥用特权,因此必须强制执行边界)。

描述符保存存储器地址,块长度和数据类型,还保存所有重要的P位或状态位。p位指示该块在内存中。p位为零表示该块位于大容量存储中,并且该地址是存储地址,可以是原始程序(代码或数据),也可以是VM(已推出数据)。

这些机器实现了分层的内存模型。MMU似乎是要弥补平面内存的不足,需要将用户对象映射到平面内存中。JK Iliffe还使用以下模型设计了ICL机器:

http://www.computerconservationsociety.org/resurrection/res74.htm#f

https://zh.wikipedia.org/wiki/Burroughs_large_systems

这些计算机与当今大多数计算机之间的区别在于,它们可以处理完整的系统架构,而不仅仅是CPU架构。

因此,似乎不仅MMU不是必需的,而且没有它们的系统也会更好。


-1

大多数台式机,笔记本电脑和服务器处理器在内存管理硬件中都包含一个或多个TLB,并且几乎总是存在使用分页或分段虚拟内存的任何处理器中。

Translation_lookaside_buffer

然后,了解虚拟内存及其真正含义。巨大的虚拟地址空间不是主要思想。主要思想是在多个级别上进行缓存/缓冲。

这远非简单,但是这个TLB内存高速缓存是内核mm子系统所基于的重要硬件(否则VM会很大开销)。


VM =

虚拟内存或虚拟机。非常不同,非常联系。


因此答案是否定的,没有必要使用MMU 芯片(CPU 外部的单独单元,在主板上)。

是的,完全需要一些硬件MMU(在CPU中)来考虑有用的VM。(它从针对x86平台的8086 细分开始)

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.