内存中的程序及其内存映射

时间:2013-01-11 03:09:04

标签: c memory-management linux-kernel

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

Linux使用的页面文件仅在x86体系结构上为4 KB,如果我没有错,那么进程如何从内存中使用3GB的映射地址空间(如链接上给出的每个进程为4GB)。这是对我来说有点直觉或我的理解是错误的吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

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