内核如何知道要留出多少用户可寻址内存?

内核如何知道要留出多少用户可寻址内存?

我正在阅读一篇相当过时的文章内核管理内存并有一个关于页表条目(PTE)将进入何处的问题。

对于这个例子,作者假设我们使用的是一台 32 位机器,内存为 4GB,没有 PAE。本文假设 3GB 可作为虚拟内存寻址(3GB 的 4KB 页 == 786,432 页)。但是,如果每个页面有 4 个字节的 PTE,那么它本身将占用大约 3.1MB 的内存,这些内存应该由内核预留。这将成为内核内存的一部分吗? IE。除了用户可寻址的 3GB 之外,内核保留内存?

那么,内核是否首先计算并得出需要多少内核(系统)内存以及在启动时可以将多少内存标记为用户可寻址内存?

内核/系统保留内存中还会驻留哪些其他内容?

答案1

通常,在没有 PAE 的 x86 上,用户/内核会划分为 3Gb/1Gb。这意味着顶部的 1Gb 内存被保留给内核,而用户空间则访问较低的 3Gb 内存。这样做是为了避免每次发生上下文切换时都必须更新指向页表 (CR3) 的寄存器并刷新 TLB。通过此优化,仅在调度不同进程时才更新 CR3 并刷新 TLB。

有关如何解释虚拟地址的信息存储在三个位置:

  • 虚拟内存区域(又名 VMA、又名映射):这些区域将连续内存区域与后备存储(对于匿名映射,可以是文件,也可以是交换区)相关联。
  • 页表条目:这些条目将一整页虚拟地址与相应的物理地址相关联,并包含权限和杂项标志。 PTE 已加载懒洋洋来自 VMA:在尝试访问之前,不一定会实例化 PTE(并且相应的页面会被分页:这是按需分页);只有访问 3GB 内存的进程才需要 3Mb 页表。
  • TLB:这是页表的硬件缓存。

相关内容