操作系统:从0到1
来源 https://tuhdo.github.io
书:操作系统:从0到1
Emacs迷你手册系列
来源 https://tuhdo.github.io/os01/
操作系统:从0到1
本书帮助您获得从头开始编写操作系统所需的基础知识。因此标题为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汇编,还教授如何使用英特尔的参考手册。学习阅读官方手册很重要,因为只有硬件制造商自己才能理解他们的硬件是如何工作的。如果您只是从辅助资源中学习,因为它更容易,您将无法完全了解您正在编程的硬件。你有没有看过关于大会的书,想知道所有的信息来自哪里?作者如何知道他说的一切是正确的?人们如何神奇地了解硬件编程?本书指出了这些问题。
例如,您应该浏览第4章“x86 Assembly and C”,了解它如何使用英特尔手册第2卷。在此过程中,它将指导您如何使用官方手册。
第3部分计划为一系列规范,读者将实现这些规范来完成每个操作系统组件。除了一些例子,它不包含代码。第3部分是通过给出提示阅读,解释困难概念以及如何使用手册进行调试来缩短读者阅读官方手册的时间。简而言之,实施取决于读者自己的工作; 这些章节就像大学作业一样。
先决条件
了解一些电路概念:
- 电的基本概念:原子,电子,质子,中子,电流。
- 欧姆定律
但是,如果您对电力一无所知,可以在此处快速了解:http: //www.allaboutcircuits.com/textbook/,阅读第1章和第2章。
C编程。特别是:
-
变量和函数声明/定义
-
while和for循环
-
指针和函数指针
-
C中的基本算法和数据结构
Linux基础知识:
-
知道如何使用命令行导航目录
-
知道如何使用选项调用命令
-
知道如何将输出管道传输到另一个程序
触摸打字。由于我们将使用Linux,因此触摸打字会有所帮助。我知道打字速度与解决问题无关,但至少你的打字速度应该足够快,不要让它顺其自然并降低学习体验。
一般来说,我假设读者具有基本的C编程知识,并且可以使用IDE来构建和运行程序。
状态:
- 第1部分
- 第1章:完成
- 第2章:完成
- 第3章:几乎。目前,本书依赖于英特尔手册来全面解释x86执行环境。
- 第4章:完成
- 第五章:完成
- 第六章:完成
- 第2部分
- 第7章:完成
- 第8章:完成
- 第3部分
- 第9章:不完整
- 第10章:不完整
- 第11章:不完整
- 第12章:不完整
- 第13章:不完整
...还有未来的章节......
在未来,我希望扩展第3部分以涵盖前两部分。但就目前而言,我将首先尝试完成上述章节。
示例OS
该存储库是本书的示例操作系统,旨在作为第3部分的参考资料。它涵盖了“系统编程指南”(英特尔手册第3卷)的10章,以及用于输入和输出的简单键盘和视频驱动程序。但是,目前只实现了以下功能:
- 保护模式。
- 使用TSS(任务状态结构)创建和管理流程。
- 中断
- LAPIC。
分页和I / O尚未实现。随着书的进展,我会尝试实施它。
特约
如果您发现任何语法问题,请使用Github问题进行报告。或者,如果某些句子或段落难以理解,请随意打开以下标题格式的问题:[page number][type] Descriptive Title
。
例如:[pg.9][grammar] Incorrect verb usage
。
type
可以是以下之一:
Typo
:表示输入错误。Grammar
:表示语法使用不正确。Style
:表示样式改进。Content
:表示内容有问题。
更好的是,您可以使用提供的图书来源发出拉取请求。本书的主要内容位于“操作系统:从0到1.lyx”文件中。您可以编辑.txt文件,然后我将手动集成更改。这是一个解决方法,因为Lyx可能导致巨大的差异,这使得无法审查变化。
这本书正在开发中,如果英语让你烦恼,请耐心等待。对此,我真的非常感激。
最后,如果你喜欢这个项目,如果可能的话,请捐赠以帮助这个项目并继续下去。
有疑问吗?
如果您对本书的内容或开发有任何疑问,请随时打开Github问题。
=============== End