译 者 序

《30天自制操作系统》中文版终于和国内读者见面了。标题一出,有人说“XX天”这种标题真不靠谱,不过,作者取这个标题,并非随随便便之举。打个比方,“30天学会核物理”看起来“假大空”,如果改成“30天自制微型反应堆”呢?虽然可能还是太难了,但至少你知道30天之后一定能做出一个反应堆来(即便简陋)。这本书正是属于后者:不管多简单,它都是一个真正意义上的操作系统,更何况它还真不简单,40KB便实现了图形界面、多任务等高级功能。只要跟着作者的脚步,你也能做到。即便只是抄抄代码,也必定有所收获。

这本书的定位是零基础的读者,作者甚至找了中学生来试读,语言通俗易懂,轻松幽默。作为译者,我很喜欢这样的风格,因为可以把很多好玩的流行词汇代入进去,不会破坏原书的意境,还能让大家看起来更有意思。从技术角度来看,这本书并没有过多地解释技术细节。作者认为,自制操作系统最终的目的还是为了好玩。因此,想从这本书系统学习计算机原理、汇编语言、C语言等知识是不现实的,但你一定能够获得另一种完全不同的体验。

这本书的一大特色是“从失败中学习”,每次我们为这个操作系统实现一些功能,一开始总会有一些漏洞和缺陷,甚至根本不能工作。这些漏洞都是刻意安排的。作者花了很大篇幅来引导读者去寻找并发现这些漏洞,并从中学习如何让系统变得更加完善。这种思路非常有趣,也符合实际开发过程,先苦后甜乃是成就感和幸福感的源泉。市面上的技术类书籍,很少有这种“试错”的过程,因为这需要精心的安排,而且占用大量的篇幅。这正是这本书的与众不同之处,也是我认为值得向大家推荐它的主要理由。

如果你是一位高手,可能会觉得这本书的内容并不是那么系统和有条理,甚至觉得做出来的操作系统在很多方面的处理都很简陋,算不上一个实用的系统。连作者自己都说:“这本书无论在哪个方面都只有半瓶醋。”不过,作者是在带领大家从零开始编写一个系统,而并不是以一个现成的内核(如Linux、FreeBSD)为基础——后者才是目前自制系统的主流方式。然而,只有从零开始,才能真正了解系统底层是如何运作的,对于在其他内核上构筑系统也大有裨益。另外,千万别忘了读一读最后那个叫做“这也能叫自制操作系统?太坑爹了!”的专栏,作者早就预料到了读者的各种吐槽,看过之后,你可能就会理解作者的良苦用心了。

这本书讲到了“日文显示”,在翻译上相当纠结。由于操作系统都是底层代码,牵一发而动全身,为了不改动原书的结构和代码,中文版在原汁原味保留原书文字的基础上,补充了一些中文显示的相关内容,以体现两者在实现上的异同。好在基本上只要替换字库和编码方式,就可以实现中文显示,甚至比日文还简单些。这部分补充内容是我自己写的,但我自知才疏学浅,不敢班门弄斧,如有错误或疏漏,欢迎各位高手随时拍砖。此外,关于光盘中代码的注释,由于量大繁杂,恕无法翻译成中文(书中代码注释已翻译),非常抱歉。如果发现注释为乱码,请用UltraEdit等编辑器以Shift-JIS编码打开,就可以看到正常的日文了。

最后,在这里衷心感谢其他三位译者,以及图灵公司各位编辑的共同努力,使得这本书能够最终问世,希望所有对编写操作系统有兴趣的读者都能从中获益。

周自恒

2012年9月于上海

目录

  • 版 权 声 明
  • 译 者 序
  • 前 言
  • 第0天 着手开发之前
  • 第1天 从计算机结构到汇编程序入门
  • 第2天 汇编语言学习与Makefile入门
  • 第3天 进入32位模式并导入C语言
  • 第4天 C语言与画面显示的练习
  • 第5天 结构体、文字显示与GDT/IDT初始化
  • 第6天 分割编译与中断处理
  • 第7天 FIFO与鼠标控制
  • 第8天 鼠标控制与32位模式切换
  • 第9天 内存管理
  • 第10天 叠加处理
  • 第11天 制作窗口
  • 第12天 定时器(1)
  • 第13天 定时器(2)
  • 第14天 高分辨率及键盘输入
  • 第15天 多任务(1)
  • 第16天 多任务(2)
  • 第17天 命令行窗口
  • 第18天 dir命令
  • 第19天 应用程序
  • 第20天 API
  • 第21天 保护操作系统
  • 第22天 用C语言编写应用程序
  • 第23天 图形处理相关
  • 第24天 窗口操作
  • 第25天 增加命令行窗口
  • 第26天 为窗口移动提速
  • 第27天 LDT与库
  • 第28天 文件操作与文字显示
  • 第29天 压缩与简单的应用程序
  • 第30天 高级的应用程序
  • 第31天 写在开发完成之后