【发布时间】:2013-11-29 19:24:24
【问题描述】:
对象WMA(虚拟内存区域:struct vm_area_struct,用于运行内核Linux)和PTE(页表条目,用于运行MMU)有什么区别,为什么我们需要WMA而没有足够的PTE?
【问题讨论】:
标签: c linux memory-management linux-kernel posix
对象WMA(虚拟内存区域:struct vm_area_struct,用于运行内核Linux)和PTE(页表条目,用于运行MMU)有什么区别,为什么我们需要WMA而没有足够的PTE?
【问题讨论】:
标签: c linux memory-management linux-kernel posix
每个进程的虚拟内存地址空间被划分为虚拟内存区域 (VMA),其中一个 VMA 中的所有内存都是连续的,并且共享某些属性,例如权限。例如,一个进程可能有一个 VMA 用于其代码,一个 VMA 用于每种类型的数据,一个 VMA 用于每个不同的内存映射(如果有),等等。
每个 VMA 由许多页组成,其中页是在主物理内存和后备存储之间移动的单位。
每个页面在页表中都有一个条目,以指示该页面当前是在物理内存中(在这种情况下,它指向页面的物理内存地址)还是当前在系统的后备存储中“分页”(在这种情况下,它指向页面副本的后备存储地址)。
所以每个 VMA 都有多个 PTE。
VMA 的功能是定义一个具有正确权限的连续虚拟内存区域(连续虚拟地址,而不是连续物理地址)。
页表的功能是管理主物理内存和后备存储之间的分页,并作为系统/硬件(MMU)和操作系统软件之间的通信点。
【讨论】:
kmalloc() 分配物理内存的连续区域,然后使用mmap() 将其重新映射到用户空间,然后将内存固定通过使用mlock()?