CH9 操作系统结构
9.1 操作系统设计目标
1、正确性
2、高效性
3、可扩充性
4,可移植性
5,可靠性
6、可伸缩性
7,分布计算
8,认证的安全性
9,POSIX承诺
9.2 操作系统的构件
9.2.1内核操作系统的内核是对硬件处理器及有关资源进行首次改造,以便给进程的执行提供良好的环境的哪部分软件 。
内核提供以下三方面功能:
(1) 中断处理 当中断事件产生时,先由内核的中断处理例行程序接受并进行原则处理 。 它分析中断事件的类型和性质,进行必要的状态修改,然后交给进程或模块去处理 。 例如,产生外围设备结束中断事件时,内核首先分析是否正常结束,如果是正常结束,那么,就应释放等待该外围传输的进程 。 又如当操作员请求从控制台输入命令时,内核将把这一任务转交给命令管理进程或模块去处理 。
(2) 短程调度 主要职能是分配处理器 。 当发生了一个事件之后,可能一个进程要让出处理器,
而另一个进程又要获得处理器 。 短程调度按照一定策略管理处理器的转让,以及完成保护和恢复现场的工作 。
(3) 原语管理 原语是内核中一个完整的过程 。 为了协调进程并发工作和共享资源,同步原语是必不可少的,此外还有其它原语,如启动外围设备工作的启动原语,若启动不成功则请求启动者应等待,显然,这个启动过程应该是完整的,
否则在成为等待状态时,可能外围设备已经空闲 。
内核的执行有以下属性:
(1) 内核是由中断驱动的 。 只有当发生中断事件后由硬件交换 PSW才引出操作系统的内核进程中断处理,且在处理完中断事件后内核自行退出 。 如图所示 。
(2) 内核的执行是连续的,在内核运行期间不能插入内核以外的程序执行,因而,能保证在一个连续的时间间隔内完成任务 。
(3) 内核在屏蔽中断状态下执行,在处理某个中断时,
为避免中断的嵌套可能引起的错误,必须屏蔽该级中断 。
有时为处理简单,把其它一些中断也暂时屏蔽了 。
(4) 内核可以使用特权指令,现代计算机都提供常态和特态等多种机器工作状态,有一类指令称特权指令,只允许在特态下使用,例如,输入输出,状态修改,存储管理等 。 规定这类指令只允许内核使用,可防止系统出现混乱 。
内核和裸机组成了一台虚拟机,具有以下特性:
(1) 虚拟机没有中断,因而进程或模块的设计者不再需要有硬件中断的概念,进程或模块执行中无需处理中断 。
(2) 虚拟机为每个进程提供了一台虚拟处理器,
每个进程就好象在各自的私有处理器上顺序地进行,实现了多个进程的并发执行 。
(3) 虚拟机为进程或模块提供了功能较强的指令系统,即它们能够使用机器非特权指令,广义指令和原语所组成的新的指令系统 。
9.2.2进程
进程是并发程序设计的一个工具,并发程序设计支撑了多道程序设计,由于进程能确切,动态地刻划计算机系统内部的并发性,更好地解决系统资源的共享性 。
采用进程概念使得操作系统结构变得清晰,主要表现在:一是一个进程到另一个进程的控制转移由进程调度机构统一管理,不能杂乱无章,
随意进行;二是进程之间的信号发送,消息传递和同步互斥由通信及同步机制完成,从而进程无法有意或无意破坏它进程的数据 。 因此,
每个进程相对独立,相互隔离,提高了系统的安全性和可靠性;三是进程结构较好刻画了系统的并发性,动态地描述出系统的执行过程,
因而,具有进程结构的操作系统,结构清晰,
整齐划一,可维护性好 。
9.2.3线程
在一个多线程环境中,进程是系统进行保护和资源分配的单位,而线程则是进程中一条执行路径,每个进程中允许有多个并行执行的路径,而线程才是系统进行调度的单位 。
在一个进程中包含有多个可并发执行的控制流,而不是把多个控制流一一分散在多个进程中,这是并发多线程程序设计与并发多进程程序设计的主要不同之处 。
9.2.4 管程
9.2.5 类程
9.3 操作系统结构概述
9.3.1 整体式结构
整个操作系统是一堆过程的集合,每个过程都可以调用任意其他过程 。 使用这种技术时,系统中的每一过程都有一个定义完好的接口,即它的入口参数和返回值,而且相互间的调用不受约束 。
(1) 一个用来调用被请求服务例程的主程序 。
(2)一套执行系统调用的服务例程 。
(3)一套支持服务例程的实用过程 。
这种组织方式提出了操作系统的一种基本结构:
模块接口结构缺点。
没有一个清晰的结构
系统正确性难以保证
系统维护不便利
9.3.2 层次式结构
层次结构可以有全序和半序之分 。 如果各层之间是单向依赖的,并且每层中的诸模块 ( 或进程 ) 之间也保持独立,没有联系,则这种层次结构被称为是全序的,如图 9-5( a) 所示 。 如果各层之间是单向依赖的,但在某些层内允许有相互调用或通信的关系,则这种层次结构为半序的,如图 9-6( b) 的第二层所示 。
层次结构是如此构造起来的,从裸机 A0开始,
在它上面添加一层软件,使机器的功能得以扩充,形成了一台功能比原来机器要强的虚拟机
A1。 又从 A1出发,在它上面添加一层新的软件,
把 A1改造成功能更强的虚拟机 A2。 就这样,添加 —— 扩充 —— 再添加,,由底向上地增设软件层,每一层都在原来虚拟机的基础上扩充了原有的功能,于是最后实现一台具有所需操作系统各项功能的虚拟机 。
分层的原则
(1) 应该把与机器硬件有关的程序模块放在最底层,以便起到把其它层与硬件隔离开的作用 。 在操作系统中,中断处理,
设备启动,时钟等反映了机器的特征,
因此都应该放在离硬件尽可能近的这层之中,这样安排也有利于操作系统的移植,因为只需把这层的内容按新机器硬件的特性加以改变后,其它层内容都可以基本不动 。
(2) 对于用户来讲,可能需要不同的操作方式,譬如可以选取批处理方式,
联机作业控制方式,或实时控制方式 。
为了能使一个操作系统从一种操作方式改变或扩充到另一种操作方式,在分层时就应把反映系统外特性的软件放在最外层,这样改变或扩充时,只涉及到对外层的修改 。
(3) 应该尽量按照实现操作系统命令时模块间的调用次序或按进程间单向发送信息的顺序来分层 。 这样,最上层接受来自用户的操作系统命令,随之根据功能需要逐层往下调用 ( 或传递消息 ),自然而有序 。
譬如,文件管理时要调用到设备管理,因此文件管理诸模块 ( 或进程 ) 应该放在设备管理诸模块 ( 或进程 ) 的外层;作业调度程序控制用户程序执行时,要调用文件管理中的功能,因此作业调度模块 ( 或进程 ) 应该放在文件管理模块 ( 或进程 ) 的外层 。
(4) 为进程的正常运行创造环境和提供条件的内核 ( CPU调度,进程控制和通信机构等 ) 应该尽可能放在底层,以保证它们运行时的高效率 。
THE操作系统的结构
第一层进行内存管理,
第二层软件处理进程与操作员控制台之间的通信
第三层软件管理 I/O设备和相关的信息流缓冲
第四层是用户程序层,用户程序在此不必考虑进程,内容,控制台和 I/O设备等环节 。
系统操作员进程位于第五层 。
对层次结构的分析
层次结构的最大优点是把整体问题局部化 。 由于把复杂的操作系统依照一定的原则分解成若干单向依赖的层次,因此整个系统中的接口量相比前两种结构要少且简单,整个系统的正确必可通过各层的正确性来保证,从而使系统的正确性大大提高 。
层次结构展现在人们面前显得井井有序,清晰明朗 。 这种结构有利于系统的维护和扩充,也便于移植 。 然而,层次结构是分层单向依赖的,
因此系统花费在通信上的开销较大,且效率不高 。
9.6 虚拟机系统
VM/370 ( Seawright and MacKinnon,
1979) 。 它基于如下的思想:一个分时系统应该提供以下特性,(1) 多道程序,
(2) 一个具有比裸机更方便,界面扩展的计算机 。 VM/370的主旨在于将此二者彻底地隔离开来 。
该系统的核心称作虚拟机监控程序,它在裸机上运行并具备多道程序功能 。 它向上层提供了若干台虚拟机,如图 9-7
所示 。 与其他操作系统不同的是:这些虚拟机不是那种具有文件等良好特征的扩展计算机,而仅仅是裸机硬件的精确复制 。 它包含有:核心态 /用户态,I/O
功能,中断,以及真实硬件具有的全部内容 。
CMS上的程序执行一条系统调用时,该系统调用陷入其自己的虚拟机的操作系统,
而不是 VM/370,这就像在真正的计算机上一样 。 CMS然后发出正常的硬件 I/O指令来执行该系统调用 。 这些 I/O指令被 VM/370
捕获,随后 VM/370执行这些指令,作为对真实硬件模拟的一部分 。 通过将多道程序功能和提供虚拟机分开,它们各自都更简单,更灵活和易于维护 。
9.7客户 /服务器结构(微内核结构)
微内核结构概述微内核基本思想是:内核中仅存放那些最基本的核心操作系统功能 。 其它服务和应用则建立在微内核之外,在用户模式下运行 。
尽管那些功能应该放在内核内实现,那些服务应该放在内核外实现,在不同的操作系统设计中未必一样,但事实上过去在操作系统内和中的许多服务,现在已经成为了与内核交互或相互之间交互的外部子系统,这些服务主要包括:
设备驱动程序,文件系统,虚存管理器,窗口系统和安全服务 。
分层结构操作系统的内核很大,互相之间调用关系复杂 。
微内核结构则把大量的操作系统功能放到内核外实现,这些外部的操作系统构件是作为服务过程来实现的,它们之间的信息相互均借助微内核提供的消息传送机制实现 。 这样,微内核起消息交换功能,它验证消息,在构件之间传送消息,并授权存取硬件 。
例如,当一个应用程序要打开一个文件,它就传送一个消息给文件系统服务器;当它希望建立一个进程或线程,就送一个消息给进程服务器;每个服务器都可以传送消息给另外的服务器,或者调用在内核中的原语功能 。 这是一种可以运行在单计算机中的 C/S结构 。
举例来说,为了获取某项服务,比如读文件中的一块,用户进程 ( 现称客户进程,client process) 将此请求发送给文件服务器进程 ( server process),服务器进程随后完成此操作并将回答信息送回 。
微内核结构的优点主要有:
一致性接口:微内核结构对进程的请求提供了一致性接口 ( uniform interface),进程不必区别内核级服务或用户级服务,因为所有这些服务均借助消息传送机制提供 。
可扩充性:任何操作系统都要增加目前设计中没有的特性,如开发的新硬件设备和新软件技术 。 微内核结构具有可扩充性,它允许增加新服务:以及在相同功能范围中提供多种可选服务,例如,对磁盘上的多种文件组织方法,每一种可以作为一个用户级进程来实现,而并不是在内核中实现多种文件服务 。 因而,用户可以从多种文件服务中选出一种最适合其需要的服务 。 每次修改时,新的或修改过的服务的影响被限制在系统的子集内 。 修改并不需要建立一个新的内核 。
适用性:与可扩充性相关的是适用性,采用微内核技术时,不仅可以把新特性加入操作系统,而且可以把已有的特性能被抽象成一个较小的,更有效的实现 。 微内核操作系统并不是一个小的系统,事实上这种结构允许它扩充广泛的特性 。 并不是每一种特性都是需要的,如高安全性保障或分布式计算 。 如果实质的功能可以被任选,
基本产品将能适合于广泛的用户 。
可移植性:随着各种各样的硬件平台的出现,可移植性称为操作系统的一个有吸引力的特性 。 在微内核结构中,所有与特定
CPU有关的代码均在内核中,因而把系统移植到一个新 CPU上所作修改较小 。
可靠性:对大型软件产品,较困难的是确保它的可靠性,虽然模块化设计对可靠性有益,但从微内核结构中可以得到更多的好处 。 销的微内核化代码容易进行测试,小的 API接口的使用提高了给内核之外的操作系统服务生成高质量代码的机会 。
支持分布式系统:微内核提供了对分布式系统的支撑,包括通过分布操作提供的 cluster控制 。
当消息从一个客户机发送给服务器进程时,消息必须包含一个请求服务的标识,如果配置了一个分布式系统 ( 即一个 cluster),所有进程和服务均有唯一标识,并且在微内核级存在一个单一的系统映象 。 进程可以传送一个消息,
而不必知道目标服务进程驻留在那台机器上 。
支持面向对象的操作系统 ( OOOS),微内核结构能在一个 OOOS环境中工作得很好,OO方法能为设计微内核以及模块化的扩充操作系统提供指导 。 许多微内核设计时采用了 OO技术,其中,有一种方法是使用构件 。 另外一些系统,如 NT操作系统,并不完全依赖于面向对象的技术,但在微内核设计时结合 OO原理 。
微内核的性能
9.7.5微内核的设计
9.7.5.1 基本的存储管理
9.7.5.2 进程间通信
9.7.5.3 I/O和中断管理