1.1 操作系统的发展
讲到Linux的诞生,不能不提UNIX。UNIX在操作系统领域可谓是大名鼎鼎,它几乎是除Windows以外所有现代个人计算机操作系统和服务器操作系统的源头。长期以来,UNIX以其开放性、稳定性、可移植性以及多用户多任务等特点,不仅赢得大量个人计算机用户的喜爱,同时也受到许多计算机厂商的青睐,对Linux产生了深远的影响。
1.1.1 历史回顾
操作系统的发展经历了漫长的历史过程。第一代计算机(1945年——1955年,电子管时代)还没有操作系统的概念,甚至连汇编语言都没出现。它使用机器语言编程,在接插板上通过硬连线实现控制功能,每台机器由专门的小组来操作和维护。程序员能做的就是在他的预约机时里到机房把他的接插板插到计算机里,等待运算结果。这一时期,计算机完成的主要工作基本上都是数值计算问题。
到20世纪50年代早期,出现了穿孔卡片和穿孔纸带,如图1.1和图1.2所示,接插板才逐渐退出历史舞台。直到80年代,仍有一些计算机在使用穿孔卡片编程;另一些场合使用的穿孔卡片(例如企业食堂的就餐卡)则一直延续到21世纪初。
图1.1 穿孔卡片
图1.2 穿孔纸带
随着晶体管的发明,第二代计算机(1955年——1965年,晶体管时代)出现了。由于汇编语言和FORTRAN语言的发明,程序员、操作员开始有了独立的分工。这一时期的用机形式是,程序员将程序写在纸上,制成穿孔卡片或穿孔纸带,交给操作员。操作员把这样的程序送入计算机,等待计算机将结果打印出来,然后将打印单交给程序员。
由于当时的计算机非常昂贵,为了节省用机时间,人们开始使用一种叫作批处理的技术。其基本思想是,用一台比较便宜的机器,将收集到的大量的卡片、卡带程序读到磁带上,然后将磁带送入计算机完成真正的运算。操作员在运行磁带上的程序之前,先装入一个特殊的程序,它会把磁带上的程序逐一读入、运行,并将结果写入另一个磁带。这一批程序全部完成后,程序员再把输出磁带拿到另一台机器上打印出来。这个特殊的程序就是操作系统的雏形。
这一时期计算机完成的主要工作是科学研究和工程应用中的数值计算,典型的操作系统有FMS(FORTRAN Monitor System)和IBMSYS。
比起第二代计算机,第三代计算机(1965年——20世纪80年代,集成电路时代)的性价比有了很大的提高。计算机的应用不再局限于数值计算,迅速推广到了很多行业,包括大规模的商务数据处理。20世纪60年代中期,以OS/360为代表的操作系统出现,开始应用于不同的计算机机型(如OS/360用于IBM公司的System/360系列)。这一代计算机不再需要独立的磁带读写机,操作系统可以从磁带里读入程序,并将结果写到磁带的空白区域。虽然性能得到大幅度提升,但本质上,这类操作系统仍采用的是批处理方式。程序员同样需要等待相当长的时间才能得到结果。
分时系统(Timesharing)的出现改变了这一现象。它的思想是,给每一个程序员分配一个终端,计算机将资源(CPU、存储器等)轮流分配给每个程序员。多数情况下,程序员都是在思考和编辑程序,占用实际机时的工作并不多。在操作系统设计得当的情况下,计算机足以为许多程序员提供及时的交互服务。最终,麻省理工学院(Massachusetts Institute of Technology, MIT)计算中心的开发人员实现了兼容分时系统(Compatible Time Sharing System,CTSS)。
1.1.2 UNIX的诞生
CTSS研制成功后,由MIT牵头,通用电气(General Electric Company,GE)和美国电报电话公司(AT&T,American Telephone and Telegraph Inc.)下属的贝尔实验室参与,在1964年开始计划一个宏大的项目:在GE 645计算机上建立一个具备众多功能的信息应用工具,它能够支持上百个用户对大型计算机的交互式分时使用,被命名为“多功能信息计算服务系统”(Multiplexed Information and Computing Service,Multics)。无疑,在这个系统中有很多创新性的思想,影响了其后操作系统的发展。但遗憾的是,由于该项目的预期过于宏伟,而受限于当时的计算机技术水平,虽历经磨难,仍成为一个烂尾工程。
1969年,贝尔实验室从Multics项目中退出。然而,实验室的研究人员肯·汤普森等人带着从Multics项目中激发的灵感开始了新的创作,并将这些灵感付诸实施于一台小型计算机DEC PDP-7上。相比Multics的设计目标,这个操作系统相当简单,只实现了一个文件系统、一个命令解释器和一些简单的文件工具,是一个单任务系统。它被创造者们戏谑地冠名为Unics(Uniplexed Information and Computing Service)。后来,又有人根据发音把它改成了UNIX。
最初的UNIX是用汇编语言写成的,应用程序则使用B语言写成。当将其移植到另一个计算机系统时,改写汇编语言的工作量相当巨大。B语言是一种解释性编程语言,虽然精巧,但作为系统编程语言远远不够。直到布莱恩·科尼翰和丹尼斯·里奇发明了C语言,这个情况才开始发生变化。
1973年,汤普森和里奇用C语言重写了整个UNIX系统。从那之后,UNIX操作系统开始了令人瞩目的发展。1974年,汤普森和里奇在《美国计算机通信》上发表了一篇论文,公开展示了UNIX。论文描述了UNIX前所未有的简洁设计,并报告了600多例UNIX应用。论文激起了各大学和研究机构对UNIX的兴趣,都希望能亲身体验UNIX的特性。
由于当时一项针对AT&T法律判决的限制,AT&T被禁止进入计算机相关的商业领域,所以,UNIX非但不能作为商品出售,贝尔实验室还必须将非电话业务的技术许可给任何提出要求的人使用。由此,UNIX的源代码被散发到各个大学和研究机构,一方面使科研人员能够根据需要改进系统,或者将其移植到其他的硬件环境中去;另一方面培养了大量懂得Unix使用和编程的学生,这使得Unix的普及更为广泛。也就是说,UNIX一开始就是开源、免费的,只不过它是被迫的。
在这期间,加州大学伯克利分校计算机系统研究小组(Computer Systems Research Group, CSRG)成为一个最重要的学术据点。他们在1974年就开始了对UNIX的研究,他们的研究成果就反映在他们使用的UNIX中。他们对UNIX做了相当多的改进,增加了很多在当时非常先进的特性,大部分原有的源代码都被重新写过,并不断将他们的创意和代码反馈到贝尔实验室。很多其他UNIX使用者都希望能得到CSRG改进版的UNIX系统。因此CSRG的研究人员把他们的UNIX做成一个完整的发行版对外发布。第一版发布的时间是1977年,这个发行版的名字就叫BSD UNIX(Berkeley Software Distribution UNIX)。
到此,UNIX就有了两个分支:一个是来自AT&T的UNIX,一个是BSD的UNIX发行版。现代UNIX大部分都是这两个发行版的衍生产品。AT&T的UNIX也被称作System,并用罗马数字III、IV、V来标记版本。事实上,System IV从未出现过。
BSD UNIX的影响力远大过AT&T UNIX,被很多商业厂家采用,成为很多商用UNIX的基础,特别是其入选美国国防部高级研究计划局(DARPA,Defence Advanced Research Projects Agency),实现了TCP/IP协议栈。直到1982年,根据反托拉斯法,美国法院裁决将贝尔实验室拆分。戴在AT&T头上的紧箍咒终于得以解除,AT&T立即着手UNIX的商业化,并成立了UNIX系统实验室(USL,UNIX System Laboratories)。1983年,AT&T在原有的System III的基础上增加了一些新的特性,发布了UNIX System V。
AT&T进入市场后,发起了与BSD UNIX关于知识产权的侵权诉讼。1991年,他们指控BSDI(Berkeley Software Design Inc.,经营BSD系统的公司,创始人来自CSRG)违反了AT&T的许可权,私自发布自己的UNIX版本,并进一步指控CSRG泄露了UNIX的商业机密。案件直到USL转手给Novell公司(美国计算机企业,创建于1974年,最初是基于CP/M操作系统的硬件制造商,目前主要业务是软件和服务)。才告和解。而CSRG在发布了4.4BSD Lite2之后也宣告解散。项目成员有的进入了UNIX商业公司,有的转而从事其他计算机领域的研究。从此,严格意义上的System V和BSD UNIX都已不复存在,有的只是它们的后续版本。我们现在只能从风格上大致判断某个发行版源自System V还是BSD,很难明确它的整体属于哪个版本。
1.1.3 UNIX的发展
UNIX操作系统的魅力不仅在于其功能的强大,还在于其出色的可扩展性。它支持高级语言和各种脚本语言环境。利用这些工具,使用者可以很方便地按照自己的需求和兴趣对原有系统进行扩展,使其具备更强大的能力,完成各种复杂的任务。这满足了相当一部分计算机研究人员和使用者的需要。一旦用了UNIX,体会到UNIX的强大功能,使用者就会希望进一步挖掘它的能力,而不仅是作为一般的用户使用其有限的功能。企业也希望能在其可以承受的条件下,利用UNIX系统的强大处理能力。
由于UNIX是多用户操作系统,作为系统的普通使用者只能使用系统提供的有限功能,只有UNIX系统管理员才能充分利用其全部能力。因而能拥有自己的UNIX系统也是一个普通UNIX使用者的愿望。但在当时,能够满足上述愿望的计算机并不是每个人都能买得起的。昂贵的硬件,以及UNIX逐渐加深的商业化趋势,都使得拥有自己的UNIX对大多数人而言只是美好的梦想,使用UNIX的机构主要为一些要求较高的科研和大中型企业。
UNIX在其发展之初的相当长一段时间里,都只能运行在高性能的计算机系统上。尽管微软早在20世纪80年代初就已经将AT&T的版本移植到PC上(微软为PC移植的UNIX叫XENIX,在80286的计算机上就可以运行),但并没有作为主打产品销售,并最终将XENIX转卖给了SCO(Santa Cruz Operation,软件公司,创立于1979年)。而且由于UNIX商业许可权的限制,个人用户想使用UNIX的源代码仍然有相当高的门槛——System III的售价是4万美元。
进入20世纪90年代,Intel的X86产品性能大幅度提高,个人计算机的硬件能力已接近UNIX对系统的要求。而随着USL与BSD之间法律纠纷的解决,法律障碍也不复存在,人们似乎看到了在个人计算机上使用UNIX的一线曙光。但很遗憾的是,当时大多数UNIX程序员仍然鄙视廉价的X86,而钟情于M68K(摩托罗拉设计的用于小型机或中型机的32位中央处理器,处理器型号以M68000、M68010等命名)系列的高雅设计。这一时期里,个人计算机上几乎是清一色的Windows,而在小型机、服务器、工作站上,则是各种UNIX群雄并起,成为UNIX发展最繁荣的时期。
回顾UNIX的发展,可以发现其最大特点在于它的开放性。在系统设计之初,UNIX就考虑了各种不同使用者的需要,因而被设计成具备很大可扩展性的系统。它的源代码一开始就是开放的,学生、研究人员出于科研目的或个人兴趣在UNIX上进行各种开发,公开自己的代码,共享成果,淡泊名利,这些行为极大地丰富了UNIX本身。很多计算机领域的科学家和技术人员秉承共享精神,开发了数以千计的自由软件,也培养了自由软件运动的土壤。