👋欢迎来到黄铜扳手图书馆

操作系统(一):操作系统概论

操作系统概述、发展历程与基本结构

操作系统引论

  操作系统(Operating System,OS) 是配置在计算机硬件上的第一层软件,是对硬件系统的首次扩充,其主要作用是管理好这些设备,提高它们的利用率和系统的吞吐量,并为用户和应用程序提供一个简单的接口,便于用户使用。OS是现代计算机系统中最基本和最重要的系统软件,而其他的诸如编译程序、数据库管理系统等系统软件,以及大量的应用软件,都直接依赖于操作系统的支持,取得它所提供的服务。事实上OS已经成为现代计算机系统、多处理机系统、计算机网络中都必须配置的系统软件。

操作系统的目标和作用

  操作系统的目标与应用环境有关。例如在查询系统中所用的OS,希望能提供良好的人机交互性;对于工业控制、武器控制以及多媒体环境下的OS,要求其具有实时性。而对于微机上配置的OS,则更看重的是其使用的方便性。

操作系统的目标

  在计算机系统上配置操作系统,其主要目标是:方便性、有效性、可扩充性和开放性。

方便性

  一个未配置OS的计算机系统是极难使用的。用户如果想直接在计算机硬件(裸机)上运行自己的程序,就必须用机器语言书写;但是如果配置了OS,系统就可以使用编译命令将用户采用高级语言书写的程序翻译成机器代码,或直接通过OS所提供的各种命令操纵计算机系统,极大地方便了用户,使计算机变得易学易用。

有效性

  有效性所包含的第一层含义是提高系统资源的利用率。在早期未配置OS的计算机系统中,诸如处理机、I/O设备等都经常处于空闲状态,各种资源无法得到充分利用,所以在当时,提高系统资源利用率是推动OS发展最主要的动力。有效性的另一层含义是提高系统的吞吐量。OS可以通过合理地组织计算机的工作流程,加速程序的运行,缩短程序的运行周期,从而提高了系统的吞吐量。
  方便性和有效性是设计OS时最重要的两个目标。在过去很长的一段时间内,由于计算机系统非常昂贵,有效性显得特别重要。然而,近十多年来,随着硬件越来越便宜,在设计配置在微机上的OS时,似乎更加重视如何提高用户使用计算机的方便性。因此,在微机操作系统中都配置了深受用户欢迎的图形用户界面,以及为程序员提供了大量的系统调用,方便了用户对计算机的使用和编程。

可扩充性

  为适应计算机硬件、体系结构以及计算机应用发展的要求,OS必须具有很好的可扩充性。可扩充性的好坏与OS的结构有精密的联系,由此推动了OS结构的不断发展。从早期的无结构发展成模块化结构,进而又发展成层次化结构,近年来OS已广泛采用了微内核结构。微内核结构能方便地增添新的功能和模块,以及对原有的功能和模块进行修改,具有良好的可扩充性。

开放性

  随着计算机应用的日益普及,计算机硬件和软件的兼容性问题便提到了议事日程上来。世界各国相应地制定了一系列的软、硬件标准,使得不同厂家按照标准生产的软、硬件都能在本国范围内很好地相互兼容。这无疑给用户带来了极大的方便,也给产品的推广、应用铺平了道路。近年来,随着Internet的迅速发展,使得计算机OS的应用环境由单机环境转向了网络环境,其应用环境就必须更为开放,进而对OS的开放性提出了更高的要求。
  所谓开放性,是指系统能遵循世界标准规范,特别是遵循开放系统互连OSI国际标准。事实上,凡遵循国际标准所开发的硬件和软件,都能彼此兼容,方便地实现互连。开放性已称为20世纪90年代以后计算机技术的一个核心问题,也是衡量一个新推出的系统或软件能否被广泛应用的至关重要的因素。

操作系统的作用

  操作系统在计算机系统中所起的作用,可以从用户、资源管理及资源抽象等多个不同的角度来进行分析和讨论。

OS作为用户与计算机硬件系统之间的接口

  OS作为用户与计算机硬件系统之间的接口的含义是:OS处于用户与计算机硬件系统之间,用户通过OS来使用计算机系统。或者说,用户在OS帮助下能够方便、快捷、可靠地操纵计算机硬件和运行自己的程序。图1是OS作为接口的示意图。由图可看出,用户可通过三种方式使用计算机,即通过命令方式、系统调用方式和图标—窗口方式来实现与操作系统的通信,并取得它的服务。

用户 应用程序 命令 系统调用 图标—窗口 操作系统 计算机硬件

图1 OS作为接口的示意图

OS作为计算机系统资源的管理者

  在一个计算机系统中,通常都含有多种硬件和软件资源。归纳起来可将这些资源分为四类:处理机、存储器、I/O设备以及文件(数据和程序)。相应地,OS的主要功能也正是对这四类资源进行有效的管理。处理机管理适用于分配和控制处理机;存储器管理主要负责内存的分配与回收;I/O设备管理是负责I/O设备的分配(回收)与操纵;文件管理适用于实现对文件的存取、共享和保护。可见,OS的确是计算机系统资源的管理者。
  当一台计算机系统供多个用户使用时,诸多用户对系统中共享资源的需求(包括数量和时间)有可能发生冲突。为此,操作系统必须对使用资源的请求进行授权,以协调诸用户对共享资源的使用。

OS实现了对计算机资源的抽象

  对一台完全无软件的计算机系统(即裸机),由于它向用户提供的仅是硬件接口(物理接口),因此,用户必须对物理接口的实现细节有充分的了解,这就致使该物理机器难于广泛使用。为了方便用户使用I/O设备,人们在裸机上覆盖上一层I/O设备管理软件,如图2所示,由它来实现对I/O设备操作的细节,并向上将I/O设备抽象为一组数据结构以及一组I/O操作命令,如read或write命令,这样用户即可利用这些数据结构及操作命令来进行数据输入或输出,而无需关心I/O是如何具体实现的。此时用户所看到的机器是一台比裸机功能更强、使用更方便的机器。换言之,在裸机上铺设的I/O软件隐藏了I/O设备的具体细节,向上提供了一组抽象的I/O设备。

用户 物理接口 硬件 用户 物理接口 硬件 I/O软件 I/O操作命令 ( r e a d , wri t e ) 虚机器

图2 I/O软件隐藏了I/O操作实现的细节

  通常把覆盖了上述软件的机器称为扩充机器或者虚机器。它向用户提供了一个对硬件操作的抽象模型。用户可利用该模型的接口使用计算机,无需了解物理接口的实现细节,从而使用户更容易地使用计算机硬件资源。亦即,I/O设备管理软件实现了对计算机硬件操作的第一个层次的抽象。
  同理,为了方便用户使用文件系统,又可在第一层软件(I/O管理软件)上再覆盖一层用于文件管理的软件,由它来实现对文件操作的细节,并向上层提供一组实现对文件进行存取操作的数据结构和命令。这样,用户可利用该软件提供的数据结构及命令对文件进行存取。此时用户所看到的是一台功能更强、使用更方便的虚机器。亦即,文件管理软件实现了对硬件资源操作的第二个层次的抽象。以此类推,如果文件管理软件上再覆盖一层面向用户的窗口软件,则用户便可在窗口环境下方便地使用计算机,从而形成一台功能更强的虚机器。
  由此可知,OS是铺设在计算机硬件上的多层软件的集合,它们不仅增强了系统的功能,还隐藏了对硬件操作的具体细节,实现了对计算机硬件操作的多个层次的抽象模型。值得说明的是,不仅可在底层对一个硬件资源加以抽象,还可以在高层对该资源底层已抽象的模型再次进行抽象,称为更高层的抽象模型。随着抽象层次的提高,抽象接口所提供的功能就越强,用户使用起来也越方便。

推动操作系统发展的主要动力

  OS自20世纪50年代产生后,经历了由简单到复杂,由低级到高级的发展。在短短60多年间,OS在各方面都有了长足的进步,能够很好地适应计算机硬件和体系结构的快速发展,以及应用需求的不断变化。下面我们对推动OS发展的主要推动力做具体阐述。

不断提高计算机资源利用率

  在计算机发展的初期,计算机系统特别昂贵,人们必须千方百计地提高计算机系统中各种资源的利用率,这就是OS最初发展的推动力。由此形成了能自动地对一批作业进行处理的多道批处理系统。20世纪60年代和70年代有分别出现了能够有效提高I/O设备和CPU利用率的SPOOLing系统,以及极大地改善了存储器系统利用率的虚拟存储器技术。此后在网络环境下,通过在服务器上配置网络文件系统数据库系统算法,将资源提供给全网络用户共享,又进一步提高了资源的利用率。

方便用户

  当资源利用率不高的问题得到基本解决后,用户在上机、调试程序时的不方便行便成为主要矛盾,这又成为继续推动OS发展的主要因素。20世纪60年代分时系统的出现,不仅提高了系统资源的利用率,还能实现人—机交互,使用户能像早期使用计算机时一样,感觉自己是独占全机资源,对其进行直接操控,极大地方便了程序员对程序进行调试和修改的操作。90年代初,图形用户界面的出现收到用户的广泛欢迎,进一步方便了用户对计算机的使用,这无疑又加速推动了计算机的迅速普及和广泛使用。

器件的不断更新换代

  随着IT技术的飞讯发展,尤其是微机芯片的不断更新换代,使得计算机的性能快速提高,从而也推动了OS的功能和性能迅速增强和提高。例如当微机芯片由8位发展到16位、32位,进而又发展到64位时,相应的微机OS也就由8位OS发展到16位和32位,进而又发展到64位,此时,相应OS的功能和性能也有了显著的增强和提高。
  与此同时,外部设备也在迅速发展。OS所能支持的外部设备也越来越多,如现在的微机OS已能够支持种类繁多的外部设备,除了传统的外设外,还可以支持光盘、移动硬盘、闪存盘、扫描仪、数码相机等。

计算机体系结构的不断发展

  计算机体系结构的发展,也不断推动着OS的发展,并产生新的OS类型。例如当计算机由单处理机系统发展为多处理机系统时,相应地,OS也就由单处理机OS发展为多处理机OS。又如当出现了计算机网络后,配置在计算机网络上的操作系统也就应运而生。它不仅能有效地管理好网络中的共享资源,而且还向用户提供了许多网络服务。

不断提出新的应用需求

  操作系统能如此迅速发展的另一个重要原因是,人们不断提出新的应用需求,例如,为了提高产品的质量和数量,需要将计算机应用于工业控制中,此时在计算机上就需要配置能进行实时控制的OS,由此产生了实时系统。此后,为了能满足用户在计算机上听音乐、看电影和玩游戏等需求,又在OS中添加了多媒体功能。另外,由于在计算机系统中保存了越来越多的宝贵信息,致使能够确保系统安全性也成为OS必须具备的功能。尤其是随着VLSI(超大规模集成电路) 的发展,计算机芯片的体积越来越小,价格也越来越便宜,大量智能设备应运而生,这样,微机操作系统的产生和发展也成了一种必然。

