使用64位操作系统不仅仅是为了支持的最大内存容量更大,而是为了更强大的操作系统内部数据结构。
操作系统内部数据结构限制对比 IT168评测中心 | ||||
分组 | 32位Windows限制 | 64位Windows限制 | ||
类别 | ||||
单个进程虚拟空间 | 4GB | 16TB | ||
用户模式虚拟内存 (32位应用程序) | 2GB 3GB(使用4GT技术,同时应用程序需要使用IMAGE_FILE_LARGE_ADDRESS_AWARE参数编译) | 2GB 4GB(应用程序使用IMAGE_FILE_LARGE_ADDRESS_AWARE参数编译) | ||
用户模式虚拟内存 (64位应用程序) | - | x64 : | ||
内核模式虚拟内存 | 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 | 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的限制,不过系统资源的分配没有太过于固定的限制)。