怎樣深入學習操作系統?

像深入了解計算機操作系統,不想只存留於糊弄考試的階段!如何深入學習?

聽其他人介紹有許多教學用的操作系統,只有幾千行的代碼,求前輩推薦。


操作系統是一個龐大的軟體,涉及到方方面面,如果你想透徹了解操作系統,那麼你必須要寫一個操作系統,並不需要寫個windos or linux那樣的操作系統,寫個幾千行的到1萬多行的玩具就可以了。

獨立寫一個操作系統需要很廣的知識面, 《深入理解計算機系統》著本書你總得看吧,怎麼也得稍微有一點系統開發的經驗吧(windos or linux都行),推薦看《UNIX環境高級編程》,當然這都不是必須的.

1、隨便看一本關於操作系統理論的書,國內國外教材都可,推薦《操作系統:精髓與設計原理》

2、看《x86彙編語言:從實模式到保護模式》,動手照著書上寫代碼

3、跟著MIT 的操作系統的實驗 6.828 / Fall 2014,全程把這個實驗做完

完成以上三點,你基本就可以寫出一個完整的、可在真機上運行的操作系統了,在這期間你需要很強的毅力,善於自己解決問題。

4、看《深入理解Linux內核》與《x86/x64體系探索及編程》,對照著《深入理解Linux內核》上講的Linux內核的各種系統(eg. 虛擬文件系統、slub內存分配系統、夥伴系統),再看看Linux內核的源碼,再與自己的思維融合一下下,就可以開始動手寫一個自己的操作系統了。

我就是按照以上四個步驟寫了一個操作系統 GitHub - Zhang626/fuckOS

在這期間需要查閱非常非常多的資料,大部分資料都列在MIT 6.828 的實驗上了。

推薦一個外國的關於開發操作系統的論壇,上面有很多牛人OSDev.org ? Index page 與 Expanded Main Page

歡迎關注個人公眾號:

http://weixin.qq.com/r/9zjm-kbEdhsJrQKd923l (二維碼自動識別)


很久沒有玩操作系統底層的東西了~~,推薦高中時候學的三本書:

1.《Orange S:一個操作系統的實現》

這本書寫得很贊,而且是個中國人寫的!我記得還提供一系列的資料,很棒!

從只有二十行的引導扇區代碼出發,一步一步地向讀者呈現一個操作系統框架的完成過程。書中不僅關注代碼本身,同時關注完成這些代碼的思路和過程。本書不同於其他的理論型書籍,而是提供給讀者一個動手實踐的路線圖。讀者可以根據路線圖逐步完成各部分的功能,從而避免了一開始就面對整個操作系統數萬行代碼時的迷茫和挫敗感。

印象中後面好像爛尾了,不知道是不是要交稿的原因。

接著,就是內核系列的了解了。

2. 《Linux內核完全注釋》

這本書說的Linux內核版本是0.11,所以會比較多的代碼。

3. 《Linux內核設計與實現》

這本書一直珍藏著,講的是經典的2.6.11的內核好像!

再推薦一本相關的書——不過是嵌入式操作系統的:

uCOS作者寫的:《嵌入式實時操作系統μC/OS-3》

還有一本很屌的書叫:《Linux From Scratch

Linux From Scratch》(LFS)是傑勒德·比克曼斯等人編寫的安裝Linux的教科書,描述了從源代碼編譯Linux系統的方法。這本書可以從在Linux From Scratch網站上免費下載到,當前最新的版本為7.8

歡迎關注我的微信公眾號(搜索 Phodal)

http://qm.qq.com/cgi-bin/qm/qr?k=Bhki8MNtEb9-vibPBo-6CbBqIROWI9mv (二維碼自動識別)


寫一個操作系統內核有多難?大概的內容、步驟是什麼? - 計算機


0.

藉助Youtube的視頻快速獲得領域知識 (http://jump.im/i6)

1.

在本地用virtualbox架設一個彙編環境,用來做開發測試的沙盒

2.

選書如 Operating System Concepts

彙編的教程網上與很多,可以自己找。


推薦MIT-6.828 :6.828 / Fall 2014

這是他們的schedule,按照上面的課程好好上完,把pre的paper好好讀讀,lab全部做完,基本你就對操作系統有了全新的認識了。

要是嫌mit的英文看的太累的話,也可以試試清華的,lab都差不多,不過清華的pre paper好像沒有。


uc/os給我的感覺不錯。雖說這是個嵌入式系統,但是用來了解任務調度和進程同步的細節還是非常好的,結構設計也非常有層次感。作為一個RTOS,它每一個函數都能設計好有一個確定的執行時間,感覺還是很神奇的。

最重要的是,它是免費的!免費獲取源碼,注釋也很清晰。除了缺少系統的內存管理和文件系統之外,還是非常不錯的一個用來學習的系統。


我上操作系統課的時候用的是Nachos,可以看一下Nachos


玩具還是不要搞了吧。可以看xv6,或者看趙炯博士的0.12版linux分析,或者讀freebsd或者illumos這種注釋很清楚的源代碼

========================

回復知友@星空不遠:我在知乎的答案多數是在抖機靈;現在有人很認真的評論,那我也認真回答一下。

在工程技術方面,我屬於天資愚鈍的那種人,我在OS方面也只掌握了內存管理和網卡的驅動這兩部分,網路協議棧還在理解中。

我給出的建議是:莫要貪心,想要一口吃個胖子。OS是個工程性很強的技術活兒,初學者最好不要把目標定為「深入學習」(在我看來深入學習的意思有兩種可能:讀源碼分析其實現,或者學習分散式系統),「了解原理」應該是更切實的目標。

如果你還是在校學生,只看現代操作系統那本書就夠了,多讀幾遍,一遍肯定很多地方讀不懂,這基本上就會用掉半年的時間。如果讀完之後還有很濃厚的興趣想了解OS的實現,那就讀讀xv6(xv6有本xv6-book的電子書,必讀,讀完它再去看源代碼),或者趙炯博士那本。上學期間讀這些就夠了,花更多時間學學web開發技術更有錢途。

如果已經工作,那隻能讀Linux或者FreeBSD、illumos這種久經考驗的操作系統。FreeBSD和illumos的優點是代碼結構清晰,有前面那些基礎很容易讀進去,讀完能學到很多知識;缺點是用戶群小(和Linux相比)。Linux代碼雖然亂些,但分析源碼的書更多,遇到難點也許更容易克服。

長遠看,未來是屬於Linux,所以建議先從Linux學起,我個人推崇的linux的入門書是robert love的linux kernel development。我對Linux沒有深入了解,唯一認真度過的是linux device driver,但這本書比較難啃,但值得推薦。


建議題主先把大學的操作系統原理學明白,再行下一步


不用java 用系統API寫程序


自己寫一個玩具操作系統


《30天自製操作系統》


推薦閱讀:

Coursera (或其它慕課平台)上有哪些編譯原理相關的課程值得推薦?
根據語義生成圖像的相關研究工作有哪些?
博士做研究如何選擇方向?
能不能通俗講一講數據鏈路層到底有什麼用?
如何理解計算機操作系統中的局部性原理?

TAG:程序員 | 操作系統 | 編程 | 計算機科學 |