【问题标题】:Process address space and virtual memory进程地址空间和虚拟内存
【发布时间】:2012-04-27 05:38:19
【问题描述】:

我是这个领域的菜鸟,所以请耐心回答我的问题:)

我正在阅读有关进程地址空间、虚拟内存和分页的信息。我了解页面交换进出 RAM 的机制。据记载,每个进程都有一个 4GB 的虚拟地址空间,其中一部分用于用户空间(特定于每个进程 - 1 或 2 GB),其余是内核空间(在所有进程中通用)。由于每个进程的虚拟地址空间都存储在二级存储中,是否意味着每次我启动一个进程时,它都会在我的硬盘中保留 4 GB ?每次启动进程时,我都没有看到我的硬盘空间减少了 4GB ...请说明一下,如果您知道的话,请发布一些有关该主题的链接。任何可以帮助我理解这个复杂主题的东西。

【问题讨论】:

    标签: memory-management operating-system


    【解决方案1】:

    虚拟地址内存管理不使用辅助存储。它只是将您的程序和主内存划分为一些分区大小。主存储器分区称为帧,程序分区称为页。主存和帧中的每个分区大小相同。

    每当使用一个程序时,内核都会检查该程序的所有页面是否可以放入主内存。如果是这样,它会将所有页面保留在主存储器中。否则,它将只保留最初需要的页面。当稍后需要其他页面时,它会从主内存中删除其中一个框架,然后将请求的页面传输到删除框架的位置。

    对于从页到帧的地址映射,内核使用页映射表, 它准确地告诉了这个特定页面位于主内存中的哪个帧。

    检查以下参考资料: https://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/virtual.html https://www.bottomupcs.com/virtual_addresses.xhtml

    【讨论】:

      【解决方案2】:

      这里是题外话,可以详细说明数百页的文字(请参阅有关此主题的 cs 书籍)。

      但总之你错了:虚拟内存存储在辅助存储中。它可以在那里,但通常不是。操作系统正在处理它,这取决于它的信息,它将数据保存在正常内存中(例如,当进程处于活动状态时),或者它在硬盘上(例如,当内存不足且进程处于非活动状态时)。

      虚拟化意味着,对于进程来说它是透明的,它不知道数据存储在哪里,它总是通过相同的指针访问。系统可以根据情况更改底层存储(然后将数据换入或换出)。

      【讨论】:

      • 感谢您的快速回复。那么,如果我说4GB的进程地址空间不是每次启动进程时都“留出”的东西,而是像一个上限一样。
      • @Venky:是的。它不是每次启动进程时都“搁置一旁”。
      【解决方案3】:

      虚拟地址空间不会“存储”在任何地方。只有为进程分配的内存页可以存储在内存/磁盘中。

      内存分配取决于操作系统。 IE。在 Windows 中,分配和管理可以通过程序使用相应的memory functions 来完成,例如 VirtualAlloc 将内存映射到地址空间,VirtualProtect 函数指定在程序的地址空间中分配的给定内存块应具有的属性。

      【讨论】:

        【解决方案4】:

        嗯,对于这个领域的菜鸟来说,这是一个很好的问题。实际发生的是,正在执行的进程被认为拥有所有内存,而它只有少数内存会随着它的扩展而扩展增长。这个内存称为虚拟内存。

        我希望这个答案会有所帮助。

        【讨论】:

          猜你喜欢
          • 2011-12-27
          • 2016-04-28
          • 1970-01-01
          • 2023-03-17
          • 2020-05-21
          • 1970-01-01
          • 2021-09-11
          • 2019-07-03
          • 1970-01-01
          相关资源
          最近更新 更多