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

我经常和操作系统中的虚拟化概念混淆。 考虑到RAM作为物理内存,为什么我们需要虚拟内存来执行进程?

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

谁负责虚拟内存和虚拟内存的大小?

假设如果RAM的大小是4GB(即2 ^ 32-1地址空间),那么虚拟内存的大小是多less?

除此之外,虚拟内存是一种抽象,为程序员提供了在系统上拥有无限可用内存的错觉。

虚拟内存映射被制作成对应于实际的物理地址。 操作系统创build并处理这些映射 – 利用页表和其他数据结构来维护映射。 虚拟内存映射总是在页面表或类似的数据结构中find的(对于虚拟内存的其他实现,我们可能不应该称之为“页表”)。 页表也在物理内存中 – 通常在用户程序不能写入的内核保留空间中。

虚拟内存通常比物理内存大 – 如果虚拟内存和物理内存大小相同,虚拟内存映射就没有太多的理由。

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

我可能在这里假设错了,但我敢打赌,你发现很难包装你的头虚拟内存的具体实现,最有可能分页。 没有办法做分页 – 有很多的实现,你的教科书描述的实现可能与实际操作系统(如Linux / Windows)中出现的实现不一样,可能有细微差别。

我可以说一千个关于分页的段落…但是我认为最好留给另外一个专门针对这个话题的问题。

我无耻地从顶部的man页面复制摘录

VIRT – 虚拟映像(kb)该任务使用的虚拟内存总量。 它包括所有代码,数据和共享库以及已被换出的页面和已经被映射但未被使用的页面。

SWAP – 交换大小(kb)不驻留但存在于任务中的内存。 这是已换出的内存,但可能包含其他非常驻内存。 该列是通过从虚拟内存中减去物理内存来计算的

看到这里: 物理VS虚拟内存

虚拟内存存储在硬盘上,当RAM被填满时使用。 物理内存仅限于计算机中安装的RAM芯片的大小。 虚拟内存受到硬盘大小的限制,所以虚拟内存有更多的存储空间。