本书可帮助您获得从头开始编写操作系统所需的基础知识。因此标题是“0到1”。
读完本书后,您至少将学到:
-
如何通过阅读硬件数据表从头开始编写操作系统。在现实世界中,它就是这样工作的。您将无法咨询 Google 以获得快速答案。
-
从硬件到软件,计算机各层如何相互关联的大图。
-
独立编写代码。复制和粘贴代码是没有意义的。当你自己解决问题时,真正的学习就会发生。给出了一些示例来启动,但大多数问题都需要您来解决。不过,您可以在网上找到解决方案,以便您在尝试后进行检查。
-
Linux 作为开发环境以及如何使用常用工具进行低级编程。
-
x86 汇编深入。
-
程序如何构造以便操作系统可以运行。
-
如何使用 gdb 和 QEMU 调试直接在硬件上运行的程序。
-
在裸机 x86_64 上链接和加载,使用纯 C。没有标准库。没有运行时开销。
你给一个穷人一条鱼,你就可以喂他一天。你教他钓鱼,你给他一份可以养活他一生的职业。
这是我写这本书时的指导原则。本书并不试图教你一切,但足以让你自学。就这一点来说,这本书本身已经相当“完整”了:一旦你掌握了第 1 部分和第 2 部分(共 8 章),你就可以放下书自学了。至此,聪明的读者应该能够自己继续下去了。例如,他们可以在OSDev wiki上继续他们的旅程;事实上,在学习了第 1 部分和第 2 部分中的所有内容之后,您只满足了OSDev Wiki 的最低要求(好吧,不完全是,这本书实际上对建议的主题进行了更深入的探讨)。或者,如果您认为为了好玩而开发操作系统是不切实际的,您可以继续阅读特定于 Linux 的书籍,例如这本免费书籍Linux Insides或其他流行的 Linux 内核书籍。本书努力为您提供坚实的基础,这就是首先发布第 1 部分和第 2 部分的原因。
本书教你核心概念,例如x86汇编、ELF、裸机上的链接和调试等,但更重要的是,这些信息从何而来。例如,它不仅教授 x86 汇编,还教授如何使用 Intel 的参考手册。学习阅读官方手册很重要,因为只有硬件制造商自己才了解他们的硬件是如何工作的。如果您只是因为更容易而从辅助资源中学习,那么您将永远无法完全了解您正在编程的硬件。您是否曾经读过一本有关汇编的书,并想知道所有信息从何而来?作者怎么知道他所说的一切都是正确的?为什么一个人似乎神奇地了解如此多的硬件编程知识?本书对这些问题给出了指导。
例如,您应该浏览第 4 章“x86 汇编和 C”,了解它如何使用 Intel 手册第 2 卷。在此过程中,它会指导您如何使用官方手册。
第 3 部分计划作为一系列规范,读者将实施这些规范来完成每个操作系统组件。除了一些示例之外,它不包含代码。第三部分只是为了缩短读者阅读官方手册的时间,给出在哪里阅读的提示,解释困难的概念以及如何使用手册进行调试。简而言之,具体的实现需要读者自己去完成;这些章节就像大学作业一样。
了解一些电路概念:
- 电的基本概念:原子、电子、质子、中子、电流。
- 欧姆定律
但是,如果您对电一无所知,您可以在这里快速学习: http:https://www.allaboutcirculator.com/textbook/,通过阅读第 1 章和第 2 章。
C 编程。尤其:
-
变量和函数声明/定义
-
while 和 for 循环
-
指针和函数指针
-
C 语言的基本算法和数据结构
Linux 基础知识:
-
了解如何使用命令行导航目录
-
了解如何使用选项调用命令
-
知道如何将输出通过管道传输到另一个程序
触摸打字。由于我们将使用 Linux,盲打会有所帮助。我知道打字速度与解决问题无关,但至少你的打字速度应该足够快,不会让它顺其自然并降低学习体验。
一般来说,我假设读者具有基本的 C 编程知识,并且可以使用 IDE 来构建和运行程序。
-
第1部分
- 第一章:完成
- 第 2 章:完成
- 第3章:差不多了。目前,本书依赖Intel手册来全面解释x86执行环境。
- 第 4 章:完成
- 第5章:完成
- 第6章:完成
-
第2部分
- 第7章:完成
- 第8章:完成
-
第三部分
- 第9章:不完整
- 第10章:不完整
- 第11章:不完整
- 第12章:不完整
- 第13章:不完整
...以及尚未包括的未来章节...
将来,我希望扩展第 3 部分,使其涵盖前 2 部分以外的内容。不过暂时我会尽量先完成上面的章节。
该存储库是本书的示例操作系统,旨在作为第 3 部分的参考材料。它涵盖了“系统编程指南”(英特尔手册第 3 卷)的 10 章,以及用于输入和输出的简单键盘和视频驱动程序。然而,目前仅实现了以下功能:
- 保护模式。
- 使用 TSS(任务状态结构)创建和管理流程。
- 中断
- 拉皮克。
分页和 I/O 尚未实现。随着本书的进展,我将尝试实现它。
如果您发现任何语法问题,请使用 Github Issues 报告。或者,如果某些句子或段落难以理解,请随时使用以下标题格式提出问题:[page number][type] Descriptive Title
。
例如:[pg.9][grammar] Incorrect verb usage
。
type
可以是以下之一:
Typo
: 表示输入错误。Grammar
: 表示语法用法不正确。Style
:表示风格改进。Content
: 表示内容有问题。
更好的是,您可以使用提供的书籍源发出拉取请求。本书的主要内容在文件《操作系统:从0到1.lyx》中。您可以编辑 .txt 文件,然后我将手动集成更改。这是目前的一个解决方法,因为 Lyx 可能会导致巨大的差异,从而无法审查更改。
这本书正在开发中,所以如果英语激怒了你,请耐心等待。对此,我真的非常感激。
最后,如果您喜欢这个项目并且如果可能的话,请捐款来帮助这个项目并使其继续下去。
如果您对本书的材料或开发有任何疑问,请随时打开 Github 问题。