服务器 频道

突破4GB内存屏障 64位平台解析(下)

  使用64位操作系统不仅仅是为了支持的最大内存容量更大,而是为了更强大的操作系统内部数据结构。

操作系统内部数据结构限制对比
IT168评测中心
分组
32位Windows限制64位Windows限制
类别
单个进程虚拟空间
4GB16TB
用户模式虚拟内存
(32位应用程序)
2GB
3GB(使用4GT技术,同时应用程序需要使用IMAGE_FILE_LARGE_ADDRESS_AWARE参数编译)
2GB
4GB(应用程序使用IMAGE_FILE_LARGE_ADDRESS_AWARE参数编译)

 

 

 

用户模式虚拟内存
(64位应用程序)
-

x64 :
8TB(应用程序使用IMAGE_FILE_LARGE_ADDRESS_AWARE)
2GB(应用程序不使用IMAGE_FILE_LARGE_ADDRESS_AWARE)

IA64 :
7TB(应用程序使用IMAGE_FILE_LARGE_ADDRESS_AWARE)

内核模式虚拟内存
2GB
1GB(使用4GT技术)
8TB
分页池Paged Pool
Windows Vista:
受限于物理内存

Windows Home Server
Windows Server 2003 :
约530MB
Windows XP :
约490MB
Windows 2000 :
约350MB
128GB
未分页池
Non-paged Pool
Windows Vista :
受限于物理内存

Windows Home Server
Windows Server 2003
Windows XP
Windows 2000 :
256MB
128MB(使用4GT技术)
128GB
系统分页表
Page Table Entry(PTE)

Windows Vista :
不详

Windows Home Server
Windows Server 2003
Windows XP
Windows 2000:
约900MB

128GB
系统缓存
Windows Vista :
受限于物理内存

Windows Home Server
Windows Server 2003
Windows XP
Windows 2000 :
约860MB
约448MB(使用4GT技术)
1TB

4GT技术:4GB调整技术,又叫3GB优化技术,在Boot.ini文件里配置/3GB或者/USERVA选项,或者配置Bcdedit命令的/Set IncreaseUserVa启动选项,可以将用户模式内存提升至3GB,相应地内核模式就降低到1GB(32位下)

   无论何种环境,每一个进程都会有自己的虚拟内存地址空间,对于一个用户进程来说,默认的2GB可能已经足够,然而对于操作系统核心来说——所有的内核模式程序包括内核、驱动程序、系统缓存等都共享着相同的2GB空间(从这点上看,Windows已经不怎么具有微内核的样子了,为了性能,Windows将许多本应该放在用户模式的系统服务都放进了内核),在一个大系统上很容易受到限制。


任务管理器里面可以看到系统缓存、分页池和未分页池的大小

  系统资源主要有四种:分页池、未分页池、系统分页表和系统缓存,系统缓存容易理解,系统分页表则是用来保存所有线程使用到的堆栈(Windows所有的线程都具有自己的堆栈),分页池和未分页池则是所有程序的核心模式组件使用到的内存部分,区别只是未分页池里分配的内存是不能交换到虚拟内存上面的,分页池上的则可以(从而可能保存到磁盘上去,当程序需要这些页面的时候,再读到内存里面来)。例如设备驱动就使用未分页池(假如放到虚拟内存并被交换到磁盘上时可能会发生灾难性的后果)。这些资源短缺的时候系统将会发生不可预料的事情,分页池吃紧的时候系统将会频繁地使用虚拟内存,从而不停读写磁盘减低性能,而未分页池吃紧的时候系统多半已经踏入鬼门关了。

  由于这些资源共同占用着相同的内核模式地址空间,因此在32位条件下很受限制,并且稍有不慎就会导致短缺,在64位环境下,这些资源的上限都可以达到128GB,因此系统运行起来会更加稳定,可以支持更多的进程/线程运行——也就是打开更多的窗口,运行更多的程序(从这点上看,32位的Vista也多少具有这些特征,虽然无法突破4GB的限制,不过系统资源的分配没有太过于固定的限制)。

0
相关文章