我寫作業系統的一點經驗 原創

2021-04-13 12:07:57 字數 3185 閱讀 7211

我的專案**: http://code.google.com/p/maray/

這兩天我在寫計畫,完成後在此部落格公布。

發信人: raywill (曉楚), 信區: linux

標  題: 我寫作業系統的一點經驗

發信站: 武漢白雲黃鶴站 (2023年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)+na**+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,事半功倍。

大三,生活變得複雜了。猛然發現,分數面前,我很渺小……開始節制自己,**沒怎麼

弄了,不過後來還是忍不住在龐麗萍老師的作業系統課堂上把底層的記憶體

管理**寫出來了,最簡單的那種,湊合可用。我還計畫過把檔案系統也弄個大概出來,

而且tmacd還幫忙把dma讀硬碟整出來了,後來還是由於時間重心的轉移,放下了。

雖然沒有寫**了,但在這一階段,理論方面卻有了很大的提高,組成、系統結構、介面

技術、網路這些課程的學習,讓我對計算機有個比以前準確得多的把握。同時自己還看了

很多linux相關的書籍,受益匪淺。這裡不得不提到清華那本《資料結構》,裡面很多不考

的演算法都是與os相關的,如buddy system,記憶體管理,檔案等章節,寫的都很贊。寫kern

el到後來,這些都是需要去面對的。有了資料結構裡的這些知識,就可以站得高一些來看

那些具體實現,也就不至於迷失了。

大四,還是個未知數。如果能保研,kernel就可以繼續了。額的神啊,保佑我吧~!

到那個時候,將一切重新來過:首先設計系統框架,劃分單元,分步驟實現系統功能,至

少要做個多工dos等級的小kernel出來吧。另外,還要做好文件管理,把這個專案變活。

寫核心,需要的是一分技術、二分熱情、三分耐心。如果你決定寫了,那就堅定地執行下

去。**是用鍵盤敲出來的!

如果能有三兩個志同道合、水平相當的人一起來做這件事,其樂趣其成績必將更大。

路還很長,共勉之~gogogo!

最後推薦幾個資源:

《自己動手寫作業系統》   -------------相見恨晚的一本書

intel手冊,

vol 3. system programming guide ------------- 可以讓intel免費郵寄書給你

接**術   -------------我們的口號是:不要再走彎路了!

www.osdev.org   -------------最讚其論壇,其次是它的wiki。高階必備!

books on linux kernel.

我的小kernel--maray:

我寫作業系統的一點經驗 原創

我的專案 這兩天我在寫計畫,完成後在此部落格公布。發信人 raywill 曉楚 信區 linux 標 題 我寫作業系統的一點經驗 發信站 武漢白雲黃鶴站 2007年09月14日22 39 30 星期五 轉瞬2年!linux版上又見 有人寫作業系統嗎?這樣的帖子。2年前,有個叫raywill的 小子不...

關於作業系統的一點東西

作業系統的組成 系統資源包括cpu 記憶體 輸入輸出裝置以及儲存在外存中的資訊.因此作業系統由 1 對cpu的使用進行管理的程序排程程式 2 對記憶體分配進行管理的記憶體管理程式 3 對輸入輸出裝置進行管理的裝置驅動程式 4 對外存中資訊進行管理的檔案系統 bios bios是基本輸入輸出系統 ba...

作業系統中讀者 寫者問題的一點疑問

乙個讀者試圖進行讀操作時,如果這時有其他讀者在進行讀操作,他可以直接開始讀操作,而不需要等待。只要有讀者在進行讀操作,寫者就不能寫,但後續讀者可以直接進行讀操作,因此只要只要讀者陸續到來,讀者一到就可以開始讀操作,而寫者程序只能等待,所有讀者都退出才能進行寫操作,這就是讀者優先。對於這個問題,書中是...