Memory management 进程地址空间和虚拟内存

Memory management 进程地址空间和虚拟内存,memory-management,operating-system,Memory Management,Operating System,我在这个领域是个不折不扣的人,所以请接受我的问题并回答:) 我在读有关进程地址空间、虚拟内存和分页的文章。我了解页面在RAM中交换和交换的机制。据记录,每个进程都有一个4GB的虚拟地址空间,其中一部分用于用户空间(特定于每个进程-1或2 GB),其余部分用于内核空间(在所有进程中都是通用的)。由于每个进程的虚拟地址空间都存储在辅助存储器中,这是否意味着每次我启动一个进程时,它都会在我的硬盘中保留4GB?我没有看到每次启动进程时我的硬盘空间都会减少4GB。。。或者虚拟空间不是作为块保留的,而是从一

我在这个领域是个不折不扣的人,所以请接受我的问题并回答:)


我在读有关进程地址空间、虚拟内存和分页的文章。我了解页面在RAM中交换和交换的机制。据记录,每个进程都有一个4GB的虚拟地址空间,其中一部分用于用户空间(特定于每个进程-1或2 GB),其余部分用于内核空间(在所有进程中都是通用的)。由于每个进程的虚拟地址空间都存储在辅助存储器中,这是否意味着每次我启动一个进程时,它都会在我的硬盘中保留4GB?我没有看到每次启动进程时我的硬盘空间都会减少4GB。。。或者虚拟空间不是作为块保留的,而是从一开始就很小,可以增长到4GB。请解释一下,如果你知道的话,也可以发一些关于这个主题的链接。。任何能帮助我理解这个复杂话题的东西

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


内存的分配取决于操作系统的不同。也就是说,在Windows中,分配和管理可以由程序使用相应的方法完成,例如VirtualAlloc将内存映射到地址空间,并使用函数指定在程序地址空间中分配的给定内存块应具有的属性

这是一个离题的话题,你可以详细阐述数百页的文字(参见cs关于这个话题的书籍)

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


虚拟化意味着,对于过程来说,它是透明的,它不知道数据存储在哪里,总是通过同一个指针访问数据。系统可以根据情况更改基础存储(然后交换数据)

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


我希望这个答案有帮助。

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

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

为了将地址从页面映射到框架,内核使用一个页面映射表, 它确切地告诉我们这个特定的页面位于主内存中的哪个帧中

检查以下参考资料:

感谢您的快速回复。那么,如果我说4GB的进程地址空间不是每次进程启动时都“留出”的,而是一个上限,这是否正确呢。@Venky:是的。它不是每次流程启动时都“搁置”的。