【发布时间】:2015-10-26 02:35:36
【问题描述】:
我目前正在学习操作系统课程,并且遇到了地址虚拟化。我将简要介绍一下我所知道的,然后提出我的问题。
基本上,CPU(现代微处理器)生成虚拟地址,然后 MMU(内存管理单元)负责将这些虚拟地址转换为它们在 RAM 中的相应物理地址。教授给出的示例是需要虚拟化,因为例如:您编译了一个 C 程序。你运行它。然后你编译另一个 C 程序。您尝试运行它,但内存中的常驻运行程序阻止加载较新的程序,即使空间可用。
根据我的理解,我认为没有虚拟化,如果编译器生成两个相同的物理地址,第二个将不会运行,因为它认为没有足够的空间。当我们对它进行虚拟化时,因为 CPU 只生成虚拟地址,MMU 将处理这种“冲突”并在 RAM 中为其他程序找到一个位置。(我们的教授给出了 MMU 是一个映射表的例子,这需要一个虚拟地址并将其映射到一个物理地址)。我认为这个想法与解决哈希表中的冲突非常相似。
能否请我就我的理解提供一些意见,并感谢任何进一步的澄清。
【问题讨论】:
-
进程隔离,简单明了。一个进程对另一个进程的意外影响可能为零,例如加载地址冲突、内存损坏等。
标签: c operating-system virtual-address-space