文档章节

系统架构——可移植性,对称多处理,可扩展性

locusxt
 locusxt
发布于 2014/09/21 15:35
字数 2127
阅读 962
收藏 8

可移植性

windows被设计成可在多种硬件平台上运行。windows NT最初的版本支持x86和MIPS架构。对于DEC(被康柏收购,后与惠普合并)公司的Alpha AXP平台,尽管它是一个64位处理器,windows NT运行在32位模式,windows也尝试过支持。windows 2000开发期间,曾有一个原生的64位版本但后来没有被发布。在支持第四代处理器架构上,Motorola PowerPC也曾被加入到windows NT 3.51中。因为市场需求的改变,MIPS和PowerPC架构在windows 2000的研发中被丢弃了。随后,因为windows 2000仅仅支持x86平台,康柏也不再支持其旗下的Alpha AXP架构了。然后windows XP和windows server 2003开始支持3种64位的处理器家族:Intel Itanium IA-64,AMD64,和适用于x86平台的intel64位扩展技术(兼容AMD64架构,二者有细微差别)。后面两族处理器称作64位扩展系统,本书称其x64。(windows 是如何在64位操作系统系统上可以运行32位应用程序的会在第三章中解释)

windows在不同硬件架构和平台之间实现可移植性主要靠如下两个方法:

  • windows是分层设计的,系统底层有关具体处理器和平台的模块是独立分开的,这样系统的上层就可以屏蔽这些硬件的差异。两个保障系统可移植性的关键组件是kernel(Ntoskrnl.exe中)和硬件抽象层(HAL,于Hal.dll)。这两个组件在本章后面都有详细叙述。基于具体的硬件的函数(比如线程会话切换和门调度)在kernel中实现。因不同硬件(例如主板)而不同的函数位于HAL中。唯一剩余的组件,也是特定于硬件体系结构的,即内存管理,代码数量相当多,不过放眼整个系统又仅仅是个小数目而已。
  • windows的绝大多数代码都是C写的,部分掺杂C++。汇编被用在系统需要直接操纵硬件的部分(比如中断门句柄)或者非常注意性能的部分(如会话切换)。汇编语言不仅存在于kernel和HAL,在系统核心的其他部分也有(如实现互斥锁的一个模块),另外还有windows子系统内核模式的部分,甚至一些用户模式的库中也有汇编,如Ntdll.dll中进程创建的代码。(本章后面会解释)

对称多处理

多任务是操作系统把一个处理器在多个线程之间共享的技术。当一个电脑拥有多于一个处理器的时候,它就可以同时进行多个线程了。也就是说,单一处理器的系统仅仅是看起来像能同时处理多个线程,多个处理器的系统就是名副其实了,每个处理器处理一个线程。

本章开头说过,windows的设计目标之一就是能够在多处理器平台上运行。windows是一个对称多处理(SMP)系统,没有主处理器——系统和用户线程一样可以运行在任意一个处理器上。同时,所有的处理器共享同一个内存空间。如果系统选择其中一个处理器运行系统内核代码,另外的处理器运行用户代码,那样的模式叫非对称多处理(ASMP)系统。二者对比于图2-2。

windows也支持3种现代多处理器系统类型:多核,超线程,和NUMA(非统一内存架构)。这些在后面的段落中简要提及。(完全了解这些系统调度的细节,请参阅第五章“进程和线程”)

图2-2

超线程是intel提出的一项技术,它在cpu的每个物理核上模拟出两个逻辑处理器。每个逻辑处理器有他自己的cpu状态,但共享执行引擎和内建cache。这允许其中一个逻辑cpu停滞的时候(如cache未命中或者指令分支预测错误)另一个逻辑cpu运算。这种调度策略旨在最佳发挥超线程设备——调度选择一个忙的逻辑cpu同一物理cpu上的另一个闲置逻辑cpu好过选择一个闲置的物理cpu。更多线程调度的细节参看第五章。

在NUMA系统上,处理器被分为称作节点的组。每组都有其自身的处理器和内存,它们通过高速缓存互联总线连接到整个系统中。运行在NUMA系统上的windows依然是个SMP系统,所有的处理器要访问全部内存,这是背景。实际上访问节点自身的内存要快过访问其他节点的内存。对于处于同一节点可以访问同一内存的处理器之间调度线程,以此来改善性能。并且尽量在节点内部满足内存请求,但如果必要还是会从外节点分配内存的。

当然,windows也原生支持多核系统——因为这样的系统有真正的物理核,windows上原本SMP代码将他们看做离散的多处理器,除了某些需要区分同一cpu上不同核和远程核的计算和识别任务。

windows在原本的设计中并没有限制具体的处理器数量,同时用发放许可证的办法来区分不同版本的windows。为了方便和效率,windows会在一个掩码中追踪记录处理器(总数量,闲置数,使用数,等等细节),这个可以被cpu直接操作的掩码又称作关联掩码,其位数和机器位数(32位或64位一致)。因此windows系统这样又限制了cpu的数量,因为这个关联掩码不可任意增长。为了保持兼容性,满足支持大处理器的需求,windows实现了一个高级结构叫处理器群。整个处理器群可以被一个关联掩码定义,内核和应用程序均可指定由哪个组群执行。兼容程序可查询支持的组群数量(最近被限制在4个),遍历每个组群的关联掩码。同时,传统的应用程序依旧可以在一个族内运行无碍。更多信息关于windows如何分配处理器族(也有关NUMA)的细节参阅第五章。

