操作系统的结构设计

任何事物都有其内部的结构。结构是构成一个事物内部的各种基本成份以及这些基本成份之间的关系。 软件同样有内部结构。为了设计和掌握一个复杂的大型软件系统,设计者总是要将它分解成若千个小的相对独立的成份。这样,对每一个成份就比较容易掌握,而且这种分解往往使得各个成份之间的联系较为简单。 软件结构研究的对象主要是组成软件的各部分划分的原则以及它们之间的关系(即通信),简言之,就是软件的构成法则和组合方法。对软件结构的探讨是从 Dijkstra提出的结构化程序设计思想开始的,经过了若干年的研究及实践已经取得了很大进展。

操作系统结构设计的重要性

如何把一个大型软件划分成若干较小的模块,以及这些模块之间怎样接口。操作系统是一个具有并发特性的大型程序,模块间的接口是相当复杂的,信息交换也是十分频繁的、因而对结构的研究就显得更加重要了。而任何一个软件开发出来投入运行之后,就进入了系统维护阶段。只有易读、易懂,维护人员才能真正了解操作系统的结构和工作原理,从而做好系统维护工作。 所谓操作系统的结构,是指操作系统各部分程序的存在方式及相互关系。若操作系统的各部分程序以程序模块方式存在,相互之间通过调用建立起关系,那么这种操作系统具有模块接口结构。若各部分程序以进程的方式存在,相互之间通过通信建立起关系,那么这种操作系统具有进程结构。若操作系统能按照诸模块的调用顺序或主进程的信息发送顺序把模块进程分层,各层之间只能单向依赖,这样就分别产生了模块层次结构的操作系统或进程层次结构的操作系统。 在早期的操作系统设计中,由于计算机结构比较简单,系统规模也较小,逻辑关系较简单,设计者往往只注重功能设计和效率,而忽视了结构的设计。但随着计算机化,应用范围的不断扩大,使用要求的不断提高,人们不仅要求系统有较强的功能,而且要求系统有较强的可适应性和可靠性。比如,在容错的概念出现之后,人们希望设计一种在部分硬、软件失效的情况下仍能正常工作的系统,从事这种容错操作系统的设计,更加需要对操作系统的结构有深入的研究和认识。 可见,无论设计哪一种操作系统,都需要对操作系统的结构和结构设计方法进行研究。 近年来,对操作系统的结构和结构设计方法的研究,已成为软件领域的一个重要研究方面。

操作系统结构研究的目标

可以用下面三条来概括操作系统结构研究的目标

  1. 系统模块化
  2. 模块标准化
  3. 通信规范化

之前已经介绍过,对一个大系统来说,为了分解其复杂性,总是把它分解为相对独立的成份,这样对每一个小的成份就比较容易掌握(必要时再分解),而且要使每个成份之间的联系尽量简单,这些成份就是构成系统的“模块”。 究竟什么是模块呢?非形式化、直觉的认识就是具有一定功能的程序块,这个定义并不严格。把程序分解成模块是很自然的想法,一个模块中可以包含一个或多个程序段落,但是什么算一个模块,怎样分解系统为模块,定义并没有进一步的说明。 随着研究的深入,模块的概念也进一步严格化,新的理解将模块看作一组数据结构以及定义在这组数据结构上的一组操作。对模块的访问只能通过这些操作来完成,这称之为信息隐蔽。如果模块具有并发的特性,那么这些操作将要互斥地执行。 具体来讲模块内的操作的对象就是模块内的数据结构,如同加减乘除一样,它们操作的对象不同,含义也不尽相同。从结构化方法的角度看,操作就是对一组数据进行加工,成为一组输出数据,所以一般来讲操作只有一个入口和一个出口。例如一个管理缓冲的模块,有两个操作:送操作和取操作。 目前的计算机语言大都是模块化的,它们反映了程序和数据的局部化,强调了功能对实现的抽象,模块的调用者只需要知道模块的功能,而不需要知道模块的实现细节。 模块标准化指两方面的内容:一是标准设计,作到模块规格划一,遵循相同的模块构造准则符合一定的模块(构件)标准;二是需要总结、提炼操作系统的基本成份,然后把这些基本成份定型化、模块化,即把反应操作系统本质的一些程序成份固定下来变成“标准件”“构件”或者说构建操作系统的“积木”。 通信规范化主要是指模块之间的接口应该清晰划一,模块的联系方式要统一,这是标准化的一种方式。例如,对于模块间的顺序关系,通信的方法一般使用直接调用;而对于并行的模块之间,通信通常使用原语。而通信的规范化表明系统各个并行的模块之间的通信联系只通过数目有限的原语来实现。