zhouqijie

操作系统的设计实现方法



1. 操作系统设计开发概述

操作系统作为一种硬件之上的最重要大型软件系统,其设计、实现技术一方面体现了最新的软件工程思想。另外一方面对开发其他软件系统有着非常重要的意义。

操作系统的设计与开发特点:

操作系统是计算机系统中最底层软件,它与硬件直接打交道。
在开发操作系统时,要结合所采用的硬件体系结构、兼容相关指令集。
同时要兼顾硬件技术的发展方向,做到前瞻性、开放性、可扩展性。

操作系统作为一种特殊的软件,它要提供多种基本的服务和功能调用,支持多个程序的并发执行,具有很强的动态性和随机性,涉及的控制流和数据流错综复杂。

一个完整的操作系统通常有几十万行到几百万行代码。它是一个大型的软件,从开始设计、研制、开发、测试到使用、维护需要很多年。

操作系统设计原则:

系统可靠性是指系统发现、诊断、恢复硬件或者软件故障的能力,也包括对用户误操作的容错能力。

由于操作系统的并发性、共享性等特点,所以要做到可靠性是很困难的。可以采取以下措施:

  1. 在系统设计时尽可能避免可能的软硬件故障。
  2. 在系统运行过程中,一旦出错应能及时检测,减少损失。
  3. 系统一旦出错,要能迅速找到原因,确定其发生的位置,尽快地排除错误。
  4. 尽快对因错误造成的损失进行修复。

用户用过操作系统提供的接口使用计算机,更有效、更方便。
随着计算机的普及,系统的人性化设计越来越受重视,它涉及计算机系统的简单性、可操作性、可携带性。

操作系统应使系统资源尽可能高效地得到应用。一方面要能充分发挥现有资源的最大效能、另一方面能及时迅速地响应和处理尽量多个各项用户要求。

系统安装后,在使用过程中需要进行一定的维护工作来不断满足用户需求。系统维护包括改正性维护、适应性维护、完善性维护等。

操作系统的功能应该不断地被加强、改进。在引进新的系统组件时不应干扰现有的服务能力,从而能够适应不断发展的应用需求。

要求操作系统具有开放性,是为了能集成不同厂家生成的计算机设备和各种应用软件,并且能正确有效地协同工作,支持应用程序的可移植性和互操作性。
无论技术上如何先进的操作系统,只有具备了丰富的可用资源后才具有生命力,才能生存和发展。



2. 操作系统的体系结构

操作系统是一种大型的、复杂的并发系统。为了研制操作系统必须研究它的结构。

操作系统的结构设计主要体现在两个方面,一是财政厅的构造过程和方法;二是操作系统中的数据结构和控制结构。

无结构操作系统:

在操作系统的早期开发阶段,设计者只把注意力放在功能实现和获得高效率上,缺乏系统的设计思想。那时的操作系统就是多个过程的集合,各个过程之间可以互相调用,对GOTO语句不加任何限制,所设计的操作系统庞大复杂,内部不存在任何结构,是一个整体。

这个时期的操作系统代码难以阅读和理解,调试、维护困难。

模块化结构:

模块化程序设计技术,是60年代出现的一种技术,该技术是基于“分解”和“模块化”原则来控制大型软件的复杂度的。

采用模块化结构的操作系统被分解成一系列标准的、可兼容的基本单位-模块。各模块在功能上相对独立,互相之间通过规定的接口进行调用。

优点是可以将系统功能切分成多个不同模块,可以多人并行合作,在很短时间内完成系统设计。
缺点是由于操作系统功能强大、模块较多导致的模块之间交叉引用很多,形成了复杂的调用关系,降低了清晰性、可靠性、可修改性。

分层结构:

将操作系统分成若干层,每一层均有自己的相对独立的任务和功能,由相应的基本模块构成,各层之间只能单向依赖,在下层结构的支撑下上层功能模块才能发挥作用,即上层基于下层,不能构成循环。

这样,各层之间相对稳定、上下层之间只关心接口而无需了解彼此的内部实现。

自底逐步抽象到相应功能的方法。

