对象VMA(虚拟内存区域:)和PTE(页表条目)有什么区别?

问题描述 投票:0回答:1

对象 VMA(虚拟内存区域:

struct vm_area_struct
,用于操作 Linux 内核)和 PTE(页表条目,用于操作 MMU)之间有什么区别?为什么我们需要 VMA 而没有足够的 PTE?

c linux memory-management linux-kernel posix
1个回答
18
投票

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

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

每个页在页表中都有一个条目,以指示该页当前是否位于物理内存中(在这种情况下它指向该页的物理内存地址)或者当前在系统的后备存储上“换出”(其中如果它指向页面副本的后备存储地址)。

所以每个VMA都有多个PTE。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.