說說咱們之前的培訓經驗。先看Unix內核相關的書籍,瞭解內核的經典實現方法,而後再結合源碼去研究Linux內核。這樣作的緣由是避免從一開始就陷入細節。
內核重點關注這幾個部分:進程管理及調度,內存管理,文件及文件系統,Cache,I/O,SMP(多CPU)。
Unix內核推薦很老的一本書《
UNIX操做系統設計》,英文原版的叫作《
The Design of The UNIX Operating System》。重點關注這些章節(我手上拿的是英文版的):
進程管理及調度:
- The Structure of Processes
- Process Control
- Precess Scheduling and Time
內存管理:
- Memory Management Policies
文件及文件系統:
- The Buffer Cache
- Internal Representation of Files
- System Calls for the File System
Linux內核就看那本經典的基於2.6版寫的書《
深刻理解Linux內核》。這本書至關的枯燥,最好結合實際的代碼看,能夠了解它們是如何實現的。給幾個建議先:
- 細看的時候,不用按章節的順序去看,而是最好是從點到面,先了解一些基本的實現方法,再去結合代碼把這些點穿起來。重點關注這些:進程(包括管理和調度),地址空間,內存管理,文件及VFS,Page Cache(頁高速緩存),PFRA,I/O及設備驅動等等。
- 積極的去探索一些書上沒有詳細說明,可是內核中又實現了的;或者是那些內核代碼已經有很大改變的部分。例如:電梯算法(CFQ,紅黑樹),通用Block層的I/O請求隊列和調度,基於VFS之上的具體文件系統的實現(如ext2/3,YAFFS),頁從分配到回收的整個過程,設備驅動的具體實現(如USB,存儲設備)等等。
- 本身畫圖、做筆記,把重要知識點用本身能理解的方式所有記錄下來,由於若是你不用,也許半年以後就忘的都差很少了。有一些簡單的圖片和筆記每每能快速的回憶起來。
這幾本書做爲輔助也至關的棒:《Linux設備驅動程序》,《深刻理解計算機系統》,《Professional Linux Kernel Architecture》,還有至關經典的fudan_abc寫的那一套Linux內核代碼分析。
不過在作全部的這些以前,請把C語言學好,而且去了解一些簡單的Shell的語法。推薦一本Shell的書籍:《
UNIX Shells by Example, 4th Edition》。