对象WMA(虚拟内存区域:)和PTE(页面表项)之间有什么区别?

Ale*_*lex 1 c linux posix memory-management linux-kernel

对象WMA(虚拟内存区域struct vm_area_struct,用于操作内核Linux)和PTE(用于操作MMU的页面表条目)之间的区别是什么,以及为什么我们需要WMA而没有足够的PTE?

And*_*rew 6

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

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

每个页面在页面表中都有一个条目,用于指示页面当前是否在物理内存中(在这种情况下,它指向页面的物理内存地址),或当前在系统的后备存储上"分页"(在这种情况下)它指向页面副本的后备存储地址).

因此每个VMA都有多个PTE.

VMA的功能是使用正确的权限定义虚拟内存的连续区域(连续的虚拟地址,而不是连续的物理地址).

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

  • @Alex 1. VMA 中的内存实际上是连续的,而不是物理上连续的。所以VMA中的信息和PT是不一样的。我编辑了答案以澄清这一点并回答您原始帖子中的第二个问题。2. 正确,MMU 不使用 VMA(它无法看到它),但是 linux-kernel 不是在寻找空闲的连续物理空间,只是虚拟空间。3. 除了体系结构(32 位、64 位等)对虚拟内存大小的限制外,VMA 中的页数(以及 PTE)没有限制。 (2认同)
  • 是的,我知道,但是我可以通过在内核空间中使用“kmalloc()”分配连续的物理内存区域,然后使用“mmap()”将其重新映射到用户空间,然后使用“mlock”将内存固定()`? (2认同)