memory-management - 虚拟内存和物理内存有什么区别?

标签 memory-management operating-system virtualization ram virtual-memory

我经常对操作系统中的虚拟化概念感到困惑。将 RAM 视为物理内存,为什么我们需要虚拟内存来执行进程?

当来自外部硬盘驱动器的进程(程序)被带到主内存(物理内存)执行时,这个虚拟内存在哪里。

谁来管理虚拟内存,虚拟内存的大小是多少?

假设 RAM 的大小为 4GB(即 2^32-1 个地址空间),虚拟内存的大小是多少?

最佳答案

除其他外,虚拟内存是一种抽象,它给程序员一种在他们的系统上有无限可用内存的错觉。

虚拟内存映射对应于实际的物理地址。 操作系统 创建并处理这些映射 - 利用页表以及其他数据结构来维护映射。虚拟内存映射总是在页表或一些类似的数据结构中找到(在其他虚拟内存实现的情况下,我们可能不应该称它为“页表”)。页表也位于物理内存中——通常位于用户程序无法覆盖的内核保留空间中。

虚拟内存通常比物理内存大 - 如果虚拟内存和物理内存大小相同,则没有太多理由进行虚拟内存映射。

通常,只有程序所需的部分驻留在内存中 - 这是一个称为“分页”的主题。虚拟内存和分页密切相关,但 不是 同样的话题。虚拟内存还有其他实现方式,例如分段。

我可能在这里假设错了,但我敢打赌,您发现难以理解的事情与虚拟内存的特定实现有关,最有可能是分页。没有一种方式进行分页 - 有很多实现,您的教科书描述的实现可能与 Linux/Windows 等真实操作系统中出现的实现不同 - 可能存在细微差别。

我可以谈论一千段关于分页的内容……但我认为最好将其留给专门针对该主题的不同问题。

关于memory-management - 虚拟内存和物理内存有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14347206/

相关文章:

c++ - 程序中变量的基址/静态地址是什么?

c++ - 紧密物理和碰撞循环中的缓存友好内存访问

带空格的字符数组输入

file-io - 操作系统如何计算文件大小?

WPF TreeView 虚拟化

java - 从java应用程序运行在vmware工作站中创建的VM

linux - Intel VMX中KVM如何调度多个VM?

objective-c - 我可以释放在 block 运行之前使用它的 block 外部创建的对象吗?

c++ - 放置新行为等效

python - 在Python中从ip查找操作系统