挑战Windows极限:物理内存

2024-07-10

挑战Windows极限:物理内存(精选3篇)

挑战Windows极限:物理内存 第1篇

打现在起数月内,笔者将会撰写一个系列专题,而这是开山第一篇,该系列叫做《挑战Windows极限》,描述Windows和应用程序对具体资源的使用方法、资源使用在许可和实现方面的限制、资源使用的测量方法,以及资源泄露的诊断方法等。为了能够有效地管理Windows系统,我们需要知道Windows系统是怎样管理物理资源的,例如CPU和内存等,还要知道Windows系统怎样管理逻辑资源的,例如虚拟内存、句柄,还有窗口管理器对象等。了解这些资源的限制,并对其使用情况进行追踪,有助于我们精确地掌握应用程序的资源使用状况,帮助我们给某个关键应用分配足够多的系统资源,还有助于我们找出导致资源泄露的应用程序。

物理内存

物理内存是计算机上的最重要的资源之一。Windows的内存管理器负责给活动进程、设备驱动,和操作系统自己分配内存。因为绝大多数系统所能访问的数据和代码远比物理内存多,所以从本质上来说,物理内存是代码和数据在其中运行的窗口。所以内存容量对性能有影响,因为如果进程或者操作系统所需的代码或者数据不存在,内存管理器就需要从磁盘中读取这些内容。

除了会对性能造成影响,物理内存的容量还会影响其他资源。例如,对于非分页池来说,这是由物理内存提供后备的操作系统缓冲,很明显,其容量会受到物理内存的限制。物理内存也会对系统的虚拟内存限制有影响,虚拟内存的大小等于物理内存容量、再加上所有页面文件的最大容量。物理内存还会对进程的最大数量具有间接的影响,笔者将会在今后的文章里专门提到线程和进程的限制。

Windows Server内存限制

Windows对于物理内存的支持,要受到诸如硬件限制、许可、操作系统数据结构,以及驱动程序的兼容性等方面的综合影响。MSDN网站的Memory Limits for Windows Releases文章对不同Windows版本、以及同一个版本的不同SKU的限制进行介绍。

我们可以查看所有Windows版本的不同SKU的物理内存支持许可。例如,32位Windows Server 标准版仅支持4GB,而32位Windows Server 2008数据中心版支持64GB。类似的,64位Windows Server 2008标准版支持32GB,而64位32位Windows Server 2008数据中心版支持2TB。目前来说,并没有多少系统拥有2TB内存,不过Windows Server性能产品组知道有两台服务器拥有那么多的内存,其中一台位于某地的实验室。该服务器的任务管理器如下图所示:

32位的最大限制是128GB,Windows Server 数据中心版可以支持,这是因为在大内存的系统上,内存管理器用来追踪物理内存的结构,需要消耗更多系统虚拟地址空间。内存管理器把每个内存页的追踪数据保存在叫做PFN数据库的数组中,而且考虑到性能因素,会把整个PFN数据库映射到虚拟内存中。因为它用28字节的数据结构来代表每个内存页,128GB系统的PFN数据库需要将近930MB的空间。32位Windows拥有4GB的虚拟地址空间,由硬件所定义,默认划分为两半,其中一半供用户模式进程(例如Notepad)所使用,另一半供系统所使用,

因此980MB的容量就要占据将近一半的系统虚拟地址空间(共2GB),只剩下约1GB空间可以用来映射内核、驱动程序、系统缓存和其他系统数据结构:

这也就是为什么当同一个SKU版本以4GB的调整选项引导时(也叫做4GT,在Boot.ini文件里配置/3GB或者/USERVA选项,或者配置Bcdedit命令的/Set IncreaseUserVa启动选项),其内存限制会更大,这是因为4GT选项会给用户模式进程分配3GB空间,而仅给系统保留1GB空间。

内存管理器可以仅把PFN数据库的一部分映射到系统地址空间,这样就可以提供更多的内存空间,这会增加复杂性,同时由于增加了映射和取消映射的操作,而可能导致性能的下降。由于直到现在,计算机所配备的内存容量才变得足够大,才需要考虑采用这种办法,但是因为在64位Windows中,并不需要强制把整个PFN数据库映射到系统地址空间,所以这种可以提供更多内存的办法仅供64位Windows使用。

64位Windows Server 2008数据中心版最多支持2TB内存,这不是由于硬件限制所造成的,而是因为微软对2TB进行了严格测试,而只支持2TB内存。在Windows Server 2008发布的时候,计算机所配备的最大内存基本上就是2TB,所以Windows将其作为物理内存的最大值。

Windows客户端内存限制

