Linux0.01核心心得—–轉

來源:互聯網
上載者:User

Linux0.01核心基本上分析完了,高版本的核心也看了一點。有一點心得與大家分享
  一下吧!這裡我並不打算說具體的技術方面的東西,而是針對讀核心的方法,談談自己
  的一點感受。
  我前段時間主要看的是0.01版本的核心。Linux0.01是Linux的"祖師爺"Linus完成的最早
  的一個Linux版本,其核心編譯後僅僅只有512K,麻雀雖小,五髒俱全,0.01包括了從軟
  盤啟動、檔案系統、控制台管理的作業系統完整功能,並提供了不少標準的使用者介面,
  具體有kernel, boot, fs, init,mm等幾個部分,沒有網路部分。
  為什麼選擇Linux0.01?各位大蝦一看到0.01肯定直搖頭:哎呀,都什麼時代的東東
  了,有看的必要嗎?筆者當初選擇0.01並沒有太多的想法,只是Tm-linux小組剛開始選
  擇的是0.01,於是就開始讀吧,現在仔細想想,讀Linux0.01對於初學者來說可能更容易
  上手些。可能有下面的幾個好處吧
  1)0.01的代碼量較小。很多同學都曾有成為Linux高手的慾望,也曾抱回若干磚頭書,但
  Linux的發展何其之快,而coder又是駭客型高手,往往堅持不了多長時間而中途放棄!
  
  2)0.01的代碼簡單而精簡(這個簡單當然是相對於後續版本而言的)。實際上0.01完成
  的就是一個作業系統的最初的要求,包括啟動,進程調度,記憶體管理等,而這些往往與
  硬體結合,在看高版本的核心時往往還沒有接觸到這些硬體知識,層層下調已經把你搞
  糊塗了。
  3)從低版本看更能看到技術進步的源動力,比如0.01的核心很小,其啟動代碼可以只放
  在一個扇區內,而後續版本的核心較大,無法放入一個扇區內,於是壓縮核心的裝入方
  法誕生了。再如記憶體管理,0.01的記憶體管理比較簡單,記憶體的申請釋放直接通過使用前申請,
  使用後釋放,但考慮以後的版本功能複雜,如何解決可能的"外片段"問題,如何解決記憶體不足的問題,於是對後續版本採用的"夥伴演算法"
  ,slab技術,頁面守護進程有更好的理解。
  我說上面的這一些並非是為0.01做廣告啦,而是提醒一下讀核心可能遇到的問題:
  比如說層次複雜難以理清,代碼眾多不知主次,哪些是作業系統必需的,那些是為提高系
  統效能的等。
  看核心的目的是什麼,這是每個看核心的人都需要問問自己的問題。
  我想對於大多數初看核心的人來說,最重要的是解決從作業系統原理到一個實際操
  作
  系統的過渡,簡單一點說是作業系統到底是怎麼跑起來的。作業系統原理大家都學了,但
  一個作業系統到底是怎麼啟動的,所謂的保護模式到底是怎麼一回事,進程調度和切換
  到底是怎麼進行的,一個檔案系統具體應該怎樣,可能很多還是模糊的。通過看Linux內
  核,這些問題可以得到清晰的解答。
  當然,一個有強大生命力的作業系統決不會僅僅滿足於能跑起來,她採用的眾多先進的
  技術使得她有出色的效能,對於以後的工程設計、編程還有類Unix下的系統開發會有很
  多協助。
  鑒於Linux的強大技術實力,在很多領域都會遇到跟其採用技術相關的,如嵌入式領域,
  網路介面等等。理解了核心,當然在以後的開發中可以事半功倍。
  我當初讀核心的目的比較簡單,我就是想看看Linux是怎麼跑起來的,為什麼多個進程可
  以互不干擾的運行。
  我讀代碼的工具是用的source insight,可惜不能自動識別彙編.s檔案,而0.01彙編文
  件不少。哦,講了這麼多,還沒進入主題:我的體會心得啦
  從哪部分開始讀,一般讀核心都建議從boot部分開始讀,這樣循序漸進,而且一般啟動
  部分似乎最神秘,最能滿足好奇心啦!不過我是從memory部分開始讀的,因為對邏輯地
  址到物理地址的轉換一直很模糊。從你感興趣的地方開始讀,在以後比較容易堅持。在讀核心的方法上,我建議"先橫後縱"。
  
  在讀核心的方法上,我建議"先橫後縱"。
  Souce insight的好處就是你點上某個函數,能自動顯示該函數的定義,這樣比較方便的
  跳入察看。對於剛開始看核心的人,我並不太建議一開始用這種方法。因為函數層層嵌
  套,等你下到最底層,早已忘了當初的調用的功能,建議只跳一層看看調用函數的註解
  或者簡單看看函數代碼猜測功能,做一些記號。
  我個人覺得,操作系同比較重要的是資料結構和演算法,演算法固然在程式中體現,而資料結
  構需要查看相關的標頭檔及相關的檔案才能瞭解。所以剛開始時我還是採用一個檔案一
  個檔案的讀,即所謂的"橫",因為一個檔案中的安排總是對特定的資料結構的一些操作
  ,你有更多的機會去理解各個主要資料結構的功能,包括結構中各個子項的含義。當然
  不要忘了寫注釋啦(雖然現在的理解可能並不準確)。
  在一個模組,如FS模組的各個檔案都讀完之後,就採用了所謂的"縱"了,你可以選擇一
  個比較重要的函數入手,進行層層跳入(或若干層)以領會各個資料結構間的有機關係
  。如fs模組涉及的主要資料結構有:超級塊,節點索引塊,資料索引塊,高速緩衝塊,
  檔案等,在單獨理解各個相關檔案後,可以從do_execve入手,看一個檔案從輸入檔案參
  數到最後執行的主要步驟,進而理解VFS和具體fs之間的介面。
  在每一個主要模組讀完之後,最後自己寫一份總結(書面總結啦),看看自己對這個模
  塊的把握。因為讀代碼往往是比較細緻的,可能專註於讀懂代碼本身而忽略了模組的功
  能和組織形式。這點我認為比較重要,所謂"牛吃草要反芻回味",讀代碼也許要在看完
  之後進行總結,這樣才能上升一個層次,真正理解其方法和結構的精妙之處。
  最後,談談看Linux核心需要的一些基礎吧
  1) Intel386硬體知識,比如各寄存器,TSS,段描述表(IDT,GDT,LDT)等,段頁轉換
  機制等(高版本的Linux支援其他硬體體系,但對intelx86的比較熟一些吧)
  2) 彙編指令,尤其是AT&T文法及其遷入式彙編,當初我初次看到諸如 代碼:
  
  __asm__("std ; repne ; scasw/n/t"
   "jne 1f/n/t" "movw $1,2(%韎)/n/t"
  
   "movw $1,2(%韎)/n/t"
   "sall $12,%靫/n/t"
   "movl %靫,%韝/n/t"
   "addl %2,%韝/n/t"
   "movl $1024,%靫/n/t"
   "leal 4092(%韝),%韎/n/t"
   "rep ; stosl/n/t"
   "movl %韝,%陎/n"
   "1:"
   :"=a" (__res)
   :"0" (0),"i" (LOW_MEM),"c" (PAGING_PAGES),
   "D" (mem_map PAGING_PAGES-1)
   :"di","cx","dx");
  
  這樣的一條彙編語句感到頭腦發脹,不過瞭解其格式後,多看就習慣了。
  3) 作業系統的基本知識,對於作業系統的一般理解,這個大家都有吧!
  4) 一本或幾本Linux核心的參考書,有參考書總要好得多,畢竟很多資料結構不用自己
  去猜,我在讀0。01感覺有很大不同,很多地方只能猜,不過還是有用的。至於Linux內
  核的書已經很多了,到都樂去看看就知道了
  5) 恒心 毅力:這是最重要的一點,初始的興趣往往會被遇到的困難一掃而光,再加上
  其他雜七雜八的事情,堅持確實很困難。當初Tm-linux組剛開始參加核心分析的人不下
  幾十,但堅持到底的也就寥寥數人(這隻是0.01哦)
  6) 跟別人多多交流,畢竟個人能力有限,通過交流,可以增進知識,我很鼓勵書面的
  交流,雖然可能需要花費一些時間來寫,因為書面的東西以後可查,而書面的跟別人交
  流總希望正確一點,少犯錯誤啦。這一點西安交大做得比較好,組織了Linux核心論壇,
  隔一段時間聚會交流一次,每次有一主題,先有人主講,然後大家互相討論。
  這些你有些沒有嗎,那麼恭喜你啦,因為通過讀核心你就可以增加這方面的知識和經驗
  了。
  讀核心也不是最終目的,對自己在嵌入式系統的開發,或Linux的"運用自如",或者實現
  自己的作業系統,那才是"劍出鞘時"!
  估計成電讀Linux核心的人不少,只是大家交流比較少,我想交流還是很重要的,雖然牛
  人從來都不是問出來的,但具體問題通過交流可以增加理解,提高認識。很願意也鼓勵
  大家通過各種方式交流,雖然我不是大牛(也不是小牛啦J),很願意通過bbs,Email,
  或其他方式進行交流。
  羅嗦了這麼多,希望自己的一點見解能對大家有所啟發,也希望成電湧現更多的Linux牛人啦!

文章出處:http://www.diybl.com/course/6_system/linux/linuxjq/2007211/19293.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.