第二章 一种操作系统的诞生
有些人记忆时间的方法是通过他们曾经驾驶过什么样的车子,干过什么样的工作,或在什么地方住过,以及追求过什么样的情人。而我的生
涯却是由电脑来划分的。
我成长期间只有过三台电脑。上面提到过的VIC-20,是我外祖父留给我的遗产。它是“家用”电脑中的一种,是当今PC机的前身。般长64电
脑后来成了VIC-20的老大哥,接踵而至的是Amiga,这种机器在欧洲特别受欢迎。这些电脑从来未像PC机甚至苹果II那样流行过,我在玩VIC的
时候,还?I已经很流行了。
在那个年代,PC机普及之前,家用电脑的多数程序使用的都是汇编语言。它们都有自身的操作系统,等同于PC机里的DOS。由于机器不同,
操作系统很可能是一种简单的格式,或是增强的格式。那时没有什么技术标准,许多公司都想控制市场。最有名的公司之一就是Amiga。我现
在句子的开头都要用上“在那个年代……”,真是不可思议。
等我对VIC-20玩得已经很精通后,我便开始攒钱想买一台下一代的电脑。这在我生活中是一件大事。前面我已经提到过,我对我的家人在某
个特定的时间住在什么地方,以及其他许多事情都记不清了,但我购买第二台电脑的过程却很难忘记。
我攒了一些圣诞节和生日的压岁钱(我生于12月28日,那两个节日基本上凑在了一起)。有一年夏天我还参加了赫尔辛基公司清洁队,挣了一
些钱。赫尔辛基的许多花园没有美化,保养得不太好,更像是一些娱乐场所和绿地,长着高高的树林。我们所做的就是锯掉长高的灌木丛并
把死掉的残枝拾走--这种活儿还挺有意思。我一贯喜欢室外运动。曾经一度,我还当过邮差,但送的不是报纸而是垃圾邮件。细想起来,我在
夏天基本不怎么打工。但在那些日子里还是干了一些活。总体来讲,我的钱基本都是学校发给的奖学金。
在芬兰,给学校捐款是很普遍的事情,连公立小学也有人赞助。所以从小学四年级开始学生就能得钱,发放的方式完全由建立基金的人决
定。我记得有一种捐款是奖给班里最受人爱戴的学生的。当时我们六年级,全班还真的举手投票表决,看谁能得到那笔钱。顺便说一下,我
当时未被选中。奖金仅有两百芬兰马克,当时只值四十美元,但对一个最受欢迎的六年级学生来说似乎已不是个小数目了。
通常情况下,在某一个学科或体育项目中有突出表现的学生都能得到奖学金。许多奖项都是由具体的学校发放或由州政府赞助的。有些奖学
金随着时间的推移数目越来越少。我记得有一种奖项最后只值一毛钱。发生这种情况时,学校也会出些钱补进去,但是尽管如此数目仍然不
多。这样做的目的仅仅是在每年当中把发放奖学金的传统继续下去。芬兰对学术传统非常认真,这当然不失为一件好事。
于是我作为优秀的数学学生,每年都能得到奖学金。上高中后,奖金的数目越来越大,最多的时候可以达到五百美元左右。因此我买第二台
电脑的钱基本上是这么来的,我每月的生活费肯定付不起电脑钱。此外我还从我爸爸那里借了一些钱。
当时是1986或1987年。我十六或十七岁。那个时候我已不再打蓝球。决定买何种电脑之前,我花了大量时间进行了一番调查。当时的PC质量还
不太好,我便决定不买PC机。
我选择的是Sinclair QL,你们当中的许多人大概太年轻,对这种机子没有记忆。
下面是QL的简单历史:当时,Sinclair是市场上32比特的机器之一,主要用于家庭。那家公司的创始人克里夫?辛克莱尔(Clive
Sinclair)在英国等
同于史蒂夫?沃斯尼亚克(Steve Wosniak)。他制作出这些电脑的配套元件,然后以Timex的品牌在美国销售。没错,一家制造钟表的公司进口
Sinclair的元件,然后再打着Times品牌在这里卖出。早期销售的也是配套元件,他后来开始销售组装好的机器。
Sinclair的操作系统叫做Q-DOS。这种操作系统是专门为那种电脑写的。按照当时的情况,它的BASIC语言非常先进,而且有着不错的图形
显
示。那种操作系统最令我兴奋的一个特点是它能进行多重任务处理。你可以同时操作多个程序。然而其BASIC部分却不是多重任务处理,所以
同一时间之内你不能操作超过一个以上的BASIC程序。但如果你用汇编语言编写自己的程序,就能让操作系统列出时间表,把时间分隔开来,
这样你就可以在同一时间操作多个程序。
这种电脑有一个8兆赫的68008芯片,它是摩托罗拉68000芯片的第二代,是个更加便宜的版本。在内部,第一代68000芯片是32比特,但在
外
部,却以16比特与CPU之外的设备进行连接,例如存储器和硬件附加装置。由于它只能在一个时间内从存储器上载16比特,因此16比特的操作
常常比32比特的操作要快。这种结构非常受欢迎,今天在许多嵌入装置和轿车里仍然有人使用。虽然芯片已经不同,但却是基于相同的结构
生产的。
我的电脑中的68000芯片在与CPU之外的设备连接时使用的是8比特,而不是16比特。但虽然它与外部设备互动的是8比特,其内部却是32比特
的。这就使它在编程方面显得非常不错。
它的内存是128千字节,不是兆字节,这在当时对家用电脑来说已经非常大了,而被它所取代的VIC-20仅仅有3.5千字节的内存。因为它是一台
32比特的机器,所以能毫无困难地读取所有的内存,这在当时是前所未闻的。我之所以要买这种电脑便是出于这个原因。它的技术非常有意
思,我喜欢它的CPU。
我的一位朋友认识一家商店的老板,于是我希望能在他那里打折买这种电脑。但等货的时间太长,于是我便前往赫尔辛基一家最大的书店,
因为那里有一个电脑柜台。我的电脑就是在那里购买的。
那台电脑花费了我差不多两千美元。当时的情况是,低档电脑的价格总是在两千美元上下。只是在最近两年这种情况才有所变化,现在你只
需花五百美元就能买一台PC机。这种情况和造汽车一样,没有人愿意生产低于一万美元的汽车。在某一段时间,低于一万美元就不值得制
造。不错,公司完全可以造出销售价格为七千美元的汽车,但汽车制造商们认为,凡是能出得起七千美元的人,如果能买到附加的标准设
备,比如空调,花上一万美元他们也高兴。假如你把今年出产的低档轿车同十五年前的同类轿车相比较,就会发现,它们的价格大体一致。
其实,将通货膨胀的因素去除,它们的价格或许稍微便宜一点,然而质量却好得多。
过去的电脑就是这样。当电脑还不是人人都买的商品时,你就只能忍受两千美元的昂贵价格。假如一台成本很低的电脑价格非常昂贵,公司
就无法大量地进行销售。但生产商制造电脑的成本并非很低,所以公司若是卖得很便宜就不合算。人们总是希望多花二百美元买台更好的机
器。
最近两年,制造电脑的成本已经大幅度降价。甚至低档的电脑质量也非常好。公司已经失去了许多愿意多付二百美元买一台稍好一点机器的
客户,它们就只好依赖价格进行推销了。
我得承认,QL的卖点之一就是它的样子非常酷。
整个机身是无光泽的黑色,带着一个黑色键盘。整个样子有棱有角,而不是那种圆圆的漂亮的机型。它的造型有点走极端。键盘有一英尺
厚,因为它与电脑联为一个整体。当时许多家用电脑就是那样设计的。在键盘的右端,即应该是小键盘的地方,有两个具有革新意义的Sinclair
微型驱动器,它用的是只能在Sinclair上使用的无限循环磁带。它们的作用就等于软驱。因为它是一个长长的圆圈,你可以进行旋转,直到点到
你需要的东西为止。实践证明这个创意并不是理想,因为它不像软驱那样可靠。
于是我花两千美元买了一台Sinclair
QL。我用它所做的就是不断地编写程序。我总是在寻找有意思的事情做。我有一个Forth语言解释程序和编
译程序,纯粹是为了用着玩。Forth是一种很怪的语言,现在已经没有人使用。它是一种挺好玩而且在市场上有利可图的语言,因为可以做许
多事情而在八十年代被广泛运用,但从来没有特别普及过。它对不懂技术的人来说非常难于掌握。其实这种语言也没有什么太大用处。
我开始自己编写工具性程序。我最初为这台机器买的东西之一是一个携带EEPROM(电子可读及可编程序只读存储)卡的扩展底座。这是利用特
殊模件自己编写的内存,关机后它仍存在。这样一来,需要时我就能随时获得那些工具,没必要将它们写入内存,于是就能占用珍贵的内存
进行编程了。
使我对系统感兴趣的是,我买了一个软盘控制器,因为已不必再使用微型驱动器了。但软盘驱动器上的驱动程序不好使,于是我自己又写了
一个。在编写过程中,我在操作系统里发现了一些病毒。我之所以能发现病毒,是因为我编写的一些东西无法操作。
我的编码总是很完美的。所以我知道肯定是别的地方出了差错。
于是我把整个操作系统都卸掉了。
你可以列出一推关于操作系统的书籍,这些书能帮上忙。你还需要一个反汇编程序,这种工具能把机器语言变成汇编语言。这一点非常重
要,因为你要是只有机器语言的版本,执行指令时就非常困难。你会发现一个指令跳到一个数字的地址,读起来非常困难。一个好的反汇编
程序可以为数字起名字,也可以让你起名字。你还可以使用它帮助你寻找特殊的相关指令。我自己有一个反汇编程序,可以用它创立相当不
错的目录。一旦出现差错,我就可以进入反汇编程序,让它从特殊的地点找出目录,而且我还能看到操作系统将要执行的任何任务。
有时我使用反汇编程序并非是因为出了故障,而是想弄明白它到底能做些什么。
QL令我讨厌的一个地方是,它只有一个只读操作系统,对于一切都无法改变。它在某些地方的确有HOOKS(是一种消息处理机制,它使程序
员可以使用子过程来监视系统消息,并在消息达到目标过程前得到处理--译注)。HOOKS就是你能切入你自己的编码接管某些功能的地方。但
HOOKS只出现在某些特定的地方。要是能完全替换你的操作系统就会好得多。在只读存储器中运行一个操作系统是一种非常糟糕的想法。
虽然我说过,芬兰是一个非常乐于接受新技术的国家,但Sinclair QL在这个欧洲第七大国却没有站住脚跟。由于QL在芬兰的市场非常之小,每
当你想为反传统的尖端机器购买升级设备时,只能通过邮寄的方式从英国购买。你必须翻阅许多产品目录,直到找到一家销售你所需要的设
备的厂家为止。然后你还得准备好保付支票,再等上几个星期的送货时间。那个时候还没有网上购物和在网上使用信用卡。在我很希望把我
的内存从128千字节扩展到640千字节时,我只能通过邮购的方式获得。我买了一个新的汇编程序,将汇编语言转换成机器码(数字1和0),又买
了一个编辑器,后者主要是为编程使用的文字处理程序。
新的汇编程序和编辑器都不错,但是它们是在微型驱动器上,无法放入EEPROM。于是我自己编写了汇编程序和编辑器,应用于我所有的编
程之中。编辑器和汇编程序都是用汇编语言写的,按照今天的标准看上去非常愚笨。这种语言又复杂又费时,我想用汇编语言解决一个问题
要比用C语言解决一个问题多出一百倍的时间,而当时C语言已经存在了。
我给我的机器带着的基本处理程序增加了好几个指令,所以只要我想编辑任何东西,机器就会自动操作我的编辑器,它立刻就会显现出来。
我的编辑器比机器本身带的编辑器速度要快。我可以在显示器上以极快的速度书写文字,我为此而感到骄傲。通常用这样的机器,在显示器
上写满字需要很长的时间,你可以看到屏幕在慢慢地滚动。但是用我的编辑器在书写时速度非常之快,屏幕滚动能给人造成一种模糊的感
觉,这让我很得意。这一点对我非常重要。它使我的机器显得性能惊人,而且我知道为了让我的操作更迅速,自己已做了大量的工作。
那时,在我所认识的人当中,像我那样沉迷于计算机的人微乎其微。学校里有一个电脑俱乐部,但我几乎不怎么去。那个俱乐部主要是为那
些想了解电脑的孩子们创立的。我们的高中只有二进五十名学生,但我想他们在十岁以后就再没有一个人玩电脑了。
通常我用我的Sinclair
QL电脑做的事情是复制游戏。我曾用VIC-20电脑为我喜欢的游戏作过翻版。有时我还让游戏升级。但多数情况下它们都
得不到改进。机器更高级了,但概念并无改进。我最喜欢的游戏大概是“小行星”,但我怎么也不能很好地将其复制下来。原因是那个时期
所有游戏机中心的“小行星”游戏都是用真正的矢量图形显示进行的。那些游戏的图形不是靠小粒(即像素)显示的,而实际与阴极射线管的原
理相同:电子是从阴极射线管的后面通过电子枪发射出来,然后用磁铁进行转向,这样便可以高清晰度地显示图像,但如想复制过来就不那
么容易了。你当然可以复制,但假如你的电脑没有特殊的图形显示能力,复制出来的东西便与原本的“小行星”相去甚远。
我记得曾经采用汇编语言对“穿靴人”做过翻版。第一个步骤是,你必须记住穿靴人里的人物是什么样子。然后你把它们画在一张16*16平方
厘米的坐标纸上,再涂上颜色。你若有艺术细胞,就可以画得很逼真。然而若像我似的完全不懂艺术,画出来的人物就会像是穿靴人的生了
病的小表弟。
所以这个复制做得并不理想。然而我却为此感到自豪。做出来的那个游戏是可以玩的,于是我把它寄给了一家发表电脑编码的杂志。我曾经
把其他的程序寄给一些杂志,所以我以为我这次被他们接纳应是理所当然的事。
事实却恰恰相反。
其中的一个问题是,无论你在什么地方出现一个极为微小的错误,它就会运转不灵。
我自己也写过一些游戏。然而创作需要某种心态。由于游戏需要大量的表演,就需要你对电脑的硬件十分精通。这我做得到。但我却不具备
玩游戏的感觉。一个出色的游戏通常并不是它的速度有多快,也不是它的图形显示得多么漂亮。它必须能让你感到玩得起来--能吸引人。游戏
和电影颇为相似。特殊效果是一回事,然而你还是需要情节。我所有的游戏从来都没有情节。游戏还需要有发展,有想法。发展常常就是让
游戏速度越来越快。穿靴人就是这种模式。进展时也产生变化,或是让你能够更紧密地跟踪里面的怪物。
我对“穿靴人”感兴趣的另一个原因是,它能够解决图形显示闪烁不定的问题。这在老式的电脑游戏中是一个比较普遍的问题,因为没有特
殊的硬件,你的人物就会闪烁不定。你采用的办法就是去掉老拷贝,重写一个新拷贝。假如你的时间恰巧处理得不好,人们就能看到没有拷
贝时的状况,于是就更会出现闪烁的情况。解决这一难题有许多种方式。你可以先画一个新人物,然后再把以前的人物去掉来避免这一问
题。但你必须小心谨慎,不要把老人物被新人物覆盖住的那部分也给去掉。这样你就能获得一个良好的效果,不会再看到烦人的闪烁现象。
这一解决方案的问题是创作时相对昂贵,而且特别费时间。
游戏为何总是处于技术领先的地位,而且编制人员为什么总是先制作游戏程序,其中是有原因的。一方面是关在房间里玩电脑的聪明的程序
编制人员都是十五岁左右的孩子(我十五年前就这么认为,至今对此仍深信不疑)。游戏之所以总处于领先地位还有另一个原因:它总能推动硬
件的发展。
你若是看一下今天的电脑,就会发现它们速度快得可以做任何事情。但考验硬件极限的往往是动作感过强的游戏,如现在很流行的一些三维
游戏。从根本上说,通过电脑上的游戏,你可以看出硬件是不是过关。进行文字处理时,速度慢上一二秒钟也不会在意,但玩游戏时,出现
十分之一秒的误差也非常明显,游戏过去都比较简单,时至今日,编程只是任何游戏的一小部分,此外还有音乐和情节。假如你把制作游戏
比做拍电影,编程者在一定程度上就等同于摄影师。
就这样,我使用了Sinclair QL电脑三年:从高中到赫尔辛基大学,再到芬兰部队服役。这个电脑不错,但我们肯定会分手。在最后的一两年
里,我发现了它和短处。68008是个不错的CPU,但我在书上了解到了下一代的68020,得知了诸如内存管理和分页等种种功能,在使用低档电
脑进行工作时,这种新的电脑可以完成非常重要的任务。
Sinclair QL令我讨厌的地方是,它的操作系统虽说能进行多重任务处理,但在任何时候都会出现死机,因为它没有保存措施。只要一个任务出
现差错,就能让整个机子死机。Sinclair QL是克里夫?辛克莱尔爵士最后一次设计和制造的电脑,原因之一是这种电脑在商业上并不成功。它
的技术非常有意思,但公司却存在着生产问题和质量保证问题,而且最终宣传上也很失败。此外,市场竞争也开始变得越来越激烈。
到了八十年代末期,你便开始想象,或许有那么一天,大街上的每一个人都可能拥有一台电脑,哪怕只是进行简单的文字处理。而且种种迹
象表明,发展方向是PC机。不错,IBM最早制造的PC机尽管有许许多多的技术问题,但却开始摆满了商店的货架,销售得极为成功。PC机的
另一个吸引人的地方是:外围设备非常标准,而且很容易就能搞到。
所有关于这种较新的CPU的文章我都阅读,它可以完成我想完成的任何任务。显而易见,看上去非常有意思的68020发展前景不佳。我完全可
以为QL买一个升级的CPU。在那个年代,这便意味着重新组装一台机器。尽管如此,操作系统还是没有内内存管理,所以我不得不自己编
写。于是我想:这将是很费力的一步,而且获得一个CPU过于昂贵。
此外,令我越发感到头疼的是:为电脑购买设备的问题依旧存在。Sinclair QL电脑的产品目录似乎根本就没有过,所以你不可能简单地抄起电
话,像定购西尔斯百货商店的邮购商品那样定购内存设备。再说,通过邮局从英国订货的做法已经过时了。当时还没有用收缩封套包装的软
件盘,这我倒不在乎,因为我都能自己编写。
这个头疼的问题却给我带来了一个好处。在我琢磨着把我的机器处理掉时,也决定把我的附加设备卖掉。我指的是我买的硬盘驱动器,因为
要扩展内存,我一分钟也不能忍受了。当时没有人在大街上到处找这种东西,所以我只能在电脑杂志上登广告,然后就祈祷等待着。就这
样,我认识了我的好朋友乔科?维亚鲁马奇(Jouko Vierumaki)。在整个芬兰,他大概是第二个拥有Sinclair
QL电脑的人。他对我的广告做出了
回应,骑着自行车来到我家,买走了我的一些外围设备。后来,他也让我学着打斯诺克台球。
2、上大学
我在上大学的第一年,住在彼得盖坦街,我的宿舍在一层,靠窗户的一张桌子上就摆着Sinclair QL电脑。但我没有编写多少程序,原因之一是
我必须集中精力读书,原因之二是我也找不到什么项目去做。没有项目可做就会缺乏热情。你总是在寻找能够让你鼓起劲去做的事情。
当时似乎是参军的好时光,而且我也知道那是早晚的事。我当时十九岁,正因为自己的电脑毛病太多而心情沮丧。而且,当时也没有任何有
意思的电脑项目,于是我就搭上了一辆开往拉普兰的火车。
前面我已经说过,关于军队在体力方面会对我们做出什么样的要求我是一无所知的。所以在那里手执武器上了一个月的“体育课”之后,我
便觉得在我有生之年完全有资格从此一动不动,享受平静的生活了。惟一可做的事情就是把编码打入键盘,或者手里端着一瓶比尔森啤酒
(说真的,在我复员整整十年后,才第一次参加一次剧烈的活动。当时大卫硬拉着我去冲浪。旧金山半月湾的强大海浪差点没把我淹死,我
的腿一连酸了好几天)。
部队服役结束于1990年5月7日。塔芙会告诉你,我连我们的结婚纪念日都记不住,但我却不大可能忘记我离开部队的日子。
刚一离开部队就想弄只猫。
复员的几个星期前,我一个朋友的猫下了一窝崽,于是我把他剩下的唯一一只小猫买了下来。那是只白色的公猫,长得很漂亮。它生下来的
头几个礼拜就在室外跑来跑去,所以在我妈妈公寓的室内和室外养活起来都很容易。我给它起了个名字,叫兰迪。它现在已经十岁了,和它
的主人一样完全适应了加利福尼亚的生活方式。
那年整个夏天我没有干什么正事。我大学二年级的课程直到秋天才开始。我的电脑状态也很不佳。于是我就穿着一件破旧的睡衣,逗兰迪
玩,偶尔和朋友们联欢会,让他们笑话我的保龄球和台球的拙劣技术。当然,我对我的下一部电脑也做了一些设想。
我面临的是一个电脑迷的困境。
我同其他随着68008芯片一起长大的电脑迷一样,特别讨厌PC机。但在1986年386芯片出台后,PC突然看上去有了魅力,凡是68020能做
的事情
它们都能做。到了1990年,大规模的生产使这种机器的价格急剧下跌。我对钱很在乎,因为我手拮据。于是我就希望拥有一台这样的电脑。正
因为PC非常红火,升级材料和装置很容易就能弄到。在硬件方面,我特别希望有一台标准的机器。
我决定来个大跳跃,超越界限,而且弄一个新的CPU这事的确让人兴奋。于是我便开始把我的Sinclair QL的零件一点点地卖掉。
每个人都会一本改变其一生的书籍,比如《圣经》、《资本论》、《星期二和莫瑞在一起》、《我想知道我在幼儿园里学到的一切》等等
(我真诚地希望,在你读过了本书序言和我的关于生命意义的理论之后,这本书也能对你产生影响)。把我推向生命高峰的是安德鲁?S?塔
南鲍姆(Andrew S. Tanenbaum)写的《操作系统:设计和执行》。
我已经选好我的秋季课程,其中最让我期待的是C程序语言和UNIX操作系统。在等待着上课期间,我还买了一本上面提到的教科书,希望能
先读一下。在这本书中,住在阿姆斯特丹的大学教授安德鲁?塔南鲍姆讨论了MINIX,那是他为UNIX撰写的教学辅助软件。MINIX也是UNIX
的小型翻版。一旦读完了介绍,了解到UNIX背后的理念以及那个强大、利索、漂亮的操作系统所能做到的事情后,我便决定弄一台机器来操
作UNIX。我将操作MINIX,那是我所能找到的惟一版本。
通过阅读和对UNIX的了解愈来愈深,我的热情高涨起来。
说实施,我的热情从来没有低落过(我希望你在做某件事时也能说出同样的话)。
3、从UNIX开始
赫尔辛基大学第一次拥有UNIX是在1990年秋季开学的时候。
那个强大的操作系统是美国电话电报公司的贝尔实验室于六十年代发明的,然而它的开发却是在别的地方。前一年,也就是我上大学的第一
年,我们有一台操作VMS的VAX。这个操作系统糟糕透顶,你决不会说出:“嘿,我在农时也想装一个VAM”这样的话,它只能让你说:
“你怎么会使用这个破玩意?”它用起来极不方便,没有多少工具,也不适合轻松容易地进入因特网,而因特网是在UNIX上面操作的。你甚
至都无法轻易地估算出文件到底有多大。坦白地说,VAM可能很适合某些操作,比如数据库。但这种操作系统无法让你为之感到兴奋。
赫尔辛基大学当时意识到应该淘汰诸如VMS类的软件。学术界已经对UNIX产生了越来越大的兴趣,于是我所在的大学购买了一台操作Ultrix的
微型VAX,Ultrix是DEC公司生产的一种UNIX版本。
我特别渴望操作UNIX,将我从安德鲁?塔南鲍姆书上所学到的东西进行试验。要是我有一台386,它肯定会对我能进行的一切探索感到兴奋不
已。但是,我无法凑齐一万八千芬兰马克买一台386。我知道一旦秋季学期开始后,我就能使用我的Sinclair QL进入大学新的UNIX电脑,直到
我自己凑齐了钱买一台PC机,再在上面操作UNIX。
因此,那年夏天我做了两件事。第一件是什么都没做。第二件事是读完了七百一十九页的《操作系统:设计和执行》。那本红色的简装本教
科书差不多等于睡在了我的床上。
赫尔辛基大学为微型VAX电脑购买了十六个客户执照。这意味着“C语言和UNIX”课程的选修学生人数被控制在了三十二名--我想学校的想法
是十六个学生白天使用机器,另外十六个学生晚上使用。教师和我们一样,对UNIX也不太熟悉。他对此公开承认,因此也没构成什么问题。
但他每次都比学生先读一个章节。有时学生也会提前跳读三个章节,因而上课成了一种游戏,学生们问的问题都是在三个章节之后才能学到
的,目的是为了难住教师,看他是否已经读了那么多。
我们在UNIX的大世界中都是婴儿,一边学习一边完善这门课程。然而关于这门课最明显的是,在UNIX背后有一个非常独特的理念。你在这门
课的第一个小时就抓住了这一点,剩下来就是解释细节了。
UNIX的独到之处在于它所追求的基本理想。它是一个干净利索、非常漂亮的操作系统。UNIX具有程序的观点,凡是做任何事情都是一个过
程。这里有一个简单的例子。shell command是为进入操作系统而键入的一种指令,在UNIX中,它并不像在DOS中似的被装在操作系统里。它只
是一个任务,同其他的任务相同。这个任务是从你的键盘中读出的,然后再写回到显示器。任何能做的事情的东西在UNIX里面都是一个程
序,此外还有文件。
吸引我的就是这个简单的设计,它也吸引着大多数对UNIX感兴趣的人(至少对我们电脑迷们颇有吸引力)。你在UNIX上完成的大部分任务都
是通过六个基本操作完成的,它们被称作“系统呼叫”(system call),因为它们是你对操作系统的呼叫,你便让它为你完成任务。通过这六
个基本的系统呼叫,任何事情你都可以完成。
此外还有“创建子进程”(fork)的概念,它是UNIX的基本操作之一。当一个程序创建子进程时,它便把自身完全复制出来。这样你就有了
两个相同的拷贝。复制拷贝多数情况下再去执行另一个程序--用一个新项目替换自己。这便是第二个基本操作。其他四个基本系统呼叫--打
开、关闭、读和写--都是为了访问文件的。这六个系统呼叫便组成了UNIX的简单操作。
当然,从细节方面讲,还有数不清的其他系统呼叫。然而一旦你明白了这六个基本系统呼叫,你就了UNIX。UNIX的好处之一是,你并不需要
拥有复杂的连接去创立复杂的事物。你可以通过简单事情的互动来建立任何程度的复杂任务。你只需在简单的程序之间创造出交流渠道,在
UNIX中叫做“管道”(pipes),就能解决复杂的问题。
一个差劲的系统在做任何你想做的事情时都需要有特殊的连接。UNIX则恰相反。它提供给你执行任务的材料,这些材料足以让你完成任何事
情。这就是所谓的干净利索的设计。
语言其实也是如此。英语有二十六个字母,你可以用这些字母创造出任何单字。另一种语言是汉语。在汉语中,你所想到的任何一件事都由
一个字来代替。你一开始用的就是复杂的形态,然后在有限的方式中将复杂的形态组合起来。VMS的大体上也是这种思路,Windows的方法也
是如此。
而UNIX的理念是越小越漂亮。一小堆简单基本的建筑材料,结合起来就能创造出无限的复杂表述。
物理的规则亦是如此。你努力找出基本的规则,而这些规则都是相对简单的。从那些简单的规则中,通过相互作用产生令人不可思议的复杂
性。
那种简单的设计并非是自然产生的。UNIX是美国电报电话公司贝尔实验室的丹尼斯?里奇(Dennis Richie)和肯?汤普森(Ken
Thompson)花
了很大力气设计完成的。你也不能认为简单就是容易。简单需要特别的设计和很高的品味。
让我们再回到人类语言的例子上。像图画似的中国象形文字是最先产生的,然后再追求“简化”。而建筑材料似的做法则需要更多的抽象思
维。同样,你不能将UNIX的简洁同上不了档次混淆起来--事情正好相反。
但这并不是说,创造UNIX的最初原因有多么复杂。它和计算机的许多其他事情一样,都是以游戏开始的。最初有人想在等离子显示器上玩电
脑游戏,那就是UNIX发展起来的原因。正因为当时人们觉得这个操作系统不是一个严肃的项目,美国电话电报公司才认为它并非是商业上的
冒险尝试。事实上,美国电话电报公司的垄断受到制约,对其限制之一是不能推销电子计算机。所以创造UNIX的人有很大的,尤其在为大学
服务方面没遇到什么阻碍。
于是乎,UNIX在学术界就演变成了一个大项目。到1984年美国电报电话公司分家后,它已被允许进入电脑业,那时大学里的计算机专家们--尤
其是加州大学伯克利分校的专家们--已经在比尔?乔(Bill Joy)和马歇尔?克拉克?迈克库塞克(Marshall Kirk
McKusid)的指导下,把开发和
改进UNIX的工作进行了许多年了。
但到了1996年初,UNIX已经成为所有超级计算机和服务器的头号操作系统。它的市场非常大。但当时的问题之一是,已经出现了数不清的操
作系统的竞争版本。有一些是从控制得比较严密的美国电报电话公司代码库里创造出来的(即所谓的“V系统”),另一些人则是从加州大学
伯克利分校的代码库衍生而来(即BSD--伯克利软件分布),还有的则是这两者的结合体。
其中一个BSD的衍生版本特别值得一提。那是386BSD项目,是比尔?乔利兹(Bill
Jolitz)在代码库的基础上做成的,分布在因特网上。后来它
又进一步分裂,成为人人都可以获得的BSD--Net BSD,Free BSD和Open BSD,在使用UNIX的群体中引起广泛的注意。
于是美国电报电话公司突然觉醒了,将加州大学伯克利分校告上了法庭。最初的代码是电报电话公司的,但绝大多数后期工作都是在伯克利
完成的。加州大学的校务委员们声称他们有权传播和销售他们的UNIX版本,而且还可收取象征性的费用。而且他们还向人证明,他们已为此
做了大量工作,基本上把电报电话公司的软件进行了重写。官司的结果是,Novell公司从电话电报公司买断了UNIX,一部分体系不得不从电报
电话公司中分离出去。
同时,那场无休止的官司却让一个儿童赢得了一些时间,使自己成熟和发展起来。具体地说,Linux获得了时间去占领市场。我自己走在了我
的前面。