操作系统从零开始教程(os-tutorial)¶
⚠️ 注意!os-tutorial这是一个已废弃的旧项目,存在技术和设计层面的问题(详见此处)。你可以通过本教程体验学习乐趣,但如果想系统学习操作系统设计,建议参考更现代、权威的资料。⚠️
如何从零开始创建操作系统!¶
我一直想学习如何从零构建操作系统。大学期间,我学过分页、信号量、内存管理等高级特性的实现,但存在以下问题: - 从未真正从自己编写的引导扇区起步 - 大学知识难度较高,多数内容已遗忘 - 厌倦了那些认为「阅读现有内核(即便很小)是学习操作系统的好方法」的观点
受这份文档和OSDev 维基启发,我尝试制作了一系列简短的分步指南和代码示例,方便任何人跟随学习。说实话,本教程本质上是对第一份文档的拆分与简化,去除了复杂理论,聚焦实操。
更新补充资源:操作系统开发小书、JamesM 的内核开发教程
教程特点¶
- 本教程是面向「熟悉底层计算原理」开发者的代码实操指南。例如: 适合对操作系统工作原理充满好奇,但没有时间/毅力逐行阅读 Linux 内核的程序员。
- 理论内容极少(这是刻意设计的特点): 谷歌是你的理论老师。大学毕业后,过多的理论反而会让事情变得复杂——实际操作比纯理论更易理解。
- 每节课内容精炼,完成时间仅需 5-15 分钟: 相信我,也相信你自己!你完全可以做到。
教程使用方法¶
-
从第一个文件夹开始,按顺序学习: 所有内容基于前序代码构建。如果直接跳到文件夹 05,却不知道
mov ah, 0x0e是什么意思,那是因为你跳过了第 02 课。务必按顺序学习,已掌握的内容可以快速略过。 -
阅读每个文件夹下的 README:
- 第一行明确「学习前需掌握的概念」,不熟悉的内容请自行谷歌查询;
- 第二行说明「本课时目标」——务必阅读,它会解释「我们为什么要这么做」,这与「怎么做」同样重要;
-
剩余内容极其简洁,快速浏览即可。
-
(可选)阅读 README 后,尝试自己编写代码文件。
-
查看代码示例: 所有代码都配有详细注释,便于理解。
-
(可选)大胆实验,尝试「破坏」代码: 验证是否真正理解某个知识点的最佳方式,就是尝试修改代码使其出错,或用不同指令复现功能。
核心总结:¶
先读每个文件夹的 README,再看代码文件;如果足够勇敢,先尝试自己编码实现。
学习规划¶
我们的操作系统将逐步实现以下功能:
- 从零引导启动(不依赖 GRUB)- 已完成!
- 进入 32 位模式 - 已完成
- 从汇编语言跳转至 C 语言 - 已完成!
- 中断处理 - 已完成!
- 屏幕输出与键盘输入 - 已完成!
- 构建按需扩展的小型基础
libc库 - 已完成! - 内存管理
- 编写文件系统以存储文件
- 创建简易 Shell
- 用户模式
- (可能)实现简易文本编辑器
- 多进程与调度
我们大概率会按上述顺序推进,但具体安排可能根据实际情况调整。
若进度顺利,后续可能挑战: - 实现 70 年代风格的 BASIC 解释器! - 图形用户界面(GUI) - 网络功能
贡献指南¶
这是一个个人学习项目,尽管已经很久没有更新,但我仍希望未来有机会继续完善。
感谢所有指出 Bug 并提交 Pull Request 的贡献者!我需要一些时间来逐一审核,目前无法保证处理时效。
欢迎自由 Fork 本仓库:如果有很多人希望继续维护这个项目,请告诉我,我会在此处链接到「主要分支(main fork)」。