43(65)---windows internal 6 mark divd alexa

来源:互联网 发布:网络三大奇书四大神书 编辑:程序博客网 时间:2024/05/22 09:07
超线程是intel发明的技术,可以在一个核上提供两个逻辑处理器。每个逻辑处理器有自己的cpu状态,共享执行引擎和缓存。这样,当允许一个逻辑处理器停止的时候,另一个逻辑处理器仍然可以运行。调度算法为超线程做了优化(选择空闲cpu还是逻辑处理器一忙一闲的cpu)。第5章有线程调度的详细信息。
在NUMA系统上,处理器被分组为更小的单元,称为节点。每个节点有自己的内存和处理器,通过缓存一致总线连接到更大的系统。NUMA的windows也是一个SMP系统,所有的处理器都可以对内存访问。调度算法会优先考虑选择同一节点内的处理器并尽量在本节点内分配内存。
windows也支持多核系统。这些系统确实有这么多处理器,仅仅是封装形式不一样而已,SMP会认为他们是独立的处理器,除了一些统计和身份任务(如授权),这需要区分是否运行在不同的处理器上。
在设计时,windows没有限制cpu的个数。但是为了方便和效率,windows通过位掩码(也称为亲和性掩码)来跟踪处理器(数量,空闲,忙等细节)。 位掩码的位数,和机器位数相等(32位或者64为)。这样允许处理器通过寄存器来直接操作位。由于亲和性掩码不能任意增加,所以windows限制了CPU的数量。为了和位掩码机制的保持兼容性,同时还能支持更多的cpu,windows实现了一个处理器组的概念。处理器组可以通过一个亲和性掩码来定义,内核和应用程序可以决定使用哪个处理器组。新的应用程序可以查询组的数量并且枚举位掩码,老的应用程序只能看到当前组。第五章有详细描述。
支持cpu的数量和windows版本有关。这个数量存储在(\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\tokens.dat),值为(“Kernel-RegisteredProcessors.)
注意,私自修改这个值,是有违软件授权的。并非单纯的修改这个值,就能支持多cpu。
可扩展性
扩展性是多处理器系统关键问题之一。在SMP系统上正常运行,必须遵守严格的规则。资源竞争和其他性能问题在多处理系统上会更加复杂,系统设计时必须考虑到。下面是windows在多处理系统上取得成功的关键:
任意处理器上均可运行操作系统代码,并且可以同时运行在多个处理器上
同一进程中的不同线程能够同时运行在不同的处理器上。
内核,驱动程序和服务采用细粒度同步,进而允许更多的组件同时运行。
编程机制比如说io端口(第8章会讲到),方便实现多线程程序,并且在多处理器系统上可以良好的维护。
内核的扩展性一直在改变。windows server2003位每个cpu引入一个调度队列,允许线程调度并发,win7和server2008R2去掉了调度数据库的全局锁,这种逐步的同步粒度改进也发生在其他领域,比如说内存管理器。第三章对同步有进一步讲述。
客户端和服务器版本差别
windows发行客户端和服务器版本。写作本书时:有6个版本的win7,Windows 7 Home Basic, Windows 7 Home Premium, Windows 7 Professional,Windows 7 Ultimate, Windows 7 Enterprise, and Windows 7 Starter。
windowsserver2008R2有7个版本,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, and Windows Server 2008 R2 for Itanium-Based Systems(windows中支持最新的)。
也有不包括媒体播放器的“N”版本,。Standard, Enterprise, and Datacenter editions of Windows Server 2008 R2 有“with Hyper-V” 版本,包含了hyper-v。(第三章会讨论hyper-v)
版本之间的主要差别是:
处理器数量
内存数量(支持的最大内存容量,第二部分第10章有详细介绍)
网络并发连接数量(客户端版本的文件和打印服务支持最大10个并发连接)
支持媒体中心
多点触摸、aero和桌面组合
BitLocker, VHD Booting, AppLocker,xp兼容性模式,以及其他100多项可配置属性。
分层服务,server版本有,而client版本没有,如目录服务和集群。
表2-2列出了win7和r2在内存和处理器方面的差别。www.microsoft.com/windowsserver2008/en/us/r2-compare-specs.aspx.介绍了r2不同不版本之间的详细差别。
尽管有多个windows版本,但他们共享系统的系统文件,包括内核映像,ntoskrnl.exe或者Ntkrnlpa,HAL,驱动程序,基础工具和dll。这些文件在win7和r2的所有版本都是一致的。
那么,windows如何知道应该启动那个版本呢?答案存在于HKLM\SYSTEM\CurrentControlSet\Control\ProductOptions下的ProductType和ProductSuite键。ProductType用于区分是客户端还是服务端版本,通过授权策略文件来加载。表2-3给出了列表。用户态应用程序可以通过GetVersionEx获取,内核态通过RTLGetVersion获取。
ProductPolicy,包含了tokens.dat的一个备份。区分windows的版本和支持的特性。
SDK中的VerifyVersionInfo可以得到当前运行的版本信息。驱动程序可以调用RtlVerifyVersionInfo来完成功能。
那么,如果客户端和服务端的关键文件信息都是一样的,windows怎么区分呢?服务端程序为并发进行了优化客户端版本对提高响应进行了优化。
原创粉丝点击