前言
也许是因为操作系统编写实在是一件太复杂的事情,到现在为止都还没有一个教程或书本着重讲解如何编写一个有意义的图形化操作系统。在爱好者操作系统开发领域,类似Brandon或者James的教程也只提及了操作系统开发的凤毛菱角,所以笔者(Blue)想尝试填补一下这方面的空白。当我写这篇前言的时候,是我刚刚修完系统编程和操作系统这两门课的暑假,所以你可以想象,其实我的理论水平也有限(题外话,James写他的教程时也只是在读大二而已)。毕竟喜欢”用到再学”的学习方式,所以如果代码里面用不到的知识,我是不会讲解的,一来浪费篇幅,二来把读者搞得晕头转向。 第一次写系列教程,说的不清楚的地方请见谅。
先修
本教程着重实践编写linux式的操作系统,和一些书本/课程没有提及的理论知识,所以很抱歉,这不是一个”零基础开发操作系统”的教程。在阅读本教程前,请确保你对以下知识点已经有所了解。 在您往下看时让我先给你打一强心剂:不要被下面的先修知识吓跑!只要您对以下知识有所了解就行,当讲解对应的主题时再去补相关知识就好了,学习os开发要有 不懂什么补什么 的精神,因为对于os开发涉及暑假结构,系统编程,硬件操作,很少os开发者从一开始就完全具备这三类基础的。
先修知识:
- C语言
- 基本数据结构,链表,树,哈希表等
- Linux系统编程
- x86汇编语言
- 基本Makefile编写
初定目录(有待添加和修改)
1. 环境搭建
2. 史上最艰难的Hello World
3. Makefile
4. GDT/IDT初始化
5. 冒牌货printf
6. 中断调用
7. 计时器
8. 让键盘打字吧
9. 启用虚拟内存
10. 动态内存分配:kmalloc
11. 虚拟文件系统
12. 实现ext2文件系统
13. 把内存当硬盘用:ramdisk
14. 让硬盘转起来:硬盘驱动