操作系统简史

default

OS History | 操作系统的前世今生

OS 的形成迄今已有 50 多年的时间。在上世纪 50 年代中期出现了单道批处理操作系统;60 年代中期产生了多道程序批处理系统;不久又出现了基于多道程序的分时系统,与此同时也诞生了用于工业控制和武器控制的实时操作系统。20 世纪 80 年代开始至 21 世纪初,是微型机、多处理机和计算机网络高速发展的年代,同时也是微机 OS、多处理机 OS 和网络 OS 以及分布式 OS 的形成和大发展的年代。

人工操作与脱机输入输出

在没有操作系统的年代即由用户 ( 即程序员 ) 采用人工操作方式直接使用计算机硬件系统,即由程序员将事先已穿孔 ( 对应于程序和数据 ) 的纸带 ( 或卡片 ) 装入纸带输入机 ( 或卡片输入机 ),再启动它们将程序和数据输入计算机,然后启动计算机运行。当程序运行完毕并取走计算结果之后,才让下一个用户上机。这种人工操作方式有以下两方面的缺点 : (1) 用户独占全机。此时,计算机及其全部资源只能由上机用户独占。 (2) CPU 等待人工操作。当用户进行装带 ( 卡 )、卸带 ( 卡 ) 等人工操作时,CPU 及内存等资源是空闲的。可见,人工操作方式严重降低了计算机资源的利用率,此即所谓的人机矛盾。随着 CPU 速度的提高和系统规模的扩大,人机矛盾变得日趋严重。此外,随着 CPU 速度的迅速提高而 IO 设备的速度却提高缓慢,这又使 CPU 与 IO 设备之间速度不匹配的矛盾更加突出。为了缓和此矛盾,曾先后出现了通道技术、缓冲技术,但都未能很好地解决上述矛盾,直至后来又引入了脱机输入 / 输出技术,才获得了较为令人满意的结果。

该技术是事先将装有用户程序和数据的纸带 ( 或卡片 ) 装入纸带输入机 ( 或卡片机 ),在一台外围机的控制下,把纸带 ( 卡片 ) 上的数据 ( 程序 ) 输入到磁带上。当 CPU 需要这些程序和数据时,再从磁带上将其高速地调入内存。类似地,当 CPU 需要输出时,可由 CPU 直接高速地把数据从内存送到磁带上,然后再在另一台外围机的控制下,将磁带上的结果通过相应的输出设备输出。上图示出了脱机输入 / 输出过程。由于程序和数据的输入和输出都是在外围机的控制下完成的,或者说,它们是在脱离主机的情况下进行的,故称为脱机输入 / 输出方式;反之,在主机的直接控制下进行输入 / 输出的方式称为联机输入 / 输出 (On-Line IO) 方式。这种脱机 IO 方式的主要优点如下: (1) 减少了 CPU 的空闲时间。装带 ( 卡 )、卸带 ( 卡 ) 以及将数据从低速 IO 设备送到高速磁带 ( 或盘 ) 上,都是在脱机情况下进行的,并不占用主机时间,从而有效地减少了 CPU 的空闲时间,缓和了人机矛盾。 (2) 提高了 IO 速度。当 CPU 在运行中需要数据时,是直接从高速的磁带或磁盘上将数据调入内存的,不再是从低速 IO 设备上输入,极大地提高了 IO 速度,从而缓和了 CPU 和 IO 设备速度不匹配的矛盾,进一步减少了 CPU 的空闲时间。

单道批处理系统

把一批作业以脱机方式输入到磁带上,并在系统中配上监督程序 (Monitor),在它的控制下使这批作业能一个接一个地连续处理。其自动处理过程是:首先,由监督程序将磁带上的第一个作业装入内存,并把运行控制权交给该作业。当该作业处理完成时,又把控制权交还给监督程序,再由监督程序把磁带 ( 盘 ) 上的第二个作业调入内存。计算机系统就这样自动地一个作业一个作业地进行处理,直至磁带 ( 盘 ) 上的所有作业全部完成,这样便形成了早期的批处理系统。由于系统对作业的处理都是成批地进行的,且在内存中始终只保持一道作业,故称此系统为单道批处理系统 (Simple Batch Processing System)。

多道批处理系统

20 世纪 60 年代中期,人们开始利用小规模集成电路来制作计算机,生产出第三代计算机。由 IBM 公司生产的第一台小规模集成电路计算机 ——360 机,较之于晶体管计算机,无论在体积、功耗、速度和可靠性上,都有了显著的改善。虽然在开发 360 机器使用的操作系统时,为能在机器上运行多道程序而遇到了极大的困难,但最终还是成功地开发出能在一台机器中运行多道程序的操作系统 OS/360。在单道批处理系统中,内存中仅有一道作业,它无法充分利用系统中的所有资源,致使系统性能较差。为了进一步提高资源的利用率和系统吞吐量,在 20 世纪 60 年代中期又引入了多道程序设计技术,由此而形成了多道批处理系统 (Multiprogrammed Batch Processing System)。在该系统中,用户所提交的作业都先存放在外存上并排成一个队列,称为 “ 后备队列 ”;然后,由作业调度程序按一定的算法从后备队列中选择若干个作业调入内存,使它们共享 CPU 和系统中的各种资源。

分时系统

