cfenollosa/os-tutorial

GitHub: cfenollosa/os-tutorial

从零开始构建操作系统的分步代码教程,用渐进式实践代替枯燥理论,帮助程序员真正理解OS底层工作原理。

Stars: 30401 | Forks: 3539

# os-tutorial _⚠️ 嘿!这是一个已废弃的旧项目,其技术和设计问题[在此列出](https://github.com/cfenollosa/os-tutorial/issues/269)。请享受这个教程,但如果你真的想学习 OS 设计,请务必寻找更现代、更权威的资料。 ⚠️_ 如何从零开始创建一个操作系统! 我一直想学习如何从零开始制作一个 OS。在大学里,我学过 如何实现高级功能(分页、信号量、内存管理等) 但是: - 我从未能从自己的引导扇区开始 - 大学生活很艰难,所以大部分内容我都记不清了。 - 我受够了那些认为阅读一个现有的内核(即使它很小)是 学习操作系统好方法的人。 受[这篇文档](https://web.archive.org/web/20211008041419/http://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf)和 [OSDev wiki](http://wiki.osdev.org/)的启发,我将尝试制作简短的、循序渐进的 README 和 代码示例,供任何人参考。老实说,本教程基本上就是那第一篇文档,只是 被分成了更小的部分,并且去掉了理论部分。 更新:更多资源:[the little book about OS development](https://littleosbook.github.io), [JamesM's kernel development tutorials](https://web.archive.org/web/20160412174753/http://www.jamesmolloy.co.uk/tutorial_html/index.html) ## 功能 - 本课程是一个代码教程,面向熟悉底层计算的人群。例如, 那些对 OS 工作原理充满好奇,但没有时间或毅力从头到尾阅读 Linux 内核的 程序员。 - 理论很少。是的,这是一个特色。Google 是你的理论讲师。一旦你大学毕业后, 过多的理论反而比没有理论更糟,因为它会让事情看起来比实际上更困难。 - 课程非常短小,大约只需 5-15 分钟即可完成。相信我,也相信你自己。你一定能做到! ## 如何使用本教程 1. 从第一个文件夹开始,按顺序往下进行。它们是基于之前的代码构建的,所以如果 你直接跳到文件夹 05,而不知道为什么会有一个 `mov ah, 0x0e`,那是因为你错过了第 02 课。 真的,请按顺序进行。你随时可以跳过你已经知道的内容。 2. 打开 README 并阅读第一行,它详细介绍了在 阅读代码之前你应该熟悉的概念。用 Google 搜索你不熟悉的概念。第二行说明了每节课的目标。 阅读它们,因为它们解释了我们为什么要这么做。“为什么”和“怎么做”同样重要。 3. 阅读 README 的其余部分。它**非常简明**。 4. (可选)阅读完 README 后,尝试自己编写代码文件。 5. 查看代码示例。它们带有极其详细的注释。 6. (可选)对它们进行实验并尝试破坏它们。确保你真正理解某件事的唯一方法就是 尝试破坏它,或者用不同的命令复现它。 TL;DR:首先阅读每个文件夹中的 README,然后再看代码文件。如果你足够勇敢,尝试自己编写代码。 ## 策略 我们希望用我们的 OS 做很多事情: - 从零开始引导,不使用 GRUB - 已完成! - 进入 32 位模式 - 已完成 - 从 Assembly 跳转到 C - 已完成! - 中断处理 - 已完成! - 屏幕输出和键盘输入 - 已完成! - 一个小型的、基础的 `libc`,将根据我们的需求进行扩展 - 已完成! - 内存管理 - 编写一个用于存储文件的文件系统 - 创建一个非常简单的 shell - 用户模式 - 也许我们会写一个简单的文本编辑器 - 多进程和调度 我们很可能会按照这个顺序进行,不过现在下结论还为时过早。 如果我们觉得足够勇敢: - 一个 BASIC 解释器,就像 70 年代的那样! - 一个 GUI - 网络 ## 贡献 这是一个个人学习项目,尽管它已经很长时间没有更新了,但我仍然希望有朝一日能继续推进它。 我感谢所有指出 bug 并提交 pull request 的人。我需要一些时间来审查所有内容,而且目前我无法保证什么时候能完成。 请随时 fork 这个 repo。如果你们中有很多人有兴趣继续推进这个项目,请告诉我,我会从这里链接到“主干 fork”。
标签:OSDev, x86架构, 从零开发操作系统, 低级语言, 信号量, 内存管理, 内核开发, 分页机制, 学习资源, 客户端加密, 开源教程, 引导扇区, 快速连接, 技术栈:C语言, 技术栈:汇编, 操作系统开发, 操作系统教程, 汇编语言, 系统编程, 编程学习, 自动回退, 计算机底层原理, 计算机科学教程