7 后记

后记,或者叫涂鸦吧,反正凡是关于这本书的话题,都可以随便写写。

从哪里开始写呢?就从这本书的封面开始写吧。书的封面是很漂亮的绿色,这个绿色是笔者提议的,代表鲜嫩的叶子。初学者就像是嫩叶一样,而且笔者很喜欢森林浴,感觉这种看上去很环保的颜色,和非常强调HLT重要性的本书也挺搭调的。

封面中间还有只猫,其实那不是猫,而是有两条尾巴的一种日本传说中的妖怪——猫又,在本书的漫画中也经常登场。它是OSASK的吉祥物,也是“纸娃娃系统”的吉祥物,名字叫做“卡奥斯”,昵称叫“小卡”,大家请多关照……喂,话说怎么到了后记才介绍人家啊!

■■■■■

笔者努力将这本书写成一本初中生也能看懂的书。笔者自己也是从初中的时候开始萌发要编写一个操作系统的念头的,因此在这本书的内容安排上是以当时的自己也能看懂为基准的(话说,其实笔者当时并没有能够编写出操作系统)。

在本书中,笔者尽量避免使用晦涩难懂的语言,对英语单词也进行了适度的解释。其实编写操作系统本来也不需要什么高深的知识。即便你不会解数学方程式,不会用英语对话,不知道历史上的重要人物,不知道如何使用敬语1,不知道原子的名称,你都可以毫无障碍地编写出操作系统。因此,笔者没有刻意去圈定对象读者,而是以让所有想要编写操作系统的人都能够看懂作为写这本书的目的。

1 日语中有严格的敬语体系。当对方为长辈、上级、合作伙伴时须使用敬语。——译者注

另一方面,笔者也努力让大学生和成人读者不至于觉得这本书太幼稚。笔者觉得自己应该是找到了这么一个平衡点,如果各位读者也有同感那就再好不过了。

■■■■■

笔者觉得编程相关的书都卖得比较贵,当然,考虑到读者的数量,这个价格也无可厚非,请大家不要埋怨出版社(如果出版社亏损倒闭的话那情况会更糟糕)。不过,笔者想让这本书能让初中生也买得起,因此拜托了一些有关的朋友,让他们把价格定得低一些。我不知道对现在的初中生来说,如果不等到过年发压岁钱的话,这个价格他们是否能够承受,如果不行的话可以让图书馆购买,学生只要到图书馆去借就可以了。如果这个价格让你觉得还可以承受,那么请对出版社和那些有关人士的努力表示感谢吧。

如果笔者是一个很有名的作者,出版社对书的销量有信心的话,可能会定一个比较有挑战性的价格,但其实这本书是笔者写的第一本书,出版社也基本上是赌了一把。这么想的话觉得自己的要求确实有点任性,在这里说声抱歉了。

可能有的读者觉得这本书页数太多,太重了。其实当初也考虑过分成上下册,甚至是分成1~4册,但结果发现合并成一册最便宜,于是就这样愉快地决定了。这本书的内容属于先苦后甜的类型,如果分成上下册,有些读者只看了上册觉得未来一片黑暗,可能会失去继续阅读的兴趣,这也是合并成一册出版的理由之一。如果一定要分成几册的话,那只能麻烦大家自己用切割机把书给切开了。

这本书从开始到读完差不多真的需要30天左右,因此把这本书的价格除以30的话,说不定就会觉得“平均每天只要花3.3元啊,真划算”。虽然不如RPG(角色扮演游戏)那样好玩,不过你可以想象一下屏幕后面不是你的分身,而就是你自己,在不停地升级。这么说感觉好像在跟大家推销似的(笑)。那就再说说相反的情况,一本不便宜的书,买了之后觉得后悔的话那真是太伤心了,因此请大家听听读过这本书的人的感想,或者先试读一部分,仔细考虑之后再购买。也可以跟同样的价钱能买到的别的东西(比如可以买几根巧克力棒之类的)对比一下,考虑考虑买了对你是不是有价值。不过这种话写在最后好像没什么意义了嘛,如果看到这里的应该是已经买了吧……

作为笔者来说,已经在内容的充实方面做了很多努力。既然定价的调整是有限度的,那么如果能让内容的质量提高到原来的两倍,就相当于价格降到了一半。虽说这本书还远远没达到两倍的标准,但笔者确实已经尽了自己最大的努力。

■■■■■

讲解的长短以及整体的节奏也是经过仔细调整的,如果加快节奏,以笔者的能力恐怕会讲不清楚。如果把本书这些内容两天并作一天来写的话,用15章的篇幅就可以搞定了,但各位读者当中一定会有人消化不良的。

