一本为自学者准备的书,引导自己从头开始编写操作系统
这本书旨在帮助您获得从头开始编写操作系统的基础知识。因而有了这个标题,从0到1。
读完这本书,至少您会学到:
- 如何通过阅读硬件规格表从头开始编写操作系统。在现实世界里,硬件是按规格表运行的。在Google上您没有办法立即找到答案。
- 从硬件到软件,计算机的每一层是如何相互联系起来的整体情况。
- 独立地编写代码。复制粘贴代码是没有意义的。自己动手解决自己的问题才是真正的学习。刚开始我们给了一些范例,但是绝大部分问题都需要您来解决。努力尝试了以后,您可以比对线上的解决方案进行检视。
- 把Linux作为开发环境,以及如何使用常见工具进行底层开发。
- 深入解析x86汇编
- 应用程序的结构如何,而操作系统又是怎么执行它的
- 如何使用gdb和QEMU调试直接运行在硬件上的程序
- 用纯C语言在x86_64裸机上进行链接和加载。没有标准库。没有运行时的开销。
授人以鱼不如授人以渔
在我写这本书的时候,它就成为了指导原则。这本书不会教给您一切,但是足以让您自学。此时此刻,书本身已经相当“完整”了:一旦掌握了第一部分和第二部分(总共8个章节),您就可以放下书本开始自学了。这个时候,聪明的读者应该能够自己继续学习。比如,他们可以在OSDev维基百科继续旅程;事实上,学完了第一部分和第二部分,您只达到了OSDev维基百科里描述的最低要求(好吧,这并不确切,本书实际上在推荐的主题上进行了更深入的介绍)。亦或,如果觉得凭兴趣开发一个操作系统不太现实,您可以继续学习针对Linux的书,比如这本免费的Linux Insides,或是其他流行的Linux内核书籍。本书力图提供一个足够强的基础,这也是为什么首先发表了第一部分和第二部分。
本书会教给您一些核心概念,比如x86汇编,可执行与可链接格式,在裸机上进行链接与调试等等,但是更重要的是,这样的信息是从哪里来的。比如说,不只是教x86汇编,本书也教如何使用Intel的参考手册。学习阅读官方手册很重要,因为只有硬件厂商自己了解它们的硬件是怎么工作的。如果只学习简单的二手材料,您就永远无法完整理解您为之编程的硬件。您有没有阅读过关于汇编语言的书,并且好奇这些信息都是从哪来的?以及有些人是怎么神奇地通晓硬件编程的?这本书给出了这些问题的答案。
举个例子,您应该浏览整个第四章,“x86汇编与C语言”,来了解如何利用Intel手册第二卷。在这个过程中,它会指导您如何使用官方手册。
第三部分计划做成由读者实现,从而完成各操作系统组件的一系列规范。除了少数几个示例以外没有任何代码。为了缩短读者阅读官方手册的时间,第三部分只给出了阅读提示,解释了困难的概念以及如何使用手册进行调试。简而言之,读者决定自己如何实现规范;这些章节更像是大学布置的作业。
了解一些电路概念:
- 电流的基本概念:原子,电子,质子,中子,电流
- 欧姆定律
然而,如果您对于电路一无所知,您可以在这里快速学习:http://www.allaboutcircuits.com/textbook/,阅读其中的第一章和第二章。
C语言编程。特别是:
- 变量与函数的声明与定义
while
与for
循环- 指针与函数指针
- C语言基础算法与数据结构
Linux基础:
- 了解如何用命令行浏览文件夹
- 了解如何调用带选项的命令
- 了解如何通过管道把输出传给另一个程序
盲打。既然我们要用Linux,盲打会帮上大忙。我知道打字速度与解决问题没关系,但是您的打字速度至少要足够快,不要让它成为学习路上的拦路虎。
总之,我假设读者具备简单的C语言知识,并且会使用IDE编译和执行程序。
- 第一部分
- 第一章:完成。
- 第二章:完成。
- 第三章:几近完成。目前,本书基于Intel手册来完整解释x86执行环境。
- 第四章:完成。
- 第五章:完成。
- 第六章:完成。
- 第二部分
- 第七章:完成。
- 第八章:完成。
- 第三部分
- 第九章:未完成。
- 第十章:未完成。
- 第十一章:未完成。
- 第十二章:未完成。
- 第十三章:未完成。
。。。后续章节尚未包含。。。
未来,我希望扩展第三部分从而包含比前两部分更多的内容。但是目前,我会首先尝试完成上述章节。
这个代码仓库是本书的示例操作系统,用作第三部分的参考材料。它包含了“系统编程指南”(Intel手册第三卷)的十个章节,以及一个用于输入输出的、简单的键盘和视频驱动。然而目前,只实现了下列功能:
- 保护模式
- 用TSS(任务状态结构)创建和管理进程
- 终端
- LAPIC
分页与输入/输出还没有实现。随着本书的推进我会尝试实现它们。
如果找到了任何语法问题,请在Github提交问题报告。如果是某些句子或是段落难以理解,请使用以下标题格式提交问题:[页码][类型] 描述性标题
。
比如说:[第九页][语法] 使用了不正确的动词
。
类型
可以是下面其中一种:
笔误
:指的是打字错误。语法
:指的是使用了不正确的语法。风格
:指的是风格的改善。内容
:指的是某些内容问题
如果您可以基于本书的源码文件发起一个合并请求就更好了。本书的主要内容放在文件Operating Systems: From 0 to 1.lyx
中。您可以修改对应的.txt
文件,而后我会手动集成改动。目前只能这样做,因为Lyx会产生大量变动,导致几乎无法进行任何评审。
本书还在开发过程中,如果我的英文让您觉得不舒服还请多多包含。我真的非常感激。
最后,如果您喜欢这个项目,并且有可能的话请抖内这个项目,使它可以继续下去。
如果您对本书的材料或是开发有疑问,请在Github提交问题报告。