想寫一個自己的操作系統,比如Unix或Linux,最起碼我需要具備些什麼?需要怎麼做?
- 2020 年 4 月 2 日
- 筆記
想要寫一個操作系統的人大部分都是帶着興趣玩,畢竟現在主流的操作系統windows,蘋果系統,linux系統屬於目前比較常見的系統,其中linux內核屬於開源可以看到其全部的代碼,很多研究操作系統都是以linux為參考的模型,畢竟開源的代碼研究起來也方便,但是對於個人來講要去寫一個操作系統難度可想而知了,曾經有個北京的同事已經工作了十幾年主要的精力就是在研究底層,是個瘋狂的linux內核研究者只要是是家裡沒事就會呆在公司加班研究linux內核,有時候一起吃飯討論研究linux內核的主要在哪塊,他講到其實linux內核已經不是當初設計的樣子了,現在的代碼的更新速度之快讓人髮指,在全球範圍內真正對於核心內核代碼具備修改能力的非常有限,而且已經被國外巨頭公司收到自己的公司作為儲備資源。

說到linux內核非常的關鍵代碼就是內存管理,這塊也是linux內核非常關鍵的代碼,每次和同事一起講到內存管理他就會兩眼放光,曾經有一次公司組織讓他給大家講下linux內核的內存管理,結果一口氣講了3個小時中間沒有任何的停歇,講的大家都快睡著了他還在激情澎湃在講着,說到內存管理他能一口氣講3天3夜,說到linux代碼的貢獻者,大部分可能是對一些驅動細節或者測試用例的提交,這些本身的技術含量不是很大但是需要遵守裏面的代碼規範,一旦不規範連基本的機器檢測都通過不了,雖然看起來是開源的社區對於代碼規範要求也是極其嚴格的。

說到每次研究linux內核的心得,最大的快樂在於看懂一行裏面核心代碼的設計意圖,能夠看懂linux核心代碼的為什麼要這麼實現就已經代表水平非常不錯的人了,倒不是linux內核代碼有多深奧,關鍵需要對於內核的工作原理以及常見的知識有足量的儲備,當然如果長期跟蹤代碼實現的規律可能研究起來就比較順暢了,如果短時間內想徹底的看明白還是存在非常大的難度的,所以想要研究一個linux內核的代碼,建議現在linux內核社區浸泡一段時間,然後了解周圍的基本知識,當然首先要具備一定程度的編程能力。

對於操作系統來講本質還是一個軟件產品,但是又有其特殊性屬於給別的軟件產品提供開發的環境,所以對於硬件資源支配以及用戶的行為最貼近的軟件系統了,由於用戶體驗極強所以其開發語言需要在性能上極強,操作系統主要的開發語言有C語言和彙編語言,很多人在網絡上喊着C語言已經過時了,這些都是只看到表面的現象,只不過底層的語言不像之前顯得那麼重要了,但是很多軟件系統的底層還是離不開C語言,而且像操作系統這麼繁雜的工程C語言也是主力軍,可以預見在未來C語言在應用級別的開發在減少,但是對於底層的維護能力還是在加強,大家都跑去開發高級語言了,總得需要有人來維護底層的而且對於維護和修改能力還是非常高,真正掌握高技巧的C語言能力的人還是照樣在編程市場拿高薪。

由於操作系統功能太過複雜所以真要想要玩轉linux內核建議看一本《linux內核完全剖析基於0.12內核》的書籍,專門抽取了早期的linux內核的版本在逐行講解的一本書,裏面詳細的介紹了linux內核主要功能是如何實現的,以及為什麼要這麼去實現,但是由於歷史太過久遠不要企圖和現在的linux內核做對比,中間優化迭代的版本太多了多的會讓你懷疑人生,所以不要企圖去了解其中的來龍去脈,還是先從基本的原理入手去解決,對於linux內核需要掌握的知識先從基本的編程語言和常見的操作系統運行的原理開始着手準備,希望能幫到你。