1.5 OS结构设计
L05
学习目标
操作系统结构从无结构到模块化、分层式,再到客户/服务器模式和微内核,反映了 OS 设计理念的不断演进。
- 传统 OS 结构:无结构(整体式)设计混乱难维护;模块化结构将功能模块化但接口复杂;分层式结构自底向上有序,每层只调用下一层,但跨层调用多、效率低。
- 客户/服务器模式:将 OS 分为微内核和一组服务器进程,客户通过消息请求服务,适用于分布式系统。
- 面向对象程序设计:以对象、类、继承为基础,提高 OS 的可扩充性和可移植性。
- 微内核 OS 结构:只保留最基本功能(进程管理、存储器管理、通信)在内核,其他服务放用户态;优点是可扩充性、可靠性好,缺点是性能开销大(频繁的用户态/核心态切换)。
原理 · 深入理解
1.5 OS结构设计
早期操作系统规模小,仅几十 KB,一用户数月即可完成,是否有结构并不重要,重要的是程序员的技巧。
但随着 OS 越来越大,代码越来越多,往往要几十甚至几百用户分工合作,靠个用户技巧已经撑不住。于是必须用工程化的方法来开发大型软件,这就催生了「软件工程学」,操作系统的结构设计也成了真正的工程问题。
1.5.1 传统操作系统结构
无结构操作系统把注意力放在功能实现和高效率上,缺乏一致的设计思想。整个 OS 是大量过程的集合,每个过程可以任意调用别的过程,内部既复杂又混乱。
模块化结构 OS 按功能划分成若干个有一定独立性和大小的模块。比起无结构 OS,它有明显优点。
衡量模块独立性的标准是内聚性和耦合度:内聚越高、耦合越低,模块独立性越好。
模块内部各部分间联系的紧密程度。内聚性越高,模块独立性越强。
模块间相互联系和相互影响的程度。耦合度越低,模块独立性越好。
- 提高 OS 设计的正确性、可理解性和可维护性
- 增强 OS 的可适应性
- 加速 OS 的开发过程
模块化结构仍存在问题:接口规定很难提前定准;各模块齐头并进,缺乏可靠的决定顺序,因此又被称为「无序模块法」。
分层式结构在裸机 A0 和目标系统 An 之间铺设若干层软件 A1、A2、…、An-1,每层只调用下一层,自底向上有序构建。
分层结构的主要缺点如下:
- 易保证系统的正确性
- 易扩充和易维护
- 各层间通信开销大,功能不能跨层调用,效率受到影响。
1.5.2 客户/服务器模式简介 Client/Server Model
组成:客户机 · 服务器 · 网络
客户/服务器(Client/Server)把「谁要服务」和「谁提供服务」拆开。一套 C/S 系统通常由三部分组成。
多台联网工作站,各自有处理能力,向服务器提出服务请求。
规模较大的机器,驻留网络文件系统或数据库等,向网上用户提供一种或多种服务。
连接所有客户机与服务器,完成通信和网络资源共享。
客户与服务器的四步交互
一次典型交互是四步报文往来。用下方交互动画逐步播放,比死记条目更容易建立画面感。
- 客户发送请求消息
- 服务器接收消息并处理
- 服务器回送应答消息
- 客户机接收消息
客户/服务器模式的优点
相对集中式大型机或纯对等结构,C/S 模式常见优点如下:
- 数据的分布处理和存储
- 便于集中管理
- 灵活性和可扩充性
- 易于改编应用软件
1.5.3 面向对象的程序设计 Object- Orientated Programming
面向对象技术把计算机中的实体抽象成对象:每个对象由封装的数据结构(变量/属性)和一组操作过程(方法)组成。比如把一个文件当作对象,它的变量就是文件类型、大小、创建者等。
许多对象表示同一类事物,各有自己的变量,但方法相同。于是用「对象类」来定义一组相似的对象:类定义了一组变量和对应的方法,描述对象的共同属性和行为。类是对象上的抽象,对象是类的实例。
面向对象技术支持继承:根据已有的类定义新类,新类叫子类,原来的叫父类。父类可以派生多个子类,子类也可以有两个或多个父类——这就是多重继承,可以减少重复开发。
在操作系统设计中把实体当作对象来处理,有几个好处。
- 通过「重用」提高产品质量和生产率
- 更易于保证系统的正确性和可靠性
- 通过封装隐蔽对象中的变量和方法,使系统具有更好的易修改性和易扩展性
- 利用继承特性显著减少开发的时空开销
1.5.4 微内核OS结构
在微内核操作系统中,内核是指精心设计的、能实现现代OS最基本核心功能的小型内核,微内核并非是一个完整的OS,而只是将操作系统中最基本的部分放入微内核。 通常包含:① 与硬件处理紧密相关的部分;② 一些较基本的功能;③ 客户和服务器之间的通信。
单机微内核操作系统中几乎无一例外地都采用客户/服务器模式,将操作系统中最基本的部分放入内核中,而把操作系统的绝大部分功能都放在微内核外面的一组服务器(进程)中实现。
机制与策略分离
微内核设计常强调「机制与策略分离」:机制放进内核,策略放在外面的服务里。
实现某一功能的具体执行机构,相对稳定,放在微内核中。
在机制之上用参数和算法做优化或换目标,可随服务调整,不必改内核。
微内核的基本功能
微内核应装哪些功能尚无统一标准;常见做法是只保留与硬件紧密相关的机制,以及支撑消息传递的最小集合。点开下方动画,对照三项基本功能。
多数微内核按「机制与策略分离」只保留调度与切换等机制;策略(如优先级算法)可在外层。
微内核里通常只配最基本的地址映射 / 保护机制,完整虚存策略在外。
捕获中断与陷入并做前期处理;具体设备策略仍交给相应服务或驱动。
由于微内核OS结构是建立在模块化、层次化结构的基础上的,并采用了客户/服务器模式和面向对象的程序设计技术,因此,微内核结构的操作系统是集各种技术优点之大成,因而使之具有如下优点。
- 提高了系统的可扩展性
- 增强了系统的可靠性
- 可移植性强
- 提供了对分布式系统的支持
- 融入了面向对象技术
较之早期的操作系统,微内核操作系统的运行效率有所降低。
效率降低的最主要原因:在完成一次客户对操作系统提出的服务请求时,需要利用消息实现多次交互和进行用户/内核模式与上下文的多次切换: 一次在执行系统调用后由用户态转向系统态时; 另一次在系统完成用户请求的服务后,由系统态返回用户态时。
做 · 交互动画
- 根据「学习目标」列出 3 个关键词,对照原理段落解释给自己听。
客户/服务器报文交互(1.5.2)
os-structure-liteos
ppt-microkernel
用控件单步操作;日志区记下每一步发生了什么。
总结与提升
- 能说明为何 HDF 放在应用开发之前。
- 能用自己的话复述学习目标,并指出概念与板上实验的对应。
延伸思考
- 微内核把驱动放用户态,对本课有何启示?
- 如果把本节机制拿到 Linux 或完整 OpenHarmony 上,会多出哪些硬件假设?