第二章,系统架构——客户端和服务器版本的区别
客户端与服务器版本的不同
windows在客户端和服务器上都志在必得。到截稿时,共有6个客户端发行版:Windows 7 Home Basic,Windows 7 Home Premium,Windows 7 Professional,Windows 7 Ultimate,Windows 7 Enterprise,和Windows 7 Starter。
共有7个不同发行版的windows server 2008 R2:Windows Server 2008 R2 Foundation,Windows Server 2008 R2 Standard,Windows Server 2008 R2 Enterprise,Windows Server 2008 R2 Datacenter,Windows Web Server 2008 R2,Windows HPC Server 2008 R2,和Windows Server 2008 R2 for Itanium-Based Systems(windows支持intel Itanium处理器的最新发布发行版)。
此外,有N个客户端发行版不包含windows media player。最后,windows server 2008 R2的Standard,Enterprise和Datacenter版也有支持“Hyper-V”的发行版。(Hyper-V虚拟化会在第三章中讨论)
这些发行版区别在:
- 支持的处理器数量(socket的支持,不是处理核心或者线程)
- 支持的物理内存大小(实际上是支持的最高内存地址——详见第二部分第十章,物理内存限制)
- 支持的并发网络连接数(例如,一个客户端版本最多支持10个并发连接访问文件和打印服务)
- Media Center的支持
- 对于多点触摸,玻璃效果和桌面特效的支持
- 对于一些功能的支持,比如BitLocker,VHD Booting,AppLocker,windows XP兼容模式,还有超过100个其余的许可证配置。
- 服务器版本的分层服务并不支持客户端版本(如目录服务和集群)
表2-2列出了windows 7和windows server 2008 R2所支持的内存和处理器的不同。
更多有关windows server 2008 R2不同版本的区别请参阅http://www.microsoft.com/windowsserver2008/en/us/r2-compare-specs.aspx.
表2-2 windows 7和windows server 2008 R2的区别
支持的 socket数量 (32位版本) |
支持的 物理内存 (32位版本) |
支持的 socket数量 (64位版本) |
支持的 物理内存 (Itanium版本) |
支持的 物理内存 (x64版本) |
|
Windows 7 Starter |
1 | 2GB | 不可用 | 不可用 | 2GB |
Windows 7 Home
Basic
|
1 | 4GB | 1 | 不可用 | 8GB |
Windows 7 Home
Premium
|
1 | 4GB | 1 | 不可用 | 16GB |
Windows 7
Professional
|
2 | 4GB | 2 | 不可用 | 192GB |
Windows 7
Enterprise
|
2 | 4GB | 2 | 不可用 | 192GB |
Windows 7
Ultimate
|
2 | 4GB | 2 | 不可用 | 192GB |
Windows
Server 2008 R2
Foundation
|
不可用 | 不可用 | 1 | 不可用 | 8GB |
Windows Web
Server 2008 R2
|
不可用 | 不可用 | 4 | 不可用 | 32GB |
Windows Server
2008 R2 Standard
|
不可用 | 不可用 | 4 | 不可用 | 32GB |
Windows HPC
Server 2008 R2
|
不可用 | 不可用 | 4 | 不可用 | 128GB |
Windows Server
2008 R2 Enterprise
|
不可用 | 不可用 | 8 | 不可用 | 2048GB |
Windows
Server 2008 R2
Datacenter
|
不可用 | 不可用 | 64 | 不可用 | 2048GB |
Windows Server
2008 R2 for
Itanium-Based
Systems
|
不可用 | 不可用 | 64 | 2048GB |
不可用 |
尽管有很多个windows操作系统的零售包,但他们公用同一个系统核心文件,包括内核镜像,Ntoskrnl.exe(还有PAE发行版的Ntoskrnl.exe);HAL库;驱动;和基本的系统公共部分以及DLL。这些文件对于所有发行版的windows 7和windows server 2008 R2都是一样的。
如此多的windows发行版,系统怎么知道要引导哪个版本?通过查询注册表ProductType和ProductSuite两项键值,位于HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions处。
ProductType用来区分系统是服务器还是客户端版本。这个值在系统注册许可的时候被写入注册表。其有效值被列在表2-3。这个值可以通过用户模式的函数GetVersionEx查询到,或者用内核模式的驱动函数RtlGetVersion。
表2-3 ProductType注册表键值
windows版本 |
ProductType的值 |
Windows client | WinNT |
Windows server (domain controller) | LanmanNT |
Windows server (server only) | ServerNT |
另一个注册表键值,ProductPolicy,保存位于tokens.dat文件中数据的一个副本。该键值用以区分windows不同的发行版和功能。
如果用户程序需要确定当前运行的是哪个发行版的windows,可以调用VerifyVersionInfo函数。该函数在windows SDK中有描述。驱动可调用内核模式的函数RtlVerifyVersionInfo,在WDK中有它的描述。
如果核心文件在本质上并不区分客户端和服务器,那为什么这两种系统会有不同呢?简单地说,服务器版本为服务应用程序做了性能上的优化,而客户端版本(尽管也有服务器的功能)则为了快速桌面交互响应做了另一种优化。不同类型的产品,系统在启动时候对于资源的分配时不同的。例如,操作系统的堆(或者池)大小和数量的分配,系统内部工作的线程数,系统数据cache的大小。还有运行时候的策略,例如内存管理器对于系统和进程需求的应对方式在客户端与服务器版本上也是不同的。甚至,一些进程调度的细节在两个系列中也是默认不同的(默认轮转时间片的长度和线程颗粒大小——细节详见第五章)。二者有显著的不同的地方,本书相关章节会有突出说明。除非提及,本书所述同时适用于这两个版本。
实验:确定许可证开启的功能
前面提到过,windows通过许可证机制可以控制开启100多个不同的功能。许可证不仅仅决定安装的是客户端还是服务器,而且决定操作系统的不同发行版(或者SKU)功能的差别,比如BitLoker(windows server可用,和客户端的旗舰版,企业版一样)。用SIPolicy工具可以查看系统上的许可证。
下载地址http://www.winsiderss.com/tools/slpolicy.htm
许可策略是按照许可承认的模块所属设施组织的,SIPolicy.exe加上-f参数显示所有设施。
C:\>SlPolicy.exe -f SlPolicy v1.05 - Show Software Licensing Policies Copyright (C) 2008-2011 Winsider Seminars & Solutions Inc. www.winsiderss.com Software Licensing Facilities: Kernel Licensing and Activation Core DWM SMB IIS . . .
在-f参数后面加上设施名字来显示该设施所有许可的值。比如查看CPU的限制和允许的内存大小就要加上Kernel设施名。下面是windows 7 旗舰版的输出:
C:\>SlPolicy.exe -f Kernel SlPolicy v1.05 - Show Software Licensing Policies Copyright (C) 2008-2011 Winsider Seminars & Solutions Inc. www.winsiderss.com Kernel ------ Processor Limit: 2 Maximum Memory Allowed (x86): 4096 Maximum Memory Allowed (x64): 196608 Maximum Memory Allowed (IA64): 196608 Maximum Physical Page: 4096 Addition of Physical Memory Allowed: No Addition of Physical Memory Allowed, if virtualized: Yes Product Information: 1 Dynamic Partitioning Supported: No Virtual Dynamic Partitioning Supported: No Memory Mirroring Supported: No Native VHD Boot Supported: Yes Bad Memory List Persistance Supported: No Number of MUI Languages Allowed: 1000 List of Allowed Languages: EMPTY List of Disallowed Languages: EMPTY MUI Language SKU: Expiration Date: 0