操作系统的发展过程

  在20世纪50年代中期,出现了第一个简单的批处理OS;60年代中期开发出多道程序批处理系统;不久又推出分时系统,与此同时,用于工业和武器控制的实时OS也相继问世。20世纪70到90年代,是VLSI和计算机体系结构大发展的年代,导致了卫星及、多处理机和计算机网络的诞生和发展,与与此相应地,也相继开发出了微机OS,多处理机OS和网络OS,并得到极为迅猛的发展。

未配置操作系统的计算机系统

  从1945年诞生的第一台计算机,到50年代中期的计算机,都属于第一代计算机。这时还未出现OS,对计算机的全部操作都是由用户采取人工操作方式进行的。

人工操作方式

  早期的操作方式是由程序员将事先已穿孔的纸带(或卡片),装入纸带输入机(或卡片输入机),再启动它们将纸带(或卡片)上的程序和数据输入计算机,然后启动计算机运行。仅当程序运行完毕并取走计算结果后,才允许下一个用户上机。这种人工操作方式有以下两方面缺点:
  (1) 用户独占全机,即一台计算机的全部资源由上级用户所独占。
  (2) CPU等待人工操作。当用户进行装带(卡),卸带(卡)等人工操作时,CPU及内存等资源是空闲的。
  可见,人工操作方式严重降低了计算机资源的利用率,此即所谓的人机矛盾。虽然CPU的速度在迅速提高,但I/O设备的速度却提高缓慢,这使CPU与I/O设备之间速度不匹配的矛盾更加突出。为此,曾先后出现了通道技术、缓冲技术,然而都未能很好地解决上述矛盾,直到后来引入了脱机输入/输出技术,才获得了相对较为满意的结果。

脱机输入/输出(Off-Line IO)方式

  为了解决人机矛盾及CPU和I/O设备之间速度不匹配的矛盾,20世纪50年代末出现了脱机I/O技术。该技术是实现将装有用户程序和数据的纸带装入纸带输入机,在一台外围机的控制下,把纸带(卡片)上的数据(程序)输入到磁带上。当CPU需要这些程序和数据时,再从磁带上高速地调入内存。
  类似地,当CPU需要输出时,可先由CPU把数据直接从内存高速地输送到磁带上,然后在另一台外围机的控制下,再将此大地上的结果通过相应地输出设备输出。图3示出了脱机输入/输出的过程。

输入设备 外围机 磁盘 磁盘 主机 磁盘 磁盘 外围机 输出设备

图3 脱机I/O示意图

  由于程序和数据的输入和输出都是在外围机的控制下完成的,或者说,它们是在脱离主机的情况下进行的,故称为脱机输入/输出方式。反之,把在主机的直接控制下进行输入/输出的方式称为联机输入/输出(On-Line I/O) 方式。这种脱机I/O方式的主要优点为:
  (1) 减少了CPU的空闲时间。装带、卸带,以及将数据从低俗I/O设备送到高速磁带上(或反之)的操作,都是在脱机情况下由外围机万郴个,并不占用主机时间,从而有效地减少了CPU的空闲时间。
  (2) 提高了I/O速度。当CPU在运行中需要输入数据时,是直接从高速的磁带上将数据输入到内存的,这便极大地提高了I/O速度,从而进一步减少了CPU的空闲时间。

单道批处理系统(Simple Batch Processing System)

  20世纪50年代中期出现了第二代晶体管计算机,此时计算机虽已具有推广应用的价值,但计算机系统仍然非常昂贵,为了能充分地提高它的利用率,应尽量保持系统的连接运行,即在处理完一个作业后,紧接着处理下一个作业,以减少机器的空闲等待时间。

单道批处理系统的处理过程

  为了实现对作业的连续处理,需要先把一批作业以脱机方式输入到磁带上,并在系统中配上监督程序(Monitor),在它的控制下,使这批作业能一个接一个连续处理。其处理过程是:首先由监督程序将磁带上的第一个作业装入内存,并把运行控制权交给该作业;当该作业处理完成时,又把控制权交给监督程序,再由监督程序把磁带上的第二个作业调入内存。计算机系统就这样自动地一个作业紧接着一个作业地进行处理,直至磁带上的所有作业全部完成,这样便形成了早期的批处理系统。虽然系统对作业的处理是成批进行的,但在内存中时终止保持一道作业,故称为单道批处理系统图4示出了单道批处理系统的处理流程。

还有下 一个作业 把下一个作业 的源程序转换 为目标程序 源程序 有错吗 开始 装配 目标程序 运行 目标程序 停止

图4 单道批处理系统的处理流程

单道批处理系统的缺点

  单道批处理系统最主要的缺点是,系统中的资源得不到充分的利用。这是因为在内存中仅有一道程序,每逢该程序在运行中发出I/O请求后,CPU便处于等待状态,必须在其I/O完成后才继续运行。又因I/O设备的低速性,更使CPU的利用率显著降低。图5示出了单道程序的运行情况,从图可以看出:在 $t_2$ ~ $t_3$ 、 $t_6$ ~ $t_7$ 时间间隔内CPU空闲。

用户程序 监督程序 I/O操作 I/O中断请求 启动I/O I/O完成 结束中断 I/O中断请求 启动I/O I/O完成 结束中断

图5 单道程序的运行情况

  为了能在系统中运行较大的作业,通常在计算机中都配置了较大容量的内存,但实际情况是有80%以上的作业都属于中小型,因此在单道程序环境下,也必定造成内存的浪费。类似地,为了满足各种类型的作业需要,在系统中将会配置多种类型的I/O设备。显然在单道程序环境下也不能充分利用系统资源。

多道批处理系统(Multiprogrammed Batch Processing System)

  20世纪60年代中期,IBM公司生产了第一台小规模集成电路计算机IBM 360(第三代计算机系统)。由于它较之于晶体管计算机无论在体积、功耗、速度和可靠性上都有了显著的改善,因而获得了极大的成功。IBM公司为该机开发的OS/360操作系统是第一个能运行多道程序的批处理系统。

多道程序设计的基本概念

  为了进一步提高资源的利用率和系统吞吐量,在20世纪60年代中期引入了多道程序设计技术,由此形成了多道批处理系统。在该系统中,用户所提交的作业先存放在外存上,并排成一个队列,称为“后备队列”。然后由作业调度程序按一定的算法,从后备队列中选择若干个作业调入内存,使它们共享CPU和系统中的各种资源。由于同时在内存中装有若干道程序,这样便可以在运行程序A时,利用其因I/O操作而暂停执行时的CPU空挡时间,再调度另一道程序B运行,同样可以利用程序B在I/O操作时的空档时间,再调度程序C运行,使多道程序交替地运行,这样便可以保持CPU处于忙碌状态。图6示出了四道程序时的运行情况。

程序A 程序B 程序C 程序D 调度程序 程序B 程序A I/O请求 程序B I/O请求 程序A 程序A I O处理 程序B I/O处理 程序C 程序C I/O处理 程序D 程序C I/O请求 程序D I/O请求 程序A I/O完成 程序A 再被调度 程序C I/O完成 程序A 完成 程序C 再被调度 程序D I/O处理 程序B 被调度 程序C 程序C 被调度 程序D 被调度 C P U 执行线 程序A 调度 调度 调度 调度 调度

图6 多道程序的运行情况

多道批处理系统的优缺点

  多道批处理系统的优点如下:
  (1) 资源利用率高。引入多道批处理能使多道程序交替运行,以保持CPU处于忙碌状态;在内存中装入多道程序可提高内存的利用率;此外还可以提高I/O设备的利用率。
  (2) 系统吞吐量大。能提高系统吞吐量的主要原因可归结为:
  ①CPU和其他资源保持“忙碌状态”。
  ②仅当作业完成时或运行不下去时才进行切换,系统开销小。

  多道批处理系统的缺点如下:
  (1) 平均周转时间长。由于作业要排队依次进行处理,因而作业的周转时间较长,通常需几个小时,甚至几天。
  (2) 无交互能力。用户一旦把作业提交给系统后,直至作业完成,用户都不能与自己的作业进行交互,修改和调试程序极不方便。

多道批处理系统需要解决的问题

  多道批处理系统是一种十分有效,但又非常复杂的系统,为使系统中的多道程序间能协调地运行,系统必须解决下述一系列问题:
  (1) 处理机争用问题。既要能满足各道程序运行的需要,又要能提高处理机的利用率。
  (2) 内存分配和保护问题。系统应能为每道程序分配必要的内存空间,使它们各得其所,且不会因某道程序出现异常情况而破坏其他程序。
  (3) I/O设备分配问题。系统应采取适当的策略来分配系统中的I/O设备,以达到既能方便用户对设备的使用,又能提高设备利用率的目的。
  (4) 文件的组织和管理问题。系统应能有效地组织存放在系统中的大量的程序和数据,使它们既便于用户使用,又能保证数据的安全性。
  (5) 作业管理问题。系统中存在着各种作业(应用程序),系统应能对系统中所有的作业进行合理的组织,以满足这些作业用户的不同需求。
  (6) 用户与系统的接口问题。为使用户能方便的使用操作系统,OS还应提供用户与OS之间的接口。
  为此,应在计算机系统中增加一组软件,用以对上述问题进行妥善、有效的处理。这组软件应包括:能有效地组织和管理四大资源的软件、合理地对各类作业进行调度和控制它们运行的软件,以及方便用户使用计算机的软件。正是这样一组软件构成了操作系统。据此,我们可以把操作系统定义为:操作系统是一组能有效地组织和管理计算机硬件和软件资源,合理地对各类作业进行调度,以及方便用户使用的程序的集合。

分时系统(Time Sharing System)

分时系统的引入

  如果说推动多道批处理系统形成和发展的主要动力是提高资源利用率和系统吞吐量,那么,推动分时系统的形成和发展的主要动力,则是为了满足用户对人—机交互的需求,由此形成了一种新型OS,用户的需求具体表现在以下几个方面:
  (1) 人—机交互。每当程序员写好一个新程序时,都需要上机进行调试。由于新编程序难免存在一些错误或不当之处,需要进行修改,因此用户希望能像早期使用计算机时一样,独占权及并对它进行直接控制,宜宾能方便地对程序中的错误进行修改。亦即,用户希望能进行人—机交互。
  (2) 共享主机。在20世纪60年代,计算机还十分昂贵,一台计算机要同时供很多用户共享使用。显然,用户们在共享一台计算机时,每个人都希望能像独占时一样,不仅可以随时与计算机进行交互,而且还不会感觉到其他用户的存在。
  由上述不难得知,分时系统是指,在一台主机上连接了多个配有显示器和键盘的终端并由此所组成的系统,该系统允许多个用户同时通过自己的终端,以交互方式使用计算机,共享主机中的资源。

