不识庐山真面目――操作系统的组成

操作系统概念对新手来说就很容易混淆。拜现代的许多商业操作系统所赐,很少有用户能不费力气地明白说出什么是操作系统。很多人认为操作系统就是Windows,操作系统当然要包含字处理软件,操作系统怎么可以不处理图形? 说实话,正是由于这些广泛存在的误解,原本操作系统的定义的内涵已经越来越偏离大众的理解了――不识庐山真面目,只缘身在此山中。所以,我们在这里有必要对这个概念进行一番界定,才能展开我们自己的讨论――勿于浮沙建高塔。

如果您已经比较熟悉这些情况和渊源了,可以跳过这部分,选择其它您感兴趣的文章。

操作系统功能变得愈来愈强大,但结构也越来越复杂。在以方便用户 (包括开发人员和终端用户)为宗旨的思想下,操作系统不断加入新功能,新服务。回忆从前大家使用的DOS系统仅仅只需要一张软盘(拿DOS举例是因为比较切合国内用户的实际情况,其实Unix是比DOS年代久远的,但大家以前很少使用,大部分人都是从DOS开始计算机之旅的。当然Unix的最初版本也用不了几张软盘),而如今的windows系统或Linux系统动辄就需要数张光盘,麻雀已经变成了恐龙――虽然它们都有五脏六腑。

 

词汇辨析:操作系统

   操作系统一词现在已经有了很多不同的内涵。操作系统通常被认为是整个系统中负责完成基本功能和系统管理的部分。这些部分应该包括内核、设备驱动程序、启动引导程序、命令行shell或者其他种类的用户界面、基本的文件管理工具和系统工具。这些都是必不可少的东西。

    可是,由于大多数最终用户是通过商业途径得到操作系统,他们很少会仅仅购买一个只包含以上功能的软件包。一般的,他们在得到操作系统的同时,更需要的是构架于其上的应用软件,来完成所需的实际功能。为了满足这种需求,操作系统一般要和应用软件绑定发行和出售。这样的软件包在Linux领域被称作发行包,如RedHat8.0或 红旗Linux4.0等。

    由此就引起了一些误解,许多用户理所当然地认为发行包就是操作系统。但是,从逻辑结构划分,应用软件不应该属于操作系统。

    为了符合大多数人的习惯,在本杂志范围内,我们一般用操作系统这个词指代发行包,而用内核表示操作系统本来的逻辑概念。在不引起混淆的情况下,有时也会用操作系统表示内核。

 

虽然变成了恐龙,但筋骨脉络还是清楚的,现代操作系统的结构相对是稳定、清晰的。操作系统本质上也是大型软件包(从开发者的角度看),因此结构组织也不会与其它大型软件迥然而异:采取了分层结构,越向上层抽象程度越高,越接近用户;相反越向下层,越靠近硬件,抽象也相对接近硬件。而且上层软件依靠下层软件提供的服务,再加上本身提供附加服务为更高层服务。总体呈现倒金子塔形。

下面我们就简要分析一下操作系统的体系结构。

增繁就简――操作系统组成

形形色色的操作系统组成结构都不尽相同。虽然大多是为同样的目的,但由于实现方法可以自由选择,所以各个操作系统理所当然的存在差异,有些系统之间差异还相当大。

我们选取最常见的操作系统(UNIX)组成结构,向大家展示操作系统的体系结构的大致框架。对于各种操作系统之间的具体差异,大家可以跟下面讲述的结构进行对比认识。   

在这里,我们自己用一组简单的公式来描述操作系统的组成要素:

操作系统 = 内核 + 系统程序

系统程序 = 编译环境 API

编译环境 编译程序 连接程序 装载程序

API  = 系统调用 语言库函数(CC++、Java等等)

AUI  =  shell + 系统服务例程(如x服务器等)+ 应用程序(浏览器,字处理,编辑器等)

而整个软件系统是:

软件系统 = 操作系统 + AUI

操作系统底层的组件是内核,其上层搭建了许多系统软件。

系统程序包括三个部分,分别是:编译环境、应用程序接口和用户接口。

编译环境包含汇编、C 等低高级语言编译程序,连接程序和装载程序,这些程序负责将文本格式的程序语言转变为机器能识别和装载的机器代码。

应用程序接口(API)包含内核提供的系统调用接口和语言库,系统调用是为了能让应用程序使用内核服务,语言库函数则是为了方便应用程序开发,所以将一些常用的基础功能预先编译以供使用,比如对C语言来说常用的C等;

用户接口(AUI)包括我们熟悉的shell、系统服务程序和常用的应用程序。

这是一个典型的结构,但不是一成不变。许多操作系统的发行中会有所删减,比如应用于嵌入式设备的系统,对X服务器就可能不做要求。但是内核、系统调用等要素是必不可少的。

下图显示了操作系统的概念结构

 

 

 

 

 

 

 

 

 

 

 

 

 

系统软件:系统软件是相对应用软件而言的,应用软件针对最终用户需求编写,完成实际功能,而系统软件则是为了简化应用程序的开发而存在的,比如数据库系统为应用软件提供了有效的数据传输、存储服务;还有编程语言的执行环境――它由C库实现――也属于一种系统程序,它为应用程序开发提供了诸如I/O操作例程,图形库,计算库等等基础服务。可见系统软件范围覆盖很广,只要面向的服务群体不是最终用户的软件都可以划归到系统软件中来。