2013年1月10日 星期四

linux kernel 完全剖析



這是本大部頭, 解說 linux 0.11 source code, 不過想要讀懂 linux 0.11 我認為看這本功效不大, 不是此書的問題, 而是有些東西需要簡化才會比較好了解。而我也還沒看完這本書。

還沒看過Orange's 一個作業系統的實現之前就在看這本, 但要看懂這本書並不容易, 最好閱讀過 Orange's 一個作業系統的實現再來看。否則光是進入保護模式的程式碼就足以難倒不少人。而 at&t 的組合語言語法也是需要花點功夫熟悉。

我認為最難的部份像是 process 的切換,  看這本是看不懂的, Orange's 一個作業系統的實現花了一章在講解這部份的實作, 而我花了很大的心力才搞懂, 還出動 bochs/qemu 的內建除錯器, 一步一步 trace 才弄懂, 而這知識又很容易忘記 (我已經忘記了, 當初我耗費那麼大的心力才搞懂, 還是很容易忘記。所以我寫了 process switch 系列來幫助記憶)。我認為能看懂Orange's 一個作業系統的實現再來看這本會是比較好的作法。如果簡化的 process 切換都看不懂, 怎麼能看到包裝的更好的 linux 0.11 程式碼。

我可能錯了, 在理解Orange's 一個作業系統的實現 fork 實作後, 可能 fork 的實作是更難理解的, 而在 fork 之後還有 exec/wait 要對付, 這些都讓我吃足苦頭。Orange's 一個作業系統的實現 fork 實作已經省略 page, linux 的 fork 實作可是會和 page 有關, 還得先搞懂 page 才行。我是蠻懷疑可以從這本書來理解 linux 的 fork/exec/wait 實作, 強烈建議讀過Orange's 一個作業系統的實現再來讀這本大部頭, 因為在讀過Orange's 一個作業系統的實現後 (不止要讀, 還要真的跟書上一起完成這個 os kernel), 我有信心可以看懂這本書。

如果想挑戰看看的讀者, 可以看看 p192 的程式, 236 行的組合語言, 在展示 process 切換, 程式很小, 可是需要的 cpu 知識不少, 程式碼滿滿幾乎是我的筆記, 我想我當時應該看不懂吧!現在我已經能看懂, 若是能看懂, 就表示已經過了第一關了。



這本書我覺得很棒, 將 linux 0.11 source code 幾乎做了全面性的註解, 也解釋相關的硬體知識。不過 linux 0.11 沒有支援 elf 執行檔和 tcp/ip stack, 要學習這方面的知識就要另外找方法了。

chapter 17 在說明整個實驗環境的建立, 這沒有想像中容易, 尤其是不熟悉 linux 的開發者, 要花點心力閱讀。

17.3.2 介紹了如何建立硬碟的 image, 硬碟因為還有硬碟分割表資訊, 所以比較複雜, 不如磁片簡單。

這邊有人把 linux 0.11 的版本改成 gcc 4.6 可以 compile, 其實有興趣的朋友也可以自己試試看。
Linux 0.11 在ubuntu-11和gcc-4.6.1下编译调试至正常运行的过程详解:
http://blog.chinaunix.net/uid-23917107-id-3173253.html

書中程式碼下載處: http://oldlinux.org/Linux.old/kernel/0.1x/
官網: http://oldlinux.org/
 

1 則留言:

  1. 也在研究Linux Kernel(入門中),很高興看到這麼專業的文章!!高手

    回覆刪除

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。