Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1707173
  • 博文数量: 607
  • 博客积分: 10031
  • 博客等级: 上将
  • 技术积分: 6633
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-30 17:41
文章分类

全部博文(607)

文章存档

2011年(2)

2010年(15)

2009年(58)

2008年(172)

2007年(211)

2006年(149)

我的朋友

分类: LINUX

2008-08-14 17:03:51

开发操作系统就是搞明白系统调用应该做什么,然后以你自己的方式编出能利用系统调用完成任务的程序。总有来说,共有几百个系统调用。有些是多功能的,其余的则很单一。有些更基本的系统调用确实是十分复杂的,并需要有大量的基础作为支持。比如,为完成这两种系统调用,你就必须建立一个磁盘驱动程序,以便能够在磁盘里读或写东西。又比如打开文件系统调用,你就必须创建一整套文件系统层,以便分析文件名和在磁盘上查找文件。要编写找开文件系统调用,更需要几个月的工作。但这个程序一旦编写出来,用于别的功能的程序都可以借鉴。

早期的创建工作就是这样。我不但从Sun服务器的操作系统手册中查找标准,也从其他书中查到可用的标准,挑出一个一个的系统调用,然后为它们再编出可行的软件。

这工作很容易让人感到灰心丧气。

原因是:表面上一切如故,你看不到任何进展。你可以做几个试验性的程序,检验自己刚刚加上的东西是否可行。但这并不真的有什么用。在有的阶段你不得不放弃刚才的想法,那一长串的系统调用都白干了。一个真正的程序在运行之前,必须已经接近完成。你必须首先运行的程序是外壳(shell)程序,而在有这个外壳程序之前,要运行什么很难的。而且,这个外壳程序包括了很多你所需的系统调用。它运行起来之后,你才会从中找到一长串你尚需完成的功能。

UNIX中,外壳程序是一切程序之母。它的作用是引发以后的一系列二进制语言程序(二进制程序是以计算机可识别的10为符号编写的程序。以机器语言编程,就是将二进制的源代码组合起来),这个外壳程序使你首先能登录(当然在真正的UNIX系统中,你运行的第一个程序传统上被称为init,而init的确需要很多基础的支持才能运行。它是一种对正在运行着的程序的控制工具。当没有任何程序运行时,init就没有用了)

因此,我做的第一件事不是创建init,而是建一个外壳程序。我执行了约二十五个系统调用,正如我所说,这也是我要运行的第一个真正的程序。这个外壳程序不是我自己编的。我下载了一个叫Borne Shell的外壳程序。它是UNIX的初始外壳程序之一,可以从互联网上免费下载,名字来源于一个难听的双关语。编写该外壳程序的家伙名叫波恩(英文中的忍受出生之意——译注),所以这个程序就叫做“Borne Again Shell”(“再次忍受或再次降生外壳程序”——译注),或一般被称为BASH(bash的英文意为重击”——译注)

当你试着从磁盘运行或导入一个真实的程序时,一般都会有臭虫出现在磁盘驱动程序或导引程序中,因为程序往往会不理解它读到的东西,于是它就会在屏幕上显示出相关的信息。这很重要,你可以从中知道哪儿出了毛病。

于是,我就到了这样一个阶段:我试图导引外壳程序,屏幕上则显示出外壳程序中每一个我尚未能执行的系统调用。我导入并运行外壳程序,屏幕上则出现类似系统调用517没有执行这样的信息。我日日夜夜盯着屏幕上显示出来的系统调用,试着发现我在哪一条上面出了错。这比拿到一个系统调用的单子,然后一一使他们可以被执行要有意思多了。人们需要看到事情的进展。


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

阅读(2376) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

c/unix2008-08-19 13:45:45