以前逼逼了那麼多,都是口水,如今來電乾貨。其實也不是我原創的,我只是知識的搬運工和一個不合格的消化者,可是是一個好的傳播者。html
書,教材linux
前人經驗git
操做系統實驗程序員
學習目標github
簡單操做系統的代碼閱讀web
30天自制操做系統算法
文獻shell
課外閱讀數據庫
各個大學的實驗,講義等編程
推薦《Linux內核徹底剖析》,書的內容以Linux0.11爲基礎,嗯,對,你沒看錯,是long long ago的版本,這個版本的代碼是至關於目前較新Linux的精簡版本,麻雀雖小,五臟俱全啊,比較適合接觸Linux不久的。不少操做系統概念的具體實現你均可以在書中找到源碼,並且代碼不是很長,在真刀真槍的實踐中比較能體會到操做系統的真正精髓所在。所以建議先看完這本書後再去看較新版本的(Linux2.6千萬級的代碼量啊)。
當你看完此書,而且能在此版本中可以很輕鬆的添加個系統調用,記錄下系統進程的切換日誌,實現下內核級線程神馬的,甚至實現網絡功能還有新的文件系統的話,LZ的操做系統課程就徹底能夠打滿分了,並且是當之無愧的滿分,完爆那些靠背誦得高分的。
而且,之後LZ逢人即可說,哥當年也是搞過Linux內核的!
UNIX操做系統設計
Linus Torvalds 看了這本書以後寫出了最初的Linux:
操做系統概念,已經到第七版了。Abraham Silberschatz等著。不過如書名同樣,這本只是一本操做系統入門級的教材,介紹通常性的概念,範圍比較全面。這本里Windows,Linux,Solaris都會舉例到。
我的推薦《操做系統真象還原》,從零實現一個操做系統,講解至關精彩。
萊昂氏unix源碼分析是經典之做,MIT如今也出了一本小冊子,相似與萊昂氏的書籍,做爲課程教學使用。
mit的操做系統源碼分析中文翻譯地址:deyuhua/xv6-book
相似涉嫌被抄襲的教材還有:
WilliamStalling的《操做系統內核與設計原理》(清華大社學出版1998年版)、
Peterson的 《操做系統概念》(高等教育出版社2003年版)、
Solomon 的《Windows2000 技術內幕》(北京大學出版社2000年版)、
屠立德等編寫的《操做系統基礎》(清華大學出版社2000年版)、
王素華《操做系統教程》(人民郵電出版社 1995年版)、
譚耀銘《操做系統》(中國人民大學出版社1999年版)、
馮耀霖《操做系統》(西安電子科技大學出版社1989年版)等。
孟女士原是一名大學教師,如今以自由撰稿人身份從事計算機教材寫做。1997年11月,她根據本身的備課筆記,編著完成《計算機操做系統》一書(如下簡稱「孟書」),由中國人民大學出版社出版發行。
Tanenbaum的《現代操做系統》、
Peterson的《操做系統概念》、
William Stalling的《操做系統——精髓與設計原理》。
csapp不用說了,讀過的都知道
光看書不動手很容易出現這種狀況...
我推薦 6.828 / Fall 2014,往年的視頻也很容易找到。這門課會接觸到兩個小的操做系統: xv6 和 jOS。課堂上主要講xv6, 一個小的unix操做系統;而課程Lab分6~7個階段讓你填寫jOS的關鍵代碼。
這門課的好處就是理論加實踐,並且課程節奏很好。
好比講完系統調用,你就能夠試着給xv6加個timer調用;講完threads,你就能夠試着給xv6加個系統調用,而後讓這個系統支持線程...
Lab實現的jOS和xv6有不少設計決策不一樣,對比它們你能夠更好的理解什麼是操做系統;固然能本身親手寫一些代碼感受會很不同(理論怎麼轉換到實踐)
幾點體會:
有了一些本身的體驗後,而後結合書看也許就徹底不同了。
做者:gashero
連接:https://www.zhihu.com/question/27871198/answer/38460394
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。
書籍上講的可能是理論,能夠本身再去找個開源的嵌入式OS,一塊兒看着代碼實現,就會好的多了。好比FreeRTOS,能夠也買本書,學會編譯,並在電腦裏當成個應用跑起來,學會本身建立進程、協程後,進入對應的API實現看看。內核的調度、優先級、內存管理、資源管理、搶佔式任務切換等等。
選擇嵌入式OS是由於足夠小,畢竟要爲這個事情讀Linux源碼就是個大坑。FreeRTOS擁有大部分現代OS的各類核心功能,用來學習真是個好的例子。我也是學了FreeRTOS後,才逐漸讓數年前操做系統的知識變得靈活起來了。
舉幾個例子,在FreeRTOS中的實現:
1. 線程管理:
給每一個線程創建個私有的堆棧,每次在線程裏調用任何的函數,所需的參數傳遞、本地變量等都是放在線程私有堆棧裏的。這樣各個線程之間不會發生混亂。該堆棧的創建通常還有個最大長度值,以避免浪費內存過多,同時也限制了遞歸過深的狀況。須要OS應用一開始就進行一個估算,調用棧會有多深。
2. 內存管理:
通常是先從物理內存裏申請一大塊內存,創建針對這塊內存的分配表,每當有申請內存就記錄一條,釋放內存就選擇時機將剩餘內存合併。分配策略有多種,好比按照順序,或者優先選擇符合條件的最小空閒段。每一個線程都創建本身的堆,有助於提升內存分配效率。
3. 進程/線程切換:
使用系統硬件上的定時器,每隔必定時間就發生一次硬件中斷,此時當前進程/線程被中止,全部寄存器被保存到進程私有棧裏。兩次中斷之間實際執行任務代碼的部分,就叫作一個時間片。而後調用中斷處理函數。這個中斷處理函數就是OS內核裏的任務切換功能,會從新選擇處於就緒(ready)狀態的各個任務中優先級最高的那個來運行。因此,理解並實現這個中斷處理函數,就是理解任務切換的關鍵。放心代碼不長。
4. OS內核調用:
現代的CPU,包括一些嵌入式MCU,都會嚴格區分user space和kernel space。二者的各類資源相對獨立,甚至堆棧都不一樣。當user application須要調用內核提供的服務時,每每是將本身要調用的內核調用符號、參數、返回值放到內存中指定位置,而後觸發一個軟件中斷。好比Cortex-M系列的SVCall,或者DOS的80中斷。此時就切換到了kernel mode。此模式下的中斷處理函數會根據系統調用內容分發調用請求,執行結束後,再根據返回地址跳轉回去。
6.828 / Fall 2014
xv6的連接。Learn by doing。
先看這個
看了不少回答,感受有些同窗的建議簡直太離譜了。
先說鳥哥linux私房菜,樓主能夠到鳥哥網站上先看看。他的風格是告訴你怎麼作,不告訴你爲何,很雜很亂。
還有Linux系統編程手冊這種手冊書都拿出來,不是誤人子弟嗎?
再說深刻理解計算機系統,這本書是好書,須要耐心和精力,不過不推薦初學者學習。由於你會由於裏面複雜的細節喪失不少興趣。
最後有推薦6.828這個網絡課程,有些靠譜,我先去看看而後回頭補充答案。
視頻:推薦北京大學操做系統原理公開課(2015年)(free,需註冊帳號)
Coursera - Free Online Courses From Top Universities
書籍:趙迥的《linux內核徹底剖析》
這兩個講得都是很實際的操做系統知識,不會給你一種空中樓閣的感受。
1.於淵的《本身動手寫操做系統》,這本書從零開始實現一個小的操做系統內核,看完以後能夠對操做系統最基本的原理有比較好的理解。
2.網易雲課堂李治軍老師的操做系統課程,講的通俗易懂,用的是linux0.11的源碼,真的很好。
3.Linux內核徹底剖析(linux0.12),很全面。
深度探索嵌入式操做系統:從零開始設計、架構和開發
爲何沒人推薦這個 Operating Systems: Three Easy Pieces
騷年,來一條龍啊
xv6+深刻理解操做系統+unix環境高級編程+c程序設計語言
推薦兩本適合入門和創建基本概念的書,都是以linux0.1x版本爲範例來說解的:
<linux內核設計的藝術>,書中有很是多的圖解,比起單純的文字描述更容易接受和理解;
<linux內核徹底剖析>,還有趙炯的其它幾本書;
上面兩本看完了能夠看下面這本:
<深刻理解Linux內核>,對應的英文版"Understanding The Linux Kernel",中文版的翻譯不是很使人滿意,不少專業名詞一旦翻譯成中文反而更難理解,建議直接看英文版.
《Freebsd操做系統設計與實現》《深刻Linux內核架構》。前者純理論,後者偏實現,有中文版,翻譯的也不錯。
如果想寫個操做系統的話 推薦你看《操做系統真象還原》
目前能夠公開的情報:須要動手作實驗。一學期寫幾千行弄個完整的mini OS大概比較困難,可是能夠閱讀相似的mini OS源代碼(好比MIT的xv6,6.828 / Fall 2014),本身架設虛擬機和編譯/調試用的工具鏈,改一改,調一調。有的OS課程實驗設計就是給一個mini OS,而後從其中摳掉一些代碼,要求學生在掌握OS知識和熟悉mini OS架構的基礎上,本身補完代碼,且能經過測試。
有兩門近期將開課/已經開課的國內OS公開課能夠關注一下:
Coursera - Free Online Courses From Top Universities,北京大學《操做系統原理》
操做系統-學堂在線慕課(MOOC)平臺,清華大學《操做系統》
做爲CS三劍課(數據結構,算法,操做系統)中的capstone和終極大Boss,OS的獨特魅力在於:你不但能學到全部你想知道的,並且還被迫着去了解全部你不想知道的(誇張了點,但就那意思…
因此,學好這門課無非就兩點:
1. 熟練掌握你想知道的
2. 適度理解你不想知道的
OSTEP
假如你是本身認真看書,而後獨立完成大二小學期用 VHDL 模擬後刻在板子上的 CPU,大三上繼續認真看書,搞清楚那些點,獨立完成那8個實驗。
若是學好的標準是考試拿高分,那死記硬背就行了,操做系統比文科還須要死記硬背。
可是若是你想真正弄懂,那須要看的東西太多了
我我的感受,搞清楚計算機啓動的整個過程,好比加電置全1,扇區引導,實模式進入保護模式....
操做系統就已經能明白一半了
操做系統怎麼學,首先要想操做系統是怎麼來的,在沒有操做系統的年代裏,人們是怎麼編程的。這是首要的問題。不知道有沒有人看過INTEL官方的CPU文檔,老是分爲應用級編程、系統級編程、指令集這三塊。其中系統級編程這一塊最複雜,我不說內容,就單從文件的大小來看,IA-64編程手冊的應用級編程卷是2MB,系統卷卻有6MB。就連IA-32編程手冊上的系統卷部分也遠比應用卷的要多。固然這些內容我尚未看,不過從目錄當中,以爲有不少類似的地方,好比CPU內存尋址、虛擬存儲器管理、中斷與保護等等,能夠從INTEL的CPU文檔上看出,各類CPU或機器雖然各有各的不一樣,各有各的特色,可是目前的CPU要解決的核心問題就是那麼幾塊,要解決的就是象如何尋址內存,如何管理虛擬存儲,如何實現中斷,如何保護資源等等。
各位編程的同仁想必都很清楚,計算機的操做系統就是在爲應用級編程提供服務,提供什麼服務,就是提供象諸如如何內存尋址,如何管理虛擬存儲器、如何進行中斷,如何管理磁盤,如何。。。。等等。操做系統爲咱們作掉了系統級編程中最繁重的一塊,因此咱們在用應用級編程好比用C++編程的時候纔會那麼舒服,用int分配一個變量這內存地址就來了,某個函數要調用另外一個函數執行的時候這執行行程就能跳到那個函數,內存不夠了,沒有關係,操做系統自動啓動虛擬存儲器(只不過慢了些),因此應用級編程是最舒服的,操做系統級編程比較難,而直接作單片機可能就是最難的了。由於即便就是操做系統級編程,可能不少有關CPU底層的東西也已經作掉了,你要作的可能就是要了解的你的操做系統作掉了哪些功能,如何調用。而單片機就沒有那麼好玩了,單片機我沒有作過,我想可能就是直接對着一個CPU用匯編來編程,並且極可能是在沒有操做系統的狀況下,這樣一來,操做系統要承擔的諸如內存管理,中斷,過程跳轉等這些複雜繁重的工做就得程序員本身來承擔,那程序員的負擔就比目前應用級編程大得多了。
我猜測,可能在沒有操做系統的時候,每一個計算機程序員的日子可不會象如今的那麼好過,由於作每一個程序,都須要你本身去分配管理內存,你不但要考慮如何高效的管理內存,還要知道如何進行過程跳轉等等這一大堆的的細活,而這些細活在不一樣的CPU上的實現方式也是不一樣的,直到把這些問題都解決了之後,你纔開始真正考慮你的應用方面的程序邏輯如何去編的問題。固然了,雖然有關CPU底層的系統級實現細節不同,可是大至CPU系統級這一部分要解決哪幾塊問題這是同樣的,因此在INTEL的官方文檔上,不管是IA-32仍是IA-64這兩個編程手冊的系統捲上,都是那麼幾塊內容。
既然系統級要解決的幾個任務都是相同的,每一個程序員在編程的時候都要考慮這幾方面的內容,那麼可能就會想,爲何不把這些程序要解決的相同的任務給提取出來呢,這就造成了操做系統,操做系統的內核的任務,就是專門負責解決早期計算機程序員每次編程都必需要解決的幾項系統級任務,這樣一來,留給應用級的擔子就很是的輕了,忘記在哪裏看過,好像之前的數據庫系統是屬於應用軟件的,可能一樣是由於每一個應用軟件連同操做系統都須要一個數據庫,因此就把數據庫系統給單獨提了出來作爲系統軟件了。有一點不明白爲何目前的操做系統要用文件系統,直接用數據庫系統不更好些嗎,既對用戶服務,又爲系統服務!
我以爲,若是你們有要學操做系統原理的,根本就沒必要要去看所謂什麼操做系統原理這一類的書,連外文的書籍也沒有必要去看,由於目前國際CPU製造商提供的CPU文檔的系統級編程卷纔是真正的,原汁原味最好的教材,你要編寫的操做系統從大部分任務就是解決系統卷裏的任務的。有一次在QQ上和一個作單片機的傢伙聊天,那人比我小一點,我當時說目前操做系統底層好難,他就說這有什麼難的,他立刻就能作一個操做系統,就連編譯器也能作,我當時被嚇了一大跳,小小年紀就這麼厲害,如今我懂了,作單片機的,大概都會作操做系統,由於單片機的每次編程就是和系統底層打交道的,因此作單片機程序的天然對一個操做系統內核會比較瞭解了。
在此建議和我同樣的對操做系統原理感興趣,對系統底層的感興趣的人,直接去看INTEL的官方材料吧,操做系統原理有哪幾條,要解決哪些任務,經過查看不一樣CPU的系統卷編程手冊,找出其中相同的任務和邏輯去本身總結操做系統是如何作,無疑這種方法學到會是最多的了,並且理解起來可能會比通常的學習方法來得更深入。
學習應用軟件的朋友,我也勸大家看看操做系統,內核等這些系統底層的東西。看過了之後,你會以爲看應用級編程會更流暢,學起來也會更簡單。我就是這樣學的,學MFC,後來開始學INTEL CPU的應用級編程,如今我決定開始從系統級學起。目前我也會上MSDN英文網站看看有關MFC的東西,但我看MFC倒不是主要由於去編寫MFC應用程序,而是想看看微軟是用系統爲全部的應用級編程提供服務的,這整個一套結構是如何構造出來的,ORACLE數據庫是我繼INTEL文檔的下一波目標,我也是想看看,一個數據庫體系結構是什麼樣的,可不能夠嵌到操做系統裏去。
操做系統是一個龐大的軟件,涉及到方方面面,若是你想透徹瞭解操做系統,那麼你必需要寫一個操做系統,並不須要寫個windos or linux那樣的操做系統,寫個幾千行的到1萬多行的玩具就能夠了。
獨立寫一個操做系統須要很廣的知識面, 《深刻理解計算機系統》着本書你總得看吧,怎麼也得稍微有一點系統開發的經驗吧(windos or linux都行),推薦看《UNIX環境高級編程》,固然這都不是必須的.
一、隨便看一本關於操做系統理論的書,國內國外教材均可,推薦《操做系統:精髓與設計原理》
二、看《x86彙編語言:從實模式到保護模式》,動手照着書上寫代碼
三、跟着MIT 的操做系統的實驗 6.828 / Fall 2014,全程把這個實驗作完
完成以上三點,你基本就能夠寫出一個完整的、可在真機上運行的操做系統了,在這期間你須要很強的毅力,善於本身解決問題。
四、看《深刻理解Linux內核》與《x86/x64體系探索及編程》,對照着《深刻理解Linux內核》上講的Linux內核的各類系統(eg. 虛擬文件系統、slub內存分配系統、夥伴系統),再看看Linux內核的源碼,再與本身的思惟融合一下下,就能夠開始動手寫一個本身的操做系統了。
我就是按照以上四個步驟寫了一個操做系統 GitHub - Zhang626/fuckOS
在這期間須要查閱很是很是多的資料,大部分資料都列在MIT 6.828 的實驗上了。
推薦一個外國的關於開發操做系統的論壇,上面有不少牛人OSDev.org • Index page 與 Expanded Main Page
還有一本很屌的書叫:《Linux From Scratch》
在本地用virtualbox架設一個彙編環境,用來作開發測試的沙盒
選書如 Operating System Concepts
彙編的教程網上與不少,能夠本身找。
uc/os給個人感受不錯。雖然說這是個嵌入式系統,可是用來了解任務調度和進程同步的細節仍是很是好的,結構設計也很是有層次感。做爲一個RTOS,它每個函數都能設計好有一個肯定的執行時間,感受仍是很神奇的。
最重要的是,它是免費的!免費獲取源碼,註釋也很清晰。除了缺乏系統的內存管理和文件系統以外,仍是很是不錯的一個用來學習的系統。
推薦MIT-6.828 :6.828 / Fall 2014
這是他們的schedule,按照上面的課程好好上完,把pre的paper好好讀讀,lab所有作完,基本你就對操做系統有了全新的認識了。
要是嫌mit的英文看的太累的話,也能夠試試清華的,lab都差很少,不過清華的pre paper好像沒有。
玩具仍是不要搞了吧。能夠看xv6,或者看趙炯博士的0.12版linux分析,或者讀freebsd或者illumos這種註釋很清楚的源代碼
我給出的建議是:莫要貪心,想要一口吃個胖子。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,但這本書比較難啃,但值得推薦。
我上操做系統課的時候用的是Nachos,能夠看一下Nachos
我在讀大學的時候是努力試圖學習過linux源碼的,在機房裏打印出厚厚一疊紙,悶在計算機旁邊猛看了好幾天,飯也沒好好吃,那些紙的質量不太好,有股怪味,空着肚子鑽研,到後來聞那股味道,差點嘔吐,因而放棄,出去大吃了一頓。
這是上世紀末的事情了,那時其實水平還沒到,內心好奇,徹底是賴蛤蟆想吃天鵝肉。學習這個事情,仍是得按部就班的。
要想學深刻學習操做系統,推薦從這本書開始: Operatiing Systmes, Design and Implementation (by Tanenbaum, Woodhull),裏面有個用於教學的操做系統Minix。Linux的某些方面,如今還能夠找到Minix的影子。
我手裏的這本書,是第二版,如今書最新版是第三版。Minix 3.0,也已經有點難度了, X Window System都有了。http://www.minix3.org/
要是以爲仍是太複雜,還有個更簡單的GeekOS,http://geekos.sourceforge.net/
OS的設計是受限於硬件的,尤爲是CPU。當代OS的不一樣進程之間的內存保護,虛擬地址,都要經過硬件。因此對一個CPU的深入瞭解,必不可少。對於Intel的CPU,應該讀下面三本:
1. Intel Architecture Software Developer's Manual, Volume 1: Basic Architecture http://www.intel.com/design/PentiumII/manuals/243190.htm
2. Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual http://www.intel.com/design/PentiumII/manuals/243191.htm
3. Intel Architecture Software Developer’s Manual Volume 3: System Programming http://www.intel.com/design/PentiumII/manuals/243192.htm
尤爲是第三本,編OS必看,虛擬內存,內存保護的東西全在裏面。
操做系統裏面代碼最多的,實際是IO部分,理論很少,可事關重要。Mindshare出了一系列書,寫的很是深刻詳細。http://www.mindshare.com/
學彙編開始直接學CISC的指令集太費勁了,推薦先從RISC彙編開始,西方大學計算機專業走的也是這條路。能夠看的一本書是Introduction to RISC Assembly Language Programming,by John Waldron。裏面用的處理器MIPS,能夠下載個SPIM Simulator,在PC上跑。http://www.cs.wisc.edu/~larus/spim.html
Knuth老先生在The Art of Computer Programming一書裏的例子,都是彙編,如今用的虛擬機是訪RISC設計的,叫作MMIX,Knuth寫了本書,叫作MMIXware, A RISC Computer for the Third Millennium, 呵呵,口氣好大啊。
講計算機架構的兩本計算機學科經典書,是Patterson和Hennessy合寫的兩本:Computer Organization and Design: The Hardware/Software Interface 3rd edition,以及Computer Architecture, Fourth Edition: A Quantitative Approach
學彙編要注意一點,每一個彙編器,其語法都不同。在Windows下面寫彙編,微軟的Macro Assembler不是很合適,裏面的Macro太多,都遇上高級語言了。有個開源的Netwide Assembler, http://sourceforge.net/projects/nasm, 卻是挺不錯,推薦使用。
關於學習操做系統內核,若是不是非抱着Linux的話,BSD是個挺好的選擇。代碼的結構可能還清晰些。我有一臺FreeBSD服務器,基本很是滿意,有兩點不足,MySQL是針對Linux優化的,在FreeBSD下性能不夠好,可是根據Yahoo的人說(Yahoo用FreeBSD),FreeBSD最新版下用MySQL threading library從新編譯性能能夠接受了。Java也不盡如意,Sun 如今提供Java 5的binary給FreeBSD。但我在FreeBSD若是啓動Tomcat開的內存太大,啓動會失敗。
想看看FreeBSD的源碼,能夠看看這裏:http://www.leidinger.net/FreeBSD/src_docs/,裏面列的都是內核各個部分的Code Reference Manual。裏面那個講kernel的文件有23M,共2205頁,可見鑽研這些是件極爲費時費力的事情。
http://www.chinaunix.net/也有不少BSD的資料。如今主流操做系統,就兩你們了,一邊是微軟的以NT爲內核的Win2k/XP/2003/Vista,另外一邊是以UNIX爲根基的Linux/BSD/Solaris等等.Tanenbaum說過這麼一句話,操做系統是什麼呢,就是操做系統定義的API。學習Windows下的API,容易許多,資料全,另外Jeffrey Richter的Programming Application for MS Windows那本書寫的太好了,Process, Job, Thread, Fiber, Critical Section, Event, Waitable Timer, Semaphore, Mutex,Virtual Memory, IO,寫的很是詳盡清楚。要是Linux/BSD下面也有這麼一本書,該有多好啊。Linux, BSD裏面的線程,家家各有不一樣,把人搞得糊里糊塗。若是從研究操做系統是怎麼實現的,那麼正好反過來,Linxu/BSD/Solaris簡單明瞭多了.除了代碼公開,他們內部結構沒有Windows那麼複雜。Windows的源碼,要是成爲微軟的MVP,也是能夠看到的。Windows 2000的大部分源碼,還泄露出來了,在網上流傳了一陣子。我我的以爲搞應用的去學習編譯器回報可能更大,首先就是對語言瞭解很深刻,寫碼,讀碼容易。若是會了編譯器前臺技術,能夠本身寫個分析代碼的程序啊,那麼讀別人的碼不久容易不少。如今雖然有現成的源碼分析器,可是想一想你有個數據庫,一種是隻能使用別人寫好的界面,一種是能夠用SQL自由查找,哪一個好?若是學會了編譯器後臺技術,恭喜你,寫任何一行代碼都知道在計算機裏怎麼執行的,這是一種多麼自由自在的境界啊。