上面提到,可支持的处理器数量取决于windows版本(见本章后面图2-2)。这个数字被保存在系统许可文件(\Windows\ServiceProfiles\NetworkService\AppData\Roaming\Microsoft\SoftwareProtectionPlatform\tokens.dat)中,作为一个公共变量“Kernel-RegisteredProcessors”。(注意,篡改这个数据违反软件许可证,要使用更多数量的cpu要改的不仅仅是这一个数据。)

可扩展性

多处理器系统的一个关键问题就是可扩展性。SMP系统为了保持运行的正确必须遵守严格的规定。资源争夺和其他的性能问题比单一处理器的系统更复杂,而且在系统设计中必须更重视。windows为此采取了多个策略:

  • 同时可让系统代码运行在一个或几个处理器上的能力
  • 一个处理器可运行多个线程,而每个线程又可被多个处理器执行
  • 内核,驱动和服务进程的高精度同步(如自旋锁,队列自旋锁,见第三章),让更多组件同时在多个处理器上协同运行。
  • 诸如I/O端口(第二部分第八章“I/O系统”)这样的编程机制使得多线程服务进程可以很好地运行在多处理器系统上。

windows系统的这些兼容性已经经过了长时间的演变优化。比如windows server 2003在多处理器上调度多线程提出的per-CPU调度队列,还有windows 7和windows server 2008 R2 在调度数据库中摒弃了全局锁。这种逐步的提高也发生在其他方面,比如内存管理。更多细节有关多处理器同步详见第三章。



本文转载自:http://jvjvlglg.is-programmer.com/posts/33658

locusxt
粉丝 27
博文 140
码字总数 90989
作品 0
海淀
程序员
私信 提问
嵌入式系统的复杂性推动了对接口标准的发展

二十年前,用于系统建模、仿真、图像和信号处理的嵌入式实时处理通常使用按比例缩小的超级计算机体系结构,以并行对称拓扑互连的相同处理器的同质阵列。这些架构的编程解决方案最初是分散的,...

朗锐智科
04/02
0
0
OpenStack对象存储——Swift

OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一,被称为对象存储,提供了强大的扩展性、冗余和持久性。本文将从架构、原理 和实践等几方面讲述Swift。 Swift并不是...

icheer
2013/08/16
507
0
大型分布式网站架构技术总结

大型分布式网站架构 大型分布式网站架构技术总结 本文是学习大型分布式网站架构的技术总结。对架构一个高性能,高可用,可伸缩,可扩展的分布式网站进行了概要性描述,并给出一个架构参考。一...

陶邦仁
2016/03/15
952
0
软件架构的5视图法

5视图法可以帮助软件架构师以不同的视角对软件的各个方面的属性:功能需求,约束,运行期质量属性,开发期质量属性。 1、 逻辑架构:逻辑架构关注功能,不仅包括用户可见的功能,还包括为实现...

小步2013
2014/08/20
0
0
JDBC 4.2 Specifications 中文翻译 -- 第四章 JDBC API 概览

JDBC API 给 Java 程序提供了一种访问一个或者多个数据源的途径,在大多数情况下,数据源是关系型数据库,使用 SQL 语言来访问。但是,JDBC Driver 也可以实现为能够访问其它类型的数据源,比...

beanlam
2017/01/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

iOS苹果应用IPA一键签名工具及重签教程

开心签名工具,是一款跨平台ios签名和重签名工具。 同时支持在windows、linux、mac运行,数据同步,方便使用及管理! 开心重签名工具官网 功能特点 1、支持图形界面及命令行重签(部署到服务...

tintong
22分钟前
3
0
2.4G有源卡核心芯片供应商

有源2.4G RFID的防盗标签,在与无源标签相比较,通信距离远,通信时效高。我司的SI24R2E这颗芯片专门为2.4G有源标签而设计,具有低功耗,发送距离远,厂商设计简单等优势;广泛应用于现在城市...

文刀石
28分钟前
2
0
设置Ubuntu16.04启动为命令行界面

1. 修改/etc/default/grub文件,将GRUB_CMDLINE_LINUX_DEFAULT设置成”quiet splash 3” 2. 使用命令update-grub使得在/boot下重新生成GRUB2配置文件。 3. 重启...

JosiahMg
28分钟前
3
0
C++基础知识点

计算机语言 计算机不能理解高级语言,只能理解机器语言,必须要将高级语言翻译成机器语言,翻译的方式有两种,一种是编译,一种是解释 解释型语言,在运行程序时进行翻译,每个语句在执行时逐...

大瑞清_liurq
34分钟前
3
0
EFCore 多条数据更新不能同时savechanges()的解决方法

1 在ModelContext定义下增加var transaction = ctx.Database.BeginTransaction(); 1.2 在最后一个SaveChanges()后增加transaction.Commit(); 3 在finally的if (sMsgCode != "")分支中增加tra......

_Somuns
38分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部