翻译自 : cfenollosa/os-tutorial
如何从零创建一个操作系统!
我总是在想,如何从零制作一个操作系统。在大学里,教给我的是如何实现高级特性(如分页、信号量、内存管理等),然而:
- 我从未从自己的启动扇区开始
- 大学知识比较难,我大部分记不住
- 有些人认为通过阅读现有的内核是学习操作系统的好方法,尽管它很小。
受到 这份文档 和 OSDev wiki 的启发,我将尝试制作短小的、一步一步的说明文档和示例代码。 老实说,这份教程主要基于第一份文档,但是被分成了更小的部分,没有理论。
更新: 更多资源: 关于操作系统开发的 和 James’s 内核开发教程
- 这个课程是一份编码指导,面向的是乐于底层编码人员。 例如,对操作系统如何工作好奇,但是没有时间或意志从头到尾地阅读 Linux 内核。
- 这里的理论非常少。这也是一个特点。Google 就是你的理论课。大学里过多的理论比没有理论更糟糕,它会让一些东西比它实际更加困难。
- 教程非常小,可能 5-15 分钟就完成了。相信我,也相信你自己。你可以做到的!
- 从第一个目录开始按序往下看。它们是在之前的代码上构建的,如果你直接跳转到 05 目录,你将不知道这里为什么会有
mov ah, 0x0e
。因为你错过了 02 课程。 眞的,只要按序阅读即可。你可以跳过你已经知道的材料。 - 打开 README, 阅读第一行,这是你在阅读代码之前应该知道的概念细节。 Google 那些你不了解的概念。第二行是每个课程的目标。阅读它们,它们解释了为什么要这样做。 “为什么” 和 “如何做” 一样重要。
- 阅读剩下的 README, 它非常 简洁.
- (可选)阅读 README 之后,尝试自己写代码文件。
- 查看代码示例,它们注释的非常好。
- (可选)尝试修改代码做一些实验。一定要确保你理解你改动的代码,并用其它命令复现。
TL;DR: 首先阅读每个目录的 README, 接着阅读代码文件。如果你有勇气,你可以自己编码。
我们将在操作系统上做许多事情:
- 从裸机启动,不用 GRUB, - DONE!
- 进入 32 位模式, - DONE!
- 从汇编跳转到C语言, - DONE!
- 中断处理 - DONE!
- 屏幕输出和键盘输入, - DONE!
- 一些基本的库函数,根据我们需要进行添加 - DONE!
- 内存管理
- 写一个文件系统存储文件
- 制作一个非常简单的 shell
- 用户模式
- 也许会写一个文本编辑器
- 多进程和调度
也许我们会按序进行,然而不久之后就知晓了。
如果我们有勇气:
- BASIC 解释器
- GUI
- 网络
这是一个个人学习项目,即使它已经很久没有更新了,我仍然希望偶而进来看看。
我感谢所有指出 bug 和提交 pull requests 的人。我需要时间审查所有的事,因此我不能保证马上发出。
请自由 fork 这个仓库。如果你们大部分对这个仓库有兴趣,告诉我,我在这里列出 “main fork”.