作為一名學生,是否應該去花較多的精力看linux內核的源碼呢?然後再重新造一個小型的輪子。
自己目前是大三學生,之前接觸較多的是後台開發,因為Web的核心是數據的交互,即IO的傳輸,所以帶著好奇去看了linux是如何實現IO的,發現一直會到驅動的相關實現,所以有一個小困惑,隨著技術的發展,似乎對底層的封裝越來越完善,我們是否應該花較多的精力去學習這些較為底層的知識呢,亦或是自己在重新造一個小型的輪子?
PS:自己正在學習,但是無法看清要學習它的原因。
首先要明確一點,重新造一個小型的輪子,你學到的不是這個關於這個輪子的知識,而是怎麼在造「輪子」的過程中搭卸「腳手架」的能力。當業界已經有比較成熟的解決方案之後,在這個領域搭卸腳手架的需求已經並不多了。反過來最為需要的是在理解已有方案上擴展應用的需求。
搭卸「腳手架」的能力在跨領域的時候有一定通用性,所以鍛煉這樣的能力也不是不可以。但是造「輪子」也並不是鍛煉搭卸「腳手架」的唯一方法。
我個人認為這是一個興趣和時間分配的平衡。如果你有其它感興趣的領域,就不要在 kernel 這樣的領域造輪子,只要深入研究成熟的輪子就行了。如果你實在沒有其它興趣,投入到造輪子里也是有一定收益的。What I cannot create, I do not understand.
平時工作就在 Linux 這個平台下,如果能造一個輪子理解 Linux 下面的各種機制,為什麼不呢?更何況題主才大三,有那麼多時間。。。 如果我回到大三,肯定會去造輪子的。只是 Linux 代碼那麼多的情況下,我應該不會去讀,而是選擇類似 GitHub - bringhurst/xv6: Unix v6 Ported to ANSI C, x86 的代碼來看,代碼量不大,麻雀雖小,五臟俱全。程序員三個大坑,99%跳進去都是死:
1)深入淺出MFC2)Linux內核源碼3)編譯原理為什麼還有1%,那是因為有的人就是天才,或者就是要做這方面的工作!代碼這種東西多看看沒壞處,但是要循序漸進,別看半個月都沒看懂。。。
這時間用來寫別的東西收益更大
屠龍之技,學了基本沒用。
一旦你神技大成,奈何天下無龍?又是何等的悲哀~~~還不如多練練殺牛、殺狗、殺雞...很有必要
6.828 / Fall 2014按照上面的課程再加上linux內核的源碼,理解Linux內核的各種系統花半年時間自己寫個內核出來有,隨著技術深入,一定會去涉及底層。因為你的很多設計要和底層實現契合才能效率最大化。並且造輪子的同時能讓你了解很多書面一兩句說不清,或者即便說清了你也不一定真正理解的問題。
天下皆是豬狗輩,爾卻欲練屠龍技
尤其是後台開發,難道通讀內核尤其是網路協議棧相關部分不是一個優秀程序員的必須的素養嗎, 讀這部分至少要明白瓶頸在哪裡,為什麼要這麼設計,有什麼優化的方式嗎,在短鏈接為主或是長連接為主,在延時或丟包高的場景下如何調優,在多核下如何優化(比如大於64核),等等等等。 可以說linux內核目前很多方面還是有相當多的問題,至於為什麼沒被修復這是有相當多的考慮。 因此讀什麼0.11,各種源碼分析但是完全不告訴你性能瓶頸為什麼這麼設計,並沒有什麼軟用。
當然你可以考慮多機水平擴展。 你的權衡結果完全取決於你的認知上限。
最後,如果你只是想做「架構師」,看內核並沒有什麼軟用。反對那些說以後不接觸底層不寫操作系統就不要看內核源碼的人!!!
內核源碼當然有必要學習啊,學了一堆操作系統理論,看看linux內核是如何實現的,以後上班不管搞什麼開發,學習什麼框架,遇到問題都能從內存啊,io啊,進程啊等多角度看待這些問題,尤其是搞伺服器端,解決大並發情況下遇到的問題都可以從內核的進程,線程,內存角度去分析,還有學大數據,什麼容器啊等等等等等,稍微給你說一下理論你就能立刻理解那玩意是幹什麼的了,如果覺得新版本的內核源碼太過於龐大,建議學linux0.12內核源碼,麻雀雖小五臟俱全,該有的都有了
想當年荷蘭阿姆斯特丹的Vrije大學計算機科學系的塔能鮑姆教授還拿MINIX系統源碼給學生講課呢,難道他的學生畢業後個個都能寫操作系統?如果你將來的工作不是去修改Linux內核的話,那你通過其他的方法來造輪子,也能達到同樣高的水平。
mit有個learn by doing的 os engineering課,完美滿足教學+實踐需要。不過有些東西比較老和簡單,拿來理解理解就好,畢竟不在一個正規的os項目組裡開發有人用的os,明白個概念就好。
如果是想通過造輪子去深入了解操作系統的運作原理,這確實是個不錯的想法。但是你想通過造輪子搞個大新聞去改變世界,你就歇了吧,連 Linus 當年寫 linux 時也只是找樂子。
我是沒看過linux內核源碼深入那些。
看了下《UCOS RTOS源碼及注釋》,對OS就有了個基本概念了。
然後想了下,我又不是專業CS,我一個EE死看Linux內核前途不明朗吧,於是果斷開始接觸音頻視頻等等………………傷其十指不如斷其一指。泛看Linux內核不如專研其中某一領域。我覺得如果以後看了信號系統,數字信號,自適應,小波,然後再看看圖形學,advanced lighting,PBRT什麼的之後,我還活著的話,看看內核也是可以的。要考慮投入和產出,現在技術那麼多,要理解要學習的東西那麼多,而人的時間是有限的,所以……PS:並不是否定看內核源代碼的作用,只是隨著技術的發展,封裝程只會度越來越高,看內核源代碼的必要性只會越來越低。其實,題主已經有了答案,只是不夠肯定而已。