1、第十四章操作系统结构设计第十四章操作系统结构设计14.1 14.1 操作系统设计概述操作系统设计概述14.2 14.2 传统结构的操作系统传统结构的操作系统14.3 14.3 面向对象的程序设计面向对象的程序设计 14.4 14.4 微内核微内核OSOS结构结构14.5 Windows 200014.5 Windows 2000的体系结构的体系结构14.1 14.1 操作系统设计操作系统设计概述概述第十四章操作系统结构设计第十四章操作系统结构设计14.1 操作系统设计概述 1. 1.操作系统设计面临的困难操作系统设计面临的困难 系统庞大:系统庞大:难于理解,无法保证OS是最优化的。 系统存在并
2、发情况:系统存在并发情况:多个进程(含线程)的并发执行,提高了系统的效率,但给OS的设计带来许多困难。 能在不同的硬件平台上运行:能在不同的硬件平台上运行:OS应具有很好的可移植性,但其解决会涉及到因机器的不同而异的硬件情况。 能适应计算机硬件不断地更新换代:能适应计算机硬件不断地更新换代:OS必须具有很好的可适应性,以适应新产品和更新换代产品不断地推出、应用的需求的迅速变化。 防止用户的不当行为:防止用户的不当行为: OS必须能防范怀有敌意用户的破坏和盗窃系统中的文件和数据,防止他们有意干扰系统中其他用户的正常运行。 兼容以前的操作系统兼容以前的操作系统: :为了保证在老版本环境下开发出的软
3、件,在新OS环境下也能很好地运行,新的OS版本也应当具有很好的对老版本的兼容性。 2.OS 2.OS的设计目标的设计目标 完善的功能完善的功能:OS所具备的功能,取决于其运行的平台和环境,以及应用的需求。 高效性:高效性:OS的高效性:在OS中引入多道程序运行机制,提高系统中各种资源的利用率;在运行时间的分配方面,应该是用于运行用户程序的时间尽可能多,而用于系统管理的时间尽可能地减少。 可靠性:可靠性:能保证处理结果的正确性;OS的运行的可靠性。 安全性:安全性:OS的安全性是整个系统的基础。在设计OS时,应设置多道防线,以确保OS的安全性能达到“可信任计算机系统评价标准(TCSEC)”的C2
4、级或更高。 “可移植性可移植性”和和“可适应性可适应性”:为了使OS能方便的运行在各种硬件平台上,应使OS具有可移植性。在设计OS时,应使与硬件有关的部分相对独立,并放在紧靠近硬件的位置。 14.1 操作系统设计概述 3 3. OS. OS结构设计简介结构设计简介 用工程化的方法对操作系统进行开发用工程化的方法对操作系统进行开发 早期OS的规模很小,OS是否是有结构的并不那么重要。 但随着OS规模的愈来愈大,应采用工程化的开发方法来进行开发。 软件工程的目标:所开发出的软件产品应具有良好的软件质量和合理的费用。 软件质量的评价指标:功能性、有效性、可靠性、易使用性、可维护性和易移植性等。 软件
5、开发方法:模块化、结构化、面向数据结构、面向对象的方法等。 利用不同的开发方法,所开发出的操作系统将具有不同的操作系统结构。14.1 操作系统设计概述 几种主要的操作系统结构几种主要的操作系统结构 OSOS结构:结构:系统中各部分程序的存在方式及其相互联系; 当前主要存在的操作系统结构:当前主要存在的操作系统结构: 无结构:无结构:如果OS中各部分,是以最基本的过程形式存在,而且,每个过程都可随意地调用其它过程; 模块化:模块化:对OS中各部分经过精心的划分和组合,形成若干个相对独立的模块,并为模块间定义了良好的接口; 分层式:分层式:按模块间的调用顺序,对模块进行分层,在各层之间只存在单向的
6、依赖关系; 微内核:微内核:人们集模块化结构、层次式结构、客户/服务器模式和面向对象技术之长,推出的一种崭新的OS结构。该OS结构已成为现代OS的主要结构。14.1 操作系统设计概述 结构设计的作用结构设计的作用 为了实现OS的正确性、可维护性、可适应性、可移植性等设计目标,必须经过功能设计、算法设计和结构设计三个阶段。 结构设计具有独特的不可被替代的作用; 模块化结构能较好地保证正确性; 具有模块化结构的OS,有助于提高系统的“可适应性”和“可移植性”; 分层式结构比模块化结构能更好的保证操作系统设计目标的实现; 微内核OS结构,又比分层式结构能更好,也更容易地保证操作系统设计目标的实现;
7、返回14.1 操作系统设计概述14.2 14.2 传统结构的操作系统传统结构的操作系统第十四章操作系统结构设计第十四章操作系统结构设计14.2 传统结构的操作系统传统结构的操作系统传统结构的操作系统第一代:早期的无结构操作系统第二代:模块化结构的操作系统第三代:分层式结构的操作系统现代结构的现代结构的OSOS微内核结构的OS 1. 1.无结构操作系统(整体系统结构)无结构操作系统(整体系统结构) OS并不存在任何结构,只是庞大的一组过程的集合,每个过程可以任意地相互调用其它过程,致使操作系统内部既复杂又混乱。 设计者注重实现功能和高效率,缺乏首尾一致的设计思想。 程序设计的技巧,表现在如何编制
8、紧凑的程序,以便于有效地利用内存。 随着系统的不断扩大,由于缺乏清晰的程序结构,一方面会使所编制出的程序错误很多,给调试工作带来很多困难,另一方面也使程序难以阅读和理解,增加了维护人员的负担。14.2 传统结构的操作系统 2. 2. 模块化结构模块化结构OSOS 模块化程序设计技术的基本概念 基于“分解”和“模块化”原则,对大型软件的复杂度进行控制。 将OS按其功能,精心地划分为若干个具有一定独立性和大小的模块,每个模块具有某方面的管理功能,并仔细地规定好各模块间的接口,使各模块之间能通过该接口实现交互,然后再进一步多次细分各模块为子模块,孙模块,。 这种设计方法称为模块-接口法,由此所构成的
9、就是具有模块化结构的操作系统。14.2 传统结构的操作系统2. 模块化结构OS 模块独立性模块独立性 在模块接口法设计方法中,关键问题在于模块的划分和模块之间接口的规定。 模块内部的复杂性,以及模块间交互的复杂性,决定了操作系统的复杂性。 在划分模块时: 模块划分的过小,虽然可以降低模块本身的复杂性,但会引起模块之间的联系过多,从而造成系统比较混乱; 模块划分的过大,会增加模块内部的复杂性,使内部的联系增加。 在划分模块时,应在两者间进行权衡。2. 模块化结构OS 衡量模块的独立性有以下两个标准: 内聚性内聚性 指模块内部各部分间联系的紧密程度。内聚性越高,模块独立性越强。 根据模块的内聚性,
10、又可把模块分为五类: 逻辑内聚模块:由若干个相关或相似的“处理”聚合成一个模块,即该模块实现一组逻辑相关的任务; 时间内聚模块:由若干个“处理”时间相同的任务,聚合成一个模块; 过程内聚模块:由若干个相关,且必须按一定逻辑顺序处理的任务,聚合成一个模块; 数据内聚模块:由若干个具有基于相同数据结构的“处理”聚合成一个模块; 功能内聚模块:为实现特定单一任务而构成的模块。 以按功能内聚所形成模块的内聚性为最好,数据内聚模块次之。2. 模块化结构OS 耦合度耦合度 指模块间相互联系和相互影响的程度。 耦合可分为以下三种: 数据耦合:模块间只存在明显的数据传送关系,即模块之间是通过调用关系传递被处理
11、的数据; 控制耦合:模块之间通过调用关系不仅传递被处理的数据,而且还传递对运行有影响的控制信息; 非法耦合:模块间彼此直接使用或修改对方的数据。 上述中的第一种的耦合度较低,应减少第二种耦合,而不允许出现第三种耦合。 模块接口法的优缺点模块接口法的优缺点 模块接口法的优点:模块接口法的优点: 提高OS设计的正确性、可理解性和可维护性。 增强OS的可适应性。 加速OS的开发过程。 模块化结构设计存在的问题:模块化结构设计存在的问题: 接口规定困难。 无序性。14.2 传统结构的操作系统 3. 3.分层式结构分层式结构OS OS 为了将模块接口法中“决定顺序”的无序性变为有序性,引入了有序分层法。
12、 分层法的设计任务是,在裸机系统(又称宿主系统)A0和目标系统An和之间,铺设若干个层次A1,A2,A3,An-1,使An通过A1,A2,A3,.层,最终能在A0上运行。14.2 传统结构的操作系统3.分层式结构OS 铺设这些中间层的方法有以下两种: 自底向上的分层自底向上的分层 基本原则:每一步设计都是建立在可靠的基础上。 基本概念:在用这种方法构成的操作系统时,将一个操作系统分为若干个层次,每层又由若干个模块组成,各层之间只存在着单向的依赖关系,即高层仅依赖于紧邻它的低层。例如: 在调试第一层软件A1时,由于它使用的是一个完全确定的物理机器(宿主系统)所提供的功能,在对第1层A1软件经过精
13、心设计和几乎是穷尽无遗的测试后,可以认为A1是正确的,而且它将与其所有的高层软件A2,.,An无关; 在调试第二层软件A2时,它也只使用了软件A1和物理机器所提供的功能,而与其高层软件A3,.,An无关,如此一层一层地自底向上增添软件层,每一层都实现若干功能,最后总能构成一个能满足需要的OS。 3.分层式结构OS 自顶向下的分层自顶向下的分层 基本概念:基本概念: 从顶层的目标系统An(总体功能模块)出发,向下通过若干层,最后过渡到宿主系统A0。 为实现An,对An进行第一次细化,由此形成虚机器An-1; 由于An-1只是关于模块的描述,它无法在物理机器上运行,故需对An_1的功能进一步细化,
14、利用更多的子模块来实现An_1功能,由此形成虚机器An-2; An-2仍然只是有关子模块的描述而无法运行,需再对An-2进行细化,如此形成An-3,An-4,.,直至产生能在物理机器上运行的程序,即虚机器A1。 自顶向下分层法的实质是,对目标系统的逐步求精。3.分层式结构OS 层次的设置层次的设置 一个操作系统应分为几个层次,每个层次具有什么功能,各层间的顺序应如何确定,是层次式结构设计的关键问题。下面列出了在对OS做分层结构设计时,应如何进行分层所必须考虑的几个因素: 程序嵌套:OS层次时,首先需要考虑,将在实现OS每个功能时所形成的程序嵌套模块,排成有序层次;或者按进程间单向发送信息的顺序
15、来分层。 可移植性:将那些与硬件紧密相关的软件,放在最低层,使其紧靠着硬件。 运行频率;将那些经常活跃的模块放在最接近硬件的A1层。 公用模块:把供多种管理程序调用的公用模块,设置在最低层或次低层。 用户接口:用户与OS的接口都应设置在操作系统的最高层,直接提供给用户使用。 在虚拟存储器环境下,应将存储器管理模块设置在较低的层次中,如A2层。 在一般情况下,一个操作系统按照层次结构的原则,从底向上可以被安排为:裸机、与硬件紧密相关的功能、进程和线程的管理、内存管理、设备管理、文裸机、与硬件紧密相关的功能、进程和线程的管理、内存管理、设备管理、文件管理、作业管理和命令管理,最上面是用户。件管理、
16、作业管理和命令管理,最上面是用户。 3.分层式结构OS 分层结构的优缺点分层结构的优缺点 易保证系统的正确性。易保证系统的正确性。由于把一个大型操作系统,按照一定的原则,分为若干个功能较为单一的模块,再进一步将这些模块,按一定的规则,组织成层次结构,并使之具有单向依赖关系,这样就形成了上一层功能是下一层功能的扩充或延伸,下一层功能为上一层功能提供了支撑和基础,使整个系统中的接口少而清晰。采取自下而上的设计方式,使所有设计中的决定都是有序的,或者说是建立在较为可靠基础上的,这样,就比较容易保证整个系统的正确性。 易扩充和易维护性。易扩充和易维护性。在系统中增加、修改或替换一个层次中的模块或整个层
17、次,只要不改变相应层次间的接口,就不会影响其他层次,这必将使系统维护和扩充变得更加容易。 系统效率降低。系统效率降低。分层结构也存在某些问题,由于层次结构是分层单向依赖的,必须在每层之间都要建立层次间的通信机制,特别是当系统较大、所设层次较多时,OS每执行一个功能,通常要自上而下地穿越多个层次,这无疑会增加系统的通信开销,从而导致系统效率的降低。3.分层式结构OS 层次间的调用方式层次间的调用方式 在严格的层次结构中,只允许高层中的程序调用低层中的程序,其调用方式可有以下三种: AiAi层次仅能调用层次仅能调用Ai-1Ai-1层中的程序。层中的程序。由Ai-1层提供的功能将形成Ai层的全部基础
18、。Ai层只能调用Ai-1层中的程序,而不能调用Ai-2,Ai-3,A1层中的程序。 AiAi层能调用所有低层中的程序。层能调用所有低层中的程序。Ai层能直接调用其下面各层所提供的命令,无须逐层传送。 AiAi层能调用部分低层中的程序层能调用部分低层中的程序。这是上述两种方法的一种折衷。例如,除允许Ai层调用Ai-1层中的程序外,还允许它调用A1层中的许多公用程序,这样,Ai层仍是与Ai-2,A2层隔离的。14.3 14.3 面向对象的程序设计面向对象的程序设计 第十四章操作系统结构设计第十四章操作系统结构设计14.3 面向对象的程序设计 1.1.面向对象技术的引入面向对象技术的引入 传统的设计
19、方式的缺陷传统的设计方式的缺陷 在利用面向过程的程序设计技术设计操作系统时,首先要为系统中各种硬件和软件资源,设计出相应的数据结构和一组程序。对于系统中的共享资源,会有许多程序访问用以描述该资源的数据结构。在这些程序中,如果任何一个程序操作出现了错误,就可能造成该数据结构出错,此错误将会影响到另一个访问它的程序,并会在系统中不断扩大,直至整个系统。 采用模块化结构和层次化结构技术设计操作系统时,虽可使发生错误的机会减少,但终难避免。一旦发生错误,该错误会通过模块以及层次之间数据的流动,从而进一步影响到其它模块和层次,同样可能导致整个系统的破坏。 在系统中采用了大量的全局性变量,会很容易被人查看
20、和修改,使系统的安全性受到威胁。 解决方法解决方法 引入类和对象的概念。在操作系统中,所谓“类”是指,为一个非共享资源定义一个数据结构,以及作用在该数据结构上的一组操作等,并将它们封装起来,称之为“类程”。并规定,在类程中的数据结构,只能被该类程内的一组过程访问,其它进程要想访问该类程中的数据,必需通过该类程方能进行。这样,在类程中的数据,也就能得到很好的保护。 2.2.面向对象技术的基本概念面向对象技术的基本概念 对象对象 在面向对象的技术中,是利用被封装的数据结构(变量),和一组对它进行操作的过程(方法),来表示系统中的某个对象的。 对象类对象类 对一组大体相似的对象进行定义。一个类,定义
21、了一组变量和针对该变量的一组方法,用它们来描述一组对象的共同属性和行为。在一般情况下,类中的变量没有具体的值,而只是一个数据结构框架。类是在对象上的抽象,对象则是类的实例。对象类中所定义的变量在实例中均有具体的值。 继承继承 可以根据已有类,定义一个新的类。新类被称为子类,原来的类被称为父类。子类自动继承父类中定义的变量和方法,并允许子类再增加新的内容。 一个父类可以定义多个子类,一个子类有两个父类或多个父类,它可以从多个父类获得继承,此时称为“多重继承”。 多态性多态性 不同对象在收到同一消息后,可以产生完全不同的结果。多态性是一个非常有用的特性,它允许用户发送一通用的消息,而消息的实现细节
22、,则由接收对象自己决定。这样,同一消息就可以调用不同的方法;或者说,多态性可使不同的实现细节,隐藏在不同的接口之下。14.3 面向对象的程序设计 3.3.面向对象技术的优点面向对象技术的优点 通过通过“重用重用”提高产品质量和生产率提高产品质量和生产率 通过“重用”的方法,利用以前项目中经过精心测试的对象,或由其他人编写、测试和维护的对象类,来构建新的系统,这不仅可大大降低开发成本,而且能获得更好的系统质量。 使系统具有更好的易修改性和易扩展性使系统具有更好的易修改性和易扩展性 通过封装,可隐蔽对象中的变量和方法,当改变对象中的变量和方法时,不会影响到其它部分,从而可方便地修改老的对象类。 通
23、过利用继承特性, 在创建一个新对象类时,可显著减少开发的时空开销,使系统具有更好的易扩展性和灵活性。 更易于保证系统的更易于保证系统的“正确性正确性”和和“可靠性可靠性” 对象是构成操作系统的基本单元,由于可以独立地对其进行测试,易于保证每个对象的正确性和可靠性,比较容易保证整个系统的正确性和可靠性。 封装对对象类中的信息进行了隐蔽,这样又可有效地防止未经授权者的访问和用户不正确的使用,有助于构建更为安全的系统。返回14.3 面向对象的程序设计 14.4 14.4 微内核微内核OSOS结构结构第十四章操作系统结构设计第十四章操作系统结构设计14.4 微内核OS结构 1. 1.微内核微内核OSO
24、S的基本概念的基本概念 足够小的内核足够小的内核 微内核并非是一个完整的OS,而只是放入操作系统中最基本的部分,是经过精心设计的、能实现现代OS最基本核心功能的小型内核。 它与一般的OS(程序)不同,它更小更精炼,不仅运行在核心态,而且开机后常驻内存,它不会因内存紧张而被换出内存。 基于客户基于客户/ /服务器模式服务器模式 将操作系统中最基本的部分,放入微内核中,而把操作系统的绝大部分功能,都放在微内核外面的一组服务器(进程)中实现,所有这些服务器,都属于操作系统的一部分,并作为进程来实现的,但它们都运行在用户态。 应用应用“机制和策略分离机制和策略分离”原理原理 在现在操作系统的结构设计中
25、,经常利用“机制与策略”分离的原理,来构造OS结构。 机制:机制:是指在实现某一功能时的具体规定或说原则。 策略:策略:是在机制的基础上,借助于某些参数和算法,用以实现该功能的优化,或达到不同的功能目标。 在传统的OS中,将机制放在OS的内核的较低层,把策略放在内核的较高层次中。 在微内操作系统中,通常将机制放在OS的微内核中。正因如此,才有可能将内核做的很小。 采用面向对象技术采用面向对象技术 操作系统是一个极其复杂的大型软件系统,我们不仅可以通过结构设计,分解操作系统的复杂度;还可以基于面向对象技术中的“抽象”和“隐蔽”原则,控制系统的复杂性;再进一步利用“对象”、“封装”和“继承”等概念
26、,来确保操作系统的“正确性”、“可靠性”、“易修改性”、“易扩展性”等,并提高操作系统的设计速度。14.4 微内核OS结构 2. 2. 微内核的基本功能微内核的基本功能 在不同的微内核OS中,微内核的大小相差甚多,可达数十倍。微内核所具有的功能,也必然会有明显的差异。至于哪些功能应放在微内核内,一般基于这样三个原则: 将与硬件密切相关的功能放入微内核中; 根据“机制与策略”分离的原理,将机制部分放入微内核中,将策略部分放入微内核外的多个服务器中; 将使用频率很高的功能,放入微内核中。由此可知,微内核通常含有如下几方面的功能:14.4 微内核OS结构 进程(线程)管理进程(线程)管理 在有的操作
27、系统中,将整个进程管理都放在内核中,但大多数的微内核OS,进程管理功能的实现,都是基于“机制与策略”分离的原理,将机制(基本进程功能)放入微内核中。 调度功能的机制部分,应将它放入微内核中。 用户(进程)优先级的策略属于策略问题,应将它们于机制分开,可将它们放入微内核外的进程(线程)管理服务器中。 进程(线程)之间的通信功能是微内核OS最基本的功能,被频繁使用,将进程(线程)之间的通信功能放入微内核中。 此外,还将进程的切换、线程的调度,以及多处理机之间的同步等功能,也放入微内核中。14.4 微内核OS结构 低级存储器管理低级存储器管理 通常在微内核中,只配置最基本的低级存储器管理机制。 实现
28、虚拟存储器管理的策略,则放在微内核外的存储器管理服务器中去实现。 中断和陷入处理中断和陷入处理 中断和陷入事件的类型非常多,处理过程也比较复杂,涉及到许多设备驱动程序和陷入处理程序,因此大多数微内核操作系统,都是将与硬件紧密相关的一小部分,放入微内核中处理。 在传统的操作系统中,进程管理、存储器管理以及I/O管理,都是在操作系统的内核中实现的。 在微内核OS中,则是将这些功能一分为二,把其中属于机制的、很小一部分放入微内核中,把其余绝大部分,放在微内核外的各种服务器中来实现。 事实上,其中大多数服务器,都要比微内核大。这进一步说明了,为什么能在采用客户/服务器模式后,能把微内核做的很小的原因。
29、14.4 微内核OS结构 3.3.微内核操作系统的优点微内核操作系统的优点 提高了系统可扩展性提高了系统可扩展性 微内核OS,几乎无一例外的都采用了客户/服务器模式,因此它的许多功能,都是由相对独立的服务器软件来实现的。当开发了新的硬件和软件时,微内核只须在相应的服务器软件中,增加新的功能,或再增加一个专门的服务器。与提高系统可扩展性的同时,也必然会改善系统的灵活性,不仅可在操作系统中增加新的功能,还可修改原有的功能,以及删除已过时的老功能,以形成一个更为精干、有效和实用的操作系统。 14.4 微内核OS结构 增强系统的可靠性增强系统的可靠性 微内核OS能更进一步增强操作系统的可靠性。其原因可
30、归结为: 由于微内核是出于精心设计和严格测试的,容易保证其正确性; 它提供了规范而精简的应用程序接口(API),为微内核外部的程序,编制高质量的代码创造了条件; 由于所有服务器都是运行在用户态,它们不能直接访问硬件。再加上内核和服务器之间,采用的是消息传递通信机制,因此,当某个服务器出现错误时,通常是仅仅影响它自身,不会影响内核,也不会影响其它服务器。或者说,微内核结构OS能够在服务器与内核之间,各服务器之间进行有效的隔离。 14.4 微内核OS结构 可移植性可移植性 作为一个好的操作系统,必须具备可移植性,使其能较容易地运行在不同的计算机硬件平台上。由于在微内核结构的操作系统中,所有与特定C
31、PU和I/O设备硬件有关的代码,均放在内核和内核下面的硬件隐藏层中,而操作系统的其它绝大部分各种服务器,均与硬件平台无关。因而,当把操作系统移植到另一个计算机硬件平台上,仅需做较小的修改。 提供了对分布式系统的支持提供了对分布式系统的支持 由于在微内核OS中,客户和服务器之间,以及服务器和服务器之间的通信,是采用消息传递通信机制,因而可使微内核OS能很好的支持分布式系统。事实上,只要在分布式系统中,对于所有的进程和服务器,均赋予唯一的标识符,在微内核中再配置一张系统映射表,在进行客户与服务器通信时,标上发送进程和接收进程的标识符,微内核便可利用系统映射表,将消息发往目标,而无论目标是驻留在哪台
32、机器上。 融入了面向对象技术融入了面向对象技术 在设计微内核OS时,采用了面向对象的技术,其中的“封装”、“继承”、“对象类”和“多态性”,以及在对象之间采用消息传递机制等,都十分有利于提高系统的“正确性”、“可靠性”、“易修改性”、“易扩展性”等,而且还能显著地减少开发系统所付出的开销。14.4 微内核OS结构 4.4.微内核微内核OSOS存在的问题存在的问题 由于微内核OS的内核非常小,也使微内核OS具有潜在的缺点。其中最主要的是,它较之早期OS而言,其运行效率有所降低其运行效率有所降低。 效率降低最主要的原因效率降低最主要的原因: :在完成一次客户对OS提出的服务请求时,需要利用消息实现
33、多次交互,和进行用户/内核模式和上下文的多次切换。 在早期的在早期的OSOS中,中,用户进程在请求取得OS服务时,一般只需进行两次上下文的切换: 一次是在执行系统调用后,由用户态转向系统态时; 另一次是在系统完成用户请求的服务后,由系统态返回用户态时。 在微内核在微内核OSOS中,中,由于客户和服务器间、以及服务器和服务器之间的通信,都需通过微内核,致使同样的服务请求,至少需要进行四次上下文切换: 第一次是发生在客户发送请求消息给内核,以请求取得某服务器特定的服务时; 第二次是发生在由内核把客户的请求消息,发往服务器时; 第三次是当服务器完成客户请求后,把响应消息发送到内核时; 第四次是在内核
34、将响应消息发送给客户时。 实际情况往往还会引起更多的上下文切换。实际情况往往还会引起更多的上下文切换。 14.4 微内核OS结构 例如,当某个服务器自身尚无能力完成客户请求,而需要其它服务器的帮助时,如图所示。其中的文件服务器还需要磁盘服务器的帮助,这时就需要进行8次上下文的切换。 为了改善运行效率,可以重新把一些常用的操作系统基本功能,由服务器移入微内核中。这样,可使客户对常用操作系统功能的请求,所发生的用户/内核模式,和上下文的切换的次数,由四次或八次降为两次。但这又会使微内核的容量有明显的增大。另外,在小型接口定义和适应性方面的优点也有所下降、也提高了微内核的设计代价。 返回14.4 微
35、内核OS结构14.5 Windows 200014.5 Windows 2000的体系结构的体系结构第十四章操作系统结构设计第十四章操作系统结构设计14.5.1 14.5.1 概述概述14.5.2 系统核心态组件 1.1.硬件抽象层硬件抽象层HAL( Hardware Abstraction Layer) HAL( Hardware Abstraction Layer) Windows 2000的一个重要目标,是能够让操作系统跨平台移植。为此,微软公司在紧靠硬件的地方,铺设了一个很小的硬件抽象层HAL,它在通用的硬件命令和响应,与某一特定专用平台的硬件命令和响应之间,进行映射。 将OS中的内核
36、,设备驱动程序以及执行体和硬件隔离开,即隐藏机器中的系统总线、中断控制机构、直接存取访问控制器及存储器中的地址映射机构等与硬件有关操作的实现细节,从HAL以上的各层次来看待这些操作都是相同的。 当要把操作系统移植到其它的硬件平台时,通过HAL提供的服务和间接硬件寻址,驱动程序和内核只需做很少的改动。HAL是一个可加载的核心态模块HAL.DLL,是运行在计算机硬件平台上的低级接口。14.5.2 系统核心态组件 由于HAL高度依赖于系统中的硬件,因此它必须与系统中装入的硬件完全匹配。为此,在Windows2000中提供了多种HAL,供在系统安装时选择。 在这里以一个较常用的在这里以一个较常用的HA
37、LHAL为例,来说明其所具有的功能:为例,来说明其所具有的功能: 在HAL中,专门为设计驱动程序的程序员,提供了三对读/写寄存器的函数,用于对寄存器进行访问; 由于在现代计算机中,通常都会有多种总线,如ISA、PIC、SCSI、USB和1394等,因此,需要按某种方式来区别它们;在HAL中,提供了一种服务,即总线独立的设备寻址,使驱动程序可以无须知道该设备是具体连接在什么总线上; 在中断处理中,同样也涉及到上述的总线问题,而HAL提供了允许驱动程序以可移植的方式,将中断服务例程与中断联系起来,而无须了解中断向量与总线的对应关系;此外,在HAL中还包括对中断请求级别的管理; 14.5.2 系统核
38、心态组件 HAL还提供了以设备独立方式,设置并管理DMA传输; 以可移植方式,管理时钟和定时器,时间的最小单位也减小为100ns; 为规范多处理机之间的竞争,在HAL中提供了一种简单的同步机制自旋锁(Spinlock),在任一时刻,只有一个线程能获得自旋锁,其它试图获得自旋锁的进程,将一直进行尝试,直到获得该锁;在Windows2000中,自旋锁用于控制CPU等待其它CPU占用资源的释放; 在HAL中,还有与BIOS对话的功能,用于系统初启时,去查明系统中,包含了哪些总线和I/O设备,以及它们是如何配置的,HAL将这些信息存入注册表中。图14-8示出了某种HAL所具有的功能。 14.5.2 系
39、统核心态组件 2. 2.内核内核 位于HAL之上的一层,包含了内核和设备驱动程序。内核位于HAL之上,它通过HAL访问硬件,并和HAL一起,构建一个更为完善的抽象硬件层,使内核以上的部分执行体,用C语言编写的,完全与硬件无关。内核自身还有小部分与硬件有关,但大部已做到与硬件无关,仍然是采用C语言编写的。 内核的一部分和HAL的大部分,长期驻留在主存,可通过调整优先级,来控制自己是否允许被I/O中断打断。 在Windows2000内核中,提供了一组经严格定义、且可预测的最基本的功能模块,作为整个OS工作的基础。 在内核中,还有若干个用于控制系统的控制对象,如DPC(Deferred Proced
40、ure Call,延迟过程调用)对象,它用于中断服务过程中,把对时间要求不严格的部分,从时间要求严格的部分中分离出来,排成一个DPC队列,以保证对时间要求严格的部分能及时处理。 此外还有中断和异常(事件)处理,多处理机的同步等。14.5.2 系统核心态组件 3. 3.设备驱动程序设备驱动程序 在Windows2000中,配置的设备驱动程序,是可加载的核心态模块。 由于在Windows2000中配置了HAL,使得在Windows2000/XP 中的设备驱动程序,不直接操作硬件,而是调用HAL的某些部分,来控制硬件的接口。 设备驱动程序包括以下几类: 硬件设备驱动程序硬件设备驱动程序,该程序接收面
41、向设备的I/O请求,将用户的I/O 函数调用,转换为对特定硬件设备的I/O 请求,再通过HAL 去读写物理设备或网络; 文件系统驱动程序文件系统驱动程序,接受面向文件的I/O 请求,并把它们转化为对指定设备的I/O 请求; 过滤器驱动程序过滤器驱动程序,它截获I/O请求,并按照特定的要求进行处理,如将要传送到磁盘的数据进行压缩,或将要传送到网络的数据进行加密等,并把处理的结果传送到下一层; 网络重定向程序和服务器网络重定向程序和服务器,一类文件系统驱动程序,传输远程I/O 请求。 14.5.2 系统核心态组件 4. 4.图形设备接口图形设备接口Windows 32 GDIWindows 32
42、GDI(Graphics Device InterfaceGraphics Device Interface) 该模块是用于处理有关窗口和用户界面的图形接口。在早期的版本中,它运行在用户态。为了提高性能,从Windows NT 4.0开始,该模块被放入内核空间。 在GDI中所包括的内容非常多,即含有成百上千条对图形接口的调用,可分成以下几大类: 窗口和打印机的图像管理的调用:窗口和打印机的图像管理的调用:其中有创建、撤消、管理和使用窗口的菜单、工具栏、对话框和图标等调用; 用于处理字体和图像的调用:用于处理字体和图像的调用:包括处理字体的类型和大小、在屏幕上画几何图形,填充颜色,操作调色板等;
43、 对多种设备驱动程序的调用:对多种设备驱动程序的调用:如对键盘、鼠标、音频输入/输出、打印机输出程序的调用等。14.5.3 执行体 在执行体中提供了许多功能各异的模块,如下所述: 1.I/O1.I/O管理模块管理模块 用于处理系统中的所有I/O请求,并提供所有类型驱动程序调用的统一接口。执行独立于设备的输入输出,并为进一步的处理,分配适当的设备驱动程序。该模块又包括以下几个子模块:文件系统驱动程序、网络驱动程序以及硬件设备驱动程序等。 2.2.虚拟内存管理器虚拟内存管理器 该模块用于实现内存分配(和回收)和“虚拟内存”功能,把进程地址空间中的虚地址,映射成内存页框,从而为每个进程,提供了一个大
44、的专用地址空间。同时保护每个进程的地址空间,不被其他进程占用。在Windows2000中,允许页面大小从4KB到64KB,以适应不同机器的需要。Windows2000的虚存管理器,还可在各种平台的机器上,运行内存管理器,也为高速缓存管理器提供基本的支持。14.5.3 执行体 3. 3.对象管理器对象管理器 它以一致的方法,创建和管理以及删除所有类型的对象,为对象的保持、命名和安全性设置,实施统一的规则。由它代表应用程序,创建和销毁对象。当创建一对象后,将向应用程序返回代表该新对象的一个句柄。 4.4.进程进程/ /线程管理器线程管理器 该模块可用于创建一个新的进程对象及其主线程,使之执行指定操
45、作。同时也指定它继承其父进程的属性。能终止一个进程和它所有的线程,使之退出系统。此外,还可对进程和线程对象实施跟踪,以了解其运行情况。 5.5.安全引用监控器安全引用监控器 在Windows2000中,提供了一种统一的访问控制机制,该机制利用与每个进程相关联的“访问令牌”,和与每个对象相关联的“安全描述符”这两个访问控制实体,来保障诸进程之间的访问,执行运行时对象的保护和监视。该机制适用于诸如进程、线程、文件、I/O 设备、窗口和其它许多对象。14.5.3 执行体 6. 6.高速缓存管理器高速缓存管理器 在Windows2000中,有一个单独的高速缓存,它适应于FAT16,FAT32和NTFS
46、等文件系统。高速缓存管理器在主存中,为所有文件系统和网络,提供高速缓存服务。其主要任务是,在内存中,记住最近使用过的文件盘块号,以便加速随后对该盘块访问的速度。 7.7.即插即用即插即用(Plus and Play)(Plus and Play)管理器管理器 简称PnP管理器,它用于提供对计算机系统中硬件配置的改变进行识别的功能,并兼有去适应硬件配置改变的能力。例如,当发现系统增加一新硬件时,它便为该硬件加载相应的设备驱动程序,以使用户能正确的使用该硬件。 8.8.电源管理器电源管理器 在Windows2000中,可根据电源能源的消耗情况,将电源分为六个状态,即S0,S1,S2,S3,S4及S
47、5状态。其中S0状态,相当于耗能最大的正常工作状态, S1状态的耗能S2状态的耗能,而S5为关机状态。电源管理器根据系统活动的情况,和控制面板电源开关的设置及系统电源情况等因素,去决定电源应处于哪种状态。14.5.3 执行体 9. 9.本地过程调用本地过程调用LPCLPC(Local Procedure CallLocal Procedure Call)机制)机制 在网络和分布式环境下,客户和服务器之间的通信,广泛采用远程过程调用RPC机制,在Windows2000的单机环境下,采用了类似于RPC方式,但经过优化、效率更高的本地过程调用IPC(Local Procedure Call)方法,来
48、实现同一机器中的应用进程(客户),与执行系统(服务器)之间的通信。LPC是一个基于连接的通信机制,为不同地址空间内的两个线程,提供一种高速交换信息的方法,可利用建立的连接,将数据从一个线程的地址空间,传送到另一线程的地址空间。 14.5.4 用户态进程 1. 1.系统支持进程系统支持进程 在Windows2000中,包括了如下多个系统支持进程: 系统空闲进程系统空闲进程IdleIdle,在系统中设有一个Idle 进程,对于每个CPU,Idle 进程都配置有一个相应的线程,用于统计相应CPU的空闲时间; System System 进程和进程和System System 线程,线程,是特殊类型的
49、System线程的宿主进程,用于执行加载于系统空间中的代码; 会话管理器会话管理器SMSSSMSS,是第一个由核心System 线程创建的用户态进程,用于执行一些关键的系统初始化步骤,设置系统环境变量、加载部分系统程序等; WIN32 WIN32 子系统子系统CSRSSCSRSS,它是WIN32 API 子系统的核心部分,关于WIN32 API 将在本小节后面介绍; 登录进程登录进程WinLogonWinLogon,用于处理用户登录和注销; 本地安全身份鉴别服务器进程本地安全身份鉴别服务器进程LSASSLSASS,接收来自于WinLogon 进程的身份验证请求,并执行实际验证。14.5.4 用
50、户态进程 2. 2.服务进程服务进程 服务进程负责启动、停止和与服务控制器交互,并管理对一系列用户态进程的服务。例如,注册、启动、响应状态请求、暂停或关闭服务。一些Windows2000组件,是作为服务来实现的,例如事件日志、假脱机、RPC 支持等。 14.5.4 用户态进程 3. 3.环境子系统环境子系统 环境子系统的作用,是将基本执行体中的某些服务,提供给应用程序,为它们提供运行环境,这是Windows操作系统实现与其它软件系统,如DOS、Windows、OS/2、LAN Manager 和符合POSIX 规范的UNIX相兼容的重要组成部分。由于在环境子系统的支持下,可以运行在其它操作系统