OS演义(一)
本文的主人公是一种“为了合理方便地利用计算机系统而对其资源进行管理的软件”(摘自《中国大百科全书》电子学与计算机卷),本文所记载的内容,是一段历史课本所不收录的历史,是什么?请看——
OS?对OS,Operating System,就是我们总挂在口头上的“操作系统”,就是那个你玩电脑离不开的操作系统……反正你已经知道它是谁了。可是,它究竟做什么呢?
操作系统做什么?
你也许会奇怪,为什么二话不说,先摆上这样三个金字塔示意图,其实看了这三个示意图,你也就明白操作系统的重要地位了——按照应用软件的要求指挥硬件,扮演一个“团长”的角色:
在使用计算机时,用户运行应用软件,让应用软件做一些事情,应用软件把这些要求转给操作系统,操作系统把任务交给硬件的最上一层——BIOS,BIOS再去告诉CPU该计算什么数据,告诉显示器在哪一个点该显示什么样的颜色,告诉硬盘……命令越往下传,分得越细、也越多,直到最后以二进制的方式被硬件执行。这有点象军队的指挥方式:将军只管制定作战方案,告诉师长每个师的任务;师长的工作是布置每个团的任务;团长需要确定让哪个连去抢占哪个桥头堡;连长则要分配每个班、每个士兵的具体任务;每个士兵只需要按照接到的“二进制指令”完成任务就可以了。与最左边的那个金字塔相比,你会发现最上面的将军不是别人,正是你自己——你站在将军的位置上指挥这支二进制军队——你在使用计算机。当然,这支“二进制军队”有个特点——不能越级指挥,这个“团长”是必不可少的!需要说明的是,上面讲的只是一般情况,随着软件技术的不断发展,出现了一些新技术,它们可以绕过金字塔中的某一层,比如前两年才出现的直接写屏技术,可以绕过显示BIOS,直接把信号发往显示卡,但这样的技术只有少数几种,其目的都是为了大幅度提高软件性能(如果调用显示BIOS来显示汉字,速度是难以容忍的),且以绕过BIOS居多,至于我们的“团长”嘛,绕是绕不过去的。
好了,有关“金字塔”,就先说到这儿吧,相信你已经可以自己分析那个在486上学“急救英语”的那个金字塔了(你用它学英语吗?),下面来看看我们的“团长”都管些什么部队。
总的来说,操作系统管理的对象是计算机的各种软硬件资源,包括CPU、内存、外存储器、系统程序和数据文件等。操作系统对它们进行合理的管理,使它们能充分地发挥作用,为用户提供一个方便、有效、安全、可靠的使用环境。要做到这些,“团长”必须管理五支部队,操作系统必须具有以下五种管理功能:
1.CPU的管理功能。CPU是计算机最重要的资源,对CPU管理的主要内容是充分利用其工作时间,避免不必要的CPU等待时间。其实,这一功能在早期的单一任务操作系统中并不明显,而在多任务,尤其是多用户操作系统中,就显得尤为重要,因为它使得CPU可以同时为几个任务提供计算,显著地提高了CPU的利用率和操作系统用户的工作效率。CPU的分时利用一般采用时间片法来实现,这样可以使多任务或多用户更好地共享CPU资源。如果把任务合理地搭配,还可以保证CPU和外部设备并行地工作,并把这些资源合理地分配给各个任务,使多个任务能够有条不紊地运行。现在流行的一些多任务、多用户操作系统,如Windows系列、OS/2、UNIX系统,都比较好地实现了CPU的管理功能。
2.存储器管理功能。说到这个功能,你一定不会感到陌生——不管是玩游戏还是上Windows,时不时总要遇上个“内存不够”,这就是操作系统的存储器管理功能大显身手的时候了。它的主要功能就是合理地分配多个程序共用内存,使它们在自己的存储区域内互不干扰地进行工作,在必要时候,还要使用一些高级的内存管理方式,如扩充内存管理、自动覆盖和虚拟内存等技术,为用户提供更大的可用内存。举个例子说吧,Windows中的“虚拟内存”就是实现存储器管理功能的一种方式,它靠一个动态交换文件使用户能够享用比实际内存更大的空间,从而有利于多个任务之间的调配。另外,大家熟悉的游戏“福尔摩斯探案”中也使用了虚拟内存技术。
3.文件系统(信息)管理功能。不管是你写的文章,还是一些软件在使用过程中产生的临时文件,都得以文件的形式存储在硬盘或者软盘上,文件系统(信息)管理功能提供的正是这种对文件的存取服务。你可以直接使用系统的命令来完成对文件的存取(比如用DOS的COPY CON 命令写一个批处理文件),但更多的是通过应用软件来完成(所有的文本编辑软件都提供存盘功能),可应用软件又是怎样把你的文件写入硬盘的呢?它还是靠调用系统来完成的——不管是应用软件还是你自己,只需发布一道命令“存储文件”,操作系统就会指挥它手下的二进制军队去完成了。另外,操作系统还提供对文件属性和使用权限的设置功能。
4.外部设备的管理功能。说外部设备最形象的例子恐怕就是打印机了,操作系统怎样管理它呢?举例说吧,当你在应用软件中做“打印”操作时,这个应用软件便会告诉系统,说它需要接通打印机,这时系统启动外部设备的管理功能,接通打印机,把要打印的信息输送过去。当然,操作系统的外部设备的管理功能更重要的功能是按照一定策略(通过通道、缓冲和中断技术),充分发挥CPU和外部设备之间的并行操作能力,提高系统效率。
5.作业(任务)进程的控制功能。其实这一功能与CPU管理功能差不多,只是这里不仅仅是管理CPU,而是硬盘、打印机……什么都管,目的嘛,就是让多个任务更好地协调工作,让多个用户更好地分享宝贵的计算机资源。
有关这五支部队,就先说这么多吧,这些基本知识对于爱好者来说,有个大概的了解也就可以了,何况天天与之打交道,悟也悟出来了,说到“悟”字,倒是有点经验值得谈谈(如果你已经是个高手,赶紧把这一段跳过去):总有人问我,学电脑到底是先玩后学,还是先学后玩?我觉得,还是先玩一玩的好,当然,这里的玩不是指单纯的玩游戏,而是说要大胆的尝试,勇于实践。理由很简单,“玩”机器的人,都是先摸键盘后看书,也就是从感性认识到理性认识,符合认识规律嘛。比如学用Windows,先进去看看,用鼠标点点,马上就能对窗口、程序组、程序项有个非常形象的感性认识(虽然这时候可能还不知道“程序组”这个说法),然后再看看书,Oh,原来这个叫“程序组”——理性认识也有了,操作也学会了,怎么样,符合认识规律吧。这两句题外话只是经验之谈,相信各位爱好者都有适合自己的入门之道,好,咱们书归正传,接着说这操作系统,操作系统有哪些呢?
操作系统有哪些
操作系统的分类方法很多,这里只按操作系统的使用对象说个大概吧。
首先,有单用户操作系统。这类操作系统使用得最多,大家使用的DOS、Windows3.X、Windows95和OS/2等都属于这一类操作系统。它们的共同特点是以单机为系统运行平台,为一个用户提供服务,系统适应性很强。由于这一类操作系统用户最多(常常在几百万至几千万),加上个人电脑发展很快,用户不断地对操作系统提出新的、更高的要求,所以这一类操作系统的发展也是几类操作系统中最快的。
与单用户操作系统相对应,另一类操作系统叫多用户操作系统。它的特点在于其开放性,往往系统安装在一台主机上,管理主机的各种资源,同时它可以接受数十个终端用户的访问,使得这些终端用户可以共享主机资源。这一类操作系统一般比单用户操作系统要庞大,对主机的硬件配置也有较高的要求,最常见的有UNIX、XENIX、MP/M等,其中使用最广的是UNIX系统(其开放性在Internet上得到了充分的体现)。
还有一类操作系统,叫网络操作系统。网络操作系统与多用户操作系统最大的不同,在于它是安装在网络上,即在服务器和工作站上各有一部分程序,两部分程序一起工作,才能完成在网络上的各种操作,而不像多用户操作系统,只是安装在一台主机上,由终端用户通过它来使用主机。随着网络的发展,网络操作系统也在不断发展,现在常用的网络操作系统有3COM、LAN Manager、NetWare和WindowsNT等。
哇,原来操作系统有这么多呢!它们的历史有多长呢?它们是从来就有的吗?操作系统是从来就有的吗?
人世间有这样一条千古不变的法则:需求推动发展。这简简单单的六个字,从上古时代便开始生效:人类渴望光明,这种渴望促使人类掌握了火,从而开创了这个星球的文明;人类为了狩猎充饥而发明了弓箭,为了缝衣遮体而发明了骨针,为了辨别方向而发明了司南……每一个新生事物的背后,都有一种巨大的“为了”推动着,文明发展到计算机时代,这条法则依然有效——人们对操作系统的需求推动了操作系统的发展。
这么说,最初的计算机是没有操作系统的?是的,没有。可是……那该怎么操作呀?操作嘛,是很麻烦的,你去看看就知道了。
1946年2月,在美国宾夕法尼亚大学的一间大屋子里,世界上第一台数字式电子计算机正式交付使用,看看它的出生证,上面这样写着:姓名:ENIAC(Electronic Numerical Integrator and Calculator,电子数字积分和计算机);身材:庞然大物(占地170平方米);体重:30吨;内脏:18000多只电子管+1500多个继电器;饭量:150千瓦;智力水平:每秒5000次加法运算;使命:加快火炮瞄准仪的计算速度;家族宗室:结绳记事——上古、算盘——唐代、机械计算机——1642年、计算尺——1654年、手摇计算机——1887年。
哇,这么大的家伙!我可以去试试吗?恐怕不行,倒不是说不让你试(反正这是一次假象的旅行),实在是你玩不转这个大家伙,还是先看看那些秃顶的工程师们怎么让它工作吧。
他们手里没有键盘,没有鼠标,只有带导线的插头,他们把这些插头插进计算好的插口,1、2、3……哇,有6000多根!而且,当改换任务时,还得再插一遍!你知道为什么说你玩不转了吧,我可只会用Alt+Tab。怎么?怎么停了?马上有人关掉ENIAC,去检查那些烫手的电子管,那18000多只电子管!不一会儿,“元凶”找到了——原来,蛾子们“向着阳光走”,于是有了这“飞蛾扑火”的一幕,不过这次扑的是那些发光的电子管,扑上哪有不短路的道理?当然,这飞蛾扑火的故事,只是一种说法,也许它是真的,也许这是BUG最初的由来吧,总之,你已经领略到了操作ENIAC的艰辛。
与艰辛相伴的,是难耐的枯燥。今天,我们只要用可爱的鼠标点点那美观大方的图标,就能完成我们的工作,即便是在DOS环境,象COPY、DELTREE这样的命令也都是非常近似自然语言的(相信你英语还可以吧),而在ENIAC的年代,不但没有图标、没有图形界面,甚至没有键盘和显示器,那些工程师们与ENIAC唯一的交流方式就是通过拔插那6000多个插头(比如插上代表1,断开代表0),来以二进制方式直接指挥这支二进制军队,他们扮演了从将军到传令兵的各个角色。也许你想知道这种交流究竟枯燥到什么程度,可以想象一下,如果要告诉ENIAC“POPSOFT”,需要怎样对这支二进制军队说呢?你得把POPSOFT变成1010000 1001111 1010000 1010011 1001111 1000110 1010100,它才能明白你的意思,怎么样,够枯燥了吧?好在有上面的那一条千古不变的法则,人们对改进操作方式的迫切需要,推动了操作系统的产生与发展。
从冯诺依曼结构到操作系统形成
对约翰冯诺依曼这个名字,大家一定不会感到陌生,在任何一本计算机的入门教材上都会有他那著名的“冯诺依曼”式计算机简图:输入设备、输出设备、运算器、存储器和控制器。按照他的理论,计算机可以在内存中存储指令,通过这些指令来完成各种操作,而不用每一个操作都要人工地以二进制方式输入,这样一来,人们便可以从二进制的指挥方式中解脱出来,而那些在一开机就加载到内存的指令正是操作系统的一部分,从这个意义上说,是冯诺依曼为操作系统的产生在原理上奠定了基础。然而,从冯诺依曼结构的建立(他于1945年公布了他的原理)到真正的操作系统的产生,还有相当漫长的路程。
对操作系统的产生在原理上奠定了基础的,不仅有冯诺依曼,还有大家所熟悉的汇编语言。为什么这么说呢?因为冯诺依曼结构中的指令以什么样的形式出现,是个关键问题,一方面,它们要能以二进制的方式指挥硬件,另一方面,它们要以一种人们比较容易接受的方式呈现在人们的面前——它们要具有翻译的能力,把人们的语言(在汇编语言中还只是助记符而已)翻译成为硬件能够理解的二进制的形式。而汇编语言是第一个实现这种翻译功能的语言,正是它的这种翻译能力,为操作系统的产生在原理上奠定了基础。
说起汇编语言,其实它也是“需求的产物”——最初的程序员只能用0和1来进行程序的设计工作,这种方法的枯燥是你已经领教过的,但枯燥还是次要的,关键是可读性极差、出错率太高,后来,程序员在解放自己的过程中,创造了“汇编语言”这个能够将符号指令(助记符)翻译成机器码的翻译工具,从而使操作系统的产生成为可能。
很快,就出现了操作系统的一个雏形——一种叫做“监控程序”的汇编程序,它已经能够对计算机进行初级的系统管理和控制,虽然它无法与今天的操作系统相比,但与直接用0和1操作计算机的时代相比,已经是一个巨大的飞跃了。
随着计算机硬件和编程语言的发展,到60年代,出现了能够对计算机的资源进行全面管理的操作系统。此时的操作系统已经象模象样了——输入输出设备、内存、中断、CPU……通通听从它的号令,但由于那时的计算机还都是“庞然大物”,每台计算机都有自己的操作系统,通用性很差,制约了软件和操作系统的发展——毕竟,这还只是操作系统发展的起步阶段。真正的“繁荣期”,是在70年代,随着微处理器的发展,计算机从“贵族”走向“平民”之后的事情了。在这之前,有位巨人在操作系统上摔了一大跤。
那是操作系统发展早期的一个教训。时光回到1963年,蓝色巨人IBM(之所以得到这样一个雅号,是因为IBM的雇员都按照公司的规矩,穿浅蓝色衬衣和深蓝色西装)开始了它的360大型机计划。IBM360是个划时代的产品,因为当时各个公司的产品还都是第二代计算机(晶体管计算机),而IBM360则是第一种第三代计算机,与早期产品相比,IBM360由于采用集成电路而使其体积大大减小,而同时速度却大大加快——它将在一夜之间淘汰所有的第二代计算机。为此,IBM投资50亿美元(1963年的50亿美元!)——这个项目只能成功,不能失败。可是在当时,并没有编写这样的大型操作系统的经验,再加上缺乏规划,没有使用标准化接口,使得360的操作系统开发工作深陷泥潭,浪费了5000人年的劳动力,最后不得不从头做起。在这以后,人们开始重视软件的可行性分析、资源分配、软件规划与维护等一系列关系到软件开发能否顺利进行的问题——教训虽然惨痛,但毕竟总结出了不少经验,使以后的操作系统开发能按照标准化的方式进行,为以后软件和操作系统的顺利发展创造了条件。不过你也不用替IBM担心,虽然操作系统的开发工作耽误了不少时间,但这并没有影响360系列的成功。事实上,IBM的360战役是大获全胜的,它淘汰了第二代计算机,也淘汰了很多技术跟不上的公司,就连通用电气公司、美国广播公司这样的大公司都因竞争失利而不得不将其计算机分部卖掉。在360战役之后,IBM在世界范围内树立了“IBM标准”,巩固了它在大型机市场“老大”的地位,并且一直在做它的大型机,下一次惊人壮举是1981年底推出开创个人电脑新时代的IBM PC,而在这之前,计算机已经在一群年轻人的努力下,走出了神圣的机房,从“贵族”走向“平民”了。
进入个人电脑的时代
每当一个新领域出现的时候,都会有一两家公司走在时代的前头,走在技术的前头,推动新兴行业的发展。当个人电脑萌芽的时候,这个角色落到了英特尔的头上。现在的电脑爱好者,恐怕没有人不知道英特尔的大名了,可在70年代,它还是一家名不见经传的小公司——1968年,仙童(Fairchild)公司的三位灵魂人物诺谊斯、摩尔(记得摩尔定律吧?)和葛洛夫(现英特尔总裁)离开仙童,自立门户。仙童公司原本由工业家费尔柴尔德投资创办并以他的名字命名,总部位于纽约,有很多分公司,分别经营不同的业务(轻武器分公司曾参与M-16计划,飞机分公司的产品包括著名的“坦克杀手”——A10),半导体分公司曾经在很长一段时间内是行业的“老大”,但由于内部管理不善,人才流失严重,这不,又有三位精英跳槽了。这三人取了“集成电子”的字头(Integrated Electronics),拼出了“英特尔”(Intel),到它推出第一颗微处理器时,不过才成立3年。
时间走到了1971年,这对于英特尔公司,对于个人电脑行业来说,都是个“创世纪”的年份。在这一年,英特尔推出了全球第一颗微处理器——4004,这虽然还是一颗“中看不中用”的芯片,但正是它,开创了个人电脑的时代——它是Pentium、Pentium Pro所有这些芯片的开山鼻祖。其实英特尔开发微处理器也是出于偶然,1969年英特尔公司受一家名为Busicom的日本公司委托,设计生产几颗特制的计算机的芯片,负责这个项目设计工作的“微处理器之父”马西里安霍夫(Marcian Hoff)一次突发灵感——为什么不把所有的功能集中在一块集成电路上呢?多好的设想!可惜那家日本公司却并没有意识到这个设想的伟大意义,从而失去了一次拥有先进技术的机会,而在英特尔内部,霍夫的头头摩尔给了霍夫很大的支持,这样,在霍夫及其同事费根的努力下,到1971年,4004诞生了。有人说霍夫就象那个古老故事中的渔夫,捞到了一个千年古瓶,这瓶中魔鬼注定要开创一个新的行业。4004的家族继续发展,后来有了8008,到1974年,有了8080,此时的微处理器已经“中用”多了,开始被人们用作个人电脑的CPU了(在英特尔研制出微处理器后的很长一段时间内,它都不是主要被用作CPU,随着微处理器和个人电脑的发展,CPU在英特尔的业务中的比重越来越大)。
与英特尔同一年成立的,有一家MITS公司(微型仪器遥测系统公司),它的创始人埃德罗伯茨是个300磅重的电子迷(有人开玩笑说“他的求知欲就象他的食欲一样,从没有满足过”),从空军退役后,他创办了以生产电子计算器为主的MITS公司。后来,由于财大气粗的德州仪器参与竞争,他在计算器市场败下阵来,为了挽救公司,他在英特尔推出了8080微处理器之后,瞄准了一个全新的领域——个人电脑。1974年,罗伯茨采用英特尔的8080微处理器制成了他的第一台个人电脑,在他正为宣传而发愁时,同样为缺少头条新闻而发愁的《大众电子学》编辑所罗门自己找上门来,两人一拍即合,但还有一个问题让两人头疼——为了标志个人电脑新时代的到来,得给这台样机起个新颖的名字(在此以前的计算机,都用编号的方式来命名,就象前面提到的IBM360),可起什么好呢?最后,还是所罗门的科幻迷女儿给出了一个好名字Altair(即StarTrek中“企业”号要去的那个地方,也就是我国民间传说中的牛郎星)。按照两人的约定,所罗门负责撰写于《大众电子学》1975年元月号上发表的介绍文章,罗伯茨则要在圣诞节之前把他那唯一的一台Altair样机寄到纽约《大众电子学》的总部。但意外也就在圣诞节的邮包中发生了,不知怎的,也许是圣诞节前邮包太多了吧,也许它真的飞往牛郎星了,反正所罗门并没有收到那个肩负着历史使命的邮包。可是,再做一台样机是来不及了,最后,罗伯茨不得不“欺骗”一下《大众电子学》的100万读者了——他又做了个Altair的外壳寄了过去,就这样,这个外壳招来了两位操作系统的开拓者。
今天,这两位开拓者都已成为世界级的富翁,但在当年,他们不过是两个初出茅庐的大学生,对了,就是他们——比尔盖茨和保罗艾伦。1974年12月底的一个早晨,保罗艾伦和比尔盖茨在哈佛广场上闲逛,碰巧在报摊前看到了提前出版的《大众电子学》1975年元月号(封面上印的正是罗伯茨后来寄去的那个外壳),从那时起,这两位在操作系统发展历史上做出重要贡献的年轻人便抓住了个人电脑革命的脉搏,并在这次革命中扮演了重要的角色。他们在《大众电子学》的封面上看到了Altair的全部:没有键盘,没有显示器,面板上有16个开关可以用来对这个小小的二进制军队发布指令——和它的老祖宗一样,还得用二进制!这不行,因为不可能指望爱好者们用二进制去编写程序,如果不能给他们提供BASIC语言,Altair在他们的手里将毫无用处。对,BASIC,这正是比尔盖茨和保罗艾伦的拿手好戏,他们坚信,以他们的BASIC,加上Altair创纪录的价格——397美元(当时的庞然大物们动不动就要上万美元!),是可以创造奇迹的。比尔盖茨马上拨通了罗伯茨的电话,说他手上已经有可以在Altair上运行的BASIC,对方的回答倒是很干脆:“我已经接到了50多个这样的电话,我的回答都是一样的:谁能第一个让他的BASIC在我的Altair上工作,谁就取得了与我做生意的权力。”其实,比尔盖茨和保罗艾伦将要给Altair编写的已经不仅仅是一套BASIC语言了,因为那时的Altair还没有操作系统,所以他们的BASIC必须能够直接驱动Altair的硬件(按照本文前面的金字塔,高级语言是建立在操作系统之上的,也算是踊种应用软件),也就是说,他们的BASIC要包含操作系统的内容,看起来就象是一种“二合一”产品,就叫它“二合一”操作系统吧。这两位年轻人是决定大干一场了,可是他们手上连一台真正的Altair都没有,而电话里提到的那个BASIC更还是座空中楼阁,这个玩笑是不是开得太大了一点?他们能成功吗?