15 Minutes of Fame

短暂的荣光

——对 免费电子书《使用开源软件-自己动手写操作系统》 的一点点说明

我前几日发布了免费电子书《使用开源软件-自己动手写操作系统》,本以为只是在和我相关的一些圈子,主要是南京大学和南京大学毕业的 Linux 爱好者中得到传播。虽然我预计到了它会慢慢的扩散开来,但是从没有想过它在发布之初就产生了这么大的影响,我的个人主页和博客的点击量在这几日都迅速上升到日近千次访问。

从统计结果来看,JservsolidotLinuxGem 对此消息的分享功不可没。特别是对岸的 Jserv,繁体发布页的一千多次访问几乎都是他带来的(其实这也是我准备繁体发布页的原因,只可惜暂时没有精力发布繁体电子书)。在这里我对他们的无私帮助表示感谢。

再来说说这本电子书,其实我是将其当作对《自己动手写操作系统》一书的读书报告和扩展来写的。之所以将其发布出来,是想让更多人得益于我的共享,从零开始去理解一个操作系统,因为很多讲操作系统的书不会讲这些体验,了解了这些就能得到更完整的体验。

有很多人诟病本书的英文名“Write OS with Free Software”从语法上来讲有错误。我不得不承认我没有认真考虑这个名字,只是随手写了上去,所以可能下次发布的时候本书英文名会更改为“Write Your Own OS with Free and Open Source Software”,不知道各位可有更好提议?

我不敢说自己写这本书就是大公无私,回报开源社区,没有一点私心。私心是有的,不过只是为了出一点小名。现在的杨文博仅仅是无名小卒一个,有一些小小名气之后,于找工作交朋友都有益处。我花费了不少的气力在这本书上面,除了一点点名气并没有要求其它的什么,所以我欢迎中肯的批评和建议,而不是对本书毛病的横加指责。谁不想得到别人对自己工作的尊重呢?

我仍是研究生一年级学生,上个学期周五和周末都会去一间公司兼职来赚点生活费。因为作息和饮食一直不够规律引发了身体的一些零件出现问题,所以这个学期辞去了兼职工作专心学习。我有我的正常生活,网络仅仅是我生活的一小部分,这些小小名气也不能解决我的吃饭问题。我不保证电子书的更新发布速率会满足某些读者的要求,所以我只能说我尽力,非常感谢你们能喜欢这本书,很抱歉但请不要在这一点上指责我。

免费电子书《使用开源软件-自己动手写操作系统》Revision 1 发布

最后更新时间:2008年02月21日19点08分

免费电子书《使用开源软件-自己动手写操作系统》的官方主页为:http://share.solrex.org/WriteOS/ ,您可以到这里下载 pdf 格式电子书和随书源代码。

我叨叨了一个多月的这本书总算能发布第一个版本了,娘啊,费了老鼻子劲了。好多工作要花费在排版上,因为希望整得效果好点儿嘛!而且写了才知道,把自己知道的东西清楚地表述出来真不是件容易的事儿。啥也不说了,看图,还有目录。

免费电子书《使用开源软件-自己动手写操作系统》(无法看到此图,可能因为您无法连接国外网站)

写在前面的话i
序言vii
第一章计算机启动1
1.1 计算机启动过程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 磁盘抽象物理结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.1 硬盘. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.2 软盘. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.3 启动扇区. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3 使用虚拟机. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.3.1 VirtualBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3.2 Bochs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4 使用软盘镜像. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4.1 制作软盘镜像. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4.2 用软盘镜像启动虚拟机. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
第二章最小的“操作系统” 19
2.1 Hello OS world! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1.1 Intel 汇编转化为AT&T(GAS) 汇编. . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.2 用连接脚本控制地址空间. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.1.3 用Makeˉle 编译连接. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.1.4 用虚拟机加载执行boot.img . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.2 FAT 文件系统. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.1 FAT12 文件系统. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.2 启动扇区与BPB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2.3 FAT12 数据结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.2.4 FAT12 根目录结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.3 让启动扇区加载引导文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.1 一个最简单的loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.2 读取软盘扇区的BIOS 13h 号中断. . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.3 搜索loader.bin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.3.4 加载loader 入内存. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.3.5 向loader 转交控制权. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.3.6 生成镜像并测试. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.4 本章全部源代码. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40