2

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

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

4

4 回答 4

2

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

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

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

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

于 2016-06-05T20:59:03.933 回答
1

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

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

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

于 2012-04-27T05:50:26.553 回答
0

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

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

于 2012-04-27T05:50:01.130 回答
-1

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

我希望这个答案是有帮助的。

于 2015-07-30T19:15:32.760 回答