以宿主裸机C0为基础,对它的各项功能做第一次扩充,得到更强大的虚拟机C1,然后再以C1为基础进行第二次扩充得到虚拟机C2,以此反复最后扩充到目标虚拟机Cn,这样就形成了上层依赖下层的反向依赖关系。

自上逐步具体到物理硬件的方法。

从目标功能系统Cn出发,逐步具体化到宿主裸机C0。为了实现Cn,要设计一个适当的虚拟机Cn-1,但是Cn-1还无法独立运行,还需要设计对其支撑的Cn-2。如此反复直到所需要的支撑系统是C0。

在实际设计操作系统时,往往配合使用“自上而下”和“自下而上”这两种方法,逐步获得一个正确的分层,得到一个结构清晰和高效的操作系统。

由于分层结构中是高层对低层单向依赖,在较低层次设计中实现可靠的服务和通信成为了该方法的关键所在。

C/S结构:

客户/服务结构的主要思想是将操作系统中运行的实体按照所处的地位不同,分成客户和服务两个部分。客户(client)指的是请求服务的进程。服务(server)是指提供某种服务的进程。

这样,操作系统提供基本功能的部分就对应若干相对独立的进程,每一个进程实现一类服务,成为服务进程。服务进程的任务是检查是否有客户提出服务请求,如果有请求则在满足客户要求后返回结果。

卡内基梅隆大学研制的Mach操作系统较早地采用了C/S结构。在该结构的操作系统中,客户进程和服务进程并不是直接通信的,而是通过被称为微内核的实体作为中间件进行协调的。微内核是计算机操作系统的最核心代码,其代码少而精、运行效率高、与硬件紧密联系。当有进程请求服务时,会首先向微内核发出信息,微内核再发信息给相应的服务进程,服务进程执行相应操作,再通过内核用另一种消息返回结果给用户。

这种结构的优点是某个服务进程的崩溃不会导致整个系统崩溃。另一个优点是更适用于网络系统和分布式系统。

虚拟机结构:

将物理计算机资源通过多重化和共享技术可以改变成多个虚拟机,使相同硬件系统的计算机由于软件不同而具有不同的性能。虚拟机结构常采用层次化结构的设计方法来实现

虚拟机结构的基本做法是:通过一层用一类底层物理设备来模拟上层另一类物理设备。或者通过分时使用一类物理设备,把一个物理实体变成若干个逻辑上的对应物,物理实体是实际存在的,而逻辑上的对应物是虚幻的。这样,虚拟机结构在裸机的基础上扩展了一层软件,想上提供了若干台虚拟机。它包含核心/用户态、I/O功能、中断,以及真实硬件的全部内容。虽然虚拟机是裸机的精确复制,但实际上它是一个比裸机更加方便灵活的计算机。最早采用虚拟机结构的操作系统是1979年的IBM370。

虚拟机结构一方面在一定程度上保护硬件资源,另一方面也为用户提供了独立的的环境,使得研究和开发特定功能的操作系统不再那么繁琐,只需要在原有虚拟机内部做部分改变。
但是虚拟机结构使得功能的运行相对独立于物理硬件,增加了若干中间层,其运行速度变慢。

面向对象的结构:

面向对象(OO)技术是80年代提出的并很快得到广泛应用,操作系统也不例外。该技术是基于“抽象”和“隐蔽”原则来控制大型软件的复杂度的。

面向对象的操作系统中的对象是指操作系统管理的信息和资源的抽象,可以被视为受保护的信息或资源的总称。操作系统中的各类实体例如进程、线程、消息、存储器等,都是用哦了对象这一概念,相应地,便有进程对象、线程对象、存储器对象和文件对象等。

面向对象操作系统首先是为了保护共有资源而开发的,实现时将数据和对数据的操作封装在对象中,属性、方法提供给用户和操作系统,使用户不能直接操作数据,具有数据隐藏的特点,易于保持数据的完整性和一致性,从而实现对不同对象的数据保护。根据面向对象操作系统所提供保护的范围,可以简单分为三类:数据受保护,数据和过程受保护,数据和过程和处理器受保护。

面向对象的操作系统对计算机的各种资源的控制和使用很方便地做到了一致性,如果硬件发生变化,只需要修改对应的对象模型就可以。通过对对象句柄的访问,也可以轻易实现进程间共享资源。

(END)