光看本书的书名“30天自制操作系统”,对于毫无操作系统相关知识的人来说,可能会觉得“什么嘛,居然要30天那么长啊”,笔者也知道30天有点长,但以现在的节奏,到第20天就结束的话,感觉实在是很可惜(不信的话可以看看第20天时的样子……我们刚刚开始编写API呢),想想看仅仅多了10天的内容,我们的系统就变得好玩多了。如果在第10天或者第15天收尾就更无法接受了,完全体现不出编写操作系统的乐趣。

反过来说,如果我们将开发周期延长到40天或者50天,那一定能做出更有意思的系统。不过笔者的体力实在是支撑不了,好想休息一下呀。况且如果书名变成《50天自制操作系统》,估计各位读者更要敬而远之了吧。

对于操作系统,笔者有很多自己的观点,其中之一就是操作系统应自带文件压缩功能。但这个观点并未成为操作系统界的常识,因此笔者也就没有过多地讨论,而是在29.2节中,仅以缩小字库文件大小为目的加入了压缩功能,关于压缩对操作系统的重要性也只字未提。

若操作系统自带压缩功能是常识,笔者就会在29.2节中,从构思基本算法开始,对tek压缩进行详细的介绍,或者说是十分想向大家介绍。很遗憾,我们的篇幅有限,无论如何也无法在这本书中展开这个话题。

笔者对于操作系统的这些观点,大部分都在OSASK中有所体现,但在本书的撰写过程中,却尽量避免将这些观点流露出来,也没有将OSASK搬出来,跟大家吹嘘“怎么样,这个功能也有哦,很厉害吧”之类的,因为这样做一点意思都没有。笔者不想给大家强加先入为主的观念,而将大家好不容易冒出来的好点子给扼杀掉。

因此,笔者只向大家介绍编写操作系统的技术,并希望各位读者能自由发挥想象力,开发出各种各样不同的操作系统。如果大家开发出来的操作系统都像OSASK的克隆一样,那自制操作系统的世界也就没有进步,变得相当无聊了。

■■■■■

临近收尾,预定的截稿日一拖再拖,实在是给编辑添了不少麻烦,笔者能力有限,实在抱歉。另外,对于出版社能够听取笔者的建议,也表示衷心的感谢。

在这里,还要向临近考试还参与本书校对的初中生读者代表DAsoran同学、高中生代表uchan同学,以及对本书做出很多客观诚恳指摘的成人读者代表若生启表示感谢。

还有为本书绘制插图以及制作各种示意图的hideyosi,真是帮了大忙,在此表示感谢。

还要感谢OSASK社区的各位成员。在这一年多的时间里,为了撰写这本书,而中断了OSASK的开发,在此期间,虽然有些抱怨,但大家还是坚持了下来。归根结底,也是承蒙社区各位成员的厚爱,便OSASK一举成名,笔者才能有机会出版本书。

当然,最要感谢的是现在正在读这本书的你,谢谢。

■■■■■

哎呀,再多说几句。如果各位想给笔者发邮件,请发送到下面的邮箱2

Hidemi KAWAI <kawai@osask.jp>

2 请发送到下面的邮箱:在某些文档中,笔者的邮箱可能写的是这个:kawai@imasy.org,这个地址现在已经不用了,因此请不要发到这里。

不过,笔者不能保证对收到的来信一一回复。如果是提问或者感想的话,请尽量到支持网页的论坛中发帖,这样的话,笔者之外的人也可以看到以及回帖,应该可以更快地得到有用的回答。

如果想给笔者发私人邮件,回复慢了或者收不到回复也无所谓的话,那么请发到上面的邮箱吧。

COLUMN-12 这也能叫自制操作系统?太坑爹了!(以下内容不是面向初学者的)

说到编写操作系统,难道不该先从应该编写一个怎样的操作系统开始讨论吗?要编写多任务操作系统,如何解决访问冲突难道不是最重要的吗?连文件系统都没有设计怎么能算是自制操作系统啊!根本没有考虑设备驱动程序的问题嘛!内存不足时的处理实在是不够完善啊!窗口系统也太粗糙了点吧?中断处理的少许优化、窗口移动的加速、加入压缩功能之类的,都不算是操作系统中本质的部分,难道不该减少这部分内容的篇幅,将重点更多地放在操作系统的本质上吗?如果操作系统都照这样来做,那世上的操作系统得有多不靠谱啊!

且先不论自制操作系统这个主题,想要找点这本书的好处难啊。作为汇编语言的入门吧,对于指令的讲解也太少了;作为C语言的入门吧,对语法的讲解又不充分;作为算法的入门吧,还需要介绍很多其他的东西才行。无论哪个都是只有半瓶醋,没什么用处。这种对操作系统大小的过度追求,对编程初学者来说难道不是有害的吗?