分时系统实现中的关键问题

  在多道批处理系统中,用户无法与自己的作业进行交互的主要原因是:作业都先驻留在外存上,即使以后被调入内存,也要经过较长时间的等待后方能运行。用户无法与自己的作业进行交互。为了能够实现人机交互,必须解决的关键问题是,如何使用户能与自己的作业进行交互。为此,系统首先必须能提供多个终端,同时给多个用户使用。其次,当用户在自己的终端上键入命令时,系统应能及时接收,并及时处理该命令,再将结果返回给用户。此后,用户可根据系统返回的响应情况,再继续键入下一条命令,此即人—机交互。亦即,允许有多个用户同时通过自己的键盘键入命令,系统也应能全部及时接收并处理。
  (1) 及时接收。要做到及时接收多个用户键入的命令或数据,只需在系统中配置一个多路卡即可。例如当主机上要连接64个终端时,就配置一个64用户的多路卡。多路卡的作用是,实现分时多路复用。即主机以很快的速度周期性地扫描各个终端,在每个终端处停留很短的时间,如30ms,用于接收从终端发来的数据。对于64用户的多路卡,用不到2秒的时间便可完成一次扫描,即主机能用不到2秒的时间分时接收哥哥用户从终端上输入的数据一次。此外,为了能使从终端上输入的数据被依次逐条地进行处理,还需要为每个终端配置一个缓冲区,用来暂存用户键入的命令(或数据)。
  (2) 及时处理。人—机交互的关键在于,用户键入命令后,能对自己的作业及其运行及时地实时控制,或进行修改。因此,各个用户的作业都必须驻留在内存中,并能频繁地获得处理机运行。否则,用户键入的命令将无法作用到自己的作业上。由此可见,为了实现人—机交互,必须彻底地改变原来批处理系统的运行方式,转而采用下面的方式:
  ①作业直接进入内存。因为作业在磁盘上是不能运行的,所以作业应该直接进入内存。
  ②采用轮转运行方式。如果一个作业独占CPU连续运行,那么其他作业就没有机会被调度运行。为避免一个作业长期独占处理机,引入了时间片的概念。一个时间片,就是一段很短的时间(例如30ms)。系统规定每个作业每次只能运行一个时间片,然后就暂停该作业的运行,并立即调度下一个作业的运行。如果在不长时间内能使所有的作业都执行一个时间片的时间,便可以使每个用户都能及时地与自己的作业进行交互,从而可使用户的请求得到及时相应。

分时系统的特征

  分时系统与多道批处理系统相比,具有非常明显的不同特性,可归纳成以下四个方面。
  (1) 多路性。该特性是指系统允许将堕胎终端同时连接到一台主机上,并按分时原则为每个用户服务。多路性允许多个用户共享一台计算机,显著地提高了资源利用率,降低了使用费用,从而促进了计算机更广泛的应用。
  (2) 独立性。该特性是指系统提供了这样的用机环境,即每个用户在各自的终端上进行操作,彼此之间互不干扰,给用户的感觉就像是他一人独占主机进行操作。
  (3) 及时性。及时性是指用户的请求能在很短时间内获得响应。这一时间间隔是根据人们所能接受的等待时间确定的,通常仅为1~3秒钟。
  (4) 交互性。交互性是指用户可通过终端与系统进行广泛的人机对话。其广泛性表现在:用户可以请求系统提供多方面的服务,如进行文件编辑和数据处理,访问系统中的文件系统和数据库系统,请求提供打印服务等。

实时系统(Real Time System)

  所谓实时,是表示“及时”。而“实时计算”,则可定义为这样一类计算:系统的正确性,不仅由计算的逻辑结果来确定,而且还取决于产生结果的时间。事实上实时系统最主要的特征,是将时间作为关键参数,它必须对所接收到的某些信号做出“及时”或“实时”的反应。由此得知,实时系统是指系统能及时响应外部事件的请求,在规定时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。
  

实时系统的类型

  随着计算机应用的普及,实时系统的类型也相应增多,下面列出当前常见的几种:
  (1) 工业(武器)控制系统。当计算机被用于生产过程的控制,形成以计算机为中心的控制系统时,该系统应具有能实时采集现场数据,并对所采集的数据进行及时处理,进而能够自动地控制相应的执行机构,使之具有按预定的规律变化的功能,确保产品的质量和产量。类似地,也可将计算机用于对武器的控制,如火炮的自动控制系统、飞机的自动驾驶系统、以及导弹的制导系统等。
  (2) 信息查询系统。该系统接受从远程终端上发来的服务请求,根据用户提出的请求,对信息进行检索和处理,并能及时对用户做出正确的回答。实时信息处理系统由飞机或火车的订票系统等。
  (3) 多媒体系统。随着计算机硬件和软件的快速发展,已可将文本、图像、音频和视频等信息集成在一个文件中,形成一个多媒体文件。如在用DVD播放器所播放的数字电影中就包含了音频、适配和横向滚动的文字等信息。为了保证有好的听觉和视觉感受,用于播放音频和视频的多媒体系统等,也必须是实时信息处理系统。
  (4) 嵌入式系统。随着集成电路的发展,已制作出各种类型的芯片,可将这些芯片嵌入到各种一起和设备中,用于对设备进行控制或对其中的信息作出处理,这样就构成了所谓的智能仪器和设备。此时还需要配置嵌入式OS,它同样需要具有实时控制或处理的功能。

实时任务的类型

  (1) 周期性实时任务和非周期性实时任务。周期性实时任务是指这样一类任务,外部设备周期性地发出激励信号给计算机,要求它按指定周期循环执行,以便周期性地控制某我i不设备。反之,非周期性实时任务并无明显的周期性,但都必须联系着一个截止时间(Deadline),或称为最后期限。它又可分为:①开始截止时间:指某个任务在某时间以前必须开始执行;②完成截止时间:指某任务在某时间以前必须完成。
  (2) 硬实时任务和软实时任务。硬实时任务(Hard Real-time Task,HRT) 是指系统必须满足任务对截止时间的要求,否则可能出现难以预测的后果。用于工业和武器控制的实时系统,通常它所执行的是硬实时任务。软实时任务(Soft Real-time Task, SRT) 也联系着一个截止时间,但并不严格,若偶尔错过了截止时间,对系统产生的影响也不会太大。诸如用于信息查询系统和多媒体系统中的实时系统,通常是软实时任务。

实时系统与分时系统特征的比较

  (1) 多路性。信息查询系统和分时系统中的多路性都表现为系统按分时原则为多个终端用户服务;实时控制系统的多路性则是指系统周期性地对多路现场信息进行采集,以及对多个对象或多个执行机构进行控制。
  (2) 独立性。信息查询系统中的每个终端用户在与系统交互时,彼此相互独立互不干扰,同样在实时控制系统中,对信息的采集和对对象的控制也都是彼此互不干扰的。
  (3) 及时性。信息查询系统对实时性的要求是依据人所能接受的等待时间确定的。而多媒体系统实时性的要求是,播放出来的音乐和电视能令人满意。实时控制系统的实时性则是以控制对象所要求的截止时间来确定的,一般为秒级到毫秒级。
  (4) 交互性。在信息查询系统中,人与系统的交互性仅限于访问系统中某些特定的专用服务程序,它并不像分时系统那样,能向终端用户提供数据处理、资源共享等服务。而多媒体系统的交互性也仅限于用户发送某些特定的命令,如开始、停止、快进等,由系统立即响应。
  (5) 可靠性。分时系统要求系统可靠,实时系统要求系统高度可靠,因为任何差错都可能带来无法预料的灾难性的后果。因此,在实时系统中,往往都采取了多级容错措施来保障系统的安全性及数据的安全性。

微机操作系统

  随着VLSI和计算机体系结构的发展,以及应用需求的不断扩大,操作系统仍在继续发展。由此先后形成了微机操作系统、网络操作系统等。本小节对微机操作系统的发展作扼要的介绍。
  配置在微型机上的操作系统称为微机操作系统,最早诞生的危机操作系统是配置在8位微机上的CP/M,后来出现了16位微机,相应地,16位微机操作系统也就应运而生。当微机发展为32位、64位时,32位和64位微机操作系统也应运而生。可见微机操作系统可按微机的字长来分,但也可以将它按运行方式分为如下几类:

单用户单任务操作系统

  单用户单任务操作系统的含义是:只允许一个用户上机,且只允许用户程序作为一个任务运行,这是最简单的微机操作系统,主要配置在8位和16位微机上,最有代表性的单用户单任务微机操作系统时CP/M和MS-DOS。
  (1) CP/M。1974年第一代通用8位微处理机芯片Intel 8080出现后的第二年,Digital Research公司就开发出带有软盘系统的8位微机操作系统CP/M。1977年Digital Research公司对CP/M进行了重写,使其剋配置在以Intel 8080、8085、Z80等8位芯片为基础的多种微机上。1979年又推出带有硬盘管理功能的CP/M 2.2版本。由于CP/M具有较好的体系结构,可适应性强,可以执行以及易学易用等优点,使之在8位微机中占据了统治地位。
  (2) MS-DOS。1981年IBM公司首次推出了IBM-PC个人计算机(16位微机),在微机中采用了微软公司开发的MS-DOS(Disk Operating System) 操作系统,该操作系统在CP/M的基础上进行了较大的扩充,使其在功能上有很大的提高。1983年IBM退出PC/AT(配有Intel 80286芯片),相应地微软又开发出MS-DOS 2.0版本,它不仅能支持硬盘设备,还采用了树形目录结构的文件系统。1987年又宣布了MS-DOS 3.3版本。从MS-DOS 1.0到3.3位置的版本都属于单用户单任务操作系统,内存被限制在640KB。从1989到1993年又先后推出了多个MS-DOS版本,它们都可以配置在Intel 80386、80486等32位微机上。从80年代到90年代初,由于MS-DOS性能优越受到当时用户的广泛欢迎,称为事实上的16位单用户单任务操作系统标准。

单用户多任务操作系统

  单用户多任务操作系统的含义是,只允许一个用户上机,但允许用户把程序分为若干个任务,使它们并发,从而有效地改善了系统的性能。目前在32位维基上配置的操作系统,基本上都是单用户多任务操作系统。其中最有代表性的是由微软公司推出的Windows。1985年和1987年微软公司先后推出了Windows 1.0和Windows 2.0版本操作系统,由于当时的硬件平台还只是16位微机,对1.0和2.0版本不能很好地支持。1990年微软公式又发布了Windows 3.0版本,随后又宣布了Windows 3.1版本,它们主要是针对386和486等32位微机开发的,它较之以前的操作系统有着很重大的改进,引入了友善的图形用户界面,支持多任务和扩展内存的功能。使计算机更好使用,从而称为386和486等微机的主流操作系统。
  1995年微软公司推出了Windows 95,它较之以前的Windows 3.1有许多重大改进,采用了全32位的处理技术,并兼容以前的16位应用程序,在该系统中还集成了支持Internet的网络功能。1998年微软公司又推出了Windows 95的改进版Windows 98,它已是最后一个仍然兼容以前16位应用程序的Windows。其最主要的改进是把微软公司自己开发的Internet浏览器整合到系统中,大大方便了用户上网浏览;另一个改进是增加了对多媒体的支持。2001年微软又发布了Windows XP,同时提供了家用和商业工作站两种版本,在此后相当长的一段时间,称为使用最广泛的个人操作系统之一。在开发上述Windows操作系统的同时,微软公司又开始对网络操作系统Windows NT进行开发,它是针对网络开发的操作系统,在系统中融入许多面向网络的功能,从2006年后推出的一系列内核版本号为NT6.X的桌面操作系统,包括Windows Vista、Windows 7、Windows 8等,这里就不对它们进行介绍。

