Memory management 虚拟内存和物理内存之间有什么区别?

Memory management 虚拟内存和物理内存之间有什么区别?,memory-management,operating-system,virtualization,ram,virtual-memory,Memory Management,Operating System,Virtualization,Ram,Virtual Memory,我经常对操作系统中的虚拟化概念感到困惑。考虑到RAM是物理内存,为什么我们需要虚拟内存来执行进程 当来自外部硬盘驱动器的进程(程序)被带到主内存(物理内存)执行时,该虚拟内存位于何处 谁负责虚拟内存?虚拟内存的大小是多少 假设RAM的大小为4GB(即2^32-1个地址空间),那么虚拟内存的大小是多少?虚拟内存是一种抽象概念,它让程序员产生一种错觉,即系统上有无限的可用内存 虚拟内存映射与实际物理地址相对应。操作系统创建并处理这些映射-使用页表和其他数据结构来维护映射。虚拟内存映射总是在页表或一些

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

当来自外部硬盘驱动器的进程(程序)被带到主内存(物理内存)执行时,该虚拟内存位于何处

谁负责虚拟内存?虚拟内存的大小是多少


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

虚拟内存是一种抽象概念,它让程序员产生一种错觉,即系统上有无限的可用内存

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

虚拟内存通常比物理内存大——如果虚拟内存和物理内存大小相同,那么虚拟内存映射的理由就不多了

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

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


我可以说上千段关于寻呼的话。。。但我认为最好还是换一个专门针对该主题的问题来回答。

我正在无耻地抄袭top手册页的摘录

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

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

请看这里:


虚拟内存存储在硬盘上,在RAM充满时使用。物理内存仅限于安装在计算机中的RAM芯片的大小。虚拟内存受硬盘大小的限制,因此虚拟内存具有更大的存储容量。

软件在操作系统上运行的前提非常简单-它们需要内存。设备操作系统以RAM的形式提供它。所需的内存量可能会有所不同——有些软件需要巨大的内存,有些则需要微不足道的内存。大多数(如果不是所有)用户同时在操作系统上运行多个应用程序,并且由于内存昂贵(且设备大小有限),可用内存量总是有限的。因此,考虑到所有软件都需要一定数量的RAM,并且所有软件都可以同时运行,操作系统必须考虑两件事:

  • 软件始终运行,直到用户中止它,也就是说,它不应该自动中止,因为操作系统内存不足
  • 上述活动,同时保持软件运行的良好性能
  • 现在主要的问题归结为如何管理内存。究竟是什么控制了属于给定软件的数据在内存中的位置

    可能的解决方案1:让各个软件明确指定它们将在设备中使用的内存地址。假设Photoshop声明它将始终使用范围从
    0
    1023
    的内存地址(将内存想象为一个线性字节数组,因此第一个字节位于位置
    0
    1024
    第四个字节位于位置
    1023
    )-即占用
    1 GB
    内存。类似地,VLC声明它将占用
    1244
    1876
    等内存范围

    优点:

  • 每个应用程序都预先分配了一个内存插槽,所以在安装和执行它时,它只会将数据存储在内存区域中,一切正常
  • 缺点:

  • 这是不可伸缩的。从理论上讲,一个应用程序在做一些非常繁重的事情时可能需要大量内存。因此,为了确保它永远不会耗尽内存,分配给它的内存区域必须始终大于或等于该内存量。如果一个软件,其最大理论内存使用量为
    2GB
    (因此需要从RAM分配
    2GB
    内存),安装在一台只有
    1GB
    内存的机器上,该怎么办?软件是否应该在启动时中止,说可用RAM小于
    2 GB
    ?或者它应该继续,并且当所需内存超过
    2GB
    时,只需中止并退出,并显示可用内存不足的消息

  • 不可能防止内存损坏。现在有数以百万计的软件,即使每个软件都分配了
    1KB的内存,所需的总内存也将超过
    16GB