2024年3月12日发(作者:)

关于Linux内核学习(转)

转自/erazy0/blog/item/

常常有人问:我想学习内核,需要什么基础吗?Linus Torvalds本人

是这样回答的:你必须使用过Linux。 这个……还是有点太泛了吧,

我想下面几个基础可能还是需要的,尽管不一定必需:

1, 关于操作系统理论的最初级的知识。不需要通读并理解《操作

系统概念》《现代操作系统》等巨著,但总要知道分时(time-shared)

和实时(real-time)的区别是什么,进程是个什么东西,CPU和系统

总线、内存的关系(很粗略即可),等等。

2, 关于C语言。不需要已经很精通C语言,只要能熟练编写C程

序,能看懂链表、散列表等数据结构的C实现,用过gcc编译器,就可

以了。当然,如果已经精通C语言显然是大占便宜的。

3, 关于CPU的知识。这块儿可以在学习内核过程中补,但这样的

话你就需要看讲解很详细的书,比方后面将会提到的《情景分析》。你

是否熟悉Intel 80386 CPU?尝试着回答这几个问题来判断一下:1)

说出80386的中断门和陷阱门的区别;2)说出保护模式与实模式的区

别;3)多处理器机器上,普通的读-改-写回一块内存这样的动作,为

什么需要特殊的手段来保护。等等。讲解基于其它CPU的Linux内核的

书,目前好象只有一本《IA64Linux内核:设计与实现》──也还是Intel

的,其它都是讲解基于IA32的。

以上算是知识方面吧,如果还要再补充一条,我想就是:动手编译

过内核。

好了,我们接下来走。好多人装上Linux之后,第一件事找到内核

源码所在的路径,打开一个C程序文件,开始哗哗哗翻页,看看大名鼎

鼎的Linux内核代码到底长啥模样──然后关闭。这是可理解的,但却

不是学习的方法。刚开始,必须从读书入手。至少要对内核有一个

Overview之后,才有可能带着问题去试图阅读源代码本身。

[/color:8c0c3b6f46]下面就讲一下我读过的几本书:

1, 《Linux内核设计与实现》,英文名Linux Kernel Development

(所以有人叫它LKD),机械工业出版社,¥35, 美国Robert Love著,

陈莉君译者。 评说:

此书是当今首屈一指的入门最佳图书。作者是为2.6内核加入了抢

占的人,对调度部分非常精通,而调度是整个系统的核心,因此本书是

很权威的。这本书讲解浅显易懂,全书没有列举一条汇编语句,但是给

出了整个Linux操作系统2.6内核的概观,使你能通过阅读迅速获得一

个overview。而且对内核中较为混乱的部分(如下半部),它的讲解

是最透彻的。对没怎么深入内核的人来说,这是强烈推荐的一本书。

翻译:翻译水平、负责任程度都不错,但是印刷存在一些错误。

买了此书的朋友可以参考我在Linux高级应用版的《Linux内核设计与

实现中文版勘误》:

/forum/?t=541234

另外,此书2005年有了第二版,目前尚无中译本面世。我就是对照着

2nd-en勘误1st-cn的。

2, 《Linux内核源代码情景分析》上、下。毛德操、胡希明著,