关于windows内存的一些简单看法

2021-07-20 11:13

阅读:700

1. 公司的产品有一个检查windows操作系统的功能,验证是否满足 只能客户端 的运行需求:

技术分享图片

这里面的可用虚拟内存是128T 感觉非常奇怪了.

然后自己想了下128T 是 2的 47次方

猜想是不是windows10 采取了47位的地址总线位宽来进行VAS虚拟内存寻址.

然后查了下winserver 2016的参数限制:

技术分享图片

单个机器支持24T内存,应该是小于2的45次方的寻址空间.

intel最新的8180M CPU 单价13k刀 能够使用1.5T的内存,8 socket下使用12T的内存

看样子是win2016 是完全可以跑8路的intel的服务器 并且把内存完全管理起来的.

不过看到这个参数,感觉还是非常吓人了

毕竟8180满配的话是 448个超线程后的core数..

理解的很简单, 不知道对不对..

 

微软官方的解释:

https://technet.microsoft.com/zh-cn/library/hh439648

虚拟地址空间

 

当处理器读或写入内存位置时,它会使用虚拟地址。作为读或写操作的一部分,处理器将虚拟地址转换为物理地址。通过虚拟地址访问内存有以下优势:

  • 程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的大内存缓冲区。

  • 程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。当物理内存的供应量变小时,内存管理器会将物理内存页(通常大小为 4 KB)保存到磁盘文件。数据或代码页会根据需要在物理内存与磁盘之间移动。

  • 不同进程使用的虚拟地址彼此隔离。一个进程中的代码无法更改正在由另一进程或操作系统使用的物理内存。

进程可用的虚拟地址范围称为该进程的“虚拟地址空间”。每个用户模式进程都有其各自的专用虚拟地址空间。 对于 32 位进程,虚拟地址空间通常为 2 GB,范围从 0x00000000 至 0x7FFFFFFF。对于 64 位进程,虚拟地址空间为 8 TB,范围从 0x000‘00000000 至 0x7FF‘FFFFFFFF。一系列虚拟地址有时称为一系列“虚拟内存”。

此图说明了虚拟地址空间的一些重要功能。

技术分享图片

该图显示了两个 64 位进程的虚拟地址空间:Notepad.exe 和 MyApp.exe。每个进程都有其各自的虚拟地址空间,范围从 0x000‘0000000 至 0x7FF‘FFFFFFFF。每个阴影框都表示虚拟内存或物理内存的一个页面(大小为 4 KB)。注意,Notepad 进程使用从 0x7F7‘93950000 开始的虚拟地址的三个相邻页面。但虚拟地址的这三个相邻页面会映射到物理内存中的非相邻页面。而且还注意,两个进程都使用从 0x7F7‘93950000 开始的虚拟内存页面,但这些虚拟页面都映射到物理内存的不同页面。

用户空间和系统空间

诸如 Notepad.exe 和 MyApp.exe 的进程在用户模式下运行。核心操作系统组件和多个驱动程序在更有特权的内核模式下运行。有关处理器模式的详细信息,请参阅用户模式和内核模式。每个用户模式进程都有其各自的专用虚拟地址空间,但在内核模式下运行的所有代码都共享称为“系统空间”的单个虚拟地址空间。当前用户模式进程的虚拟地址空间称为“用户空间”。

在 32 位 Windows 中,可用的虚拟地址空间共计为 2^32 字节(4 GB)。通常较下的 2 GB 用于用户空间,较上的 2 GB 用于系统空间。

技术分享图片

在 32 位 Windows 中,你可以指定(在启动时)超过 2 GB 用于用户空间。结果是系统空间可用的虚拟地址更少。可以将用户空间的大小增至 3 GB,在这种情形下系统空间仅有 1 GB。若要增大用户空间的大小,请使用 BCDEdit /set increaseuserva

在 64 位 Windows 中,虚拟地址空间的理论大小为 2^64 字节(16 百亿亿字节),但实际上仅使用 16 百亿亿字节范围的一小部分。范围从 0x000‘00000000 至 0x7FF‘FFFFFFFF 的 8 TB 用于用户空间,范围从 0xFFFF0800‘00000000 至 0xFFFFFFFF‘FFFFFFFF 的 248 TB 的部分用于系统空间。

技术分享图片

用户模式下运行的代码可以访问用户空间,但不能访问系统空间。此限制可防止用户模式代码读或更改受保护的操作系统数据结构。内核模式下运行的代码既可以访问用户空间,也可以访问系统空间。即,在内核模式下运行的代码可以访问系统空间和当前用户模式进程的虚拟地址空间。

在内核模式下运行的驱动程序必须在直接从用户空间地址中读取或写入这些地址时非常小心。此方案说明了原因。

  1. 用户模式程序发起从设备读取某些数据的请求。程序提供缓冲区的起始地址以接收数据。

  2. 在内核模式下运行的设备驱动程序例程启动读取操作并将控制权返回到其调用程序。

  3. 然后,设备中断了当前运行的任何线程以显示读取操作完成。 中断由在此任意线程上运行的内核模式驱动程序例程进行处理,该例程属于任意进程。
  4. 此时,驱动程序不得将数据写入用户模式程序在步骤 1 中提供的开始地址。此地址位于发起请求的进程的虚拟地址空间,该进程可能很大程度上不同于当前进程。

页面缓冲池和非页面缓冲池

在用户空间中,所有物理内存页面都可以根据需要进行分页至磁盘文件。在系统空间中,某些物理页面可以分页,而其他页面不能。系统空间具有用于动态分配内存的两个区域:页面缓冲池和非页面缓冲池。在 64 位 Windows 中,页面缓冲池为 128 GB 的虚拟地址,范围从 0xFFFFA800‘00000000 至 0xFFFFA81F‘FFFFFFFF。非页面缓冲池为 128 GB 的虚拟地址,范围从 0xFFFFAC00‘00000000 至 0xFFFFAC1F‘FFFFFFFF。

在页面缓存池中分配的内存可以根据需要分页至磁盘文件。在非页面缓冲池中分配的内存永远无法分页至磁盘文件。

技术分享图片
 

私人工作集    是工作集的一个子集,它是描述每个进程所使用的内存数量的技术术语。私人工作集专门描述了某个进程正在使用的且无法与其他进程共享的内存数量

内存 - 工作集     是私人工作集中的内存数量与进程正在使用且可以由其他进程共享的内存数量的总和。
内存 - 峰值工作集  是进程所使用的工作集内存的最大数量。
内存 - 工作集增量  是进程所使用的工作集内存中的更改量。
内存 - 提交大小  是为某进程使用而保留的虚拟内存的数量。
内存 - 页面缓冲池  是可以写入其他存储媒体(例如硬盘)的某个进程的认可虚拟内存数量。
内存 - 非页面缓冲池  是无法写入其他存储媒体的某个进程的认可虚拟内存数量。

 


评论


亲,登录后才可以留言!