处理地址空间和虚拟内存



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

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

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

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

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

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

这是题外话,人们可以详细阐述数百页的文本(请参阅有关此主题的 cs 书籍(。

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

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

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

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

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

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

最新更新