多用户多任务操作系统

  多用户多任务操作系统的含义是,允许多个用户通过各自的终端,使用同一台机器,共享主机系统中的各种资源,而每个用户程序又可进一步分为几个任务,使它们能并发,从而可进一步提高资源利用率和系统吞吐量。在大、中和小型机中配置的大多是多用户多任务操作系统,而在32位微机上,也有不少配置的是多用户多任务操作系统,其中最有代表性的是UNIX OS。
  UNIX OS是美国电报电话公司的Bell实验室在1969~1970年期间开发的,1979年推出来的UNIX V.7已被广泛应用于多种小型机上。随着微机性能的提高,人们又将UNIX移植到微机上。在1980年后,将UNIX第7版本移植到Motorola公司的MC 680xx微机上,后来又将UNIX V7.0版本进行简化后,移植到Intel 8080上,把它称为Xenix。现在最有影响的两个能运行在微机上的UNIX操作系统变形是Solaris OSLinux OS
  (1) Solaris OS:SUN公司于1982年推出的SUN OS 1.0,是一个运行在MOTOROLA 680X0平台上的UNIX OS,在1988年宣布的SUN OS 4.0,把运行平台从早期的MOTOROLA 680X0平台迁移到SPARC平台,并开始支持Intel公司的80X86;1992年SUN发布了Solaris 2.0。从1998年开始,Sun公司推出64位操作系统Solaris 2.7和2.8,这几款操作系统在网络特性、互操作性、兼容性以及易于配置和管理方面均有很大的提高。
  (2) Linux OS:Linux是UNIX的一个重要变种,最初是由芬兰学生Linus Torvalds针对Intel 8086开发的,1991年,在Internet网上发布第一个Linux版本,由于源代码公开,因此有很多人通过Internet与之合作,使Linux的性能迅速提高,其应用范围也日益扩大,相应地,源代码而急剧膨胀,此时它已是具有全面功能的UNIX系统,大量在UNIX上运行的软件(包括1000多种使用工具软件和大量网络软件),被移植到Linux上,而且可以在主要的微机上运行,如Intel 80X86 Pentium等。

操作系统的基本特性

  前面所介绍的多道批处理系统分时系统实时系统这三种基本草祖宗系统都具有各自不同的特征,如批处理系统有着高的资源利用率和系统吞吐量;分时系统能获得及时响应;实时系统具有实时特征。除此之外,它们还共同具有并发、共享、虚拟和异步四个基本特征。

并发(Concurrence)

  正是系统中的程序能并发执行这一特征,才使得OS能有效地提尕奥系统中的资源利用率,增加系统的吞吐量。

并行与并发

  并行性和并发性是既相似又有区别的两个概念。并行性是指两个或多个事件在同一时刻发生。而并发性是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间内宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却只能有一道程序执行,故微观上这些程序只能是分时地交替进行。例如,在1秒钟时间内,0~15ms程序A运行;15~30ms程序B运行;30~45ms程序C运行;45~60ms程序D运行,因此可以说,在1秒钟时间间隔内,宏观上有四道程序在同时运行,但微观上,程序A、B、C、D是分时地交替执行的。
  倘若在计算机系统中有多个处理机,这些可以并发执行的程序便可被分配到多个处理机上,实现并行执行,即利用每个处理机来处理一个可并发执行的程序。这样,多个程序便可同时执行。

引入进程

  在一个未引入进程的系统中,在属于同一个应用程序的计算程序和I/O程序之间只能是顺序执行,即只有在计算程序执行告一段落后,才允许I/O程序执行;反之,在程序执行I/O操作时,计算程序也不能执行。但在为计算程序和1/0程序分别建立一个进程(Process)‌后,这两个进程便可并发执行。若对内存中的多个程序都分别建立一个进程,它们就可以并发执行,这样便能极大地提高系统资源的利用率,增加系统的吞吐量。
  所谓进程,是指在系统中能独立运行并作为资源分配的基本单位。它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。多个进程之间可以并发执行和交换信息。事实上,进程和并发是现代操作系统中最重要的基本概念,也是操作系统运行的基础。

共享(Sharing)

  一般情况下的共享与操作系统环境下的共享其含义并不完全相同。前者只是说明某种资源能被大家使用,如图书馆中的图书能提供给大家借阅,但并未限定借阅者必须在同一时间(间隔)和同一地点阅读。又如,学校中的计算机机房供全校学生上机,或者说,全校学生共享该机房中的计算机设备,虽然所有班级的上机地点是相同的,但各班的上机时间并不相同。对于这样的资源共享方式,只要通过适当的安排,用户之间并不会产生对资源的竞争,因此资源管理是比较简单的。
  而在OS环境下的资源共享或称为资源复用,是指系统中的资源可供内存中多个并发执行的进程共同使用。这里在宏观上既限定了时间(进程在内存期间),也限定了地点(内存)。对于这种资源共享方式,其管理就要复杂得多,因为系统中的资源远少于多道程序需求的总和,会形成它们对共享资源的争夺。所以,系统必须对资源共享进行妥善管理。由于资 源属性的不同,进程对资源复用的方式也不同,目前主要实现资源共享的方式有如下两种。

互斥共享方式

  系统中的某些资源,如打印机、磁带机等,虽然可以提供给多个进程(线程)使用,但应规定在一段时间内,只允许一个进程访问该资源。为此,在系统中应建立一种机制,以保证多个进程对这类资源的互斥访问。当进程A要访问某资源时,必须先提出请求。若此时该资源空闲,系统便可将之分配给请求进程A使用。此后若再有其它进程也要访问该资源,只要A未用完就必须等待。仅当A进程访问完并释放系统资源后,才允许另一进程对该资源进行访问。这种资源共享方式称为互斥式共享,把这种在一段时间内只允许一个进程访问的资源,称为临界资源(或独占资源)。系统中的大多数物理设备,以及栈、变量和表格,都属于临界资源,都只能被互斥地共享。为此,在系统中必须配置某种机制,用于保证诸进程互斥地使用临界资源。

同时访问方式

  系统中还有另一类资源,允许在一段时间内由多个进程“同时”对它们进行访问。这里所谓的“同时”,在单处理机环境下是宏观意义上的,而在微观上,这些进程对该资源的访问是交替进行的。典型的可供多个进程“同时”访问的资源是磁盘设备。一些用重入码编写的文件也可以被“同时”共享,即允许若干个用户同时访问该文件。

  并发和共享是多用户(多任务)OS的两个最基本的特征。它们又是互为存在的条件。即一方面资源共享是以进程的并发执行为条件的,若系统不允许并发执行也就不存在资源共享问题:另一方面,若系统不能对资源共享实施有效管理,以协调好诸进程对共享资源的访问,也必然会影响到诸进程间并发执行的程度,甚至根本无法并发执行。

虚拟(Virtual)

  用于实现“虚拟”的技术最早出现在通信系统中。在早期,每一条物理信道只能供一对用户通话,为了提高通信信道的利用率而引入了"虚拟”技术。该技术是通过"空分复用”或“时分复用”技术,将一条物理信道变为若干条逻辑信道,使原来只能供一对用户通话的物理信道,变为能供多个用户同时通话的逻辑信道。
  在OS中,把通过某种技术将一个物理实体变为若干个逻辑上的对应物的功能称为"虚拟”。前者是实的,即实际存在的,而后者是虚的,是用户感觉上的东西。相应地,把用于实现虚拟的技术称为虚拟技术。在OS中也是利用时分复用和空分复用技术来实现"虚拟”的。

时分复用技术

  在计算机领域中,广泛利用时分复用技术来实现虚拟处理机、虚拟设备等,使资源的利用率得以提高。时分复用技术能提高资源利用率的根本原因在于,它利用某设备为一用户服务的空闲时间,又转去为其他用户服务,使设备得到最充分的利用。
  (1) 虚拟处理机技术。利用多道程序设计技术,为每道程序建立至少一个进程,让多道程序并发执行。此时虽然系统中只有一台处理机,但通过分时复用的方法,能实现同时(宏观上)为多个用户服务,使每个终端用户都认为是有一个处理机在专门为他服务。亦即,利用多道程序设计技术,可将一台物理上的处理机虚拟为多台逻辑上的处理机,在每台逻辑处理机上运行一道程序,我们把用户所感觉到的处理机称为虚拟处理器
  (2) 虚拟设备技术。我们还可以利用虚拟设备技术,也通过分时复用的方法,将一台物理I/O设备虚拟为多台逻辑上的I/O设备,并允许每个用户占用一台逻辑上的I/O设备。 这样便可使原来仅允许在一段时间内由一个用户访问的设备(即临界资源),变为允许多个用户"同时”访问的共享设备,既宏观上能"同时”为多个用户服务。例如原来的打印机属于临界资源,而通过虚拟设备技术又可以把它变为多台逻辑上的打印机,供多个用户"同时”打印。

空分复用技术

  20世纪初,电信业中就已使用频分复用技术来提高信道的利用率。它是指将一个频率范围比较宽的信道划分成多个频率范围较窄的信道(称为频带),其中的任何一个频带都仅供一对用户通话。早期的频分复用技术只能将一条物理信道划分为几条到几十条话路,后来又很快发展到成千上万条话路,每条话路供一对用户通话。再后来在计算机中也把空分复用技术用于对存储空间的管理,用以提高存储空间的利用率。
  如果说,多道程序技术(时分复用技术)是通过利用处理机的空闲时间运行其它程序,提高了处理机的利用率,那么,空分复用技术则是利用存储器的空闲空间分区域存放和运行其它的多道程序,以此来提高内存的利用率。
  但是,单纯的空分复用存储器只能提高内存的利用率,并不能实现在逻辑上扩大存储器容量的功能,还必须引入虚拟存储技术才能达到此目的。虚拟存储技术在本质上是实现内存的分时复用,即它可以通过分时复用内存的方式,使一道程序仅在远小于它的内存空间中运行。例如,一个100MB的应用程序之所以可以运行在30MB的内存空间,实质上就是每次只把用户程序的一部分调入内存运行,运行完成后将该部分换出,再换入另一部分到内存中运行,通过这样的置换功能,便实现了用户程序的各个部分分时地进入内存运行。应当着重指出:虚拟的实现,如果是采用分时复用的方法,即对某一物理设备进行分时使用,设N是某物理设备所对应的虚拟的逻辑设备数,则每台虚拟设备的平均速度必然等于或低于物理设备速度的1/N。类似地,如果是利用空分复用方法来实现虚拟,此时一台虚拟设备平均占用的空间必然也等于或低于物理设备所拥有空间的1/N。

