天天小说网

4、Linux

阿里?莱姆克一定是一个相当乐观的人。在我能拿出什么可以发布的东西之前,他就为我建立了一个子目录:ftp.funel.fi。我有了密码,一切都准备就绪,就等着我去登录然后上传内容了。但是我要再花上四个月才能找到一点我愿与世人分离的东西,或者至少与阿里或几个与我保持邮件往来的热衷于操作系统的狂热分子分离的东西。 我最初的目录是想开发出一个最终可以取代 MINIX 的操作系统。 这个系统不必比 MINIX 能干,但必须能胜任我最喜欢用 MINIX 做的事,以及其他我想做的事。比如,MINIX 的终端仿真不仅太不方便,而且也不能进行任务控制――即把暂不用的程序放入背景中,同时内存管理也太简化。顺便说一下,它还是以苹果的操作系统(MacOS)而不是以 DOS 为支持的。 开发操作系统就是搞明白系统呼叫应该做什么,然后以你自己的方式编出能使系统呼叫得以执行的程序。总有来说,共有几百个系统呼叫。有些是多功能的,其余的则很单一。有些更基本的系统呼叫确实是十分复杂的,并需要有大量的基础作为支持。比如,为完成“写”和“读”这两种系统呼叫,你就必须建立一个磁盘驱动程序,以便能够在磁盘里读或写东西。

又比如“打开文件”的系统呼叫,你就必须创建一整套文件系统层,以便分析文件名和在磁盘上查找文件。要编写“找开文件”的系统呼叫,更需要几个月的工作。但这个程序一旦编写出来,用于别的功能的程序都可以借鉴。 早期的创建工作就是这样。我不但从 Sun 服务器的操作系统手册中查找标准,也从其他书中查到可用的标准,挑出一个一个的系统呼叫,然后为它们再编出可行的软件。 这工作很容易让人感到灰心丧气。 原因是:表面上一切如故,你看不到任何进展。你可以做几个试验性的程序,检验自己刚刚加上的东西是否可行。但这并不真的有什么用。在有的阶段你不得不放弃刚才的想法,那一长串的系统呼叫都白干了。一个真正的程序在运行之前,必须已经接近完成。你必须首先运行的程序是外壳(shell)程序,而在有这个外壳程序之前,要运行什么很难的。而且,这个外壳程序包括了很多你所需的系统呼叫。它运行起来之后,你才会从中找到一长串你尚需完成的功能。

在 UNIX 中,外壳程序是一切程序之母。它的作用是引发以后的一系列二进制语言程序(二进制程序是以计算机可识别的 1 和 0 为符号编写的程序。以机器语言编程,就是将二进制的源代码组合起来),这个外壳程序使你首先能登录(当然在真正的 UNIX 系统中,你运行的第一个程序传统上被称为 init,而 init 的确需要很多基础的支持才能运行。它是一种对正在运行着的程序的控制工具。当没有任何程序运行时,init 就没有用了)。 因此,我做的第一件事不是创建 init,而是建一个外壳程序。我执行了约二十五个系统呼叫,正如我所说,这也是我要运行的第一个真正的程序。这个外壳程序不是我自己编的。我下载了一个叫 Borne Shell 的外壳程序。它是 UNIX 的初始外壳程序之一,可以从互联网上免费下载,名字来源于一个难听的双关语。编写该外壳程序的家伙名叫波恩,所以这个程序就叫做“Borne Again Shell”,或一般被称为 BASH。 当你试着从磁盘运行或导入一个真实的程序时,一般都会有“臭虫”(bug)出现在磁盘驱动程序或导引程序中,因为程序往往会不理解它读到的东西,于是它就会在屏幕上显示出相关的信息。这很重要,你可以从中知道哪儿出了毛病。 于是,我就到了这样一个阶段:我试图导引外壳程序,屏幕上则显示出外壳程序中每一个我尚未能执行的系统呼叫。我导入并运行外壳程序,屏幕上则出现类似“系统呼叫 517 没有执行”这样的信息。我日日夜夜盯着屏幕上显示出来的系统呼叫,试着发现我在哪一条上面出了错。这比拿到一个系统呼叫的单子,然后一一使他们可以被执行要有意思多了。人们需要看到事情的进展。

到了八月底或九月初的时候,我的外壳程序终于可以工作了。过了这一关,后面的任务就轻松多了。

这可是一件大事。

我的外壳程序可以运行后,我马上开始着手其他几个程序,比如拷贝程序和列表程序,这些都比外壳程序简单得多。你所需的一发,外壳程序早就具备好了,所以一旦外壳程序完成,就好像是从 0 飞跃到 100 一样,因为一切都已就绪。这时,我已经拥有了一切必要的条件,感觉就像上帝创世纪那样,执掌一切地说:“让那里有光”,那里就真的有了光。在此之前,的确是一无所有。

是的,我深感满意。

这种满意很重要,因为那个夏天我除了伏在电脑面前,其他什么都没做。这么说一点也不夸张。芬兰四月到八月的日子是一年中最美好的时光。人们到布满小岛的海上航船,去海滩上晒日光浴,到夏日小木屋中消闲。但是我却在没日没夜地工作,不知哪一天是周末,哪一天是工作日。学生的黑色窗帘遮蔽了几乎昼夜灿烂的阳光,也遮蔽了整修世界。有些天――或夜晚?

更多内容加载中...请稍候...

若您看到此段落,代表章节内容加载失败,请关闭浏览器的阅读模式、畅读模式、小说模式,以及关闭广告屏蔽功能,或复制网址到其他浏览器阅读!