数学建模社区-数学中国

标题: 从dos到linux内核学习心得 [打印本页]

作者: 韩冰    时间: 2004-10-6 11:21
标题: 从dos到linux内核学习心得
繁忙了一段时间,终于又能轻松了,怀着对linux的热爱,怀着对软件底层的孜孜不倦的追求,同样为了  + W/ a5 e9 y0 b/ s
能让大家再读完我这篇文章后同样能对linux感兴趣,能够少走弯路并顺利(其实这条路是坎坷的)的满足自  
$ Z$ T0 h' T8 _0 b; L5 ?6 {9 b/ z己求知的欲望,作为黑色海岸线曾经的技术部长,本人愿意将两年多来自己学习linux的过程写出来与大家分  3 Z1 L! S1 V; z5 a7 E
享,希望能给大家带来启示。  , Z- b+ W1 D& T: ^. O
2001年5月,怀着兴奋的心情终于彻底弄懂了dos内核的执行机制,回想··,真的很简单,又那么有创意,  
: h1 \+ ~" s, R9 z$ U& E1 l% Z崇拜那些功能调用的编写者,崇拜内存管理的精致安排,更对那些在这些基础上编写第一代病毒的先驱们,可  1 T. [# K+ {/ b9 k. G
是不久后,发现dos的不足,一个纯dos,不加任何第三方软件,根本无法避免那些富有创意的病毒,可一个优  
% U' [/ D) ]' @! r0 O秀的os是不该有任何设计上的漏洞的,听说windows95是在dos的基础上编写的,只不过是加了图形外壳,可自  
4 l6 t! J1 O% X+ H' N' s+ p己完全不能理解,windows95完全是多任务的os,而dos怎么也不可能实现,因为其内核中根本就没有进程的概  
- f3 a+ o/ i2 z( U4 m2 O' z念,更提不上什么多进程,迷糊不解的我开始在图书馆里寻找答案,哇,找到了,一本win32汇编语言编程让我  
- Z& P) ~9 d1 y6 q( ^7 k对windows95有了更清晰的认识,原来intel386以后处理器发生了质的变化,引进了段表,任务表,中断表,  
9 L7 N5 b/ f" R: i5 ~6 m3 V, N3 V而且更高一层引进了页表的概念,这些都为多任务做了充分的硬件基础,当时的激情是无法描述的,只记得当时  
' e6 J) v; W7 _( l5 S7 ~只用了10天就把那本书看完了,当时我才大一,刚学完8086汇编语言,尤其对page table等没有什么概念,只  ' K! F' H0 c" P. f- n& {
是觉得那本书上用的太牵强了,为何不直接用段表就解决了,其实当时是对内存管理中重要的页表管理没有理解  
2 H8 D) I8 l: ^8 S- J的太深入,只是觉的就是把段分的再小点,容易分配,减少内存碎片,更有效的利用内存,其实根本原因是自己  6 j& ^; ~+ E: ^; K1 u; p) V1 w
还停留在dos的层次上,根本对32为os没有概念,摆脱dos的困扰,尽快进入32为os的世界成了当时自己奋斗的唯  ( n( j- e0 ~9 n9 h5 L8 L1 ]* {
一目标。  
; E( C0 N6 z* v+ j2 s0 f2001年9月,玩了一个暑假,其实也学了一个暑假,学什么呢,说起来可笑,借了本window98系统深入理解,  % y9 }) C5 b& P' p. L" N2 K
可看了不到3章,觉的讲的很空洞,讲的都是大道理,还不如去看一本专门介绍如何使用windows的书呢,带着被  
$ A6 P  j' V, q! U6 T/ \欺骗的心情又回到了学校,说起来很偶然,我的一位师哥,是学电信的,有天他见我拿了那本书要去还,就顺便  3 u9 V1 W/ @! M5 i$ X
问我,怎么不去学linux呢,现在这方面的人才很少,大多数服务器都是用这个做系统,将来一定有用,当时我很  / i9 z9 [: m' C( `0 I+ X  \  A
迷惑,用这个做系统?为什么我没有见一个人用呢,同学们用的都是windows系列,于是也没怎么在意他的话,就  ( M" G! k) K9 x
径直奔图书馆了,还书的时候在一个不起眼的地方看到了一本red hat 7。0安装与使用大全,就顺便拿来翻翻,当  % z% K  u: a- s* i& G# ?
时自己象着了魔,站着看了整整30分钟,我略过了安装部分,直接看系统简介,一个完全“公开源代码”的现代多用  
8 f( p( B9 }+ R! ~1 \户多任务操作系统,紧接着,系统启动,进程管理内存管理,中断,文件系统,驱动程序,网络,这些在操作系统最  3 u2 V" H( P7 T* L/ q; g0 B
普遍的单词,第一次进入我的脑海,还等什么,借回去看了整整一星期,只看不做是没用的,也许自己天份好,许多  
) [: m$ y/ n" d: ^; Q5 a人对安装linux就要费很大功夫,可我第一次就完全搞定,并把lilo的缺省选项指向了linux,在那本书的背后参考  $ `/ W" K6 @, V: x4 h: P
书中,看到了一本《understanding linux kernel》,在网上很顺利的找到了最新的版本,正是这本书将我带入了  / `/ e  o6 ]6 t
linux内核的世界,书中分段落详细介绍了linux内核各个部分的功能与设计,耳目一新,自己有了386汇编的知识,  3 E4 I. ?9 m- Q1 O7 M- b+ c4 [* H* q
对386处理器的大致处理指令过程也有清楚的理解,读这本书还是很别扭,里面的很多东西对自己来说都是最新的,  
) a9 L# I. {% G) N* f1 {其中每一部分跟其他部分衔接的也非常紧密,一点理解不通,很可能有一大段都理解不了,可自己还是硬着头皮看了  
$ d! R- i5 S3 U  W$ \- P" S! _+ L好多遍,这本书大约看了1个半月,累了,该休息了,学业的繁忙使我不得不放弃更深入的源代码级的学习,为  6 ~! b: n9 d$ @& k0 [
了不放弃对linux的学习,平时有空就在自己的系统上相继学会了apache,dns,sendmail,ftp等网络服务的配置,  
) [3 v0 ]( O9 `8 @7 \在linux下为局域网开ftp服务,讲自己的宝贝东东与大家共同分享,在linux下做的所有一切都是令人兴奋的,因为  4 x4 F: m/ ]  \0 u, |: o
你做的别人还不会。 2002年2月,忙了一学期,这学期该休息了,少选了几门课,空出来的时间做什么呢,我没有  . m2 V1 t% J1 U: s# d0 i# g' H
选择,继续自己的兴趣,开始linux源代码的分析,进一步对linux操作系统有更深入的认识,从系统启动,进程管理  
4 o* C( B- n+ k, H,内存管理,文件系统到驱动与网络,当时没钱买书,听说浙江大学的一本《linux内核情景分析》很有名,但要100  & F( j' y, G' O5 @& _) F$ b
多块钱,没办法,只好在网上寻觅,从那开始,开始在一些论坛里寻找文章,有时为了能弄懂某一小段代码,在网上  # R9 A% D" k, r( o
找几个小时最后还没找到答案是很正常的,大家都是初学者,有共同的问题,在最艰难的时候,我在网上找到了《来  5 J5 O6 x( X+ ?
昂氏unix源代码分析》,虽然当时的unix版本是基于pd7的处理器,可想毕竟linux里的很多思想也是从unix里继承来  
6 {  P9 z; n6 P1 T4 x4 m的,先把unix搞懂,以后对理解linux肯定有帮助,于是自己准备了一个小笔记本,一边读书,一边做笔记,一直坚持  
2 `- V& r+ |- r+ p  n# P,其中把与处理器相关的内容可以一略而过,注重其中内核部分的思想,终于花了整整两个月时间才算有个了结,思想    }& ?# k" _9 k
成熟了许多,趁热打铁,在网上下载了linux0。99的代码,自己分析了起来,可是到了mm的时候麻烦又来了,于是买了  
) I' k% p+ S, q本《linux内核分析大全》,暑假在家看了一暑假,除了网络部分没看,其余的都仔细的阅读了,觉得对各部分大致的  
5 y8 D8 r5 g1 E思想有了更深的理解,其中mm(memory management)讲的比较详细,fs(file system)分析的也很到位,但就是有  
% h/ K- ^3 q! M* ^7 m( i一点不足,没有从大的方面来看问题,知识很零散,无法顺畅的理清内核处理过程,是dead kernel,而不是active  
2 M( ^4 f* y, _% Gkernel,曾自己分析过某个系统调用的全过程以及假设出在这个过程中可能发生的事件,分支理清各种情况,看起来简  
" M% Z( ^: H9 c) b; n; b单,做起来难,花费了4天才算基本完工,翻了无数的资料,盯着某段代码伤透了脑筋,以及某些时候的豁然开朗,这种  
! ~- m, h! D, O& w6 j: g, D时刻不是每个人都能享受的,对知识的追求是没有止境的,没有人敢说自己学完了,深知自己要学的东西还很多,而学  
6 j: Z/ ~5 e8 \: H8 P4 _过的一些有可能自己还没有彻底理解,将来的路还很长,只能由自己来走。  
7 j0 X/ h, O4 o5 o2002年9月,这学期是最令人兴奋的,因为学校开了“操作系统原理”这门课,心中暗喜,就只当作为自己学习实  
, L/ @% I# e* _+ `9 t3 U践的总结来学习,看着书中的理论知识,结合自己实践学到的,两者完美的结合使我又进了一步,从讲师那里得知他  1 H, D- W! T6 }8 l: `9 X
有浙江大学的那本《linux内核情景分析》那本书,并且他现在正在做“内核级入侵检测系统”的项目,就是基于linux  
1 S$ j/ n$ @9 c内核进行修改,使其能够更安全,其中取消了管理员的概念,增加了特权文件等,当天就跟老师达成协议,我帮他整理  ' W) c: {4 o+ Z4 n! T, g) r
项目文档,而我给他达成协议的最终目的是他让我看他的那本书,拿着那本书的上册(这本书分上下册)迫不及待的看  
: E3 ?1 H: ]' O& S2 z了起来,每天10-20页,看了整整一个多月,从这本书的名字就可以看出来,就是给出某个情景,然后围绕这个情景展  
! s% b& h$ z, `) q+ ]5 h% @# |" X开分析,其中对每个要引用的函数进行了详细的分析,这本书不适合初学者,更适合对内核各部分理解的比较好的基础  8 k& u& b  @; S$ R! W! p( D
上的内核中级人员,没接触过内核的人,可能看起来就象是在被人牵着鼻子走,很勉强的说,这本书在内存管理方面有  - y$ E. k4 O0 l$ F2 r
了新的补充,对其中的几个页面链表结构分析的很好,并且全是active kernel,对这本书的作者真的很崇拜,在我国  
: P; A2 s0 r! O; _8 P没几个这样的人才,其实,看代码是次要,能理解从代码中看出思想是主要,很少有人在读过源代码后能记住很多,但  / ]' T2 C$ G! n; u( d/ H
其中的思想是永远都忘不了的,有时候一段巧妙的代码能让你叹为观止,但这不是看源代码的目的,其实看是为了能写  
" t1 a6 K1 o9 F6 h,降低一个档次是能修改,或模仿写,学以致用,不管是在哪方面,学过内核的人是最占优势的,因为再好的语言,它  - x/ {5 b$ W7 S1 L8 e
的高级应用都是要跟底层打交道的,更好的理解操作系统,能为进一步的学习打下坚实的基础。能在linux下开发,绝  
( {3 l2 e2 Z' y6 v7 {! y' G0 G对是令人兴奋的事,能自己为内核添加个系统调用也是很了不起的,于是在学习了《linux device driver》这本书后,  
) r* F  `# y# ?* X  v自己开始进行内核方面的开发,修改过内核,可苦于时间有限,课程紧张,没有太多时间花费到这上面来,一直没有完  - o9 e) e0 \) f& {( m0 c" L6 F
整的作品,这是我最遗憾的,但我不后悔两年来经历过得一切,这些都是令人兴奋的,毕竟自己经历了其中的酸甜苦辣,  
. n& a' g7 Y' y8 u# S4 t- `$ _坚持了下来,我无怨无悔。 基于内核的研究是很难一时出成果的,但是对自己计算机水平的提高是不可估量的,真  
  m* F- v# n1 S+ \8 ^- ]正能精通linux内核的有资格成为真正的hacker,linus是我的偶像,希望也能成为大家的偶像,是共开源代码让我们能  ' l. L+ ?$ x7 I2 @# f, d  K5 r
更深入的了解计算机最底层的工作机制,感谢所有为自有软件做出贡献的先驱们,感谢linux。  ; I1 i, V' H1 V7 N3 w

1 Y2 b7 u( F3 S/ Z5 O6 Z/ l! ?
$ K5 F* }% k7 Z. Q& J! j摘要:  
, r& m! G5 J  i2 _1 f  i& a
( D6 q. }1 u* e. k推荐学习linux内核毕经之路:  3 e# L5 ~4 t$ S9 f* |; `% a

1 `- i% w$ Y% D, L7 m' O/ ~1。熟悉intel8086处理器工作机制,深入了解dos。  & x& H; s* w* N% p& o

0 J5 N  R; s( p1 A! ^2。安装linux,熟悉linux的使用(一切都在console下做)。  
+ I! \5 T$ U/ v; ^+ a) }3 i! P5 y' n& R' b' [
3。学习低级版本的linux内核(推荐linux0。99内核版本作为分析版本),推荐图书《linux1。0内核分析》(黑色海岸线提供免费下载)。  
5 d, Q" n- {9 X  Q$ x/ J$ A; W" K0 e3 q* f& p, l) x* r
4。先阅读《understand linux kernel》,对内核各个部分的基本功能有所了解。  # h" k) z& Y! {/ r* z

% a. V8 y! s+ _  u7 I" g) ^5。推荐先阅读《linux2.4内核源代码分析大全》,读的过程要作个标记,力求理解内核各个模块的工作机制到源代码级。  
* u- |6 x/ [6 }- N: \# @, `& {; h* e% h7 I  T9 d/ i9 \- u
6。阅读《linux2.4内核情景分析》(上册),只读有关内存管理,进程管理,文件系统的部分,其他的可以选读。  
( @+ Y8 A. t' Y% w
6 j: W) o7 Q! b: Q' X<>




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5