异步(Asynchronism)

  在多道程序环境下,系统允许多个进程并发执行。在单处理机环境下,由于系统中只有一台处理机,因而每次只允许一个进程执行,其余进程只能等待。当正在执行的进程提出某种资源要求时,如打印请求,而此时打印机正在为其它进程打印,由于打印机属于临界资源,因此正在执行的进程必须等待,并释放出处理机,直到打印机空闲,并再次获得处理机时,该进程方能继续执行。可见,由于资源等因素的限制,使进程的执行通常都不可能"一气呵成”,而是以"停停走走”的方式运行。
  对于内存中的每个进程,在何时能获得处理机运行,何时又因提出某种资源请求而暂停,以及进程以怎样的速度向前推进,每道程序总共需要多少时间才能完成等等,都是不可预知的。由于各用户程序性能的不同,比如,有的侧重于计算而较少需要I/O;而有的程序其计算少而I/O多,这样,很可能是先进入内存的作业后完成,而后进入内存的作业先完成。或者说,进程是以人们不可预知的速度向前推进的,此即进程的异步性。尽管如此,但只要在OS中配置有完善的进程同步机制,且运行环境相同,则作业即便经过多次运行,也都会获得完全相同的结果。因此异步运行方式是允许的,而且是操作系统的一个重要特征。

操作系统的主要功能

  引入OS的主要目的是,为多道程序的运行提供良好的运行环境,以保证多道程序能有条不紊地、高效地运行,并能最大程度地提高系统中各种资源的利用率,方便用户的使 用。为此,在传统的OS中应具有处理机管理、存储器管理、设备管理和文件管理等基本功能。此外,为了方便用户使用OS,还需向用户提供方便的用户接口。

处理机管理功能

  在传统的多道程序系统中,处理机的分配和运行都是以进程为基本单位的,因而对处理机的管理可归结为对进程的管理。处理机管理的主要功能有:创建和撤消进程,对诸进程的运行进行协调,实现进程之间的信息交换,以及按照一定的算法把处理机分配给进程。

进程控制

  在多道程序环境下为使作业能并发执行,必须为每道作业创建一个或几个进程,并为之分配必要的资源。当进程运行结束时,应立即撤消该进程,以便能及时回收该进程所占用的各类资源,供其它进程使用。在设置有线程的OS中,进程控制还应包括为一个进程创建若干个线程,以提高系统的并发性。因此,进程控制的主要功能也就是为作业创建进程、撤消(终止)已结束的进程,以及控制进程在运行过程中的状态转换。

进程同步

  为使多个进程能有条不紊地运行,系统中必须设置相应的进程同步机制。该机制的主要任务是为多个进程(含线程)的运行进行协调。常用的协调方式有两种:①进程互斥方式,这是指诸进程在对临界资源进行访问时,应采用互斥方式;②进程同步方式,指在相互合作去完成共同任务的诸进程间,由同步机构对它们的执行次序加以协调。最简单的用于实现进程互斥的机制是为每一个临界资源配置一把锁W,当锁打开时,进程可以对该临界资源进行访问:而当锁关上时,则禁止进程访问该临界资源。而实现进程同步时,最常用的机制是信号量机制

进程通信

  当有一组相互合作的进程去完成一个共同的任务时,在它们之间往往需要交换信息。例如,有输入进程、计算进程和打印进程三个相互合作的进程,输入进程负责将所输入的数据传送给计算进程;计算进程利用输入数据进行计算,并把计算结果传送给打印进程;最后由打印进程把计算结果打印出来。进程通信的任务是实现相互合作进程之间的信息交换。
  当相互合作的进程处于同一计算机系统时,通常在它们之间采用直接通信方式,即由源进程利用发送命令直接将消息(message)‌挂到目标进程的消息队列上,以后由目标进程利用接收命令从其消息队列中取出消息。

调度

  在传统OS中,调度包括作业调度和进程调度两步。
  (1) 作业调度。作业调度的基本任务是从后备队列中按照一定的算法选择出若干个作业,为它们分配运行所需的资源,在将这些作业调入内存后,分别为它们建立进程,使它们都成为可能获得处理机的就绪进程,并将它们插入就绪队列中。
  (2) 进程调度。进程调度的任务是从进程的就绪队列中按照一定的算法选出一个进程,将处理机分配给它,并为它设置运行现场,使其投入执行。

存储器管理功能

  存储器管理的主要任务,是为多道程序的运行提供良好的环境,提高存储器的利用率, 方便用户使用,并能从逻辑上扩充内存。为此,存储器管理应具有内存分配和回收、内存 保护、地址映射和内存扩充等功能。

内存分配

  内存分配的主要任务是:
  (1) 为每道程序分配内存空间,使它们"各得其所”。
  (2) 提高存储器的利用率,尽量减少不可用的内存空间(碎片)。
  (3) 允许正在运行的程序申请附加的内存空间,以适应程序和数据动态增长的需要。

  OS在实现内存分配时,可采取静态和动态两种方式:
  (1) 静态分配方式。每个作业的内存空间是在作业装入时确定的,在作业装入后的整个运行期间不允许该作业再申请新的内存空间,也不允许作业在内存中“移动”。
  (2) 动态分配方式。每个作业所要求的基本内存空间虽然也是在装入时确定的,但允 许作业在运行过程中继续申请新的附加内存空间,以适应程序和数据的动态增长,也允许作业在内存中“移动"。

内存保护

  内存保护的主要任务是:
  (1) 确保每道用户程序都仅在自己的内存空间内运行,彼此互不干扰。
  (2) 绝不允许用户程序访问操作系统的程序和数据,也不允许用户程序转移到非共享的其它用户程序中去执行。

  为了确保每道程序都只在自己的内存区中运行,必须设置内存保护机制。一种比较简单的内存保护机制是设置两个界限寄存器,分别用于存放正在执行程序的上界和下界。在程序运行时,系统须对每条指令所要访问的地址进行检查,如果发生越界,便发出越界中断请求,以停止该程序的执行。

地址映射

  在多道程序环境下,由于每道程序经编译和链接后所形成的可装入程序其地址都是从0开始的,但不可能将它们从"0”地址(物理)开始装入内存,致使(各程序段的)地址空间内的逻辑地址与其在内存空间中的物理地址并不相一致。为保证程序能正确运行,存储器管理必须提供地址映射功能,即能够将地址空间中的逻辑地址转换为内存空间中与之对应的物理地址。该功能应在硬件的支持下完成。

内存扩充

  内存扩充并非是从物理上去扩大内存的容量,而是借助于虚拟存储技术,从逻辑上扩充内存容量,使用户所感觉到的内存容量比实际内存容量大得多,以便让更多的用户程序能并发运行。这样既满足了用户的需要,又改善了系统的性能。为了能在逻辑上扩充内存,系统必须设置内存扩充机制(包含少量的硬件),用于实现下述各功能:
  (1) 请求调入功能,系统允许在仅装入部分用户程序和数据的情况下,便能启动该程序运行。在程序运行过程中,若发现要继续运行时所需的程序和数据尚未装入内存,可向OS发出请求,由OS从磁盘中将所需部分调入内存,以便继续运行。
  (2) 置换功能,若发现在内存中已无足够的空间来装入需要调入的程序和数据时,系统应能将内存中的一部分暂时不用的程序和数据调至硬盘上,以腾出内存空间,然后再将所需调入的部分装入内存。

设备管理功能

  设备管理的主要任务如下:
  (1) 完成用户进程提出的I/O请求,为用户进程分配所需的I/O设备,并完成指定的I/O操作。
  (2) 提高CPU和I/O设备的利用率,提高I/O速度,方便用户使用I/O设备。
  为实现上述任务,设备管理应具有缓冲管理、设备分配和设备处理以及虚拟设备等功能。

缓冲管理

  如果在I/O设备和CPU之间引入缓冲,则可有效地缓和CPU和I/O设备速度不匹配的矛盾,提高CPU的利用率,进而提高系统吞吐量。因此在现代OS中,无一例外地在内存中设置了缓冲区,而且还可通过增加缓冲区容量的方法来改善系统的性能。不同的系统可采用不同的缓冲区机制。最常见的缓冲区机制有:单缓冲机制、能实现双向同时传送数据的双缓冲机制、能供多个设备同时使用的公用缓冲池机制。上述这些缓冲区都由OS缓冲 管理机制将它们管理起来。

设备分配

  设备分配的基本任务是根据用户进程的I/O请求、系统现有资源情况以及按照某种设备分配策略,为之分配其所需的设备。如果在I/O设备和CPU之间还存在着设备控制器和I/O通道,则还需为分配出去的设备分配相应的控制器和通道。为实现设备分配,系统中应设置设备控制表、控制器控制表等数据结构,用于记录设备及控制器等的标识符和状态。根据这些表格可以了解指定设备当前是否可用,是否忙碌,以供进行设备分配时参考。在进行设备分配时,应针对不同的设备类型而采用不同的设备分配方式。对于独占设备的分配还应考虑到该设备被分配出去后系统是否安全。在设备使用完后,应立即由系统回收。

设备处理

  设备处理程序又称为设备驱动程序。其基本任务是用于实现CPU和设备控制器之间的通信,即由CPU向设备控制器发出I/O命令,要求它完成指定的I/O操作:反之,由CPU接收从控制器发来的中断请求,并给予迅速的响应和相应的处理。
  设备处理过程是:首先检查I/O请求的合法性,了解设备状态是否是空闲的,读取有关的传递参数及设置设备的工作方式。然后向设备控制器发出I/O命令,启动I/O设备完成指定的I/O操作。此外设备驱动程序还应能及时响应由控制器发来的中断请求,并根据该中断请求的类型,调用相应的中断处理程序进行处理。对于设置了通道的计算机系统,设备处理程序还应能根据用户的I/O请求自动地构成通道程序。

文件管理功能

  文件管理的主要任务是对用户文件和系统文件进行管理以方便用户使用,并保证文件的安全性。为此,文件管理应具有对文件存储空间的管理、目录管理、文件的读/写管理以及文件的共享与保护等功能。

文件存储空间的管理

  在多用户环境下,若由用户自己对文件的存储进行管理,不仅非常困难,而且也必然十分低效。因而需要由文件系统对诸多文件及文件的存储空间实施统一的管理。其主要任务是:为每个文件分配必要的外存空间,提高外存的利用率,进而提高文件系统的存、取速度。为此,系统中应设置相应的数据结构,用于记录文件存储空间的使用情况,以供分配存储空间时参考。还应具有对存储空间进行分配和回收的功能。

目录管理

  目录管理的主要任务是为每个文件建立一个目录项,目录项包括文件名、文件属性、文件在磁盘上的物理位置等,并对众多的目录项加以有效的组织,以实现方便的按名存取。即用户只需提供文件名,即可对该文件进行存取。目录管理还应能实现文件共享,这样,只需在外存上保留一份该共享文件的副本。此外,还应能提供快速的目录查询手段,以提高对文件检索的速度。

