Operating Systems: Design and Implementation
Second Edition
操作系统设计与实现
第二版
安德鲁.坦尼鲍姆(Andrew S. Tanenbaum)
阿尔伯特.伍德豪尔(Albert S. Woodhull)
若某件事可能出错,则它一定会出错
操作系统:设计与实现
作者简介
前言
译序
第一章 引言
第二章 进程
第三章 输入/输出系统
第四章 存储器管理
第五章 文件系统
第六章 阅读材料和参考文献
【作者简介】:
安德鲁.坦尼鲍姆分别在麻省理工学院和加州大学伯克利分校获得学士和博士学
位。他现任位于荷兰阿姆斯特丹市的Vrije大学计算机科学教授并领导着一个计算机系
统研究小组。同时他还任一个研究并行、分布及图像系统的校际研究生院 - 计算机与
图像高级学院的院长。
坦尼鲍姆先前的研究领域包括编译器、操作系统、网络和局域分布式系统,他现在
的研究主要集中在可扩展到数百万用户的广域分布式系统。对这些课题的研究使他在学
报和会议上发表了70余篇论文,并出版了五部专著。
坦尼鲍姆教授同时还主持开发了大量的软件。他是Amsterdam编译工具箱的总设计
师,该工具箱被广泛地用来开发可移植的编译器,同时还用于MINIX的开发。他和他的
博士研究生及程序员们一起设计了一个基于微内核的高性能分布式操作系统 -
Amoeba。现在,以教学和研究为目的的用户可以从Internet上免费获得MINIX 和Amoeba
软件。
坦尼鲍姆的许多博士研究生在获得学位后都取得了非常丰硕的成果,这令坦尼鲍姆
非常自豪,因为这是他诲人不倦的结果。
坦尼鲍姆教授同时还是ACM的会士、IEEE高级会员、荷兰皇家艺术和科学院院士,
他曾获得1994年ACM Karl V. Karlstrom 杰出教育奖和1997年ACM/SIGCSE 计算机科学
教育杰出贡献奖。他被列入Internet上的 Who's Who in the World 名单,他在WWW上
的主页地址为:http://www.cs.vu.nl/~ast/。
阿尔伯特.伍德豪尔分别在麻省理工学院和华盛顿大学获得学士和博士学位。他进
麻省理工学院本来是想成为一名电气工程师,可是后来却成了生物学家。从1973年起他
开始在位于麻省Amherst的Hampshire自然科学学院工作。当微型计算机慢慢多起来的时
候,作为使用电子检测仪器的生物学家,他开始使用微型计算机。他给学生开设的检测
仪器方面的课程逐渐演变为计算机接口和实时程序设计。
伍德豪尔博士对教学和科学技术的发展有浓厚的兴趣,在进入研究生院之前他曾在
尼日利亚教过两年中学,近年来他曾几次利用自己的假期在尼加拉瓜教授计算机科学。
他对计算机作为电子系统,以及计算机与其他电子系统的相互配合很感兴趣。他最
喜欢讲授的课程有计算机体系结构、汇编语言程序设计、操作系统和计算机通信。他还
为开发电子器件及相关软件担当顾问。
在学术之外,伍德豪尔有不少兴趣,包括各种户外运动,业余无线电制作和读书。
他还喜欢旅游和学习别国语言。他的WWW主页就存在一台运行MINIX的机器上,地址是:
http://minix1.hampshire.edu/asw/。
前言
多数操作系统教材都重理论而轻实践,本书希望在这二者之间求取较好的平衡。本
书详细论述了操作系统的所有基本概念,包括进程、进程间通信、信号量、管程、消息
传递、调度算法、输入/输出、死锁、设备驱动程序、存储器管理、页面调度算法、文
件系统设计、安全与保护机制等。同时,本书也详细讨论了MINIX - 一个与UNIX兼容
的操作系统,并提供了完整的源代码供学习之用。这样的安排使读者不仅学习到理论,
而且能够理解它们如何应用在一个实际的操作系统之中。
本书第一版在1987年出版时,曾引发了操作系统课程教学的一场小小的变革。在此
之前多数课程都只讲理论。随着MINIX的出现,许多学校开始增加实验环节以使学生了
解实际的操作系统是如何运作的。我们认为这种趋势是可取的,并希望通过本书第二版
能进一步加强这种趋势。
MINIX在其出现以来的十年间发生了许多变化,最初的代码是为基于8088芯片、256K
内存和两个软驱的IBM PC机型编写的,它基于UNIX 版本7。随着时间的推移,MINIX在
许多方面有所发展,比如当前版本可运行在众多机型上,从16位实模式的PC机到配有大
容量硬盘的奔腾机(32位保护模式),而且它不再基于UNIX版本7,而是基于国际上的
POSIX标准(POSIX 1003.1和ISO9945-1)。与此同时,有许多新特征被添加到MINIX中,
在我们看来,所增加的特征可能已经太多了,但有些人则认为还不够,这最终导致了
LINUX的诞生。MINIX还被移植到许多其他平台上,包括Macintosh、Amiga、Atari和SPARC。
本书只涉及MINIX2.0,到目前为止,该版本只能运行于基于80X86的机器,或者可模拟
copy readme.txt prn
此类CPU的机器,以及SPARC机器。
与第一版相比,第二版有许多变化,原理性部分基本都被修改过,同时增加了大量
新内容。最主要的变化是新的基于POSIX的MINIX,以及对其源代码的剖析。另外,每本
书都附带一张CD-ROM,它包含了全部MINIX源代码,以及在PC上安装MINIX的说明(见
CD-ROM主目录下的README.TXT文件)。
在一台80X86 的PC机上安装MINIX很方便。它需要一个至少30MB的硬盘分区,然后
按照CD-ROM上README.TXT文件中的步骤进行即可。在打印README.TXT文件之前,先启
动MS-DOS(若运行WINDOWS,则双击MS-DOS图标),然后键入
即可。该文件也可以用edit、wordpad、notepad等任何可以处理ASCII正文的编辑器进
行浏览。
对于没有PC机的学校和个人,有两种解决办法,即CD-ROM上提供的两个模拟程序。
一个由Paul Ashton 为SPARC机器编写,它作为用户程序在Solaris上运行,此时MINIX
被编译成SPARC上的可执行文件。在这种模式下,MINIX不再是一个操作系统,而只是一
个用户程序,所以必须对其底层作一些修改。
另一个模拟程序由Bochs软件公司的Kevin.P.Lawton编写,它解释Intel 80386的指
令集以及足以使MINIX运行所需的I/O指令。显然在解释器层次上运行使性能有所下降,
但这使得学生更容易进行调试。该模拟程序运行在所有支持M.I.T的X-Window的系统上,
更详细的信息请参看CD-ROM上的有关文件。
MINIX仍在继续发展,本书和CD-ROM中的内容仅仅反映了本书出版时的情况,有关
MINIX的最新动态请访问MINIX的主页:http://www.cs.vu.nl/~ast/minix.html。MINIX
也有USENET中的新闻组:comp.os.minix,读者可以订阅该新闻组。对于仅有Email的读
者可通过以下步骤来加入MINIX的邮件用户通信组。给 listserv@listserv.nodak.edu
发一封信,其中只需一行字:"subscribe minix-1 <您的完整用户名>",此后你便会
通过E-mail获得很多的信息。
讲授本课程的教师可以从Prentice Hall公司获得一份习题解答手册。从WWW地址
http://www.cs.vu.nl/~ast/沿着"Software and supplementary material"链接可以获
得一些有用的PostScript文件,其中包含本书中所有的图表,可供需要时使用。
在MINIX的开发项目中我们有幸得到了许多人的帮助。首先要感谢Kees Bot在MINIX
标准化和软件发布中所作的大量工作,没有他的帮助,我们不可能完成这件工作。他自
己编写了大量的代码(如POSIX终端I/O)并修正了一些数年来一直存在的错误,他还整
理了其他的代码。
这些年来Bruce Evans、 Phlip Homburg、Will Rose和Michael Temari为MINIX的
开发做了大量的工作。 有几百人通过新闻组对MINIX作出了贡献,他们人数众多,所作
出的贡献也各不相同,在此谨向他们一并表示感谢。
贵建议,在此向他们表示谢意。
Vrije大学的许多学生测试了CD-ROM中MINIX的 β版本,他们是:Ahmed Batou,
Goran Dokic, Peter Gijzel, Thomer Gil, Dennis Grimbergen, Roderick Groesbeek,
Wouter haring, Guido Kollerie, Mark Lassche, Raymond Ris, Frans ter Borg, Alex
van Ballegooy, Ries van der Velden, Alexander Wels以及Thomas Zeeman。我们对
他们细致的工作和详尽的报告致以衷心的感谢。
阿尔伯特·S·伍德豪尔向他从前的几位学生表示感谢,特别是Hampshire学院的
Peter W. Young ,Nacional Autonoma de Nicaragua大学的Maria Isabel Sanchez 和
John Casey、 Dale Grit、 Frans Kashoek等人阅读了本书的部分手稿并提出了宝
William Puddy Vargas。
最后要向我们的家庭成员表示感谢。Suzanne 已是第十次在我埋头写作时给我支
持,对Barbara是第九次,Marvin是第八次,甚至小Bram也是第四次了。他们的支持和
爱心对我非常重要。(坦尼鲍姆)
至于阿尔伯特的Barbara,这倒是第一次,假如没有她的支持,耐心和幽默,我们
是不可能完成这一工作的,对我的儿子Gordon而言,由于在编写本书时,他大部分时间
都不在家中,而是在大学学习,因此是非常幸运的。但是他的理解和关心深深吸引着我
从事本书的编写工作,有这样一个儿子是令人非常愉快的。(伍德豪尔)
安德鲁.S.坦尼鲍姆
阿尔伯特.S.伍德豪尔
译序
坦尼鲍姆教授是国际知名的计算机科学家和教育家。他在操作系统、分布式系统以
及计算机网络领域都有很深的造诣。自八十年代以来,他已先后出版了一系列面向大学
生和研究生的教材性质的专著,并被世界各国的许多大学广泛采用。这本书就是他的最
新专著之一。
操作系统是计算机系统中最核心和最底层的软件,对操作系统的深入学习关系到对
整个系统运作机制的全面理解,因此一本好教材也显得愈发重要。本书的英文版出版于
1997年,其中涵盖了操作系统课程的所有内容,即传统上的进程管理、存储器管理、文
件管理和设备管理。同时其中又包含了许多新内容,如线程、基于消息传递的系统构造
模型、日志结构文件系统、安全和保护机制、RAM盘及CD-ROM设备等,而用作例子的CPU
则为Interl Pentium。这使得读者一方面能够学习操作系统的经典内容,另一方面又能
够了解和跟踪当前的最新技术和研究成果。
本书的另一个特点是基本原理与具体实例,即MINIX紧密结合。第2到第5章的前半
部分讲述原理,后半部分则详细地解释这些原理在MINIX的设计和实现中的应用。通过
阅读这些部分能够把握MINIX源代码的组织方式,并理解那些很关键或者很难懂的代码。
这部分内容非常翔实,有时甚至逐行地解释附录中所列的源程序。对操作系统课程多年
的授课经验以及相关的科研工作使我们认识到:详细地剖析一个象MINIX这样的操作系
统对于掌握操作系统设计与实现的精髓是大有裨益的。
正因为上述原因,我们真切地感受到将这本书翻译、介绍给国内读者将是一件非常
有意义的事,衷心希望我们付出的劳动能对国内的操作系统教学和实践有所帮助和促
进。
本书的第一章,第二章,第三章由王鹏翻译,刘福岩和陆宁也参加了部分工作;第
四章由朱鹏翻译;第五章由敖青云翻译。全书由尤晋元教授审校并统稿。
在整个翻译过程中,上海交通大学计算机系系统软件研究室的师生给予了许多帮
助。并且在计算机系95级本科生的操作系统课程中进行了试用,许多学生提出了很好的
建议,在此向他们表示衷心的感谢。
特别要感谢本书的责任编辑邓又强先生,本书的顺利出版与他的辛勤劳动和热情支
持是分不开的。
虽然在翻译过程中我们尽力恪守"信,达,雅"的准则,但不当和疏漏之处在所难免,
译 者
1998年4月于上海交通大学
敬请读者提出宝贵建议。
第一章 引言
计算机如果离开了软件将成为一堆废铜烂铁。有了软件,计算机可以对信息进行存
储、处理和检索,可以显示多媒体文档、搜索Internet并完成其他工作。计算机软件大
致分为两类:系统软件和应用软件。系统软件管理计算机本身及应用程序;应用软件执
行用户最终所需要的功能。最基本的系统软件是操作系统(operating system),它控
制计算机的所有资源并提供开发应用程序的基础。
现代计算机系统包含一个或多个处理器、若干内存(常称为RAM-随机存取存储器)、
磁盘、打印机、网络接口及其他输入/输出设备。编写一个程序来管理所有这些器件以
正确地使用它们,即使不考虑优化也是一件很困难的事情。如果每个程序员都必须处理
磁盘如何工作,再加上每读一个磁盘块都有几十种因素可能导致操作出错,那么很多程
序简直没法写。
许多年以前人们就认识到必须找到某种方法将硬件的复杂性同程序员分离开来。经
过不断探索和改进,目前采用的方法是在裸机上加载一层软件来管理整个系统,同时给
用户提供一个更容易理解和进行程序设计的接口,这被称为虚拟机(virtual machine)。
这样一层软件就是操作系统。
这种处理方式如图1-1所示。底层是硬件,它本身可能包括两层或多层。最低一层
是物理器件,包括集成电路芯片、连线、电源、监视器等,它们的构造和工作方式属于
电气工程师的范围。
接着是微程序(microprogram),通常存放在只读存储器中,它是一层很原始的软
件,用来控制设备并向上一层提供一个更清晰的接口。微程序实际上是一个解释器,它
先取得机器语言指令,如ADD, MOVE和JUMP等,然后通过一个动作序列来执行这些指令。
例如为了执行一条ADD指令,微程序必须先确定运算数据的位置,然后取数,相加,最
后存放得数。由微程序解释执行的这一套指令称为机器语言。机器语言并不是硬件的组
成部分,但硬件制造商通常在手册中给出机器语言的完整描述,所以许多人将它认作真
正的"计算机"。
采用精简指令集计算机(RISC)技术的计算机没有微程序层,其机器指令通过硬件
逻辑直接执行。例如Motorola 680X0有微程序,而IBM PowerPC 则没有。
机器语言典型地有50到100条指令,大多数用来完成数据传送、算术运算和数值比
较等操作。在这个层次上,通过向特殊的设备寄存器写特定的数值来控制输入/输出设
备。例如将磁盘地址、内存地址、读字节数和操作类型(读/写)等值写入特定的寄存
器便可完成硬盘读操作。实际操作往往需要更多的参数,而操作完成后的返回状态也非
常复杂。进一步而言,对于许多I/O设备,时序在程序设计中的作用非常重要。
操作系统的主要功能之一就是将所有这些复杂性隐藏起来,同时为程序员提供一套
更加方便的指令,比如,"从文件中读一个数据块"在概念上比低层的"移动磁头臂,等
待旋转延迟"之类的细节来得简单、方便。
在操作系统之上是其他系统软件,包括命令解释器(shell)、窗口系统、编译器、
编辑器及类似的独立于应用的程序。要注意它们本身并不是操作系统的组成部分,尽管
图 1-1 计算机系统由硬件、系统程序和应用程序组成。
它们通常由计算机厂商提供。这一点很重要,操作系统专指在核心态(kernel mode),
或称管态(supervisor mode)下运行的软件,它受硬件保护而免遭用户的篡改。编译
器和编辑器运行在用户态(user mode)。如果用户不喜欢某一个编译器,他可以自己重
写一个,但他却不可以写一个磁盘中断处理程序 - 因为这是操作系统的一部分,而且
硬件阻止用户对它进行修改。
系统软件之上是应用软件,这些软件可以是购买的或者是用户自行开发的,它们用
来解决特定的问题,如字处理、表格处理、工程计算或者电子游戏等。
1.1 什么是操作系统
多数计算机用户都使用过操作系统,但要精确地给出操作系统的定义却很困难,部
分原因是操作系统完成两项相对独立的任务,下面我们逐项进行讨论。
1.1.1 操作系统作为虚拟机
对多数计算机而言,在机器语言一级的体系结构(指令集、存储组织、I/O和总线
结构)上编程是很困难的,尤其是输入输出操作。例如考虑使用多数PC机采用的NEC PD765
控制器芯片(或功能等价的芯片)来进行软盘I/O操作。PD765有16条命令,它通过向一
个设备寄存器装入特定的数据来执行这些命令,命令数据长度从1到9字节不等,其中包
括:读写数据、移动磁头臂、格式化磁道、初始化、检测磁盘状态、复位、校准控制器
及设备等。
最基本的命令是读数据和写数据。它们均需要13个参数,所有这13个参数被封装在
9个字节中。这些参数指定的信息有:欲读取的磁盘块地址、每条磁道的扇区数、物理
介质的数据记录格式、扇区间隙、以及对已删除数据地址标识的处理方法等。当磁盘操
作结束时,控制器芯片返回23个状态及出错信息,它们被封装在7个字节中。此外,程
序员还要注意步进电机的开关状态。如果电机关闭,则在读写数据前要先启动它(有一
段较长的加速时间)。还要注意电机不能长时间处于开启状态,否则将损坏软盘,所以
程序员必须在较长的启动延迟和可能对软盘造成损坏之间作出折衷。
显然,程序员不想涉及硬件的这些具体细节(也包括硬盘,它与软盘不同,但同样
很复杂)。他需要的是一种简单的高度抽象的设备。一种典型的抽象是一张磁盘包含了
一组命名的文件,每个文件可以被打开,然后进行读写,最后被关闭。其中的一些细节
如数据记录格式、当前步进电机的开启状态等则对用户隐藏。
这种将硬件细节与程序员隔离开来、同时提供一个简洁的命名文件方式的程序,就
是操作系统。与磁盘抽象类似,它还隐藏了其他许多低层硬件的特性,包括中断、时钟、
存储器等。总之,操作系统提供的每一种抽象都较低层硬件本身更简单、更易用。
从这个角度看,操作系统的作用是为用户提供一台等价的扩展计算机,或称虚拟机,
它比低层硬件更容易编程。本书的内容正是详细说明操作系统如何做到这一点。
1.1.2 操作系统作为资源管理器
上述虚拟机模型是一种自顶向下的观点。按照自底向上的观点,操作系统则用来管
理一个复杂系统的各个部分。现代计算机都包含处理器、存储器、时钟、磁盘、鼠标、
网络接口、激光打印机以及其他许多设备,从这个角度看,操作系统的任务是在相互竞
争的程序间有序地控制这些设备的分配。
设想在一台计算机上运行的三个程序同时试图在一台打印机上输出计算结果,那么
可能头几行是程序1的输出,接下来几行是程序2的输出,然后又是程序3的输出等等,
最终打印结果将是一团糟。操作系统采用将打印输出缓冲到磁盘上的方法可以避免这种
混乱。当一个程序结束后,操作系统将暂存在磁盘文件上的输出结果送到打印机,同时
其他程序可以继续运行产生新的输出结果,而这些程序并不知道这些输出没有立即送至
打印机。
当一台计算机(或网络)有多个用户时,因为用户间可能相互影响,所以管理和保
护存储器、I/O设备以及其他设备的需求随之增加。而且用户往往不仅需要共享硬件,
还要共享信息(文件、数据库等)。总之,此时操作系统的首要任务是跟踪资源的使用
状况、满足资源请求、提高资源利用率、以及协调各程序和用户对资源的使用冲突。
1.2 操作系统发展历史
操作系统经历了一个漫长的发展过程,下面对此进行简要的回顾。由于在历史上操
作系统与计算机体系结构存在非常密切的联系,我们将按照计算机的换代历程讲述操作
系统的发展状况。
第一台真正的数字计算机是英国数学家Charles Babbage(1792-1871)设计的。
Babbage投入毕生精力去建造他的"分析机",但却没能让它成功地运行起来。因为它是
纯机械式的,而当时的技术不可能使分析机的零部件达到他所需要的精度。很显然,分
析机没有操作系统。
有趣的是,Babbage认识到他的分析机需要软件,于是他雇佣了一个年轻的女子,
英国著名诗人拜伦的女儿Ada Lovelace为他工作。Ada由此成了世界上第一位程序员,
Ada程序设计语言就是用她的名字命名。
1.2.1 第一代计算机(1945-1955):真空管和插板
从Babbage之后一直到二战,数字计算机几乎没有什么进展。在40年代中期,哈佛
大学的Howard Aiken、普林斯顿高等研究院的John.Von Neumann(冯.诺依曼)、宾夕法
尼亚大学的J.Presper Eckert和William Mauchley、德国电话公司的Konrad Zuse、以
及其他一些人都成功地使用真空管建造了计算机。这些机器非常庞大,往往使用数万个
真空管,占据几个房间,然而其运算速度却不如现在最便宜的个人计算机。
在计算机出现的早期,每台机器都有一个小组专门来设计、制造、编程、操作和维
护。编程全部采用机器语言,通过在一些插板上的硬连线来控制其基本功能,这时没有
程序设计语言(甚至没有汇编语言),操作系统更是闻所未闻。机器的使用方式是程序
员提前在墙上的机时表上预约一段时间,然后到机房将他的插板插到计算机里,在接下
来的几小时里计算自己的题目。这时的计算机很不可靠,因为几万个真空管中任何一个
发生故障,计算机就无法运行。这个阶段基本上所有的题目都是数值计算问题,例如计
算正弦和余弦函数表。
到50年代早期,出现了穿孔卡片,这时就可以不用插板,而是将程序写在卡片上然
后读入计算机,但其他过程则依然如故。
1.2.2 第二代计算机(1955-1965):晶体管和批处理系统
50年代发明的晶体管极大地改变了计算机的状况。这时的计算机已经很可靠,厂商
可以成批地生产计算机并卖给客户,客户可以长时间地使用它来完成一些有用的工作。
至此,第一次将设计人员、生产人员、操作员、程序员和维护人员分开。
这个时期计算机安装在空调房间里,有专人操作。由于其价格昂贵,仅有少数大公
司、主要的政府部门和大学才买得起。运行一个作业(一个或一组程序)时,程序员首
先将程序写在纸上(用FORTRAN或汇编语言),然后用穿孔机制成卡片,最后将这些卡片
交给操作员。
计算机运行完当前任务后,其计算结果从打印机上输出,操作员从打印机上取得运
算结果并送到输出室,程序员就可从该处取到运算结果,然后,操作员再从卡片上读入
另一个任务。如果需要FROTRAN编译器,操作员还要从别处取来读入计算机。当操作员
在机房里走来走去时,许多机时被浪费掉了。
由于当时计算机非常昂贵,很自然地人们开始想办法减少机时的浪费,答案就是批
处理系统。其思想是:在作业输入室收集到较多的作业,然后用一台相对廉价的计算机
图 1-2 一 种 早 期 的 批 处 理 系 统 。 (a) 程 序 员 将 卡 片 拿 到 1401 机 处
(如IBM 1401计算机,它适用于读卡片、拷贝磁带和打印输出,但不适用于作数值运算。)
将它们读到磁带上,另外用较昂贵的计算机如IBM 7094来完成真正的计算。该模型如图
1-2所示。
(b)1401将批处理作业读到磁带上 (c)操作员将输入带送至7094处 (d )7094进行计算
(e)操作员将输出带送至1401处 (f)1401打印输出
在收集到一批作业之后,输入磁带被送到机房里装到磁带机上。操作员随后装入一
个特殊的程序(现代操作系统的前身),它从磁带上将第一个作业读入并运行,其输出
写到第一盘输出磁带上,而不是打印出来。每个作业结束后,操作系统自动地读入下一
个作业运行。当这一批作业完全结束后,操作员取下输入和输出磁带,将输入磁带换成
下一批作业,然后把输出磁带拿到一台1401机器上进行脱机打印。
一个典型的输入作业结构如图1-3所示。它由一张$JOB卡片开始,该卡标识出所
需的最大运行时间(分钟)、计费标识、以及程序员的名字。随后是一张$FORTRAN卡片,
它通知操作系统从系统磁带上装入FROTRAN语言编译器。在此之后是待编译的源程序,
然后是$LOAD卡片,它通知操作系统装入刚编译好的目标程序(编译好的目标程序通常
写到暂存磁带上,需要显式装入)。接着是$RUN卡片,它告诉操作系统运行该程序并使
用其后的数据。最后,$END卡片标识作业结束。这些原始的控制卡片是现代作业控制
语言和命令解释器的先驱。
图 1-3 一个典型的FMS作业的结构。
第二代计算机主要用于科学计算,例如解偏微分方程。这些题目大多用FORTRAN语
言和汇编语言编程。典型的操作系统是FMS(FORTRAN Monitor System-FORTRAN监控系
统)和IBSYS(IBM为7094机配备的操作系统)。
1.2.3 第三代计算机(1965-1980):集成电路芯片和多道程序
在60年代初期,多数计算机厂商都有两条完全不同并且互不兼容的生产线:一条是
面向字的复杂科学计算和工程计算的计算机,如IBM 7094;另一条是面向字符的商用计
算机,如IBM 1401,主要被银行和保险公司用于磁带归档和打印服务。
对厂商来说,开发和维护两种完全不同的产品是很昂贵的。同时,许多新的计算机
用户开始时只需要一台小计算机,到后来则可能需要一台较大的计算机,而且要求能够
更快地执行原有的程序。
IBM公司试图通过引入360系统来解决这两个问题。IBM 360是一个软件兼容的计算
机系列,在该系列中,低档机与1401相当,高档机则比7094功能强很多。这些计算机只
在价格和性能(最大存储器容量、处理器速度、允许的I/O设备数量等)上有差异。由
于所有的计算机都有相同的体系结构和指令集,因此为一种型号机器编写的程序可以在
其他所有型号的机器上运行(起码在理论上可行),而且360被设计成既可用于科学计算,
又可用于商业计算,这样一个系列的计算机便可以满足所有用户的要求。在随后的几年
里,IBM陆续推出了360的后续机型,如用户熟知的370、4300、3080和3090系列。
360是第一种采用集成电路(小规模)芯片的主流机型。与采用分立晶体管制造的
第二代计算机相比,其性能价格比有很大提高。360很快就获得了成功,由此其他主要
厂商也很快采纳了系列兼容机的思想。这些计算机至今仍在各地的计算中心使用,但其
应用正在急剧地萎缩。
"单一家族"思想的最大优点同时也是其最大的缺点。原因是所有软件,包括操作系
统,都要能够在所有机器上运行 - 从小的代替1401的机器到用于科学计算的相当于
7094的大型机;从只能带很少外部设备的机器到能带很多外设的机器;从商业领域到科
学计算领域等,总之,要有效地适用于所有的用途。