分时系统 (Time Sharing System) 与多道批处理系统之间有着截然不同的性能差别,它能很好地将一台计算机提供给多个用户同时使用,提高计算机的利用率。它被经常应用于查询系统中,满足许多查询用户的需要。为实现分时系统,必须解决一系列问题。其中最关键的问题是如何使用户能与自己的作业进行交互,即当用户在自己的终端上键入命令时,系统应能及时接收并及时处理该命令,再将结果返回给用户。此后,用户可继续键入下一条命令,此即人 - 机交互。应强调指出,即使有多个用户同时通过自己的键盘键入命令,系统也应能全部地及时接收并处理这些命令。

实时系统

所谓 “ 实时 ”,是表示 “ 及时 ”,而实时系统 (Real Time System) 是指系统能及时 ( 或即时 ) 响应外部事件的请求,在规定的时间内完成对该事件的处理,并控制所有实时任务协调一致地运行。

微机操作系统

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

单用户单任务操作系统

单用户单任务操作系统的含义是,只允许一个用户上机,且只允许用户程序作为一个任务运行。这是最简单的微机操作系统,主要配置在 8 位和 16 位微机上。最有代表性的单用户单任务微机操作系统是 CP/M 和 MS-DOS。

单用户多任务操作系统

单用户多任务操作系统的含义是,只允许一个用户上机,但允许用户把程序分为若干个任务,使它们并发执行,从而有效地改善了系统的性能。目前在 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 年微软又发布了 32 位版本的 Windows XP,同时提供了家用和商业工作站两种版本,它是当前使用最广泛的个人操作系统。2001 年还发布了 64 位版本的 Windows XP。在开发上述 Windows 操作系统的同时,微软公司又开始开发网络操作系统 Windows NT,它是针对网络开发的操作系统,在系统中融入了许多面向网络的功能,这里就不对它进行详细介绍了。

多用户多任务操作系统

多用户多任务操作系统的含义是,允许多个用户通过各自的终端使用同一台机器,共享主机系统中的各种资源,而每个用户程序又可进一步分为几个任务,使它们能并发执行,从而可进一步提高资源利用率和系统吞吐量。在大、中和小型机中所配置的大多是多用户多任务操作系统,而在 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 OS 和 Linux OS。 (1) Solaris OS : SUN 公司于 1982 年推出的 SUN OS 1.0 是一个运行在 Motorola 680x0 平台上的 UNIX OS。在 1988 年宣布的 SUN OS 4.0 把运行平台从早期的 Motorola 680x0 平台迁移到 SPARC 平台,并开始支持 Intel 公司的 Intel 80x86;1992 年 SUN 发布了 Solaris 2.0。从 1998 年开始,Sun 公司推出 64 位操作系统 Solaris 2.7 和 2.8,这几款操作系统在网络特性、互操作性、兼容性以及易于配置和管理方面均有很大的提高。 (2) Linux OS : Linux 是 UNIX 的一个重要变种,最初是由芬兰学生 Linus Torvalds 针对 Intel 80386 开发的。1991 年在 Internet 网上发布第一个 Linux 版本,由于源代码公开,因此有很多人通过 Internet 与之合作,使 Linux 的性能迅速提高,其应用范围也日益扩大。相应地,源代码也急剧膨胀,此时它已是具有全面功能的 UNIX 系统,大量在 UNIX 上运行的软件 ( 包括 1000 多种实用工具软件和大量的网络软件 ) 被移植到 Linux 上,而且可以在主要的微机上运行,如 Intel 80x86 Pentium 等。

Unix 和 Posix

20 世纪 60 年代是大型、复杂操作系统盛行的年代, 如 IBM 的 OS/360 和 Honeywell 的 Multics 系统。OS/360 是历史上最成功的软件项目之一,而 Multics 虽然持续存在了多年,却从来没有被广泛应用。贝尔实验室曾经是 Multics 项目的最初参与者,但是考虑到该项目的复杂性和缺乏进展于 1969 年退出。鉴于 Multics 项目不愉快的经历,一组贝尔实验室的研究人员—Ken Thompson、Dennis Ritchie、Doug Mcllroy 和 Joe Ossanna,从 1969 年开始在 DEC PDP-7 计算机上完全用机器语言编写了一个简单得多的操作系统。这个新系统中的很多思想,如层次文件系统、作为用户级进程的外壳概念,都是来自于 Multics,只不过在一个更小、更简单的程序包里实现。1970 年,Brian Kernighan 给新系统命名为“Unix”,这也是一个双关语,暗指“Multics” 的复杂性。1973 年用 C 语言重新编写其内核,1974 年,Unix 开始正式对外发布。

贝尔实验室以慷慨的条件向学校提供源代码,所以 Unix 在大专院校里获得了很多支持并继续发展。最有影响的工作是 20 世纪 70 年代晚期到 80 年代早期,在美国加州大学伯克利分校,伯克利的研究人员在一系列发布版本中增加了虚拟存储器和 Internet 协议,称为 Unix 4.xBSD(Berkeley Software Distribution)。与此同时,贝尔实验室也在发布自己的版本,即 System V Unix。其他厂商的版本,如 Sun Microsystems 的 Solaris 系统,则是从这些最初的 BSD 和 System V 版本中衍生而来。

20 世纪 80 年代中期,Unix 厂商试图通过加入新的、往往不兼容的特性来使它们的程序与众不同,麻烦也就随之而来了。为了阻止这种趋势,IEEE(电气和电子工程师协会)开始努力标准化 Unix 的开发,后来由 Richard Stallman 命名为“Posix”。结果就得到了一系列的标准,称做 Posix 标准。这套标准涵盖了很多方面,比如 Unix 系统调用的 C 语言接口、外壳程序和工具、线程及网络编程。随着越来越多的系统日益完全地遵从 Posix 标准,Unix 版本之间的差异正在逐渐消失。