文章目录
- 前言
- 内存管理 简介
- 内存管理组件
- 内部同步
- 检查内存使用情况
- 由内存管理器提供的服务
- 大大小小的页面
- 预订(Reserving)和提交(Committing)页面
- 提交限制
- 锁定内存
- 分配粒度
- 共享内存和映射文件
- 保护内存
- 不可执行页面保护
- 写入时复制
- 地址窗口扩展
- 内核模式堆(系统内存池)
- 池大小
- 监控池使用情况
- 旁观列表
- 堆管理器
- 堆的类型
- 堆管理器结构
- 堆同步
- 低碎片堆
- 堆安全功能
- 堆调试功能
- 页面堆
- 容错堆
- 虚拟地址空间布局
- x86地址空间布局
- x86系统地址空间布局
- x86会话空间
- 系统页面表条目
- 64位地址空间布局
- Windowsx64 16TB限制
- 动态系统虚拟地址空间管理
- 系统虚拟地址空间配额
- 用户地址空间布局
- 地址转换
- x86虚拟地址转换
- 转换旁观缓冲区
- 物理地址扩展(PAE)
- x64虚拟地址转换
- IA64虚拟地址转换
- 页面故障处理
- 无效的PTEs
- 原型的PTEs
- 分页 I/O
- 对齐的页面故障
- 群集页面故障
- 分页文件
- 提交代价和系统提交限制
- 提交代价和页面文件大小
- 堆栈
- 用户堆栈
- 内核堆栈
- DPC堆栈
- 虚拟地址描述符
- 进程VADs
- 旋转VADs
- 非均匀存储器存取
- 节对象
- 驱动程序验证器
- 页面帧号数据库
- 页面列表动态化
- 页面优先级
- 修改页面写入器
- PFN数据结构
- 物理内存限制
- Windows客户端内存限制
- 工作集
- 需求分页
- 逻辑预取器
- 放置政策
- 工作集管理
- 均衡集管理器和交换器
- 系统工作集
- 内存通知事件
- 主动内存管理(超级获取)
- 组件
- 跟踪和日志
- 场景
- 页面优先级和重新平衡
- 稳健的性能
- ReadyBoost
- ReadyDrive
- 统一缓存
- 进程反射
- 结论
前言
在本章中,您将了解Windows如何实现虚拟内存,以及它如何管理保存在物理内存中的虚拟内存的子集。我们还将描述其内部结构和组件它们组成了内存管理器,包括关键的数据结构和算法。在检查这些机制之前,我们将回顾内存管理器提供的基本服务和关键概念作为保留内存与提交内存和共享内存。
内存管理 简介
默认情况下,32位Windows上的进程的虚拟大小为2GB。如果映像被专门标记为大地址空间感知,并且系统通过一个特殊选项启动(稍后描述 在本章中),32位进程在32位Windows上可以增长到3GB,在64位Windows上可以增长到4GB。64位Windows上的进程虚拟地址空间大小为7,152 GB,IA64系统上的为8152GB 在x64系统上的2GB。(此值可以在未来的版本中增加。)
正如您在第1部分的第2章“系统架构”中所看到的(特别是在表2-2中),目前Windows所支持的最大物理内存量从2GB到2,048GB,具体取决于 您正在运行的是哪个版本和版本。由于虚拟地址空间可能大于或小于机器上的物理内存,所以内存管理器有两个主要任务:
- 将进程的虚拟地址空间转换或映射为物理内存,以便当在该进程的上下文中运行的线程读取或写到虚拟地址空间时,将引用正确的物理地址。(物理上驻留的进程的虚拟地址空间的子集称为工作集。我们将在本章后面更详细地描述工作集。)
- 当内存被过度提交时,将一些内存内容分页提交到磁盘上——也就是说,当运行线程或系统代码试图使用比当前可用的更多的物理内存时——会需要的时候将内容带回物理内存。
除了提供虚拟内存管理之外,内存管理器还提供了一组核心服务,在这些服务上构建了各种Windows环境子系统。这些服务包括内存映射文件(内部称为节对象)、写入时复制内存,以及支持使用大的稀疏地址空间的应用程序。此外,内存管理器还提供了一种方法进程分配和使用的物理内存数量大于可以同时映射到进程虚拟地址空间的物理内存数量(例如,在32位系统上,物理内存超过3gb内存)。这将在本章后面的“地址窗口扩展”一节中解释。
注:
有一个控制面板小程序提供了对分页文件的大小、数量和位置的控制,它的系统命名法表明“虚拟内存”与分页文件相同。但事实并非如此。分页文件只是虚拟内存的一个方面。事实上,即使您根本不运行页面文件,Windows仍将使用虚拟内存。这种区别我在本章的后面会有更详细的解释。
内存管理组件
内部同步
检查内存使用情况
由内存管理器提供的服务
大大小小的页面
预订(Reserving)和提交(Committing)页面
提交限制
锁定内存
分配粒度
共享内存和映射文件
保护内存
不可执行页面保护
写入时复制
地址窗口扩展
内核模式堆(系统内存池)
池大小
监控池使用情况
旁观列表
堆管理器
堆的类型
堆管理器结构
堆同步
低碎片堆
堆安全功能
堆调试功能
页面堆
容错堆
虚拟地址空间布局
x86地址空间布局
x86系统地址空间布局
x86会话空间
系统页面表条目
64位地址空间布局
Windowsx64 16TB限制
动态系统虚拟地址空间管理
系统虚拟地址空间配额
用户地址空间布局
地址转换
x86虚拟地址转换
转换旁观缓冲区
物理地址扩展(PAE)
x64虚拟地址转换
IA64虚拟地址转换
页面故障处理
无效的PTEs
原型的PTEs
分页 I/O
对齐的页面故障
群集页面故障
分页文件
提交代价和系统提交限制
提交代价和页面文件大小
堆栈
用户堆栈
内核堆栈
DPC堆栈
虚拟地址描述符
进程VADs
旋转VADs
非均匀存储器存取
节对象
驱动程序验证器
页面帧号数据库
页面列表动态化
页面优先级
修改页面写入器
PFN数据结构
物理内存限制
Windows客户端内存限制
工作集
需求分页
逻辑预取器
放置政策
工作集管理
均衡集管理器和交换器
系统工作集
内存通知事件
主动内存管理(超级获取)
组件
跟踪和日志
场景
页面优先级和重新平衡
稳健的性能
ReadyBoost
ReadyDrive
统一缓存
进程反射
结论