{eval=Array;=+count(Array);}
Unix和Linux屬于大型操作系統,憑個人之力,根本不可能完成。以Linux系統為例,它的版權人林納斯.托瓦茲(Linux之父)是個天才程序員,沒日沒夜忙了差不多半年,寫出Linux的0.01版,也就是初級版本,你猜源代碼有多少?大概有1萬行。
Linux0.01版發布后,林納斯和全球成千上萬黑客(和現在喜歡在網上偷雞摸狗的黑客不同,那時的黑客都是程序員大牛,主要以改進電腦軟硬件性能為樂趣)一起修改完善。從1991年0.01版發布,到1994年Linux1.0正式版發布,三年時間,參與的程序員能輕松坐滿一個足球場,你猜代碼有多少行?一共17萬多行。
林納斯.托瓦茲(Linus Torvalds),Linux系統之父。你的手機、你家的電視機頂盒、你常取款的 ATM上的系統,都是基于 Linux 系統改造而來,沒有這個人,就不會有現在的開源軟件。
除非你認為自己的編程天賦和勤奮努力程度能碾壓上述大牛,那么可以試試以個人之力,寫一個Linux級別的操作系統。
更重要的是,當時還是486電腦當道的時代,操作系統遠沒有今天復雜,那怕是iOS和安卓這樣的公司化運作的操作系統項目,也并沒有從0寫起,而是“踩在前人的肩膀上爬梯子”,iOS的內核是Unix,安卓系統的內核是Linux,蘋果公司和谷歌公司在原有系統上“改擴建”,搞成了自己的東西。
肯·湯普森(Kenneth Thompson),C語言前身B語言的作者,Unix的發明人之一,程序員們的祖師爺。
也不是潑冷水,不同的操作系統有不同的應用領域,它是一個復雜的系統工程,只靠一個人的能力是無法實現的,精力能力都有限,需要掌握硬件,軟件的知識非常廣,例如,工程,通信,網絡,個人等等,至今為止沒有一個操作系統是一個人來完成的,也許你會破例。
不請自來。
要寫操作系統,你需要的是大量基礎知識,比如操作系統原理、保護模式、計算機組成原理、處理器架構、匯編語言、鏈接與裝載等等。
具體怎么BOOT啟動,怎么跳20號地址線,怎么切換到保護模式之類就不說了,你需要對操作系統有個全面的架構設計,中斷怎么響應,進程/線程怎么調度,內存怎么管理……,慢慢地,你會搞出一個操作系統雛形出來了,當然這里是指內核。
等到這差不多了,重頭戲來了,你要開發一些驅動程序,沒錯,那些硬件廠商可不會隨便為新的操作系統開發驅動的(或者適配)。什么顯卡驅動,什么文件系統(當然是創新的,不是NTFS,也不是EXT4之類),什么網卡驅動……又要拜托你開發了。
好了,經過多年不懈努力,假設你終于完成驅動層了。
系統也跑起來沒藍屏了(假設內核吐核時有藍屏)。
好的,重頭戲又來了,你這個操作系統還沒有一個應用軟件。比如上面沒有Photoshop,沒有Chrome,沒有QQ……沒有任何軟件啊,這可怎么辦呢?那些軟件廠商可不會隨便為新的操作系統開發軟件的(或者適配),咦,這句話好熟悉的感覺。
對了,這就是所謂的操作系統的“生態”系統,現在,已經不是編程能力的問題了,你面對的,是海量的生態。
能問這個問題,就代表你就寫不出來了,不是打擊你,建議放棄,浪費時間,你先看懂了Linux 內核早期版的源代碼后(網上有下載)再談這個話題。
其實沒那么復雜,我自己就寫過一款Rtos,簡單實現任務調度,任務間的通信,全部大概5000行代碼,操作系統現在分為微內核和巨內核,像Linux實現了用戶區和內核區隔開,內存機制需要Mmu支持,就非常復雜,想鴻蒙就實現了微內核,就做操作系統而言并不像外面人認為那樣門檻高,熟悉普遍的操作系統的一些機制就可
大家好,我是十年linux程序員,我認為:操作系統,說大可大,說小可小。
往大了說,一個操作系統并不單單是一個操作系統,而是一個生態。在這個生態的后面,包含了芯片生產產商、底層內核軟件提供者、還有各大發行版軟件公司。這些公司構成了一個完整的生態,在不同的層面上支持了操作系統的健康、穩定的向前發展。
但是往小了說,操作系統也沒有那么神秘,因為它就是一個具有特權模式的應用程序。linux最新的源碼因為加入了太多體系兼容的代碼,比較復雜,所以,不太容易看的出來。但是如果真想自己寫一個操作系統,可以參考linux0.11內核或者ucosII。
linux0.11內核是linux的創始版本,里面都是linux的核心,而沒有太多的驅動架構、KVM等非核心功能。所以,更適合研究、學習和模仿;而ucosII則更加精簡,只有幾十K,但是卻具備了一個操作系統的所有功能,ucosII的內核體系結構如下:
結合以上來看,如果要實現一個簡單的操作系統,需要:
以上這些功能都是操作系統的必要組成部分,如果要自己寫一個操作系統,則至少要實現以上這些部分。坦白來講,這個任務一點都不簡單,你需要具備的知識:
總之,自己寫一個操作系統挑戰是很大的,如果是基于學習的目的去寫一個操作系統,我認為是值得鼓勵的;但是如果是基于商業的考慮去自己寫一個操作系統,那么我認為是沒有意義的。
歡迎關注"技術簡說",帶你由淺入深、一步一步學習linux內核源碼。
首先你要活一百年,為什么這么說呢?我告訴你吧,windos系統一共有1億行代碼,而且還是全球5萬開發人員花了5年才寫出來的,如果你一個人想寫出這樣的系統至少需要100年的時間,而且你還得24小時不休息,這點你能做到嗎?
不過你想學習相關編程技術我建議你可以先學Java或者是C語言今后會對你職業生涯有幫助。
想要寫一個操作系統的人大部分都是帶著興趣玩,畢竟現在主流的操作系統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內核需要掌握的知識先從基本的編程語言和常見的操作系統運行的原理開始著手準備,希望能幫到你。
0
回答0
回答0
回答8
回答3
回答0
回答0
回答0
回答0
回答7
回答