[英]Process address space and virtual memory
我是这个领域的菜鸟,所以请耐心回答我的问题:)
我正在阅读有关进程地址空间、虚拟内存和分页的信息。 我了解页面在 RAM 中换入和换出的机制。 据记载,每个进程都有一个 4GB 的虚拟地址空间,其中一部分用于用户空间(特定于每个进程 - 1 或 2 GB),其余部分是内核空间(所有进程通用)。由于每个进程的虚拟地址空间都存储在二级存储中,是否意味着每次启动进程时,它都会在我的硬盘中保留 4 GB 空间? 我没有看到每次启动一个进程时我的硬盘空间都减少了 4GB……或者是虚拟空间不是作为一个块保留的,而是从小开始的,可以增长到 4GB。 请说明一些问题,如果您知道任何可以帮助我理解这个复杂主题的内容,也请发布一些有关该主题的链接。
虚拟地址内存管理不使用辅助存储。 它只是将您的程序和主内存划分为某个分区大小。 主内存分区称为帧,程序分区称为页。 主存和帧中的每个分区大小相同。
每当使用一个程序时,内核都会检查该程序的所有页面是否都可以放入主内存中。 如果是这样,它会将所有页面保留在主内存中。 否则,它只会保留最初需要的页面。 当稍后需要其他页面时,它会从主内存中删除其中一个帧,然后将请求的页面传输到删除该帧的位置。
为了将地址从页映射到帧,内核使用页映射表,该表准确地说明此特定页位于主存储器中的哪个帧。
检查以下参考资料: https : //www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/virtual.html https://www.bottomupcs.com/virtual_addresses.xhtml
这里是题外话,可以详细说明数百页的文字(请参阅有关此主题的 cs 书籍)。
但简而言之,您错了:虚拟内存不存储在二级存储中。 它可以在那里,但通常不是。 操作系统正在处理它,根据它的信息,它将数据保存在正常内存中(例如,当进程处于活动状态时),或者它在硬盘上(例如,当内存不足且进程处于非活动状态时)。
虚拟化意味着,对于进程它是透明的,它不知道数据存储在哪里,它总是通过相同的指针访问。 系统可以根据情况更改底层存储(然后将数据换入或换出)。
虚拟地址空间不会“存储”在任何地方。 只有为进程分配的内存页可以存储在内存/磁盘上。
内存的分配取决于操作系统。 即在 Windows 中分配和管理可以由程序使用相应的内存函数来完成,例如 VirtualAlloc 将内存映射到地址空间, VirtualProtect函数指定给定在程序地址空间中分配的内存块应该具有的属性。
嗯,对于这个领域的新手来说,这是一个很好的问题。实际发生的是,正在执行的进程被认为拥有所有内存,而它只有少数内存会随着它的增长而扩展。这个内存称为虚拟内存。
我希望这个答案有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.