這是本大部頭, 解說 linux 0.11 source code, 不過想要讀懂 linux 0.11 我認為看這本功效不大, 不是此書的問題, 而是有些東西需要簡化才會比較好了解, 而我也還沒看完這本書。
還沒看過《Orange's 一個作業系統的實現》之前就在看這本, 但要看懂這本書並不容易, 最好閱讀過 Orange's 一個作業系統的實現再來看。否則光是進入保護模式的程式碼就足以難倒不少人。而 at&t 的組合語言語法也是需要花點功夫熟悉。
我可能錯了, 在理解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, 其實有興趣的朋友也可以自己試試看。
ref:
Linux 0.11 在ubuntu-11和gcc-4.6.1下编译调试至正常运行的过程详解
書中程式碼下載處: http://oldlinux.org/Linux.old/kernel/0.1x/
官網: http://oldlinux.org/
豆瓣评分 9.0
我的推薦 4 顆星
也在研究Linux Kernel(入門中),很高興看到這麼專業的文章!!高手
回覆刪除