【问题标题】:What is the difference between objects WMA (Virtual Memory Area:) and PTE (Page Table Entry)?对象 WMA(虚拟内存区:)和 PTE(页表条目)有什么区别?
【发布时间】:2013-11-29 19:24:24
【问题描述】:

对象WMA(虚拟内存区域:struct vm_area_struct,用于运行内核Linux)和PTE(页表条目,用于运行MMU)有什么区别,为什么我们需要WMA而没有足够的PTE?

【问题讨论】:

    标签: c linux memory-management linux-kernel posix


    【解决方案1】:

    每个进程的虚拟内存地址空间被划分为虚拟内存区域 (VMA),其中一个 VMA 中的所有内存都是连续的,并且共享某些属性,例如权限。例如,一个进程可能有一个 VMA 用于其代码,一个 VMA 用于每种类型的数据,一个 VMA 用于每个不同的内存映射(如果有),等等。

    每个 VMA 由许多页组成,其中页是在主物理内存和后备存储之间移动的单位。

    每个页面在页表中都有一个条目,以指示该页面当前是在物理内存中(在这种情况下,它指向页面的物理内存地址)还是当前在系统的后备存储中“分页”(在这种情况下,它指向页面副本的后备存储地址)。

    所以每个 VMA 都有多个 PTE。

    VMA 的功能是定义一个具有正确权限的连续虚拟内存区域(连续虚拟地址,而不是连续物理地址)。

    页表的功能是管理主物理内存和后备存储之间的分页,并作为系统/硬件(MMU)和操作系统软件之间的通信点。

    【讨论】:

    • 谢谢! 1. 关于:“为什么我们需要 WMA 而没有足够的 PTE?” - 我的意思是,如果我们可以从 PT(PTE) 获得所有这些信息(分配的连续物理内存的范围、权限等),为什么我们需要 WMA,即使用 WMA 的动机,据我了解,我们可以比从许多 PTE 更快地从单个 WMA 获取这些信息,不是吗? 2. 而且MMU不使用WMA,只有linux-kernel使用WMA来寻找空闲的连续物理空间,不是吗? 3. 单个 WMA 中的 PTE 数量是否有限制?
    • @Alex 1. VMA 中的内存实际上是连续的,而不是物理上的。所以VMA中的信息与PT中的信息是不一样的。我编辑了答案以澄清这一点并回答您原始帖子中的第二个问题。 2.正确,MMU不使用VMA(它没有办法看到它),但是linux-kernel不是在寻找空闲的连续物理空间,而是在寻找虚拟空间。 3. 除了架构(32 位、64 位等)对虚拟内存大小的限制之外,VMA 中的页数(以及 PTE)没有限制。
    • 它可以使用页表找到物理内存的连续区域,但是由于页面交换一直在发生,连续区域不会保持很长时间的连续!
    • 是的,我知道,但是我可以在内核空间中使用kmalloc() 分配物理内存的连续区域,然后使用mmap() 将其重新映射到用户空间,然后将内存固定通过使用mlock()?
    • 有趣的问题。我不知道答案。
    猜你喜欢
    • 2012-12-30
    • 2021-09-11
    • 2012-11-19
    • 2011-06-25
    • 2012-02-27
    • 2010-11-28
    • 2014-07-27
    • 1970-01-01
    • 2011-01-28
    相关资源
    最近更新 更多