跳转至

操作系统从零开始教程(os-tutorial)

⚠️ 注意!os-tutorial这是一个已废弃的旧项目,存在技术和设计层面的问题(详见此处)。你可以通过本教程体验学习乐趣,但如果想系统学习操作系统设计,建议参考更现代、权威的资料。⚠️

如何从零开始创建操作系统!

我一直想学习如何从零构建操作系统。大学期间,我学过分页、信号量、内存管理等高级特性的实现,但存在以下问题: - 从未真正从自己编写的引导扇区起步 - 大学知识难度较高,多数内容已遗忘 - 厌倦了那些认为「阅读现有内核(即便很小)是学习操作系统的好方法」的观点

这份文档OSDev 维基启发,我尝试制作了一系列简短的分步指南和代码示例,方便任何人跟随学习。说实话,本教程本质上是对第一份文档的拆分与简化,去除了复杂理论,聚焦实操。

更新补充资源:操作系统开发小书JamesM 的内核开发教程

教程特点


  • 本教程是面向「熟悉底层计算原理」开发者的代码实操指南。例如: 适合对操作系统工作原理充满好奇,但没有时间/毅力逐行阅读 Linux 内核的程序员。
  • 理论内容极少(这是刻意设计的特点): 谷歌是你的理论老师。大学毕业后,过多的理论反而会让事情变得复杂——实际操作比纯理论更易理解。
  • 每节课内容精炼,完成时间仅需 5-15 分钟: 相信我,也相信你自己!你完全可以做到。

教程使用方法


  1. 从第一个文件夹开始,按顺序学习: 所有内容基于前序代码构建。如果直接跳到文件夹 05,却不知道 mov ah, 0x0e 是什么意思,那是因为你跳过了第 02 课。务必按顺序学习,已掌握的内容可以快速略过。

  2. 阅读每个文件夹下的 README:

  3. 第一行明确「学习前需掌握的概念」,不熟悉的内容请自行谷歌查询;
  4. 第二行说明「本课时目标」——务必阅读,它会解释「我们为什么要这么做」,这与「怎么做」同样重要;
  5. 剩余内容极其简洁,快速浏览即可。

  6. (可选)阅读 README 后,尝试自己编写代码文件。

  7. 查看代码示例: 所有代码都配有详细注释,便于理解。

  8. (可选)大胆实验,尝试「破坏」代码: 验证是否真正理解某个知识点的最佳方式,就是尝试修改代码使其出错,或用不同指令复现功能。

核心总结:

先读每个文件夹的 README,再看代码文件;如果足够勇敢,先尝试自己编码实现。

学习规划


我们的操作系统将逐步实现以下功能:

  • 从零引导启动(不依赖 GRUB)- 已完成!
  • 进入 32 位模式 - 已完成
  • 从汇编语言跳转至 C 语言 - 已完成!
  • 中断处理 - 已完成!
  • 屏幕输出与键盘输入 - 已完成!
  • 构建按需扩展的小型基础 libc 库 - 已完成!
  • 内存管理
  • 编写文件系统以存储文件
  • 创建简易 Shell
  • 用户模式
  • (可能)实现简易文本编辑器
  • 多进程与调度

我们大概率会按上述顺序推进,但具体安排可能根据实际情况调整。

若进度顺利,后续可能挑战: - 实现 70 年代风格的 BASIC 解释器! - 图形用户界面(GUI) - 网络功能

贡献指南


这是一个个人学习项目,尽管已经很久没有更新,但我仍希望未来有机会继续完善。

感谢所有指出 Bug 并提交 Pull Request 的贡献者!我需要一些时间来逐一审核,目前无法保证处理时效。

欢迎自由 Fork 本仓库:如果有很多人希望继续维护这个项目,请告诉我,我会在此处链接到「主要分支(main fork)」。