推薦一個操作系統(tǒng)的lab

我推薦的這個lab,名字叫做ucore,這個lab來自清華大學的操作系統(tǒng)課程,首先要說明一下,這確實是非常好的一個lab,想入門linux內(nèi)核的同學可以讀一讀這個lab所涉及的ucore的源碼。

書籍推薦

其實只要大家認認真真做下去,收獲肯定會非常的大。雖然這么說,但是,這個lab 對大家的基礎要求稍微有一點高,你至少要懂一點匯編,懂一點C。代碼里面很多都是匯編,C交替著寫,我推薦幾本書,給大家補一下基礎,大家可以參考一下。

第一本是王爽的匯編語言,這本書適合入門,但是只涉及到了8086的一點東西。書講的淺顯易懂。

匯編語言
匯編語言

另外一本書是《x86匯編語言--從實模式到保護模式》,這本書算是一本進階的書籍,同時也是80386匯編入門的書籍。這本書里大部分的知識,這個lab都用得到,所以強烈推薦大家閱讀。

x86匯編語言--從實模式到保護模式
x86匯編語言--從實模式到保護模式

還有一本需要參考一下的是《程序員的自我修養(yǎng)--鏈接、裝載與庫》,因為這個lab還涉及到了elf格式的可執(zhí)行程序.

程序員的自我修養(yǎng)--鏈接、裝載與庫
程序員的自我修養(yǎng)--鏈接、裝載與庫

當然,最好的話,能附帶這么一本《orange's 一個操作系統(tǒng)的實現(xiàn)》,作為參考是最好不過啦。這本書的話,匯編有點多,其實很多匯編都可以用C來代替。不過里面有一些點,這個lab也涉及到了,所以推薦讀一下。

orange's 一個操作系統(tǒng)的實現(xiàn)
orange's 一個操作系統(tǒng)的實現(xiàn)

上面的幾本書里應該涉及到了這個lab所需要的大部分的硬件以及匯編的知識,其余的,你可以去google或者baidu。做這個lab,你可能會遇到非常多的困難,比如說,調(diào)試異常困難,代碼半天讀不懂,沒事,這都是很正常的情況。要是覺得困難實在太大,我建議你從這個玩具內(nèi)核入手 -- hurley,這個內(nèi)核非常簡單,適合積累一些最基本的知識。

關于代碼的閱讀

linux上面讀ucore將近1 M的源文件真心費力,生活其實可以簡單一點,你可以使用宇宙最強的ide--visual stdio來進行代碼的閱讀,像我這樣:

代碼演示

是不是很爽,告訴你,爽翻了。特別是遇到一堆不知從哪里冒出來的宏,一堆不知名的函數(shù)的時候,VS可以實現(xiàn)十萬分方便的跳轉(zhuǎn)。

我推薦兩個插件,一個叫做visual assistant,這個用來增強自動補全以及跳轉(zhuǎn)操作,一個叫做visualGDB,是一個幫助你在window上面寫linux程序的插件。自己去搜索安裝吧,網(wǎng)上教程一大堆。我就懶得寫了。當然,你不可能用vs來編譯代碼,但是,vs會給你閱讀代碼,修改代碼帶來非常大的方便性。

收獲

