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

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。

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

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

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

时间: 2024-08-29 11:45:12

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

Windows内存管理的方式

一.内存的概念 1. 物理内存:即插在主板上的内存条.他是固定的,内存条的容量多大,物理内存就有多大(集成显卡系统除外). 但是如果程序运行很多或者程序本身很大的话,就会导致大量的物理内存占用,甚至导致物理内存消耗殆尽. 2. 虚拟内存:虚拟内存就是在硬盘上划分一块页面文件,充当内存. 当程序在运行时,有一部分资源还没有用上或者同时打开几个程序却只操作其中一个程序时,系统没必要将程序所有的资源都塞在物理内存中,于是,系统将这些暂时不用的资源放在虚拟内存上,等到需要时在调出来用. 当程序运行时需要

windows内存映射学习及帮助类实现

本文通过创建文件内存映射类,学习windows内存映射相关知识:创建内存映射文件后,可以按照内存操作方式操作文件 感谢http://blog.csdn.net/csafu/article/details/8602142, 引用部分内容"文件映射问题 内存映射文件并不是简单的文件I/O操作,实际用到了Windows的核心编程技术--内存管理. 所以,如果想对内存映射文件有更深刻的认识,必须对Windows操作系统的内存管理机制有清楚的认识, 内存管理的相关知识非常复杂,超出了本文的讨论范畴,在此就

windows内存详解(一) 全面介绍Windows内存管理机制及C++内存分配实例

十分感谢MS社区的帖子,讲得很好~ http://social.technet.microsoft.com/Forums/zh-CN/2219/thread/afc1269f-fe08-4dc7-bb94-c395d607e536 (一):进程空间 在编程中,很多Windows或C++的内存函数不知道有什么区别,更别谈有效使用:根本的原因是,没有清楚的理解操作系统的内存管理机制,本文企图通过简单的总结描述,结合实例来阐明这个机制. 本文目的: 对Windows内存管理机制了解清楚,有效的利用C+

Windows内存管理和linux内存管理

windows内存管理 windows 内存管理方式主要分为:页式管理,段式管理,段页式管理. 页式管理的基本原理是将各进程的虚拟空间划分为若干个长度相等的页:页式管理把内存空间按照页的大小划分成片或者页面,然后把页式虚拟地址与内存地址建立一一对应的页表:并用相应的硬件地址变换机构来解决离散地址变换问题.页式管理采用请求调页或预调页技术来实现内外存存储器的统一管理.其优点是没有外碎片,每个内碎片不超过页的大小.缺点是,程序全部装入内存,要求有相应的硬件支持.例如地址变换机构缺页中断的产生和选择淘

CPU,内存,硬盘简单了解

CPU是中央处理单元(Central Processing Unit)的缩写,被人们俗称为"计算机的大脑", 其负责处理.运算计算机内部的所有数据! CPU从内存或缓存中取出指令,放入指令寄存器, 并对指令译码分解成一系列的微操作,然后发出各种控制命令,执行微操作系列! CPU从内存中调用数据,为什么不从硬盘中获得呢? 因为硬盘的速度较慢,可以说硬盘是唯一依靠机械运转的硬件了, CPU从硬盘中获取数据,如同供不应求一般,会由于瓶颈效应大大的削弱CPU的运行速度, 而影响整机的运行速度!

windows 内存管理的几种方式及其优缺点

windows 内存管理方式主要分为:页式管理,段式管理,段页式管理. 页式管理的基本原理是将各进程的虚拟空间划分为若干个长度相等的页:页式管理把内存空间按照页的大小划分成片或者页面,然后把页式虚拟地址与内存地址建立一一对应的页表:并用相应的硬件地址变换机构来解决离散地址变换问题.页式管理采用请求调页或预调页技术来实现内外存存储器的统一管理.其优点是没有外碎片,每个内碎片不超过页的大小.缺点是,程序全部装入内存,要求有相应的硬件支持.例如地址变换机构缺页中断的产生和选择淘汰页面等都要求有相应的硬

Windows socket之最简单的socket程序

原文:Windows socket之最简单的socket程序 最简单的服务器的socket程序流程如下(面向连接的TCP连接 ): 1. WSAStartup(); 初始化网络库的使用. 2. socket(); 获得一个socket. 3. bind(); 把获得的socket绑定到一个ip 和端口.既然作为服务器, ip通常为本地IP127.0.0.1. 4. listen(); 监听已经绑定了指定端口的socket. 5. accept(); 接受一个来自客户端的连接. accept()返

在windows上安装和简单配置VirtualBox

VirtualBox是一款开源且免费虚拟机软件,其简单易用且性能优异.最重要的是VirtualBox有不同操作系统版本,但是其导出的虚拟机都是通用的. 适用系统:windwos7_64bit & windows8_64bit 下面由小河给大家介绍:在Windows上安装和简单配置VirtualBox4.3.14. 1.下载VirtualBox. (1)百度搜索"virtualbox",出现VirtualBox官方网站和百度软件中心,两者都可下载到该软件. (2)以"百

关于Windows内存结构

说明 讨论范围是默认的32位的windows NT系统,intel架构. 自己看<Windows内核编程>琢磨出来的东西,也不能确定完全被我理解对了.. 进程虚拟地址空间 32位的操作系统,寻址空间为32Bit,进程的虚拟地址空间为4GB(等于2^32),其虚拟地址空间布局如下所示: 正常情况下,除用户区外,其他的部分程序是不能直接访问的,可以使用类似IsBadReadPtr的函数来检查对目标区的访问权限. 物理存储器 物理存储器即为虚拟地址所关联的真实的物理磁盘,包括内存和硬盘,其主要构成如