0

我对内存中程序的地址空间映射有点困惑,这是一个链接 http://duartes.org/gustavo/blog/post/anatomy-of-a-program-in-memory 它处理虚拟程序在执行中的地址映射,已标记 1GB 用于内核模式,3 GB 用于用户模式,并提到使用页表访问内存段,

如果我没记错的话,Linux 仅在 x86 架构上使用 4 KB 的页面文件,那么进程如何使用内存中的 3GB 映射地址空间(如链接上给出的每个进程为 4GB 的链接)。这是一个位计数器对我来说很直观,或者我的理解在哪里是错误的?

4

1 回答 1

0

我不知道我是否理解你。您似乎认为处理器使用 4KB 页面来管理映射文件。

实际上,这 4KB 只是一个页内存缓冲区。当系统试图从任何文件读取数据到内存时,它会首先读取页面内存缓冲区中的内容,然后将缓冲区中的内容移动到真正的堆栈或堆中。这个 4KB 页缓冲区不用于控制映射的内存地址。

我认为映射的地址类似于 HANDLE。它存储在内存的一部分中。当您使用此句柄获取数据时,系统将对其进行计数并将其传输到 DISK 上的真实地址。然后系统将映射数据读取到页面缓冲区,最后将它们移动到内存中。

详情请查看以下链接: http ://duartes.org/gustavo/blog/post/page-cache-the-affair-between-memory-and-files 这个博客还有其他几篇关于内存管理的好文章。复杂但真的很好。

于 2013-01-11T03:37:16.000 回答