1、操作系统的设计 操作系统设计目标 1、可靠性正确性困难:并发性、共享性、随机性(中断)健壮性(鲁棒性),2、高效性多道程序设计的目标是提高资源利用率,但系统开销加大。 Tu:运行目态程序所用的时间 Tsu:运行管态程序为用户服务所用的时间 Tsm:运行管态程序做系统管理工作所用的时间 系统运行效率: =(Tu+Tsu)/(Tu+Tsu+Tsm),3、易维护易读性易扩充性易修改性易裁减性 4、易移植性 5、安全性 6、可适应性 7、简明性,设计一个操作系统主要包括 功能设计 算法设计 结构设计,操作系统的结构设计,结构设计: 按照系统的功能和特性要求,选择合适的结构,使用相应的结构设计方法将系统
2、逐步地分解、抽象和综合,使操作系统结构清晰、简单、可靠、易读、易修改,而且使用方便,适应性强,操作系统的结构:整体式结构层次式结构进程分层结构层次管程结构客户-服务器结构,整体式结构 模块接口法(无序模块法,模块组合法)首先确定操作系统的总体功能,然后将总功能分解为若干个子功能,实现每个子功能的模块称为模块。继续分解,直至每个模块仅包含单一功能为止。最后通过接口将所有模块连接起来形成一个整体,特点:根据功能划分模块数据基本上作为全局量使用在系统内部,不同模块程序之间可以不加控制地互相调用和转移信息的传递方式可根据需要随意约定因而造成模块间的循环调用,优点:结构紧密接口简单直接模块间转接的灵活性
3、使系统效率高,缺点(1):由于模块之间可以任意相互调用,形成网络,各模块互相联系,独立性差,系统结构不清晰数据作为全局量处理,系统内各模块均可对其进行存取和修改,造成模块间更为隐蔽的关系,使得难于对软件结构作出综合性的理解,难于修改,可靠性、易读性、适应性难以保证,缺点(2):由于模块接口法常以大型表格为中心,为保证数据完整性,往往采用全局封中断的方法,从而限制了系统的并发性,结论,可适应性较差 适用于规模较小使用环境比较稳定却要求效率较高的系统,用户程序2,用户程序1,服务例程,分配表,1,2,3,4,主存,用户程序 在用户态运行,操作系统 在核心态运行,2. 层次式结构 按此模型构造的第一
4、个操作系统是E.W.Dijkstra和他的学生在荷兰开发的THE系统(1968年),THE系统分为六层:层次 功能 5 操作员 4 用户程序 3 输入/输出管理 2 操作员-进程通信 1 内存和磁盘管理 0 处理器分配和多道程序,3. 进程分层结构采用进程概念后把含有并发活动的系统分为若干异步运行的与时间无关的顺序程序模块操作系统的任务就是协调这些异步运行的进程使它们能够协调工作,进程分层结构把系统中所有的进程模块按照一定的原则排列在若干层上并要求这些层间是一种单向依赖关系系统由一个核心和位于各层上的若干进程组成,优点: 进程模块的独立性强、易维护、易调整 整个系统结构清晰、形式整齐划一缺点:
5、 由于系统中所有进程的控制转移、通讯等任务全部交给系统的核心去管理,要花费一定的代价,主要缺点有:每一个进程必须设立进程控制块用以保留进程的状态信息增加了内存开销进程间控制转移、状态保留及信息传送均由核心管理时间消耗多,效率下降系统并发活动过多,调度负担过重且同步操作过于分散易于造成死锁,影响了系统的安全性,4、虚拟机结构,系统调用,陷入,陷入,I/O指令,CMS,CMS,CMS,370虚拟机,VM/370,370裸机,虚拟机思想的应用:在奔腾CPU上运行老的MS-DOS程序 Intel在奔腾芯片上提供了一个虚拟8086模式,在此模式下,奔腾机就像一台8086计算机一样,包括1M字节内的16位
6、寻址方式,虚拟8086模式被Windows、OS/2及其他操作系统用于运行MS-DOS程序。程序在虚拟8086模式下启动,执行一般的指令时它们在裸机上运行。但是,当一个程序试图陷入系统来执行一条系统调用时,或者试图执行受保护的I/O操作时,将发生一条虚拟机监控程序的陷入,两种设计方法: 第一种:MS-DOS本身被装入虚拟8086模式的地址空间,虚拟机仅仅将该陷入传回给DOS 第二种:虚拟机监控程序仅仅捕获第一条陷入并自己执行I/O操作。,IBM390与Linux: Linux在S/390下有三种实现模式: 本地运行模式:即独立运行模式,Linux可以不依赖S/390自己的任何操作系统完整地运行
7、 逻辑分区运行模式:Linux在S/390的硬件逻辑分区内运行,S/390最大支持15个独立的逻辑分区 VM/ESA模式:把Linux当成一个虚拟机来运行,VM提供虚拟的CPU、I/O子系统和内存资源,IBM390与Linux: 用户既可以选择把OS/390与Linux共存,只是简单地共享硬件,也可以将两者设置成客户/服务器模式来应用,非常灵活,为了控制并发程序设计的复杂性 使并发程序易于理解和易于保证其正确性 吸取模块组合结构和进程分层结构优点 不断寻求一种抽象的概念和严格的表示法发展了以数据为中心的模块概念和操作系统的层次管程结构,5. 层次管程结构,系统按资源管理的观点分解成若干模块,用
8、数据表示抽象系统资源,同时分析了共享资源和专用资源在管理上的差别,按不同的管理方式定义模块的类型和结构,使同步操作相对集中,从而增加了模块的相对独立性,从功能和实现相结合的观点出发,从系统中提炼出管程、类程、一般模块和进程等几种基本成分,使一个复杂的系统可分解为由这几种基本成分构成的模型 在分解和提炼这些模块的基础上,将它们按照一定的准则编入各层,包括核心在内 核心是最内层,可看成是管理中央处理机的一个专门管程 最外层是反映系统并发度的若干管程、类程和一般模块 称操作系统的这种结构为层次管程结构 这种结构设计方法为PCM方法,层次管程结构的优点(1):结构清晰统一同步操作相对集中,增加系统安全
9、性用高级语言书写程序可以缩短系统的研制周期利用编译时检查取代硬件保护机构更加灵活降低了运行时检查的开销,层次管程结构的优点(2):由于只有进程是系统中并发执行单位因此可按照系统要求的并发度设置进程由于去掉了不必要的平行性从而减少了系统开销,层次管程结构的局限性(1)管程概念的一重要特征是保证模块内数据的完整性 为了保证每一管程所管理的数据的完整性可采用局部互斥技术,或缩小临界区但在解决任意管程嵌套调用问题时仅是局部互斥难于实现要根据具体情况,或采用全局互斥或采用限制嵌套类型与重数等策略导致使用范围受到限制,层次管程结构的局限性(2)资源管理局部化增加了模块的独立性和系统的安全性 但对全局性资源
10、或同时涉及多个资源的管理时不方便这也是引起管程嵌套调用的一个因素,管程:记录、协调各进程对临界资源使用要求供进程实现同步与互斥并完成对共享变量的修改类程:指一个专用(独占)的数据结构以及在此数据结构上定义的所有操作进程:执行单位实现系统中并发工作的基本成分,管程、类程与进程的比较,建立于进程、类程、管程基础上的系统结构模式是从各进程出发对类程和管程的一系列嵌套调用直到系统核心,6. 客户- 服务器结构(微内核)现代操作系统的一个趋势将传统操作系统大部分代码分离出来放在更高的层次上即从操作系统中去掉尽可能多的东西而只留一个最小的核心,通常的实现方法将多数操作系统功能由用户进程来实现核心:只处理客
11、户与服务器间的通信操作系统被分割成许多部分每一部分只处理一方面的功能如文件服务、进程服务、终端服务或存储器服务等,在微内核上建有应用运行环境的服务器Workspace OS称之为个性服务器Windows NT称之为保护子系统微内核操作系统可提供多种OS运行环境,微内核结构的设计目标:为构造其他操作系统提供基础 支持大而稀疏的空间 能透明地使用网络资源 在系统一级和应用一级均可拓展并行性 高度的可移植性,途径: 1、把传统意义上属于操作系统的代码由低层移向高层由核心移向用户要增加新功能仅需加结点 2、消息传送机制Client/Server,特点:每一部分变得很小,更易于管理所有服务器以用户进程的
12、形式运行而不是运行在核心态所以它们不直接访问硬件这样处理的结果:假如在文件服务器中发生错误文件服务器可能崩溃但不会导致整个系统的崩溃,客户/服务器模型另一个优点适用于分布式系统如果一个客户通过消息传递与服务器通信客户无需知道消息是在本机处理还是通过网络送给远程机器的服务器,优点:易于扩充,易于移植提高系统的可靠性提供多种操作环境适宜于分布计算模式有助于多处理器系统的实现支持实时任务,缺点:消息传递方式增加开销使响应变慢几个商品化系统: NextStep XINU,OSF/1 1.3, Workspace OS,Chorus/Mix V.4 Mac G3,Windows NT,QNX,CTOS,
13、应用程序,微内核操作系统,DOS服务器,UNI服务器,VMS服务器,OS/2服务器,基于微内核的开放式系统环境,系统程序接口 (SPI),应用程序接口 (API),客户 进程,客户 进程,进程 服务器,终端 服务器,文件 服务器,内存 服务器,。,核心,客户向服务器进程发送 消息,以获得服务,客户服务器模型,客户向服务器发送 消息,以获得服务,一个分布式系统中的客户服务器模型,机器1,客户,核心,机器2,文件服务器,核心,机器3,进程服务器,核心,机器4,终端服务器,核心,其他设计问题 1、接口设计用户界面设计程序设计接口 2、一些实现技术策略与机制的分离 静态结构与动态结构自顶向下的实现与自
14、底向上的实现隐藏硬件细节 间接处理,补充:Windows 2000/XP系统模型,融合了分层操作系统和微内核操作系统的设计思想,使用面向对象的分析与设计,采用整体式的实现 Windows 2000/XP通过硬件机制实现了核心态以及用户态两个特权级别 。对性能影响很大的操作系统组件运行在核心态。核心内没有保护。 设计充分体现了机制与策略分离的思想,Windows 2000/XP的核心态组件使用了面向对象设计原则 出于可移植性以及效率因素的考虑,大部分代码使用了基于C语言的对象实现。 Windows 2000/XP的很多系统服务运行在核心态,这使得Windows 2000/XP更加高效,而且也是相
15、当稳定的,1、Windows 2000/XP的构成,用户态组件 系统支持进程(system support process),不是Windows 2000/XP服务,不由服务控制器启动 服务进程(service process),Windows 2000/XP的服务 环境子系统(enviroment subsystems),它们向应用程序提供操作系统功能调用接口包括:Win32、POSIX和OS/2 1.2 应用程序(user applications),五种类型:Win32、Windows 3.1、MS-DOS、POSIX 或OS/2 1.2 子系统动态链接库:调用层转换和映射,核心态组件
16、核心(kernel)包含了最低级的操作系统功能,例如线程调度、中断和异常调度、多处理器同步等。同时它也提供了执行体(Executive)用来实现高级结构的一组例程和基本对象 执行体包含基本的操作系统服务,例如内存管理器、进程和线程管理、安全控制、I/O以及进程间的通信。 硬件抽象层(HAL, Hardware Abstraction Layer)将内核、设备驱动程序以及执行体同硬件分隔开来,实现硬件映射 设备驱动程序(Device Drivers)包括文件系统和硬件设备驱动程序等,其中硬件设备驱动程序将用户的I/O函数调用转换为对特定硬件设备的I/O请求 窗口和图形系统包含了实现图形用户界面(
17、GUI,Graphical User Interface)的基本函数,2、可移植性的获得,两种手段 分层的设计。依赖于处理器体系结构或平台的系统底层部分被隔离在单独的模块之中,系统的高层可以被屏蔽在千差万别的硬件平台之外。提供操作系统可移植性的两个关键组件是HAL和内核。依赖于体系结构的功能在内核中实现,在相同体系结构中,因计算机而异的功能在HAL中实现 Windows 2000/XP大量使用高级语言执行体、设备驱动程序等用C语言编写,图形用户界面用C+编写。只有那些必须和系统硬件直接通信的操作系统部分,或性能极度敏感的部分是用汇编语言编写的。汇编语言代码分布集中且少,3、对称多处理器支持,代
18、码对处理器的可伸缩性好 IPC和锁机制完善 核心态组件代码可重入程度极高 多优先级占式调度,多数核心态组件代码都可以被抢占 设计抽象度高,SMP硬件设置对绝大多数组件不可见、也无需关心,Windows 2000/XP的关键系统组件,内核,功能 线程安排和调度 陷阱处理和异常调度 中断处理和调度 多处理器同步 供执行体使用的基本内核对象 始终运行在核心态,代码精简,可移植性好。除了中断服务例程(ISR,interrupt service routine),正在运行的线程不能抢先内核,内核对象 帮助控制、处理并支持执行体对象的操作,以降低系统策略代价 控制对象,这个对象集和包括内核进程对象、异步过
19、程调用(APC,asynchronous procedure call)对象、延迟过程调用(DPC,deferred procedure call)对象和几个由I/O系统使用的对象,例如中断对象 调度程序对象集合负责同步操作并影响线程调度。调度程序对象包括内核线程、互斥体(Mutex)、事件(Event)、内核事件对、信号量(Semaphore)、定时器和可等待定时器,内核与硬件 使得执行体和设备驱动程序同硬件无关 实现手段:一组在多个体系结构上可移植、同语义的接口 内核也有部分代码不具有移植性 支持虚拟8086模式的代码,用以运行一些古老的16位DOS程序 高速缓存管理 描述表切换,硬件抽象
20、层(HAL),实际硬件与Windows 2000/XP抽象计算机描述的接口层和功能映射层 隐藏各种与硬件有关的细节,例如I/O接口、中断控制器以及多处理器通信机制等 实现多种硬件平台上的可移植性,执行体,提供的功能性调用 从用户态导出并且可以调用的函数。这些函数的接口在NTDLL.DLL中。通过Win32API或一些其他的环境子系统可以对它们进行访问。 从用户态导出并且可以调用的函数,但当前通过任何文档化的子系统函数都不能使用。 在Windows 2000 DDK中已经导出并且文档化的核心态调用的函数。 在核心态组件中调用但没有文档化的函数。例如在执行体内部使用的内部支持例程。 组件内部的函数
21、。,包含的功能实体 进程和线程管理器创建及中止进程和线程。对进程和线程的基本支持在Windows 2000内核中实现,而执行体给这些低级对象添加附加语义和功能。 虚拟内存管理器实现“虚拟内存”。内存管理器也为高速缓存管理器提供基本的支持。 安全引用监视器在本地计算机上执行安全策略。它保护了操作系统资源,执行运行时对象的保护和监视。 I/O系统执行独立于设备的输入/输出,并为进一步处理调用适当的设备驱动程序。 高速缓存管理器通过将最近引用的磁盘数据驻留在主内存中来提高文件I/O的性能,并且通过在把更新数据发送到磁盘之前将它们在内存中保持一个短的时间来延缓磁盘的写操作,这样就可以实现快速访问。,对
22、象管理:创建、管理以及删除Windows 2000/XP的执行体对象和用于代表操作系统资源的抽象数据类型,例如进程、线程和各种同步对象。 本地过程调用(LPC,Local Procedure Call)机制,在同一台计算机上的客户进程和服务进程之间传递信息。LPC是一个灵活的、经过优化的“远程过程调用”(RPC,Remote Procedure Call)版本。 一组广泛的公用运行时函数,例如字符串处理、算术运算、数据类型转换和完全结构处理。 执行体支持例程,例如系统内存分配(页交换区和非页交换区)、互锁内存访问和两种特殊类型的同步对象:资源和快速互斥体。,设备驱动程序,可加载的核心态模块 I
23、/O系统和相关硬件之间的接口 使用WDM以及加强的WDM方式 分类 硬件设备驱动程序操作硬件。 文件系统驱动程序接受面向文件的I/O请求,并把它们转化为对特殊设备的I/O请求。 过滤器驱动程序截取I/O并在传递I/O到下一层之前执行某些特定处理。,环境子系统,将基本的执行体系统服务的某些子集以特定的形态展示给应用程序,函数调用不能在不同子系统之间混用,因此每一个可执行的映像都受限于唯一的子系统 三种环境子系统:POSIX、OS/2和Win32(OS/2 只能用于x86系统) Win32子系统必须始终处于运行状态,其他两个子系统只是在需要时才被启动,Win32子系统是Windows 2000/X
24、P运行的基本条件之一,Win32子系统 Win32环境子系统进程CSRSS,包括对下列功能的支持:控制台(文本)窗口、创建及删除进程与线程、支持16位DOS虚拟机(VDM)进程的部分 核心态设备驱动程序(WIN32K.SYS) 图形设备接口(GDI,Graphics Device Interfaces) 子系统动态链接库,它调用NTOSKRNL.EXE和WIN32.SYS将文档化的Win32 API函数转化为适当的非文档化的核心系统服务 图形设备驱动程序,包括依赖于硬件的图形显示驱动程序、打印机驱动程序和视频小型端口驱动程序。 其他混杂的函数,如几种自然语言支持函数,POSIX子系统 设计的强
25、迫性目标 实现了POSIX.1,功能局限,用处不大 Windows XP实际上并不包含POSIX子系统 今后产品的POSIX/UNIX子系统将大大加强,NTDLL,主要用于子系统动态链接库的特殊系统支持库 功能 提供系统调用入口 为子系统、子系统动态链接库、及其他本机映像提供内部支持函数 NTDLL也包含许多支持函数,例如映像加载程序、堆管理器和Win32子系统进程通信函数以及通用运行库 用户态异步过程调用(APC)调度器和异常调度器,系统支持进程,Idle进程 系统进程 会话管理器SMSS Win32子系统CSRSS 登录进程WINLOGIN 本地安全身份验证服务器LSASS 服务控制器SERVICES及其相关的服务进程,复习题,1、在设计操作系统的时候要考虑哪些因素的影响,为什么? 2、一个优秀的操作系统设计应该具备什么样的特点,如何理解这些设计目标?你认为Windows 2000/XP、Linux等操作系统是否具备这些特点,请举例说明。 3、有哪些常见的操作系统的体系结构?Windows 2000/XP和Linux各自采用了什么样的体系结构? 4、请举例说明层次结构法的基本思想以及优缺点。 5、客户机/服务器的操作系统体系结构在分布式系统中使用非常广泛,你认为它能够用于单机环境么? 6、操作系统设计时讲求策略与机制的分离,请用你所熟悉的系统为例,说明这一点。,