文件的读/写管理和保护

  (1) 文件的读/写管理。该功能是根据用户的请求,从外存中读取数据,或将数据写入外存。在进行文件读/写时,系统先根据用户给出的文件名去检索文件目录,从中获得文件在外存中的位置。然后,利用文件读/写指针,对文件进行读/写。一旦读/写完成,便修改读/写指针,为下一次读/写做好准备。由于读和写操作不会同时进行,故可合用一个读/写指针。
  (2) 文件保护。为了防止系统中的文件被非法窃取和破坏,在文件系统中必须提供有效的存取控制功能,以实现下述目标:①防止未经核准的用户存取文件;②防止冒名顶替存取文件:③防止以不正确的方式使用文件。

操作系统与用户之间的接口

  为了方便用户对操作系统的使用,操作系统向用户提供了 “用户与操作系统的接口二 该接口通常可分为如下两大类:

用户接口

  为了便于用户直接或间接地控制自己的作业,操作系统向用户提供了命令接口。用户可通过该接口向作业发出命令以控制作业的运行。该接口又进一步分为联机用户接口、脱机用户接口和图形用户接口三种。
  (1) 联机用户接口。这是为联机用户提供的,它由一组键盘操作命令及命令解释程序组成。当用户在终端或控制台上键入一条命令后,系统便立即转入命令解释程序,对该命令加以解释执行。在完成指定功能后系统又返回到终端或控制台上,等待用户键入下一条命令。这样,用户便可通过先后键入不同命令的方式来实现对作业的控制,直至作业完成。
  (2) 脱机用户接口。这是为批处理作业的用户提供的。用户用作业控制语言JCL把需要对作业进行的控制和干预的命令事先写在作业说明书上,然后将它与作业一起提供给系统。当系统调度到该作业运行时,通过调用命令解释程序去对作业说明书上的命令逐条解释执行,直至遇到作业结束语句时系统才停止该作业的运行。
  (3) 图形用户接口。通过联机用户接口取得OS的服务既不方便又花时间,用户必须熟 记所有命令及其格式和参数,并逐个字符地键入命令,于是图形用户接口便应运而生。图 形用户接口采用了图形化的操作界面,用非常容易识别的各种图标(icon)来将系统的各项功能、各种应用程序和文件直观、逼真地表示出来。用户可通过菜单(和对话框)用移动鼠标选择菜单项的方式取代命令的键入,以方便、快捷地完成对应用程序和文件的操作,从而把用户从繁琐且单调的操作中解脱出来。

程序接口

  程序接口是为用户程序在执行中访问系统资源而设置的,是用户程序取得操作系统服务的唯一途径。它是由一组系统调用组成的,每一个系统调用都是一个能完成特定功能的子程序。每当应用程序要求OS提供某种服务(功能)时,便调用具有相应功能的系统调用(子程序)。早期的系统调用都是用汇编语言提供的,只有在用汇编语言书写的程序中才能直接使用系统调用。但在高级语言以及C语言中,往往提供了与各系统调用一一对应的库函数,这样,应用程序便可通过调用对应的库函数来使用系统调用。但在近几年所推出的操作系统中,如UNIX、OS/2版本中,其系统调用本身已经采用C语言编写,并以函数形式提供,故在用C语言编制的程序中,可直接使用系统调用。

现代操作系统的新功能

  现代操作系统是在传统操作系统基础上发展起来的,它除了具有传统操作系统的功能外,还增加了面向安全、面向网络和面向多媒体等功能。

系统安全

  通常,政府机关和企事业单位有大量的、重要的信息,必须高度集中地存储在计算机系统中。这样,如何确保在计算机系统中存储和传输数据的保密性、完整性和系统可用性,便成为信息系统亟待解决的重要问题,而保障系统安全性的任务也责无旁贷地落到了现代OS的身上。
  虽然在传统的OS中也采取了一些保障系统安全的措施,但随着计算技术的进步和网络的普及,传统的安全措施已远不能满足要求。为此,在现代OS中采取了多种有效措施来确保系统的安全。在本书中我们仅局限于介绍保障系统安全的几个技术问题,包括:
  (1) 认证技术。这是一个用来确认被认证的对象是否名副其实的过程,以确定对象的真实性,防止入侵者进行假冒和篡改等。如身份认证,是通过验证被认证对象的一个或多个参数的真实性和有效性来确定被认证对象是否名副其实;因此,在被认证对象与要验证的那些参数之间应存在严格的对应关系。
  (2) 密码技术。即对系统中所需存储和传输的数据进行加密,使之成为密文,这样,攻击者即使截获到数据,也无法了解到数据的内容。只有指定的用户才能对该数据予以解密,了解其内容,从而有效地保护了系统中信息资源的安全性。近年来,国内外广泛应用数据加密技术来保障计算机系统的安全性。
  (3) 访问控制技术,可通过两种途径来保障系统中资源的安全:①通过对用户存取权限的设置,可以限定用户只能访问被允许访问的资源,这样也就限定了用户对系统资源的访问范围;②访问控制还可以通过对文件属性的设置来保障指定文件的安全性,如设置文件属性为只读时,该文件就只能被读而不能被修改等。
  (4) 反病毒技术。对于病毒的威胁,最好的解决方法是预防,不让病毒侵入系统,但要完全做到这一点是十分困难的,因此还需要非常有效的反病毒软件来检测病毒。在反病毒软件被安装到计算机后,便可对硬盘上所有的可执行文件进行扫描,检查盘上的所有可执行文件,若发现有病毒,便立即将它清除。

网络功能和服务

  在现代OS中,为支持用户联网取得各类网络所提供的服务,如电子邮件服务、Web服务等,应在操作系统中增加面向网络的功能,用于实现网络通信和资源管理,以及提供用户取得网络服务的手段。作为一个网络操作系统,应当具备多方面的功能:
  (1) 网络通信,用于在源主机和目标主机之间,实现无差错的数据传输,如建立和拆除通信链路、传输控制、差错控制和流量控制等。
  (2) 资源管理,即对网络中的共享资源(硬件和软件)实施有效的管理,协调诸用户对共享资源的使用,保证数据的安全性和一致性。典型的共享硬件资源有硬盘、打印机等,软 件资源有文件和数据。
  (3) 应用互操作,即在一个由若干个不同网络互连所构成的互连网络中,必须提供应 用互操作功能,以实现信息的互通性和信息的互用性。信息的互通性是指在不同网络中的用户之间,能实现信息的互通。信息的互用性是表示用户可以访问不同网络中的文件系统 和数据库系统中的信息。

支持多媒体

  一个支持多媒体的操作系统必须能像一般OS处理文字、图形信息那样去处理音频和视频信息等多媒体信息,为此,现代操作系统增加了多媒体的处理功能:
  (1) 接纳控制功能。在多媒体系统中,为了保证同时运行多个实时进程的截止时间,需要对在系统中运行的软实时任务,即SRT任务的数目、驻留在内存中的任务数目加以限制,为此设置了相应的接纳控制功能,如媒体服务器的接纳控制、存储器接纳控制和进程接纳控制。
  (2) 实时调度。多媒体系统中的每一个任务,往往都是一些要求较严格的、周期性的软实时任务SRT,如为了保证动态图像的连续性,图像更新的周期必须在40ms之内,因此在SRT调度时,不仅需要考虑进程的调度策略,还要考虑进程调度的接纳度等,相比传统的OS这就要复杂得多。
  (3) 多媒体文件的存储。为了存放多媒体文件,对OS最重要的要求是能把硬盘上的数据快速地传送到输出设备上。因此,对于在传统文件系统中数据的离散存放方式以及磁盘寻道方式都要加以改进。

OS结构设计

  早期OS的规模很小,如只有几十KB,完全可以由一个人以手工方式,用几个月的时间编制出来。此时,编制程序基本上是一种技巧,OS是否是有结构的并不那么重要,重要的是程序员的程序设计技巧。但随着OS规模的愈来愈大,其所具有的代码也愈来愈多,往往需要由数十人或数百人甚至更多的人参与,分工合作,共同来完成操作系统的设计。这意味着,应采用工程化的开发方法对大型软件进行开发。由此产生了"软件工程学”。
  软件工程的目标是十分明确的,所开发出的软件产品应具有良好的软件质量和合理的费用。整个费用应能为用户所接受:软件质量可用这样几个指标来评价:功能性、有效性、可靠性、易使用性、可维护性和易移植性。为此,先后产生了多种操作系统的开发方法,如模块化方法、结构化方法和面向对象的方法等。利用不同的开发方法所开发出的操作系统将具有不同的操作系统结构。

传统操作系统的结构

  软件开发技术的不断发展,促进了 OS结构的更新换代。这里,我们把早期的无结构的OS(第一代)、模块化结构的OS(第二代)和分层式结构的OS(第三代),都统称为传统结构的OS,而把微内核结构的OS称为现代结构的OS

无结构操作系统

  在早期开发操作系统时,设计者只是把他的注意力放在功能的实现和获得高的效率上,缺乏首尾一致的设计思想。此时的OS是为数众多的一组过程的集合,每个过程可以任意地相互调用其它过程,致使操作系统内部既复杂又混乱,因此,这种OS是无结构的,也有人把它称为整体系统结构。
  此时程序设计的技巧,只是如何编制紧凑的程序,以便于有效地利用内存。当系统不太大,在一个人能够完全理解和掌握的情况下问题还不是太大,但随着系统的不断扩大,所设计出的操作系统就会变得既庞大又杂乱。这一方面会使所编制出的程序错误很多,给调试工作带来很多困难;另一方面也使程序难以阅读和理解,增加了维护人员的负担。

模块化结构操作系统

1. 模块化程序设计技术的基本概念

  模块化程序设计技术是20世纪60年代出现的一种结构化程序设计技术。该技术基于"分解"和“模块化”的原则来控制大型软件的复杂度。为使OS具有较清晰的结构,OS不再是由众多的过程直接构成的,而是按其功能精心地划分为若干个具有一定独立性和大小的模块。每个模块具有某方面的管理功能,如进程管理模块、存储器管理模块、I/O设备管理模块等,并仔细地规定好各模块间的接口,使各模块之间能通过接口实现交互。然后再进一步将各模块细分为若干个具有一定功能的子模块,如把进程管理模块又分为进程控制、进程同步等子模块,同样也规定好各子模块之间的接口。若子模块较大,可再进一步将它细分。我们把这种设计方法称为模块-接口法,由此构成的操作系统就是具有模块化结构的操作系统图7示出了由模块、子模块等组成的模块化OS结构。

操作系统 模块 进程控制 进程调度 ··· 进程管理 存储器管理 文件管理 ··· ··· 内存分配 内存保护 ··· 磁盘管理 目录管理 ··· 子模块

图7 模块化结构的操作系统

2. 模块独立性

  在模块—接口法中,关键问题是模块的划分和规定好模块之间的接口。如果我们在划分模块时将模块划分得太小,虽然可以降低模块本身的复杂性,但会引起模块之间的联系过多,从而会造成系统比较混乱;如果将模块划分得过大,又会增加模块内部的复杂性,使内部的联系增加,因此在划分模块时,应在两者间进行权衡。
  另外,在划分模块时,必须充分注意模块的独立性问题,因为模块独立性越高,各模块间的交互就越少,系统的结构也就越清晰。衡量模块的独立性有以下两个标准:   (1) 内聚性。指模块内部各部分间联系的紧密程度。内聚性越高,模块独立性越强。   (2) 耦合度。指模块间相互联系和相互影响的程度。显然,耦合度越低,模块独立性越好。