實在做不出也沒有什么關系,因為很少有人會真正去做一個操作系統(tǒng)吧。但是讀懂源碼,我覺得還是非常有必要的,我稍微講一下,我個人讀完了這個lab源碼之后的感受吧。

  • 以前學c的時候,我總是很好奇,printf之類的函數(shù)究竟是如何實現(xiàn)在屏幕上打印出字符的,從來沒有老師講過這些東西,現(xiàn)在,我懂了,原來我們只要將字符寫在內(nèi)存中的某個區(qū)域,然后驅(qū)動程序會自動幫我們實現(xiàn)字符在屏幕上的輸出。

  • 為什么cpu可以實現(xiàn)進程的切換?一切都是因為中斷,一旦發(fā)生中斷,計算機要立馬切換到中斷處理程序中去,利用這個特性,操作系統(tǒng)設定好時鐘頻率,讓時鐘每多少毫秒觸發(fā)中斷,內(nèi)核就可以獲得控制權(quán),從而實現(xiàn)進程的切換。

  • 一切的進程,只是一堆數(shù)據(jù)而已,只要你保存好這段數(shù)據(jù),cpu先去干點別的事情,一段時間后再恢復這些數(shù)據(jù),進程又活了。由于cpu的速度太快了,所以你會一直覺得進程還活著,其實它已經(jīng)切換了幾十次了。- 內(nèi)存的分段,分頁機制真是漂亮的抽象,邏輯上連續(xù)的頁,實際在內(nèi)存中可能相隔十萬八千里,可是這并沒有關系。因為我們已經(jīng) 屏蔽了它,上層的應用是永遠也感覺不到差別的。

  • 所謂的程序文件,加載到內(nèi)存里,操作系統(tǒng)要對其進行重定向處理,在每個用戶進程的眼里,它自己是獨一無二的,分段分頁機制完美地實現(xiàn)了進程的隔離。

  • ... ...

對于我來說,收獲特別大。我懂了很多以前我自認為懂了的東西,當然至于這些東西我是不是真的懂了,我也不知道,因為人的認知總是在向前推進的嘛。但是說實話,我對寫一個內(nèi)核什么的,沒有多么大的興趣,所以,我不會繼續(xù)鉆研地太深。所以,對于這個lab,我也只是玩一下的。不過,讀完這個lab,實驗完這個lab,加上我以前學的編譯器,硬件,匯編等一系列的東西,從硬件到軟件這個層次發(fā)生的事情,我現(xiàn)在算是比較清楚了。

至少在現(xiàn)在,寫一個玩具性質(zhì)的操作系統(tǒng)并不是一件很難的事情,關鍵是你不熟練,寫操作系統(tǒng)也沒有很高深的技巧,它也不需要你有很高的智慧,它的理論基礎在幾十年前就已經(jīng)成熟了,已經(jīng)有無數(shù)人寫了無數(shù)的操作系統(tǒng),就如同編譯器一樣,我相信,只要你足夠熟練的話,花點時間,參照各式各樣的教程,你也能夠?qū)懗鲆粋€操作系統(tǒng),對于社會,這可能沒什么卵用,但是對于你自己,你可以從中掌握到很多底層的細節(jié).當然,這也可能沒有什么卵用.

如果你要問,學這些玩意對你找工作有什么益處的話,我可以說,短時間內(nèi)可能還真沒有什么益處,不過這些玩意,算得上是一個編程愛好者的基本修養(yǎng)吧。就這樣吧!如果感到代碼層層疊疊,數(shù)據(jù)結(jié)構(gòu)花樣翻新的話,可以參考一下我的注釋版lab:cs-ucore

學了這么久的計算機,我突然感覺學海無涯,每一個點擴展出去,都是無窮無盡的,真心有點累,不行了,我要休息一段時間了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運行的地址不確定 關于...
    SeanCST閱讀 8,140評論 0 27
  • 又來到了一個老生常談的問題,應用層軟件開發(fā)的程序員要不要了解和深入學習操作系統(tǒng)呢? 今天就這個問題開始,來談談操...
    tangsl閱讀 4,332評論 0 23
  • vue的腳手架總是會出現(xiàn)一些錯誤,需要很規(guī)范,可以配置一下文件 在文件目錄下的.eslintrc.js最后面加入 ...
    阿力阿貍123閱讀 244評論 0 0
  • 前些天有空閑時,無意中看到了《天龍八部》中的這一段: 虛竹低頭道:“說也慚愧,尊師中毒之初,臉上現(xiàn)出古怪笑容,我以...
    偽君子_閱讀 12,662評論 4 9
  • “我給我媽打了個電話。” 這句話聽起來很普通,幾乎是在外上學或工作的人掛在嘴邊的話。不過當我跟朝陽說我給我媽打了個...
    曼妮姑娘閱讀 337評論 0 2

友情鏈接更多精彩內(nèi)容