2009年最值得关注的操作系统图书
操作系统之哲学原理连载之三
第2章 操作系统历史之哲学原理
引子
上世纪末本世纪初,美国兴起了励志演讲(Motivational Speech)潮,各种人等乐此不疲。在这拨励志大潮中,出现了多名影响力广泛的励志演说家。这些演说家所到之处,真是万人空巷,人潮涌动,场面之壮观令人叹为观止。
其中一位演讲家由于其名望接受料电视台采访。
记者:“您在励志演讲领域声名远播,影响巨大。您的每场演讲都人满为患,能否请您阐述一下什末是励志演说吗?”
励志专家:“你想知道吗?告诉你,我跟你一样,我压根就不知道什末是励志演讲。我只知道励志演讲非常流行,这个我只不过是利用这个潮流来赚钱而已。既然大家都喜欢,我就讲,至于我讲的东西是什么意思,我根本不知道。但是听众很喜欢!”
这时,我想起了一句英语的歌谣:“sometimes when we touch, the honest is too much!”(有时当我们拥抱时,所感受的诚实太过分)。也许人都不喜欢真实,于是就成就了很多人在论述操作系统历史(甚至人类历史)时的粉饰太平。
而操作系统的演变就是我们对计算机硬件进行粉饰的过程。
操作系统进化的推动因素
大多数的教材都有一章谈论相关领域的历史,操作系统自然也不例外。不过不同的教材谈论历史的目的却又不同。多数教材是为了铺垫一下本学科的发展背景,让学生了解相关领域里的发展大事,并无将历史与现实的发展联系起来。本课程谈论的历史则是以史明鉴,不是为了谈论历史而谈论历史,而是为了让学生明白操作系统为什么是现在这个样子,以及将来会是什么样子。从根本上把握操作系统这一计算机领域核心学科的脉搏,深刻理解社会变迁给计算机这门人造学科带来的不可抵挡的变化。同时,我们还将揭示计算机发展史上一些鲜为人知的重要细节,给学生一个窥探全貌的快感。
如我们前面所说,操作系统的不断发展与改善由两个因素驱动:
1. 硬件成本的不断下降
2. 计算机的功能和复杂性的不断变化
而就是这些因素决定了操作系统的历史,我们一定要牢牢掌握这两个趋势。一个是硬件成本不断降低,降得太可怕了,速度很快,像自由落体!就以硬盘为例,IBM制造的第一张硬磁盘直径达2米,造价100多万美元,而容量仅仅只有1MB。而现在一个容量100GB的硬盘成本只有几十美元。当然,过去的硬盘和今天的硬盘的制造技术完全不同,第1张硬盘的质量坚挺,可以当作咖啡桌来使用,而现在的硬盘(指盘片),非常软,根本不能承受重物。
另外一个因素是计算机复杂性的不断增加。这一点对于很多人来说并不会感到惊奇。人类作的任何事情,都是越来越复杂。你住的地方不作整理很快就乱了,有没有这经验?当然,你的生活随着你年龄的增长,也会越来越复杂。最初的计算机的组件虽然巨大,但数量少,且功能简单。而现在,一台计算机里面包括的元件数量实在是太多了。
那么硬件成本的下降和计算机复杂性的提高就推动了操作系统的演变。成本降低意味着同样的价格可以买到更为先进的计算机。而复杂性提高自然需要操作系统的能力也得提高。就是这些变化使得操作系统从最初的仅仅几百或几千行代码的独立库函数,发展到今天的多达4000万行代码的WINDOWS XP操作系统。而某些LINUX的版本的代码行数更加庞大。
操作系统之所以越来越复杂是因为硬件质量和数量的提升使得操作管理的东西增多,而且人类永不知足的各种越来越苛刻的要求也使得计算机OS的复杂性增加。
另外,还有两个附加因素影响着操作系统的发展,这就是操作系统和攻击者之间的博弈。
这个世界上坏人太多,他们总想利用计算机的缺陷来进行各种损人利己或损人又不利己的活动。而操作系统在最初设计时根本就没有想到会有人从事破坏活动。大概因为最早的计算机工作者认为到达能够使用计算机水平的人都是好人,无需设计任何安全机制。这样,在后来发现有人试图利用计算机进行不良操作时,就迫不得已修改操作系统,使其具有安全上的防范功能。而每当操作系统改进了安全性,攻击者也会改良他们的攻击手段,这样循环往复,就造就操作系统安全水平和攻击者攻击水平不断交替上升这种情景。
下面我们就来说一说操作系统是如何因上述驱动因素的变化而变化的。
2.1 第一阶段:状态机操作系统(1940年前)
这是计算机刚萌芽时出现的操作系统。这种操作系统运行在英国人巴贝斯(Babbes)想象中的自动机中。所谓状态机操作系统实际上算不上是我们现在通常所定义的操作系统,而是一种简单的状态转换程序:根据特定输入和现在的特定状态进行状态转换而已。这个时候的计算机也不是现代意义上的计算机,而是所谓的自动机,其功能非常简单,可以用原始来形容。能作的计算也只限于加减法。这个时代的操作系统没有什么功能,不支持交互命令输入,也不支持自动程序设计。甚至这个时候还没有存储的程序的概念。
驱动这一阶段操作系统的动力是个人英雄主义。因为此时尚无任何计算机工业,或计算机研究、或计算机用户。计算机及其操作系统的发展完全是某些个人的努力。
这个阶段因为计算机刚刚萌芽,没有多少人能够接触到计算机,自然不存在什么安全问题。
这个阶段没有操作系统。如果非要说出个子丑寅卯来,人就是这个时代的操作系统:因为自动机的一切动作均是人在操控的。
2.2 第二阶段:单一操作员、单一控制端操作系统(1940s)
这种单一操作员单一控制终端SOSC(single operator, single console)的操作系统是在刚出现计算机时人们能想到的最直观的控制计算机的方式。这个时候的代表机型为美国宾夕法尼亚大学与其它机构合作制作的ENIAC计算机。这是第一台电子计算机,但不是第一台计算机。在这之前有个英国人造了一部机械计算机,通过手柄摇动能够进行计算。在ENIAC刚造出来的时候,谁都不知道计算机是怎么回事,所以没有操作系统的整体概念,唯一能想到的就是提供一些标准命令供用户使用,而这些标准命令集合也就构成我们的原始操作系统SOSC。
SOSC操作系统的设计目的就是满足基本的功能,并提供人机交互。在这种操作系统下,任何时候只能做一件事,即不支持并发和多道程序运行。操作系统本身只是一组标准库函数而已。操作系统本身并不自我运行,而是等待操作员输入命令而运行。即用户想使用什么服务,就直接在命令行键入代表该服务的对应操作系统的库函数名(文件名)。这种操作系统的资源利用率很低:你输入一个命令就执行一个库函数,拨一下动一下。当操作员在思考时或进行输入输出时,计算机则静静的等待。当然了,从人的角度来看,效率并不低,你键入什么,计算机就立即执行什么。但从机器的角度考虑,因为时刻都等着人慢腾腾的动作,效率就太低了。
由于这个时代的计算机很金贵,整个世界也只有几台,而人却不是,提高计算机的利用率就变得十分重要。
2.3 第三阶段:批处理操作系统(1950s)
为了提高单一操作员单一控制终端的操作系统SOSC的效率,人们提出了批处理操作系统。在仔细考察了SOSC后,人们发现,SOSC效率之所以低下,是因为计算机总是在等待人的下一步动作,而人的动作总是很慢。因此,人们觉得,如果将人的因素拿走,让所有的人先想好自己要运行的命令,列成一个清单,打印在纸带上,然后交给一个工作人员来一批一批地处理,效率不就提高了吗?这样就形成了我们所说的批处理操作系统。
批处理操作系统针对的是第二代通用计算机如IBM的 1401和7094等,通过去除人机交互而达到CPU和输入输出利用率的改善。批处理的过程是:用户将自己的程序编在卡片或纸带上,交给计算机管理员。管理员在收到一定数量的用户程序后,将卡片和纸带上的程序和数据通过IBM1401机器读入,并写入到磁带上。这样每盘磁带通常会含有多个用户的程序。然后,计算机操作员将这盘磁带加载到IBM7094上,一个一个的运行用户的程序,运行的结果写在另一个磁盘上。所有用户程序运行结束后,将存有结果的磁盘取下来,连到IBM1401机器上进行结果打印。然后就可以将打印结果交给各个用户了。图2-1描述了批处理的过程。
图2-1 批处理系统示意图(来源:《Modern Operating Systems》)
很显然,在批处理下,操作系统的功能和复杂性均得到提升。在SOSC环境下,每个用户自己控制程序的开始和结束。而在批处理下,很多用户的程序一个接一个的存放在磁带上,用户本人并不在场,无法自己控制程序的开始和结束。而这个任务就交给了批处理操作系统。负责这个任务的操作系统功能就称为批处理监视器(Batch Monitor)。而整个批处理操作系统就是批处理监视器加上原来的操作系统库函数。
图2-2 SOSC和批处理操作系统之比较
批处理监视器的功能就是按部就班地执行用户的程序。这个时代的操作系统仍然只能在同一时间执行一个程序,但此时文件的概念已经出现。之前在SOSC诞生的时期没有文件的概念。为什么现在出现了文件的概念呢?因为磁带上的多个用户程序必须以某种方式进行隔离,这需要一个抽象的东西来区分一下。这个抽象的东西不是别的,就是文件。除了文件管理外,此时的操作系统还能够管理读卡机,磁带,打印机等。此种操作系统的任务就是加载一个程序,运行,打印结果,然后执行下一个程序。批处理操作系统的两个部分的关系也很清楚:一部分是控制程序执行,一部分是支持程序执行。
批处理操作系统的重要实例有IBM开发的FORTRAN 监视系统FMS,用于IBM 709; IBM开发的基于磁带的工作监控系统IBSYS,用于IBM 7090 和7094,和密歇根大学开发的UMES(密歇根大学执行体系统),用于IBM7094。
2.3.1密歇根大学执行系统UMES:操作系统的黎明
这个时候,世界上最先进的计算机是IBM7094。作为礼物,IBM分别给密歇根大学和麻省理工学院各捐赠了一台。密歇根大学靠湖:密歇根湖和伊犁湖,麻省理工学院靠海,大西洋。IBM的高管喜欢搞帆船比赛。而每次搞帆船比赛,需要使用计算机来安排赛程、计算成绩、打印名次等。因此,IBM在捐赠机器给密歇根和MIT时有一个要求:平时归学校用(MIT的机器还需要与新英格兰周围的学校如达特茅斯学院等共享),一旦来帆船比赛就得停下一切计算任务为IBM服务。这当然使得学校很不爽。因为那个时候很难在程序执行中间停下来,将中间结果保留等以后再执行。只要停下来,就要从头来过。
于是乎,密歇根大学的R.M.Graham,Bruce Arden和Bernard Galler在1959年开发出了当时很有名的MAD/UMES系统,即密歇根算法译码器和密歇根大学执行系统。密歇根算法译码器是一种可扩展的程序设计语言,而密歇根大学执行系统是一个能够保存中间结果的操作系统。有了这个系统,密歇根的计算机运行基本就不受IBM帆船比赛所造成的中断的影响。MIT在知道这个系统后,将其安装到了自己的7094机器上。而MAD编程语言随后又进一步移植到Philco、Univac和CDC等机器上。其很多功能后来被加入到FORTRAN语言里。
驱动这个阶段操作系统发展的动力是改善效率。因为机器的昂贵,我们不能容忍机器在操作
员思考或IO设备工作期间被闲置起来。
2.4 第四代:多道批处理操作系统(1960s)
虽然批处理操作系统通过将人机交互拿掉而在一定程度上提高了计算机的效率,但还是不那么令人满意。因为,CPU和输入输出设备的运行是串行的,即在程序进行输入输出时,CPU只能等着。这是因为CPU需要不断地探询IO是否完成,因而不能执行别的程序。再看一遍图2-1:磁带上的程序需要先读进来,程序才能执行,执行完了又需要写到另一个磁带上。那么读写磁带的时候CPU不工作的,这就是很大的浪费。
这个时候,由于IO设备的运行速度相对于CPU来说实在太慢,这种让高速设备等待低速设备的状况令人颇感痛心。这样,人们又想,能否将CPU和IO进行并发呢?即在一个程序输入输出时,让另一个程序继续执行。换句话说,能否将CPU运行和输入输出设备的运行重叠起来而改善整个系统的效率呢?答案是肯定的,不过需要付出代价。因为CPU和IO重叠需要我们将多个程序同时加载到计算机内存里,从而出现了所谓的多道批处理操作系统。
在多道批处理操作系统时代,同一时间可以运行多个程序(宏观上),但控制计算机的人还是只有一个,即用户将自己的程序交给计算机管理员,由管理员负责将用户的程序加载到计算机里并执行。由于多个程序同时执行,操作系统需要能够在多个程序(工作)之间进行切换,并且能够管理多个输入输出设备,同时还需要能够保护一个进程不被另一个进程干扰。
显而易见,操作系统的功能和复杂性都比简单批处理时要复杂得多:既要管理工作,又要管理内存,还要管理CPU调度。
2.4.1 OS/360:划时代的多道批处理操作系统
典型的多道批处理操作系统是IBM的OS/360,它运行在IBM的第三代计算机System/360, 370, 4300等之上。OS360在技术上和理念上都是划时代的操作系统,在商业上没有使用。因为它有很多错误,但是这个避免不了,因为划时代,崭新的东西,你很难一次做到没有错。那么内存的分段管理也是在这时候引进。他虽然有很多错误,但是不妨碍他作为一个划时代的操作系统。而且同时支持商业和科学应用。之前只作科学计算。IBM随后对OS/360进行了完善,逐渐演变为一个功能强大、性能可靠的操作系统。该操作系统提供了资源管理和共享,允许多个IO同时运行,CPU和磁盘操作可以并发。
驱动这个阶段操作系统发展的动力仍然是改善效率。因为机器的昂贵,我们不能容忍机器(CPU)在IO设备工作期间被闲置起来。同时,我们对计算机的要求也开始多起来。因此,这个阶段还伴随着对用户不断增长的要求进行满足。
2.5 第五代1:分时操作系统(1970s)
多道批处理操作系统的出现使计算机的效率(主要是吞吐率)大为提高。不过这时人们又提出了另外一个问题:将程序制作在卡片上交给计算机管理员来统一运行,将使得用户无法即时获知程序运行的结果。而这是一个大问题。想想如果你编了一个程序,却需要让别人去运行,并等上若干天才能知道结果,这个滋味显然不好受。万一计算机管理员疏忽了,忘记运行你的程序,或者操作错误,导致程序丢失,情况就更加糟糕。
基于上述考虑,人们就想,能否让人回到计算机前面来,每个人自己管自己的程序。但是,大家的程序可以同时运转。即将人的因素又引了回来。这看上去与原始的SOSC似乎一样,但有个关键的不同:多个人同时连在计算机上,每个人被看作是另外的一个IO终端而已。每个用户拥有一个终端显示器,而这些终端显示器经过RS232穿行线缆与计算机连接。终端显示器只能接收和发送文本命令和信息。而计算机在所有连接的终端用户之间进行分时,即每个人只能用这么多时间,只要到了时间,就换一个进程,大家轮流坐庄。而这种时分切换下的操作系统就是所谓的分时操作系统。
在分时操作系统下,任意时间可以运行多个程序,且用户直接与计算机交互,以当场调试程序。这就和单一操作员单一终端不一样了。就从人本转成物本。单一操作员单一终端的情况下,一切等着人。以前执行一条命令就等人,分时系统就是人等机器。这个模型带来一个直接的结果,就是机器再不用等你,等你想问题时机器就切换到别的程序,等你想完了机器我再切换回来,接受你的输入。就这样,计算机就在很多人之间来回转,你敲个命令就响应,然后切换走。如果时间掌握的好,用户输入完一个命令计算机正好回来,用户感觉很爽。当然,如果一个用户打字足够快,可能会觉得计算机慢;如果打字足够慢,就有可能觉得计算机很快。不同的人感觉有可能完全不同。
显然,和前面几代的操作系统比,分时操作系统要复杂的多。相较于多道批处理系统,最主要的变化是资源的公平管理。在多道批处理下,公平不公平没有人知道。大家交了工作后只管回家等结果就是。至于自己的程序排在谁前面谁后面,仰或占用了多少CPU时间是无关紧要的。而现在,大家都坐在计算机显示终端前面,任何的不公平将被立即感觉到。因此,公平的管理用户的CPU时间就变得非常重要。除此之外,池化(Pooling)、互斥、进程通讯等机制相继出现,使得分时操作系统的复杂性大为增加。
2.5.1傲慢的代价:MULTICS操作系统
分时操作系统里面最为有名的应该是MULTICS和UNIX。前面讲过,IBM在其捐赠7094给UM和MIT时附加了一些条件,而这些附加条件弄得学校非常恼火,但又不能拒绝(想想别的学校吧,他们连这种不爽或恼火的机会都没有)。为此,密歇根开发了UMES系统以应对这个问题。MIT则将UMES移植到了自己的7094。后来觉得光能够保存中间结果还不是最好的办法,毕竟频繁地保存中间结果等帆船比赛结束后再进行重载仍是麻烦,于是乎就想来开发一个可支持多用户的分时操作系统,以一劳永逸地解决这个问题。这个时候MIT想到了密歇根的R.M. Graham,将其挖了过来。在R.M. Graham的主持下,来自于贝尔实验室、DEC(Digital Equipment Corporation,美国的数字仪器公司)、和MIT的设计人员同仇敌忾,(针对IBM的傲慢),一起努力,开始了MULTICS分时操作系统的研制。
图2-3 R.M. Graham
不过,在MULTICS还没有开发出来时,开发团队内部出现了分歧,贝尔实验室的几个人越来越看不惯DEC和MIT的人,觉得这伙人的思想方法跟自己不一样,做的东西不地道,觉得和他们一起搞东西把自己的水平降低了,就自立门户,搞出了UNIX,并因此而获得了图灵奖。而UNIX的出现,使得MULTICS从一面世,就不能挺立,真是中国历史上“既生瑜、何生亮”在计算机操作系统历史上的完美展现。不过,MIT最后还是搞出了一个得到部分商用的分时操作系统CTSS(compatible Time sharing system).
分时操作系统通常运行在第三代机PDP, VAX, 和CRAY,其中PDP, VAX是DEC公司生产的,不过DEC已经不复存在。CRAY是CRAY公司生产的。
驱动这个阶段操作系统发展的动力是响应时间和对越来越多资源的管理。因为机器的昂贵,我们不能容忍机器(CPU)在IO设备工作期间被闲置起来。同时,因为人的时间宝贵,我们不能容忍人们坐在机器前进行漫长的等待。因此,我们发明了分时操作系统来解决这两个问题。而因为分时引入的多道程序设计,又造成操作系统的空前复杂,我们需要应对竞争、通讯、死锁、保护等一系列的新功能。因此,操作系统在本阶段变得相当复杂。
2.6第五代2:实时操作系统
随着人类技术的进步,计算机得到了广泛的应用。其中的一种应用是所谓的进程控制系统,即使用计算机对某些工业进程进行监视,并在需要的时候采取行动。所有这些系统都具备一个特点:计算机对这些应用必须在规定时间内作出响应,不然就有可能发生事故或灾难。例如:在工业装配线上,当一个部件从流水线上一个工作站流到下一个工作站时,这个工作站上的操作必须在规定时间内完成。否则就有可能造成流水线瘫痪,而影响企业的生产和利润。又例如,在导弹防卫系统中,对来袭导弹的轨迹计算必须在规定时间内完成,否则就可能被来袭导弹击中而无法作出反应。其它对计算机响应时间有要求的系统包括核反应堆状态监视系统,化学反应堆监视系统,航空飞行控制系统等。
这种对计算机响应时间有要求的系统通常被称为临界系统或应用。而为了满足这些应用对响应时间的要求,人们就开发出了实时操作系统。实时操作系统是指所有任务都在规定时间内完成的操作系统,即必须满足所谓的时序可预测性(Timing Predictability)。这里需要提请读者注意的是,实时系统并不是反应很快的系统,而是反应具有时序可预测性的系统。当然了,在实际中,实时系统通常是反应很快的系统。但这是实时系统的一个结果,而不是其定义。
显然,实时操作系统的最重要部分就是进程或工作调度。只有精确、合理、和及时的进程调度才能保证响应时间。当然,对资源的管理也非常重要。没有精密复杂的资源管理,确保进行的按时完成就成为一句空话。另外,基于其使用环境,实时操作系统对可靠性和可用性要求也非常高。如果在这些方面出了问题,时序可预测性将无法达到。
实时系统通常又分为软实时系统和硬实时系统。软实时系统在规定时间得不到响应所产生得后果是可以承受的,如流水装配线。即使装配线瘫痪,不就是损失点钱吗?而硬实时系统在得不到实时响应后则可能产生不能承受得灾难,如导弹防卫系统。如果反应迟钝,结果就可能是人命损失。
商业实时操作系统的代表有VxWorks和EMC的DART系统。
2.7第六代:现代操作系统(1980后)
在80年代后,计算机工业获得了井喷式的发展。各种新计算机和新操作系统不断出现和发展,计算机和操作系统领域均进入到了一个百花齐放、百家争鸣的时代。尤其重要的是工作站和个人机的出现,使计算机大为普及。独享计算机也可以负担得起。这个时候的操作系统代表有:DOS、WINDOWS、UNIX、LINUX和各种主机操作系统如VM,MVS,VMS等。DOS、WINDOWS、UNIX、LINUX通常称为开放式系统操作系统,分别运行在PC, VAX, Workstation上。操作系统也重新回到子函数库的状态。
随着硬件越来越便宜,个人机出现在人们的视野中。人们可以拥有自己的电脑,无需与别的人分享。在刚刚出现个人机的时候,拥有个人机的人感觉很好,而那些需要与别人共享小型机的人则感觉不爽。由于个人机由用户一个人独享,分时操作系统的许多功能就无须存在。因此,个人机操作系统又变回到了标准函数库系统。这个时候最有名的当然是DOS、WINDOWS 3X、苹果机OS(MacOS)等。
但在独享了一阵个人机后,人们发现,没有分时功能的操作系统很不爽。因为,虽然只有一个人在用机器,但这个人可能想同时做好几件事,例如,同时运行好几个程序。而这是不可能的。于是乎,人们觉得需要对个人机操作系统进行改善,将各种分时的功能又加了进去。
例如,这时候就需要对程序进行保护?因为现在运行多个程序。虽然都是你的东西,但是也不能混淆。于是乎,WINDOWS NT出现了,Xenix出现了,Ultrix出现了。
这个时候的另外一个特征是网络的出现。网络触发了网络操作系统和分布式操作系统的出现。对于网络操作系统来说,其任务是将多个计算机虚拟成一个计算机。传统的网络操作系统是在现有操作系统的基础上增加网络功能,而分布式操作系统则是从一开始就把对多计算机的支持考虑进来。
后来分布式OS出现了,因为网络出现了,我们现在很多电脑,但是很多pc没有在用,这就是一个极大的浪费,我们希望空闲的都能被利用。分布式计算出现的原因是希望把任务分开,结果是集合计算资源,让很多计算机看上去像一个。有两种分布式系统,一个是网络操作系统,就是在传统OS上加一个补丁,一个是分布式操作系统。网络OS就是打补丁,分布式OS是重新设计的一套,所以比网络OS效率高。
2.8操作系统之演变过程
计算机操作系统的演变可以从三条主线来看。这三条发展线索分别是主机操作系统、服务器操作系统和个人机操作系统。图2-4简略的画出了这三条线索上操作系统的演变历史。
图2-4 操作系统的历史演变
图2-4最左面的三列代表主机操作系统的演变,最右面的两列代表个人机操作系统的演变,中间的列为服务器操作系统的演变。当然,到最后,这三大块的界限也不是很清楚。
主机操作系统的演变从输入输出控制系统IOCS和IBSYS开始,经历OS/360的里程碑式的突破,逐步演变为VS、MVS、和VM三个系列(其中VM系列还吸取了UMES和CTSS的某些特征)。目前IBM是这三个系列的开发商和运营商。其VM操作系统经历多代后已经变得十分可靠。美国大型金融证券公司都使用它们。
服务器操作系统的演变从UMES开始,经CTSS演变为IBM的MVS和VM操作系统,经MULTICS演变为UNIX系统。在80年代初,UNIX一分为二:由AT&T提供的System系列和由UCB提供的BSD系列。XENIX为微软公司为PC机而移植的AT&T版的UNIX操作系统。AT&T是 UNIX的鼻祖,UCB则在美国国防部的支持下开发了BSD(伯克利软件分配)系列。
而IBM和斯坦福大学看到AT&T和UCB的UNIX软件后,也不甘示弱,分别搞起了AIX和SUN OS(SUN是斯坦福大学网络Stanford University Networks的缩写)。这样UNIX就形成了4个系列:美国电话电报公司的System系列、国际商用机器公司的AIX系列、斯坦福大学网络的SUN OS系列、和伯克利加州大学的软件分配BSD系列。
90年代中,在美国国防部停止了对BSD的支持后UCB停止了BSD系列,而AT&T也在与BSD焦头烂额的较量中放弃了System系列。LINUX则趁着AT&T和UCB忙于与对方较量的时候发展出来,而卡内基梅隆大学(Carnegie Mellon University)在看到UCB和斯坦福都搞上了UNIX,慌忙搞了个MACH操作系统。MACH为微内核操作系统,在学术界获得了一定的使用,但由于其运行效率低下而没有获得商业上的广泛应用。这样UNIX的商业使用版本就剩下AIX、SOLARIS系列(SUN OS的后续)和LINUX系列。后来由于惠普公司(HP)加入到服务器行列使得UNIX家族又增加了一个版本:HP-UX。在UNIX家族里面,Sun公司濒临灭亡的命运令SOLARIS的前途堪忧。
个人机操作系统的演变可以说是从DOS开始。微软在1980年以100美元的成本买断了DOS的版权。而DOS的功能很简单:文件没有文件夹,所有文件都在一个地方,谁都可以删除操作系统。当然那时候也没有那么多坏人。在看到苹果的MacOS的图形界面后,微软给DOS增加了一个图形界面,称之为WINDOWS。WINDOWS在发展了几个版本后,到WINDOWS98时,微软改变了战略。因为到目前为止,所有的WINDOWS并不是真正的操作系统,而是覆盖在DOS上一个用户图形界面,不能支持多道编程。微软高管比尔盖茨亲自打电话给DEC的David Cutler,请其过来主持新一代WINDOWS操作系统研发。
David Cutler系DEC公司VMS操作系统的主要设计人员。他从DEC带过来一批人到微软工作,设计出了WINDOWS NT操作系统。这是一个真正的支持多道编程的操作系统。WINDOWS NT继承了VMS的优良结构和WINDOWS 3X的图形界面,在一推出就获得了市场的接受。WINDOWS NT经过几代演变,成为现在的WINDOWS Vista。WINDOWS操作系统系列也从单一的支持个人机演变为支持个人机和服务器的双料操作系统。
操作系统的分类
操作系统基本上可以分为主机操作系统如OS/260, OS/390, CTSS;服务器操作系统,如UNIX、WINDOWS 2000、LINUX;多CPU计算机操作系统,如Novell Netware;个人计算机操作系统WINDOWS 2000、WINDOWS XP、MacOS;实时操作系统,如VxWorks、DART;和嵌入式操作系统,如Palm OS、WINDOWS CE、TOPPER等。
同一台计算机可以运行不同的操作系统,而同一个操作系统也可以运行在不同的计算机上。例如,个人机上可以运行的操作系统包括DOS、LINUX、NeXTSTEP、WINDOWS NT、SCO UNIX等。DEC VAX计算机可以运行的操作系统有VMS、Ultrix-32、BSD UNIX等;而UNIX操作系统可以运行在XENIX 286、APPLE A/UX、CRAY-Y/MP、IBM 360/370等计算机上;WINDOWS NT/XP可以运行在英特尔的386和Itaninum、DEC的Alpha、摩托罗拉的PowerPC、和MIPS计算机的MIPS上。
当然了,运行不同机器上的UNIX版本并不一样,例如运行在IBM 360/370上的UNIX是
Amdahl UNIX UTS/580和AIX/ESA。而运行在CRAY-Y/MP计算机上的UNIX是AT&T System V。表2-1列出的是互联网上用户对各个操作系统的评价。从表中看出,使用最为普遍(投票用户数超过10000)的操作系统是LINUX、MacOS X、OpenBSD、SOLARIS、UNIX、VMS和WINDOWS。其中用户评价最高的操作系统是VMS,其反对票数与赞成票数的比例几乎是0,用户评价最低的是OpenBSD,反对票数是赞成票数的25倍多。
表2-1 截止到2009年2月16日 全球互联网用户操作系统评价
OS | 反对票数 | 赞成票数 | 反对赞成比率 |
AmigaOS | 63 | 75 | 0.84 |
BeOS | 135 | 283 | 0.48 |
FreeBSD | 673 | 9090 | 0.07 |
LINUX | 213000 | 379000 | 0.56 |
MVS | 63 | 168 | 0.38 |
MacOS | 1748 | 1517 | 1.15 |
MacOS X | 35200 | 29900 | 1.18 |
NetBSD | 257 | 654 | 0.39 |
Netware | 66 | 135 | 0.49 |
OS/2 | 58 | 211 | 0.27 |
OS/400 | 10 | 16 | 0.63 |
OpenBSD | 19800 | 781 | 25.35 |
SOLARIS | 10600 | 1841 | 5.76 |
UNIX | 14800 | 24200 | 0.61 |
VMS | 103 | 48840 | 0.002 |
WINDOWS | 433000 | 71500 | 6.05 |
从互联网用户对各种商用操作系统的评价来看,每种操作系统都有人不满意。这是因为操作系统是一个非常复杂的软件,其涉及的技术繁多,设计出好的操作系统十分不容易。
2.10操作系统的未来发展趋势
随着计算机的不断普及,操作系统的功能会变得越来越复杂。在这种趋势下,操作系统的发展面临两个方向的选择:一是向微内核方向发展,二是向大而全的全方位方向发展。微内核操作系统虽然有不少人在研究,但在工业界获得的承认并不多。这方面的代表有MACH系统。在工业界来说,操作系统是向着多功能、全方位方向发展。WINDOWS XP操作系统现在有四千万行代码,某些LINUX版本有2亿行代码,SOLARIS的代码行数也不断增多。鉴于大而全的操作系统管理起来比较复杂,现代操作系统采取的都是模块化的方式:即一个小的内核加上模块化的外围管理功能。
例如: 最新的SOLARIS将操作系统划分为核心内核和可装入模块两个部分。其中核心内核又分为:系统调用、调度、内存管理、进程管理、VFS框架、内核锁定、时钟和计时器、中断管理、引导和启动、陷阱管理、CPU管理;而可装入模块又有调度类、文件系统、可加载系统调用、可执行文件格式、流模块、设备和总线驱动程序等。
最新的WINDOWS将操作系统则划分成内核(Kernel)、执行体(Executive)、视窗和图形驱动、和可装入模块。WINDOWS执行体又划分为:IO管理、文件系统缓存、对象管理、热插拔管理器、能源管理器、安全监视器、虚拟内存、进程与线程、配置管理器、本地过程调用等。而且,WINDOWS还在用户层设置了数十个功能模块,可谓功能繁多,结构复杂。
图2-5 WINDOWS 2000/XP/2003系统结构(来源:<Windows Internals))
随着人们对信息安全重视程度的不断提升,如何构建可靠、可用、和安全的操作系统就成为一个十分重要的课题。而对可靠、可用、和安全的追求无疑将让操作系统更为复杂,操作系统的尺寸也将不断增大。从UNIX的1400行代码到WINDOWS XP的四千万行代码,这完全是一种爆炸性增长。而爆炸性增长的后果就是,没有什么人能够完全理解一个完整的操作系统,而这种状况又将限制操作系统的可靠、可用、和安全性。当然了,人们可以采用各种软件工程的方法和手段来改善这种状况。但无论如何,持续的爆炸性增长恐怕是难以为继的。
经上说过,不要预测将来。那就让我们所有关心操作系统的人拭目以待吧。
思考题:
1. 请列出你曾经用过的所有操作系统。哪个操作系统你觉得最好?为什么?
2. 你用过的操作系统里面,你感觉哪个操作系统最好?解释你的答案。
3. 计算机从过去单一控制终端单一操作员到现在的个人机,似乎我们转了一个圈。是不是我们人总是喜欢反复无常呢?请阐述你对这种否定之否定的观点。
4. 虽然我们不赞成对未来进行预测,但你是否对操作系统的未来演变有自己的看法呢?
5. MULTICS的出现在很大程度上是由于IBM的傲慢,你认为人的傲慢在操作系统发展过程中占有什么样的角色呢?
6. 驱动操作系统发展的主要动力有哪些?它们是如何驱动的?
7. 很多人都说,没有操作系统的计算机是一堆废铁,无法运转。但在计算机刚诞生的时候,谁也不知道操作系统这回事。那个时候的计算机为什么在没有操作系统的情况下能够运转呢?它们又是如何运转呢?
8. 操作系统根据其运行的计算机硬件结构不同而分为主机操作系统,服务器操作系统,和个人机操作系统。简要论述这三种操作系统的关键不同点。
9. MACH所提倡的微内核操作系统因为运行效率低下没有取得广泛的商业应用,你认为其效率低下的原因何在?
10. 简要论述实时操作系统和分时操作系统的区别。