3. 模块接口法的优缺点

  利用模块—接口法开发的OS,较之无结构OS具有以下明显的优点:
  (1) 提高OS设计的正确性、可理解性和可维护性。
  (2) 增强OS的可适应性。
  (3) 加速OS的开发过程。

  模块化结构设计仍存在下述问题:
  (1) 在OS设计时,对各模块间的接口规定很难满足在模块设计完成后对接口的实际需求。
  (2) 在OS设计阶段,设计者必须做出一系列的决定(决策),每一个决定必须建立在上一个决定的基础上,但模块化结构设计中,各模块的设计齐头并进,无法寻找一个可靠的决定顺序,造成各种决定的“无序性”,这将使程序人员很难做到“设计中的每一步决定”都是建立在可靠的基础上,因此模块-接口法又被称为“无序模块法”。

分层式结构操作系统

1. 分层式结构的基本概念

  为了将模块—接口法中“决定顺序”的无序性变为有序性,引入了有序分层法,分层法的设计任务是,在目标系统 \(A_n\) 和裸机系统(又称宿主系统) \(A_0\) 之间,铺设若干个层次的软件 \(A_1,A_2,A_3,\cdot,A_{n-1}\) ,使 \(A_n\) 通过 \(A_{n-1},A_{n-2},\cdots,A_2,A_1\) 层,最终能在 \(A_0\) 上运行。在操作系统中,常采用自底向上法来铺设这些中间层。
  自底向上的分层设计的基本原则是:每一步设计都建立在可靠的基础上。为此规定,每一层仅能使用其底层所提供的功能和服务,这样可使系统的调试和验证都变得更容易。例如,在调试第一层软件 \(A_1\) 时,由于它使用的是一个完全确定的物理机器(宿主系统)所提供的功能,在对 \(A_1\) 软件经过精心设计和几乎是穷尽无遗的测试后,可以认为 \(A_1\) 是正确的,而且它与其所有的高层软件 \(A_2,\cdots,A_n\) 无关;同样在调试第二层软件 \(A_2\) 时,它也只使用了软件 \(A_1\) 和物理机器所提供的功能,而与其高层软件 \(A_3,\cdots,A_n\) 无关,如此一层一层地自底向上增添软件层,每一层都实现若干功能,最后总能构成一个能满足需要的OS。在用这种方法构成操作系统时,已将一个操作系统分为若干个层次,每层又由若干个模块组成,各层之间只存在着单向的依赖关系,即高层仅依赖于紧邻它的低层。

2. 分层结构的优缺点

  分层结构的主要优点有:
  (1) 易保证系统的正确性。自下而上的设计方式使所有设计中的决定都是有序的,或 者说是建立在较为可靠的基础上的,这样比较容易保证整个系统的正确性。
  (2) 易扩充和易维护性。在系统中增加、修改或替换一个层次中的模块或整个层次时,只要不改变相应层次间的接口,就不会影响其他层次,这必将使系统维护和扩充变得更加容易。分层结构的主要缺点是系统效率降低。由于层次结构是分层单向依赖的,必须在每层之间都建立层次间的通信机制,OS每执行一个功能,通常要自上而下地穿越多个层次,这无疑会增加系统的通信开销,从而导致系统效率的降低。

客户/服务器模式(Client/Server Model)简介

  客户/服务器(Client/Server)模式可简称为C/S模式。其在20世纪90年代已风靡全球,不论是LAN,还是企业网,以及Internet所提供的多种服务,都广泛采用了客户/服务器的模式。

客户/服务器模式的由来、组成和类型

  客户/服务器系统主要由三部分组成。
  (1) 客户机:通常在一个LAN网络上连接有多台网络工作站(简称客户机),每台客户机都是一个自主计算机,具有一定的处理能力,客户进程在其上运行,平时它处理一些本 地业务,也可发送一个消息给服务器,以请求某项服务。
  (2) 服务器:通常是一台规模较大的机器,在其上驻留有网络文件系统或数据库系统等,它应能为网上所有的用户提供一种或多种服务。平时它一直处于工作状态,被动地等待来自客户机的请求,一旦检查到有客户提出服务请求,便去完成客户的请求,并将结果送回客户,这样,工作站中的用户进程与服务器进程就形成了客户/服务器关系
  (3) 网络系统:是用于连接所有客户机和服务器,实现它们之间通信和网络资源共享的系统。

客户/服务器之间的交互

  在采用客户/服务器的系统中,通常是客户机和服务器共同完成对应用(程序)的处理。这时,在客户机和服务器之间就需要进行交互,即必须利用消息机制在这两者之间进行多次通信。一次完整的交互过程可分成以下四步:
  (1) 客户发送请求消息。当客户机上的用户要请求服务器进行应用处理时,应输入相应的命令和有关参数。由客户机上的发送进程先把这些信息装配成请求消息,然后把它发往服务器;客户机上的接收进程则等待接收从服务器发回来的响应消息。   (2) 服务器接收消息。服务器中的接收进程平时处于等待状态,一旦有客户机发来请 求,接收进程就被激活,根据请求信息的内容,将之提供给服务器上的相应软件进行处理。
  (3) 服务器回送消息。服务器的软件根据请求进行处理,在完成指定的处理后,把处 理结果装配成一个响应消息,由服务器中的发送进程将之发往客户机。
  (4) 客户机接收消息。客户机中的接收进程把收到的响应消息转交给客户机软件,再 由后者做出适当处理后提交给发送该请求的客户。

客户/服务器模式之间的优点

  C/S模式之所以能成为在分布式系统和网络环境下软件的一种主要工作模式,是由于该模式具有传统集中模式所无法比拟的一系列优点。
  (1) 数据的分布处理和存储。由于客户机具有相当强的处理和存储能力,可进行本地处理和数据的分布存储,从而摆脱了由于把一切数据都存放在主机中而造成的既不可靠又容易产生瓶颈现象的困难局面。
  (2) 便于集中管理。尽管C/S模式具有分布处理功能,但公司(单位)中的有关全局的重 要信息、机密资料、重要设备以及网络管理等,仍可采取集中管理方式,这样可较好地保障系统的“可靠”和"安全”。
  (3) 灵活性和可扩充性。C/S模式非常灵活,极易扩充。理论上,客户机和服务器的数 量不受限制,其灵活性还表现在可以配置多种类型的客户机和服务器上。
  (4) 易于改编应用软件。在客户/服务器模式中,对于客户机程序的修改和增删,比传 统集中模式要容易得多,必要时也允许由客户进行修改。

  基本客户/服务器模式的不足之处是存在着不可靠性和瓶颈问题。在系统仅有一个服务器时,一旦服务器故障,将导致整个网络瘫痪。当服务器在重负荷下工作时,会因忙不过来而显著地延长对用户请求的响应时间。如果在网络中配置多个服务器,并采取相应的安全措施,则这种不足可加以改善。

面向对象的程序设计(Object-Orientated Programming)技术简介

面向对象技术的基本概念

  面向对象技术是20世纪80年代初提出并很快流行起来的。该技术是基于"抽象"和"隐蔽”原则来控制大型软件的复杂度的。所谓对象,是指在现实世界中具有相同属性、服从相同规则的一系列事物(事物可以是一个物理实体、一个概念或一个软件模块等)的抽象,而把其中的具体事物称为对象的实例。如果在OS中的各类实体如进程、线程、消息、存储器和文件等都使用了对象这一概念,相应地,便有了进程对象、线程对象、消息对象、存储器对象和文件对象等。

1. 对象

  在面向对象的技术中,是利用被封装的数据结构(变量)和一组对它进行操作的过程(方法)来表示系统中的某个对象的,如图8所示。对象中的变量(数据)也称为属性,它可以是单个标量或一张表。面向对象中的方法是用于执行某种功能的过程,它可以改变对象的状态,更新对象中的某些数据值或作用于对象所要访问的外部资源。如果把一个文件作为一个对象图9,该对象的变量便是文件类型、文件大小、文件的创建者等。对象中的方法包含对文件的操作,如创建文件、打开文件、读文件、写文件、关闭文件等。

数据结构 过程 1 过程 2 过程 3

图8 一个对象的示意图

  对象中的变量(数据)对外是隐蔽的,因而外界不能对它直接进行访问,必须通过该对象中的一组方法(操作函数)对它进行访问。例如要想对图9所示的文件A执行打开操作,必须用该对象中的打开过程去打开它。同样地,对象中的一组方法的实现细节也是隐蔽的,因此对象中的变量可以得到很好的保护,而不会允许未经受权者使用和对它进行不正确的操作。

类名 属性 操作 (类名)对象名 属性值 操作 类的实例 文件 类型 打开() 大小 创建者 () () 关闭() 文件 图表 打开() 20K X用户 () () 关闭()

图9 类和对象的关系

2. 对象类

  在实践中,有许多对象可能表示的是同一类事物,每个对象具有自己的变量集合,而它们所具有的方法是相同的。如果为每一个相似的对象都定义一组变量和方法,显然是低效的,由此产生了“对象类”的概念,利用"对象类”来定义一组大体相似的对象。一个类同样定义了一组变量和针对该变量的一组方法,用它们来描述一组对象的共同属性和行为。类是在对象上的抽象,对象则是类的实例。对象类中所定义的变量在实例中均有具体的值。
  例如,我们将文件设计成一个类,类的变量同样是文件类型、文件大小和创建者等。类中的方法是文件的创建、打开、读写、关闭等。图9示出了一个文件类,在类的变量中没有具体数值,一旦被赋予了具体数值就成了文件A对象。对象类的概念非常有用,因为它极大地提高了创建多个相似对象的效率。

3. 继承

  在面向对象的技术中,可以根据已有类来定义一个新的类,新类被称为子类(B),原来的类被称为父类(A),见图10所示。继承是父类和子类之间共享变量和方法的机制,该机制规定子类自动继承父类中定义的变量和方法,并允许子类再增加新的内容。继承特性可使定义子类变得更容易。一个父类可以定义多个子类,它们分别是父类的某种特例,父类描述了这些子类的公共变量和方法。类似地,这些子类又可以定义自己的子类,通过此途经可以生成一个继承的层次。另外,也允许一个子类有两个父类或多个父类,它可以从多个父类获得继承,此时称为"多重继承”。

继承部分 A 增加部分 B 从A继承

图10 类和继承的关系

