linux源碼斷斷續續看過好多次,可能是工作中用到linux的項目也斷斷續續的,總感覺理解的東西還浮在面上。本系列文章記錄對linux 0.11版本源碼的學習,主要參考資料是趙炯的《Linux內核完全注釋》。記得買這本書的時候還在念研究生,當時是完全看不下去,工作這些年算是粗讀過,但都不求甚解,好像每次都有收獲,但每次都不敢說理解這1萬來行代碼。今年抽年前這一兩周又通讀了一遍,這篇文章就作為一個引子,等春節回來好好精讀一把整理出一批文章,算是傷其十指不如斷其一指吧。
linux 0.11版本相對於現在的2.6版本的內核(就是那本經典的《深入理解linux內核》)而言,真簡單很多了,從功能塊和核心文件看主要分解如下(待完善):
備注:在上面這些模塊中,我覺得比較復雜是系統調用execuve(把一個執行文件加載到內核),因為跨的模塊(內存管理、文件系統、塊設備驅動)比較多,又涉及到了保護模式的分段分頁,先記錄如下:
linux 0.11是通過加載XX.out的執行文件產生新的進程。linuxexec.c的do_execuve中加載執行文件,但此時該執行文件並沒有被加載到主存,只是分配了虛擬地址空間(即創建了頁表)。當CPU執行該進程時,會產生缺頁錯誤中斷,此時內存管理模塊的do_no_page會被調用,在這個函數中調用塊設備驅動的函數II_rw_blk()將相應的執行文件塊拷貝到主存。