64位Windows客户端,不同SKU的内存支持也有所不同,Windows XP Starter版的内存支持最低,仅512MB,而Windows Vista旗舰版的内存支持最高,可达128GB。但是所有版本的32位Windows客户端SKU,包括Windows Vista、Windows XP和Windows Professional,最大支持4GB物理内存。标准的X86内存管理模式,最大可以支持4GB的物理地址访问。在早期,并不需要考虑在客户端提供超过4GB的支持,因为当时很少有计算机配备那么高的内存,哪怕是服务器。

但是在Windows XP SP2开发的过程中,已经可以预见客户端计算机将会配备超过4GB的内存,所以Windows产品组对超过4GB的Windows XP计算机进行大量的测试。Windows XP SP2还支持物理地址扩展(PAE)功能,该功能本来是为了在硬件上实现非执行(NX)保护,因为这是数据执行保护(DEP)的必要条件,但是该功能还可以支持超过4GB的内存。

Windows产品组的工程师发现,很多测试计算机会发生崩溃、挂起,或者无法启动的故障现象,这是因为某些设备驱动程序,主要是一些客户端计算机(而非服务器)上的显卡或者声卡,其驱动程序在编写时没有考虑到内存大于4GB的情况。所以,这些驱动程序会截去那部分地址,从而导致内存冲突以及其他副作用。而服务器则通常会配备更加常规的硬件设备,其驱动程序更加简单稳定,因为通常来说碰到这些问题的几率很小。由于客户端设备驱动程序所存在的这些问题,迫使Windows客户端SKU只能忽略高于4GB的那部分物理内存,哪怕从理论上来说可以对其进行寻址。

32位客户端计算机的实际内存限制

尽管从许可上来说,32位客户端SKU的最大内存支持是4GB,但是实际上的限制会更低,这要看计算机的芯片组以及所连接的设备。这是因为物理地址映射不仅仅包含物理内存,还包含设备内存,X86和X64位系统会把所有设备内存映射到低于4GB的地址边界,以便确保和32位操作系统的兼容性,这些操作系统不知道如何处理超过4GB的地址部分。如果计算机配备4GB内存和类似显卡、声卡和网卡这样的设备,Windows会给这些设备内存分配共计500MB空间,而4GB物理内存中的500MB只能占用超过4GB的地址边界,如下图所示。

挑战Windows极限:物理内存 第2篇

1、点击“开始”菜单,在搜索框输入“Msconfig”命令,打开“系统配置”窗口切换到“引导”选项卡,在出现的窗口点击“高级选项”按钮,

2、在弹出的“引导高级选项”窗口发现“最大内存”被设置成了0,应该就是这个问题了,

3、直接取消“最大内存”的勾选,确定后退出,重启系统。重启后就会发现Windows7系统终于识别出了完整的6GB物理内存。

Windows中物理内存的管理 第3篇

关键词:工作集;PTE;物理内存管理

中图分类号:TP311.52 文献标识码:A 文章编号:1674-7712 (2014) 16-0000-01

我们知道,对于内存的访问,早晚要涉及到对物理内存的操作。如果撇开虚拟内存,MMU等复杂的保护模式管理机制,一个内存,摆在你的面前,如何对其进行管理呢?首先需要明确一点的是,这里所指的物理页面都是在物理内存中的,因为物理页面管理部分就是要管理物理页面的。

一、PTE和工作集

说起工作集,要从操作系统的换页机制说起,所谓的换页,指的是在操作系统的内存管理中,当物理内存紧张时,将某些不常使用的物理页面转存到硬盘的页面文件中,从而释放这些物理内存,当需要时,比如该页面中的内容被引用时,再将该页面的内容重新导入物理内存,并更改PTE中的内容,映射该页面。因此,一个进程地址空间使用的地址,其背后对应的物理内存可以分为两种:在物理内存中的和不在物理内存中的。我们将在物理内存中的这部分属于某个进程的页面称为进程工作集,工作集分为系统工作集,会话工作集和进程工作集,系统工作集指的是系统(System)进程地址空间里使用的物理页面,其包括系统缓存、可换页的操作系统代码、以及可换页的驱动程序代码,会话工作集指的是一个会话所包含的代码和数据区,而进程工作集则专指某个进程的工作集。工作集的任务就是管理需要换入换出的页面,记录它们的情况,而那些从进入内存那刻开始就没有挪动地方的物理页面,是不需要浪费很多资源去管理的。因此我们可以这样认为,由于换页机制的存在,页面的换入换出成为了常态(对于可换页内存池),那么如何管理这些在内存池中不断变化的页面,正是工作集的任务所在。