面向对象技术的优点

  在操作系统设计时,将计算机中的实体作为对象来处理,可带来如下好处:   (1) 通过“重用”提高产品质量和生产率。在面向对象技术中可通过“重用”以前项目中经过精心测试的对象或“重用”由其他人编写、测试和维护的对象类来构建新的系统,这不仅可大大降低开发成本,而且能获得更好的系统质量。
  (2) 使系统具有更好的易修改性和易扩展性。通过封装,可隐蔽对象中的变量和方法,因而当改变对象中的变量和方法时,不会影响到其它部分,从而可方便地修改老的对象类。另外,继承是面向对象技术的重要特性,在创建一个新对象类时,通过利用继承特性可显著减少开发的时空开销,使系统具有更好的易扩展性和灵活性。
  (3) 更易于保证系统的"正确性”和"可靠性”。对象是构成操作系统的基本单元,由于可以独立地对它进行测试,易于保证每个对象的正确性和可靠性,因此也就比较容易保证整个系统的正确性和可靠性。此外,封装对对象类中的信息进行了隐蔽,这样又可有效地防止未经授权者的访问和用户不正确的使用,有助于构建更为安全的系统。

微内核操作系统

  微内核(MicroKernel)操作系统结构是20世纪80年代后期发展起来的。由于它能有效地支持多处理机运行,故非常适用于分布式系统环境,当前比较流行的、能支持多处理机运行的OS,几乎全部都采用了微内核结构,如CarngieMellon大学研制的MachOS,便属于微内核结构OS;又如当前广泛使用的Windows2000/XP操作系统,也采用了微内核结构。

微内核操作系统的基本概念

  为了提高操作系统的"正确性”、“灵活性”、“易维护性”和“可扩充性”,在进行现代操作系统结构设计时,即使在单计算机环境下,大多也采用基于客户/服务器模式的微内核结构,将操作系统划分为两大部分:微内核和多个服务器。至于什么是微内核操作系统结构,现在尚无一致公认的定义,但我们可以从下面四个方面对微内核结构的操作系统进行描述。

1. 足够小的内核

  在微内核操作系统中,内核是指精心设计的、能实现现代OS最基本核心功能的小型内核,微内核并非是一个完整的OS,而只是将操作系统中最基本的部分放入微内核,通常包含有:①与硬件处理紧密相关的部分:②一些较基本的功能;③客户和服务器之间的通信。这些OS最基本的部分只是为构建通用OS提供一个重要基础,这样就可以确保把操作系统内核做得很小。

2. 基于客户/服务器模式

  由于客户/服务器模式具有非常多的优点,故在单机微内核操作系统中几乎无一例外地都采用客户/服务器模式,将操作系统中最基本的部分放入内核中,而把操作系统的绝大部分功能都放在微内核外面的一组服务器(进程)中实现,如用于提供对进程(线程)进行管理的进程(线程)服务器、提供虚拟存储器管理功能的虚拟存储器服务器、提供I/O设备管理的I/O设备管理服务器等,它们都是被作为进程来实现的,运行在用户态,客户与服务器之间是借助微内核提供的消息传递机制来实现信息交互的。图11示出了在单机环境下的客户/服务器模式。

客户 进程 客户 进程 进程 服务器 终端 服务器 ··· 文件 服务器 存储器 服务器 核心 请求 回答 用户方式 核心方式

图11 在单机环境下的客户/服务器模式

3. 应用“机制与策略分离”原理

  在现在操作系统的结构设计中,经常利用“机制与策略分离”的原理来构造OS结构。所谓机制,是指实现某一功能的具体执行机构。而策略,则是在机制的基础上借助于某些参数和算法来实现该功能的优化,或达到不同的功能目标。通常,机制处于一个系统的基层,而策略则处于系统的高层。在传统的OS中,将机制放在OS的内核的较低层,把策略放在内核的较高层次中。而在微内核操作系统中,通常将机制放在OS的微内核中。正因为如此,才有可能将内核做得很小。

4. 采用面向对象技术

  操作系统是一个极其复杂的大型软件系统,我们不仅可以通过结构设计来分解操作系统的复杂度,还可以基于面向对象技术中的"抽象”和"隐蔽”原则控制系统的复杂性,再进一步利用"对象”、“封装”和“继承”等概念来确保操作系统的"正确性”、“可靠性”、“易修改性”、“易扩展性”等,并提高操作系统的设计速度。正因为面向对象技术能带来如此多的好处,故面向对象技术被广泛应用于现代操作系统的设计中。

微内核的基本功能

  微内核应具有哪些功能,或者说哪些功能应放在微内核内,哪些应放在微内核外,目前尚无明确的规定。现在一般都采用“机制与策略分离”的原理,将机制部分以及与硬件紧密相关的部分放入微内核中。由此可知微内核通常具有如下几方面的功能:

1. 进程(线程)管理

  大多数的微内核OS,对于进程管理功能的实现,都采用“机制与策略分离”的原理,例如,为实现进程(线程)调度功能,须在进程管理中设置一个或多个进程(线程)优先级队列;能将指定优先级进程(线程)从所在队列中取出,并将其投入执行。由于这一部分属于调度功能的机制部分,应将它放入微内核中。而对于用户(进程)如何进行分类,以及其优先级的确认方式或原则,则都是属于策略问题。可将它们放入微内核外的进程(线程)管理服务器中。由于进程(线程)之间的通信功能是微内核OS最基本的功能,被频繁使用,因此几乎所有的微内核OS都是将进程(线程)之间的通信功能放入微内核中。此外,还将进程的切换、线程的调度,以及多处理机之间的同步等功能也放入微内核中。

2. 低级存储器管理。

  通常在微内核中,只配置最基本的低级存储器管理机制,如用于实现将用户空间的逻辑地址变换为内存空间的物理地址的页表机制和地址变换机制,这一部分是依赖于硬件的,因此放入微内核。而实现虚拟存储器管理的策略,则包含应采取何种页面置换算法、采用何种内存分配与回收的策略等,应将这部分放在微内核外的存储器管理服务器中去实现。

3. 中断和陷入处理

  大多数微内核操作系统都是将与硬件紧密相关的一小部分放入微内核中处理,此时微内核的主要功能是捕获所发生的中断和陷入事件,并进行相应的前期处理,如进行中断现场保护,识别中断和陷入的类型,然后将有关事件的信息转换成消息后,把它发送给相关的服务器。由服务器根据中断或陷入的类型调用相应的处理程序来进行后期处理。在微内核OS中是将进程管理、存储器管理以及I/O管理这些功能-分为二,属于机制的很小一部分放入微内核中,另外绝大部分放在微内核外的各种服务器中来实现。事实上,其中大多数服务器都要比微内核大。这进一步说明了为什么能在采用客户/服务器模式后,还能把微内核做得很小的原因。

微内核操作系统的优点

  由于微内核OS结构是建立在模块化、层次化结构的基础上的,并采用了客户/服务器模式和面向对象的程序设计技术,因此,微内核结构的操作系统是集各种技术优点之大成,因而使之具有如下优点:
  (1) 提高了系统的可扩展性。由于微内核OS的许多功能是由相对独立的服务器软件来实现的,当开发了新的硬件和软件时,微内核OS只需在相应的服务器中增加新的功能, 或再增加一个专门的服务器。与此同时,也必然改善系统的灵活性,不仅可在操作系统中增加新的功能,还可修改原有的功能,以及删除已过时的老功能,以形成一个更为精干的有效的操作系统。
  (2) 增强了系统的可靠性。这一方面是由于微内核是通过精心设计和严格测试的,容易保证其正确性,另一方面,它提供了规范而精简的应用程序接口(API),为微内核外部的 程序编制高质量的代码创造了条件。此外,由于所有服务器都是运行在用户态,服务器与服务器之间采用的是消息传递通信机制,因此,当某个服务器出现错误时,不会影响内核,也不会影响其它服务器。
  (3) 可移植性强。随着硬件的快速发展,出现了各种各样的硬件平台,作为一个好的 操作系统,必须具备可移植性,使其能较容易地运行在不同的计算机硬件平台上。在微内 核结构的操作系统中,所有与特定CPU和I/O设备硬件有关的代码,均放在内核和内核下 面的硬件隐藏层中,而操作系统其它绝大部分——各种服务器,均与硬件平台无关,因而, 把操作系统移植到另一个计算机硬件平台上所需作的修改是比较小的。
  (4) 提供了对分布式系统的支持。由于在微内核0S中,客户和服务器之间、服务器和服务器之间的通信采用消息传递通信机制,致使微内核OS能很好地支持分布式系统和网络系统。事实上,只要在分布式系统中赋予所有进程和服务器唯一的标识符,在微内核中再配置一张系统映射表(即进程和服务器的标识符与它们所驻留的机器之间的对应表),在进行客户与服务器通信时,只需在所发送的消息中标上发送进程和接收进程的标识符,微内核便可利用系统映射表将消息发往目标,而无论目标是驻留在哪台机器上。
  (5) 融入了面向对象技术。在设计微内核OS时采用了面向对象的技术,其中的“封装”,“继承”,“对象类”和“多态性”,以及在对象之间采用消息传递机制等,都十分有利于提高系统的正确性、可靠性、易修改性、易扩展性等,而且还能显著地减少开发系统所付出的开销。

微内核操作系统存在的问题

  应当指出,在微内核操作系统中,由于采用了非常小的内核,客户/服务器模式和消息传递机制虽给微内核操作系统带来了许多优点,但由此也使微内核OS存在着潜在缺点,其中最主要的是,较之早期的操作系统,微内核操作系统的运行效率有所降低。
  效率降低最主要的原因是,在完成一次客户对操作系统提出的服务请求时,需要利用消息实现多次交互和进行用户/内核模式与上下文的多次切换。然而,在早期的OS中,用户进程在请求取得OS服务时,一般只需进行两次上下文的切换:一次是在执行系统调用后由用户态转向系统态时:另一次是在系统完成用户请求的服务后,由系统态返回用户态时。
  在微内核OS中,由于客户和服务器、服务器和服务器之间的通信都需通过微内核,致使同样的服务请求至少需要进行四次上下文切换。第一次是发生在客户发送请求消息给内核,以请求取得某服务器特定的服务时;第二次是发生在由内核把客户的请求消息发往服务器时;第三次是当服务器完成客户请求后,把响应消息发送到内核时;第四次是在内核将响应消息发送给客户时。
  实际情况是往往还会引起更多的上下文切换。例如,当某个服务器自身尚无能力完成客户请求而需要其它服务器的帮助时,如图12所示,其中的文件服务器还需要磁盘服务器的帮助,这时就需要进行8次上下文的切换。

客户机应用 OS内核 (a)在整体式内核文件操作中的上下文切换 客户机应用 文件服务器 磁盘设备驱动器 微内核 (b)在微内核中等价操作中的上下文切换

图12 在传统OS和微内核OS中的上下文切换

  为了改善运行效率,可以重新把一些常用的操作系统基本功能由服务器移入微内核中。这样可使客户对常用操作系统功能的请求所发生的用户/内核模式和上下文的切换的次数由4次或8次降为2次。但这又会使微内核的容量明显地增大,在小型接口定义和适应性方面的优点也有所下降,并提高了微内核的设计代价。

弱小和无知不是生存的障碍,傲慢才是。

刘慈欣, 《三体Ⅲ:死神永生》
本图书馆累计发布了20篇文章 共33.6万字
本图书馆访客数 访问量