0
点赞
收藏
分享

微信扫一扫

[翻译]深入解析Windows操作系统(下)之第十章 内存管理


文章目录

  • ​​前言​​
  • ​​内存管理 简介​​
  • ​​内存管理组件​​
  • ​​内部同步​​
  • ​​检查内存使用情况​​
  • ​​由内存管理器提供的服务​​
  • ​​大大小小的页面​​
  • ​​预订(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

统一缓存

进程反射

结论


举报

相关推荐

0 条评论