像上面这种质疑的声音是肯定会有的,没错没错,你说得对,这本书的确有上面这些不足之处。不过,笔者在写这本书的时候,可并不是对这些不足一无所知的哦(关于操作系统大小的那一点,笔者认为是有益而不是有害的)。

■■■■■

“从失败中学习”是贯穿本书的一个理念。当然,一开始在什么都不知道的情况下,也谈不上失败,因此笔者就先单方面地进行一些讲解,而随着内容的进行,我们一般是先随便做一个版本,然后发现这个版本的缺陷之后再进行改良。因此,可能你看到“纸娃娃系统”在访问冲突方面考虑不周,其实笔者是故意这样做的。有更多篇幅的话,就可以利用访问冲突让“纸娃娃系统”崩溃一次,然后再引出改良的话题。

或者说,笔者正是因为清楚这些不足才希望各位指教。如果你能指出其中的不足,而且可以提出对策的话,那笔者就可以直接将这些对策告诉各位读者了。也就是说,你可以为这本书来撰写续篇了。所以别客气,请多多指教吧。

■■■■■

当然,这个“从失败中学习”的理念恐怕也会遭到一些质疑吧。如果不经过这些失败的例子,从一开始就条理清楚地讲解各个功能的必要性,整个篇幅就可以缩短,最终的操作系统完成度也会提高,大概有15天左右就可以达到现在的完成度了吧。可是那样的讲解到底效果如何呢?是不是能通俗易懂呢?用算术来举例,我们不要一上来就介绍乘法运算,而是先用反复的加法运算先凑合一段时间,等实在觉得太麻烦受不了的时候,再介绍乘法运算,这样一下子就可以感受到乘法运算的便利,也就更有动力去背九九乘法表了。

对这本书的标题感兴趣的读者,一定都曾经萌发过编写操作系统的念头吧。因此凡是可能会对读者的兴趣产生不利影响的东西,笔者都尽量避免。在使用汇编语言时,尽量减少所使用指令的种类;对C语言的语法并非完全讲解,而是仅限于其中容易理解的部分(或者说是不用的话反而会变得更难懂的部分)。

对于笔者来说,这的确是颇具挑战性的。“纸娃娃系统”到底能用多简单的语法实现丰富的功能,这是个挑战;到底能用多简单的知识就能完成一个操作系统,也是一个挑战。大家可能也不止一次会想,在某些地方使用更高级的命令会更好。笔者也想过在某些地方使用一些高级的算法,也想过为了本书的读者将来能读懂其他程序而对C语言一些其他的语法进行讲解,但是这些笔者都没有做,因为一旦开始这样的话题,可能就没完没了了。

■■■■■

本书的主旨就是要让本来很难的东西看上去变得很容易。只要看上去很容易,读者就会在基本理解的基础上有动力继续读下去(有些无法实际感受到的东西也不是很重要,只要基本上理解了就没有问题),读到后面发现前面的东西其实并没有完全理解,这时只要再翻回前面看看就可以了。如果本来就很难的东西,还要用很难的方式去讲解,那读者马上就会厌倦的,因此笔者尽量避免出现这种情况。

当然,把本来简单的东西搞得很复杂,那就更不应该了。

在内容的先后上笔者也花了心思。从操作系统的重要功能开始做,这种观点对于本书来说是不成立的。本书是从简单的、好看的、效果容易理解的、有成就感的、而且是对操作系统有必要的部分开始,逐步进行开发的。因此,可能会出现一些不太寻常的东西。例如为了介绍操作系统的核心,从一开始就引入了bim2hrb.exe,其实这个工具是应用程序用的连接器。也就是说,本来应该在编写应用程序的时候才引入bim2hrb.exe的,但我们却在一开始几乎不加说明地引入了bim2hrb.exe。另外,在本书中根本没有操作系统用的连接器,这也是在内容上花了心思的结果。

在编写“纸娃娃系统”的过程中,有很多涉及对速度进行优化的内容,现在想想看,其中有一些内容感觉不是非常有必要。不过,在撰写那些章节的时候,考虑到这个算法在以后还可以派上别的用场,因此附带提一提。另一方面,其实优化速度本身在某些情况下还是相当重要的。如果因为没有优化而造成速度很慢,读者可能会误以为“果然初学者做出的系统,速度没办法达到像Windows和Linux那样实用的程度”,从而影响了开发的斗志。

■■■■■

嗯,就说这么多吧,如果无法接受这些观点也没关系,但希望大家在批判前能理解笔者的想法。