【轉】學習OS歷程

我的項目代碼: http://code.google.com/p/maray/

這兩天我在寫計劃,完成後在此博客公佈。

發信人: raywill (曉楚), 信區: Linux
標  題: 我寫操作系統的一點經驗
發信站: 武漢白雲黃鶴站 (2007年09月14日22:39:30 星期五)

轉瞬2年!Linux版上又見“有人寫操作系統嗎?”這樣的帖子。2年前,有個叫raywill的
小子不也是發過這樣的帖子嗎?那個時候,raywill開始了內核之旅。在kernel旅途上一方
面長了見識經驗,一方面認識了很多朋友,難得的很。長江後浪推前浪,世上新人趕舊人
,前兩日聽TmacD說Linux版上有人開始寫內核了,那叫一個高興!HUSTER們真不錯!

我在OS方面實際上也都算不上入門,但多少算是磕磕碰碰過來的,有些經驗,和新人們交
流下,也和所有OS愛好者交流下。

從進大學軍訓開始我就開始自覺不自覺地瞭解OS這一塊了,無意淘到的第一本OS書是那本
著名的《Operating System Design and Implementation》,雖然是e文,但語言很淺顯,
講得內容也很條理清晰,斷斷續續基本都過了下,書後附的Minix源代碼也在某些清晨爬在
牀上交叉讀了些,零碎的很,只當時興趣愛好來讀,沒什麼明確目的,所以效果至多也只
能算是潛移默化了我(天知道我“化”了沒有),對Coding和Arch沒有很大的提高。總之
一個:好玩而已!不過最遺憾的是,讀Minix,我竟然還沒明白微內核裏頭到底是怎麼運作
的,不求甚解的害啊!大家千萬不要效仿。讀書,讀就讀懂,一知半解不適合閱讀科學類
書籍。

還是在大一,我去聽了操作系統(陽富民老師)和組成原理(高建生老師)的課。操作系
統感覺總是在唸幻燈片,不好玩。而高老師的課簡直就是太棒了!深入淺出,遊刃有餘。
幾百人的大教室,座無虛席,一門工科課程,能做到這個份上,恐怕沒有幾個老師吧。後
來到了大三,我還想聽高老師的課,可惜換成了小教室,更找不到座位了,終成遺憾。如
果你真的對OS感興趣,操作系統,組成原理,還有接口技術,建議先自修或者找個課堂旁
聽,益處多多,毋庸贅言。

大一暑假開始動手寫Bootloader。沒有前人引導,自己四處亂摸,大約半月,終於啓動起
來了:不僅在虛擬機上,而且在真實的PC上!那時的激動心情這輩子也就體會過三兩次吧

寫Loader首先是看(抄!)別人的代碼,很多都是涉及到了FAT文件系統,所以花了很多時
間去了解FAT,由於沒系統學過,沒有fat的概念,摸了很久,也沒摸出個名堂。後來乾脆
來簡單的,什麼fat都不問,直接在物理塊上定位文件。初級階段,這樣省事!

第一個啓動軟盤我至今保存。

這個暑假還花了很多時間上在摸索建立編譯和執行環境上,Google了個底兒朝天,最後使
用DJGPP(DOS GCC)+NASM+BOCHS作爲平臺。現在看來,這個平臺還有很多改進的,比如,用
CYGWIN環境比DJGPP就要好得多。DJGPP上面貌似有些bug,很惱人。

那個暑假,剛買本本,沒有網絡,搜索信息只能去網吧,帶個本子帶支筆通宵,現在回想
起來,自己都感嘆當初太Orz了。大一的暑假不像今年的暑假,整棟樓都空蕩蕩的,整個世
界都是自己的了,那感覺,很好!

到了大二,看了更多的書,興致來了,就寫寫代碼。這個時候完成了保護模式下的系統初
始化和中斷處理這些比較關鍵的部分。開始用C來寫代碼了,很爽!
現在回想,大二的很多工作實際上都是在做CPU架構相關的初始化以及一些接口芯片的初始
化,都是些技術活,會了之後就感覺都沒啥。比如CPU架構涉及到 GDT,LDT,IDT,A20,T
SS等,中斷涉及到8259芯片,時鐘涉及到8253/8254,等等,以後還有 DMA,IDE,SATA,P
CI等等,都是接口的幹活。我當初沒有意識到“接口”這樣一個概念,上面那些東西都是
在其他學科的書上、網上零碎學習到的,所以走了很多彎路,浪費了很多時間。給點建議
:寫Kernel之前確保你把《計算機接口技術》中的8053/8254部分,中斷芯片部分,DMA部
分以及把80386架構搞清楚。接口部分可以先在DOS下做做實驗,找對感覺,然後在寫kern
el,事半功倍。

大三,生活變得複雜了。猛然發現,分數面前,我很渺小……開始節制自己,代碼沒怎麼
弄了,不過後來還是忍不住在龐麗萍老師的操作系統課堂上把底層的內存

管理代碼寫出來了,最簡單的那種,湊合可用。

 

 

$False$

 

 

我還計劃過把文件系統也弄個大概出來,
而且TmacD還幫忙把DMA讀硬盤整出來了,後來還是由於時間重心的轉移,放下了。
雖然沒有寫代碼了,但在這一階段,理論方面卻有了很大的提高,組成、系統結構、接口
技術、網絡這些課程的學習,讓我對計算機有個比以前準確得多的把握。同時自己還看了
很多Linux相關的書籍,受益匪淺。這裏不得不提到清華那本《數據結構》,裏面很多不考
的算法都是與OS相關的,如Buddy System,內存管理,文件等章節,寫的都很贊。寫kern
el到後來,這些都是需要去面對的。有了數據結構裏的這些知識,就可以站得高一些來看
那些具體實現,也就不至於迷失了。

大四,還是個未知數。如果能保研,kernel就可以繼續了。額的神啊,保佑我吧~!
到那個時候,將一切重新來過:首先設計系統框架,劃分單元,分步驟實現系統功能,至
少要做個多任務DOS等級的小 kernel出來吧。另外,還要做好文檔管理,把這個項目變活。


如果要折騰出什麼有創意的東西,以後我還是把她變成一個USB啓動的Player:插上U盤,
啓動電腦,告別漫長的Windows啓動過程,直接進入音樂播放界面,Play~!然後加入網絡
歌曲功能,那樣就比較nice了!


寫內核,需要的是一分技術、二分熱情、三分耐心。如果你決定寫了,那就堅定地執行下
去。代碼是用鍵盤敲出來的!
如果能有三兩個志同道合、水平相當的人一起來做這件事,其樂趣其成績必將更大。

路還很長,共勉之~Gogogo!

最後推薦幾個資源:
《自己動手寫操作系統》   -------------相見恨晚的一本書
 Intel手冊,
Vol 3. System Programming Guide ------------- 可以讓Intel免費郵寄書給你
 接口技術   -------------我們的口號是:不要再走彎路了!
 www.osdev.org   -------------最贊其論壇,其次是它的wiki。進階必備!
 Books on Linux Kernel.


我的小kernel-- Maray:
http://code.google.com/p/maray/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章