【问题标题】:a program in memory and its memory mapping内存中的程序及其内存映射
【发布时间】:2013-01-11 03:09:03
【问题描述】:

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

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

【问题讨论】:

  • Linux 使用大小为 4kB 的 页面...

标签: c memory-management linux-kernel


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 2014-02-15
    • 2015-08-09
    • 1970-01-01
    相关资源
    最近更新 更多