对于进程工作集管理器,其任务在于管理一个进程空间中在内存中的物理页面,具体功能可以分为两个方面。(1)当物理内存紧张时,将一些不常用的内存倒到页面文件中;(2)当页面错误,系统将页面文件中对应的内容导入内存后,工作集管理器负责将这些页面加入到自己的链表中,管理这些页面。

二、物理页面的状态和转移

每个页面的状态可以分为:活动状态、备用状态、转移状态、已修改状态、已修改但不写出状态、空闲状态、零化状态、坏状态。PFN数据库中的项与物理页面一一对应。

活动状态指的是该页面在某一个工作集中,或者不在一个工作集中(如在非换页内存池中)但是有一个有效的PTE指向该页面。当一个页面退出活动状态时,会进入备用状态、已修改状态或者已修改但不写出状态,区别在于这个页面有没有被修改过以及修改后是否写出到外部磁盘中,如果这个页面没有被修改过,那么将这个页面置为备用状态,此时指向该页面的PTE被置為无效,如果该页面修改过并且需要写入外部磁盘,那么将该页面置为已修改状态,当然写入的时机并不是马上写入,而是需要接受修改页面写出器或者映射页面写出器调度的。还有一种情况是该页面被修改过,但是需不需要写入以及何时写入外部磁盘需要进一步明确,那么将该页面置为已修改但不写出状态,这种情况一个典型的例子如在文件系统中,当使用缓冲方式修改元文件时,需要先完成日志的记录,再将修改的内容写入磁盘,换句话说,在完成日志记录前,需要这个已修改但不写出状态。当然已修改状态、已修改但不写出状态页面对应的PTE也是无效状态。

物理内存帧PFN:PFN(Page Frame Number)页帧编号,每一项是24个字节,依据页面状态的不同而不同。一个页面(4K)只需要完成其记录数据的任务即可,最关键的结构在于对这些页面的管理,这里每个PFN项就对应着一个页面。PFN数据库中的内容与物理页面状态一一对应。

每种状态的页面其对应的PFN中的内容也并不完全相同,当物理页面处于活动状态、备用状态/已修改状态、空闲状态/零化状态、转移状态几种典型状态下PFN中的内容。其中反显部分为共有部分,包括PTE地址,标志,类型,引用计数,原始PTE内容,PTE的PFN。其中“PTE地址”字段指明的是指向该物理页面的PTE的虚拟地址,这样当我们得到一个物理页面时,通过“PTE地址”字段可以快速的定位指向该物理页面的PTE,并且由此PTE可以计算得到该物理页面映射在进程地址空间中的虚拟地址。“标志”字段用于记录该物理页面的一些标识信息,如是否处于读写操作中,指向这个页面的是否是一个原型PTE,以及标识非换页内存池开始和结束的标识位。“类型”字段说明的是该页面属于前一节提到的哪种状态中。“原始PTE内容”字段记录了指向该物理页面的PTE中的原始内容,就是当该物理页面被分配到对应PTE指向前,该PTE中的内容。这样做的目的在于当该页面不在物理内存中时,利用这个字段可以直接填充指向它的PTE,恢复原来的PTE.“PTE的PFN”字段记录了指向该页面的PTE所在的页表页面的PFN,其意义在于可以快速定位在虚拟地址上与该页面相邻的页面,因为其PTE都在一个页表页面中。

备用状态或已修改状态页面特殊的字段是“前向链接”和“后向链接”两个指针,因为备用状态和已修改状态的页面分别构成双向链表进行管理,这两个字段分别用于前向指针和后向指针。

空闲状态或零化状态页面特殊的字段是“前向链接”和“颜色链PFN号”,第一个字段是因为这两种状态的页面分别构成单向链表,该字段用于链表链接,“颜色链PFN号”字段用于物理页面在CPU高速缓存中的管理。

三、结束语

本文首先对工作集的概念进行了说明,然后介绍了物理页面的各种状态及转移,最后论述了windows是如何利用PFN对物理内存页面的管理的,其难点在于物理页面各种状态的理解,以及PFN结构的设计。

参考文献:

[1]潘爱明.Windows内核原理与实现[M].北京:电子工业出版社,2013.

[2]谭文,邵坚磊.天书夜读:从汇编语言到window内核编程[M].北京:电子工业出版社,2008.

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

【挑战Windows极限:物理内存】相关文章:

挑战极限突破自我作文08-10

电影极限挑战经典台词08-12

向生命的极限挑战08-06

追求卓越挑战极限08-15

挑战极限作文450字12-09

挑战生命的极限优秀作文07-12

极限挑战2第6期完整版06-25

Windows服务08-21

windows概述08-18

Windows下操作08-10

上一篇:雪一片一片下一篇:听魏书生老师讲座后的感想