当初一开始拿到赵炯的书时是兴奋的,代码几乎每行都有注释,心想这不手到擒来的吗。但是代码看到十几行就看不下去了,没错就是十几行,操作系统的代码跟应用层的代码完全是两回事,注释再多也不明白什么意思。后来才知道需要 实模式 和 32 位保护模式 的基础,这个是操作系统的核心知识。
1. 学习顺序
(1) 需要的基础知识,以及学习的顺序:
- 《汇编语言 第4版》 王爽
- 《x86汇编语言:从实模式到保护模式》李忠/王晓波/余洁
主要讲解计算机底层的运行机制,还夹杂着操作系统的相关基础知识点,这对于想学操作系统的你来说,简直就是必学课程。
里面的内容层层递进,丝丝入扣。遵循王爽提过的知识屏蔽原则,用到什么讲什么,不需要提前“储备”一堆知识才开始写代码。 - 《C语言编程:一本全面的C语言入门教程(第三版)》
C 语言的教程在网上很多,自己随意找一个来学习就行 - 《Orange'S 一个操作系统的实现》 于渊
傻瓜式教程,从 0 开发一个简易操作系统 - AT&T 汇编
AT&T 汇编内容比较少,如果学过了 《汇编语言》和《x86汇编语言:从实模式到保护模式》,只需要注意一下语法就行了,遇到不会的再去搜。linux内核中到处用到。可以参考博客文章 Intel 汇编 和 AT&T 汇编 - 《Linux内核完全注释》 赵炯
对早期 Linux 内核(v0.11)全部代码文件进行了详细、全面的注释和说明。
新版书籍 《Linux内核完全剖析 : 基于0.12内核》
(2) 需要注意的地方:
- 网上总有人说内核中汇编用到不多,不用学。这是个极大的误区,在整个内核代码中,汇编代码确实不是很多,但地位极度重要,而且穿插用在很多核心模块,并不只是启动那块才用到汇编。比如说进程切换,从高层到底层的层层流程下来,最终就是汇编的切换进程代码;还有系统调用,也是最终调用的是 0x80 中断。例子太多。而且,汇编讲的不只是汇编代码,还有计算机底层的运行机制,这对于想学操作系统的你来说,简直就是必学课程。比如说计算机刚启动时,内存是什么情况,那些中断代码放在哪里,那操作系统就不能动这里的代码等等。
- 《x86汇编语言:从实模式到保护模式》这本书不是讲汇编的,实际上是讲操作系统的书,直接从实模式开始看,实模式是讲以前的操作系统架构,然后就是现代操作系统架构 32 位保护模式。这本要是不看,就不用往下进行了。
- 于渊的那本书只看到上篇就好了,因为他的下篇是按照 Minix 的微内核来实现的,linux 是宏内核,两者在代码实现上有很大的不同。但他上篇的内容很有价值,因为讲解得非常详细傻子都能看懂,而且基本上每章内容都和 Linux 内核相似。毕竟操作系统的底层基本知识都差不多。看完这本相当于有人带你学习了一遍简易版的 linux 内核。
- AT&T 汇编不是讲汇编知识的,而是讲另一种汇编语法的,所以内容比较少,linux 内核里大量用到这种语法格式的汇编。分析 linux 内核用到的时候再看也可以,我就是这样。
- 最后提一点非常非常重要的,就是每看一本书一定要做笔记。因为操作系统包含大量的知识,用笔记记录每个知识点的核心,能很方便下次翻阅,因为你必定会回头来翻阅的,你不可能记住每个知识点。如果你没有这种习惯,到时候知识一多就会引发混乱,然后导致放弃。