1.7 操作系统的设计规范和结构设计
1.操作系统的设计规范
一个高质量的操作系统应具有高效性、可靠性、易维护性、可移植性、安全性、可伸缩性和兼容性等特征。到目前为止,还没有一个统一的标准来衡量一个操作系统。从以下几个方面描述操作系统的设计规范:
(1)系统效率:是操作系统的一个重要性能指标。体现系统效率的指标在前面已经陈述过,它包括资源利用率、吞吐量和周转时间及响应时间等。
(2)系统可靠性:是指系统能发现、诊断和恢复硬件和软件故障的能力。通常用下面几个指标进行说明:
① 可靠性R(Reliability):通常用系统的平均无故障时间(Mean Time Between Failures,MTBF)来度量。它是指系统能正常工作的平均时间值。R越大,系统可靠性越高。
② 可维护性S(Seviceability):通常用平均故障修复时间(Mean Time to Repair Fault,MTRF)来度量。它是指从故障发生到故障修复所需的平均时间。S越小,可修复性越高。
③ 可用性A(Availability):是指系统运行的整个时间内,能正常工作的概率。它由下面的公式计算:
A=MTBF/(MTBF+MTRF)
(3)可移植性:是指把一个操作系统从一种硬件环境移植到另一种硬件环境时系统仍能正常工作的能力。移植时,代码修改量越少,效率越高。
(4)可伸缩性:是指操作系统对添加软硬件资源的适应能力,尤其是指可能添加到硬件中的CPU资源的能力,也即操作系统可运行在不同种类的计算机上,从单处理器到多处理机的系统上。
(5)兼容性:主要指软件的兼容性,是指操作系统执行为其他操作系统或为同一系统的早期版本所编写的软件的能力。
(6)安全性:是指操作系统应具有一定的安全保护措施,如账号检查、系统接入检测、各用户资源分配和资源保护、用户的资源不受他人侵犯等。
2.操作系统结构设计
操作系统是一个非常复杂的大型软件。为了使它的功能正确而又便于修改和维护,必须进行细心的工程设计。通常,首先应该划分成几个相对独立的任务,再将任务划分成许多小的模块。每一个模块都应该是一个很好定义的小系统。各个模块之间如何交互连接而构成一个性能良好的操作系统,这是下面要讨论的操作系统的结构设计问题。
(1)单块式的简单结构
许多商用操作系统并不在结构划分上下很大功夫,而是先构造一个小的、具有有限功能的简单的操作系统内核,之后根据需要再逐步添加。显然,这样的系统在使用过程中,会暴露出很多问题,最终无法使用。图1.8所示的DOS操作系统就是这样一个例子。
图1.8 MS-DOS分层结构
DOS操作系统表面看划分了层次,但实际是个单块结构,不提供硬件保护。因为系统中的任何一层程序都相互调用,特别是用户的应用程序能够直接访问硬件。因此,易导致DOS系统病毒泛滥,进而引起整个系统崩溃。
(2)层次式的结构设计
随着硬件功能的增强,操作系统可以划分成若干功能独立、更加合理的小模块,从而使操作系统能够获得对计算机的很好控制。通常按照应用的要求,采用自顶向下或者自底向上的方式进行分层设计。每一层都应该向上层提供独立于下层的软件接口,最终实现操作系统的功能。
UNIX操作系统就是采用分层设计的典范。另外,它将CPU的执行模式分为用户态和核心态,从而保护操作系统不受用户程序的破坏,使系统具有健壮性和安全性。图1.9给出了UNIX操作系统大致分层的情况。
图1.9 UNIX系统分层结构
由于它的绝大部分代码用C语言编写,它的可移植性较好。POSIX的操作系统标准就是依据UNIX操作系统标准制定的。
(3)基于微内核的client/server的设计
随着操作系统功能的不断扩充,系统内核越来越庞大,管理和维护越来越困难。卡内基梅隆大学于1980年开发了一个基于微内核(Micro_kernel)的操作系统MACH,该系统的特点是操作系统内核只保留最基本的功能,如只提供进程(线程)调度、消息传递、存储器管理和设备驱动等。而将其他功能,包括各种API、文件系统和网络等许多操作系统服务放在用户层以服务的形式实现。
client程序和server服务都在用户空间运行。微内核的主要功能就是提供client程序和server服务之间的以消息传递方式的通信设施。如果一个client程序希望访问文件时,它必须与文件服务器进行交互。这是通过向微内核发消息的形式间接交互实现两者的请求和服务功能的,如图1.10所示。
图1.10 client/server操作系统结构
微内核的好处是便于扩充操作系统的功能。这是因为新增加的功能放在用户空间,不需要修改操作系统内核。由于微内核是一个小内核,对操作系统的修改几乎没有什么影响。这样设计的最大好处是,使得操作系统很容易从一种硬件平台移植到另一种平台上。另外,微内核也更加安全和可靠。因为大多数服务是作为一个用户任务运行的,如果一个服务出现故障,操作系统的其他部分仍可以正常运行而不受影响。
Windows NT就采用分层和client/server的混合结构,而且采用了基于对象的微内核设计思想。详细描述见第3篇。
由于微内核将大量操作系统服务放在用户空间,消息传递增加了系统开销,使系统性能降低,所以这种设计方法到现在也没有被广泛采用。