{eval=Array;=+count(Array);}
Unix和Linux屬于大型操作系統(tǒng),憑個人之力,根本不可能完成。以Linux系統(tǒng)為例,它的版權(quán)人林納斯.托瓦茲(Linux之父)是個天才程序員,沒日沒夜忙了差不多半年,寫出Linux的0.01版,也就是初級版本,你猜源代碼有多少?大概有1萬行。
Linux0.01版發(fā)布后,林納斯和全球成千上萬黑客(和現(xiàn)在喜歡在網(wǎng)上偷雞摸狗的黑客不同,那時的黑客都是程序員大牛,主要以改進電腦軟硬件性能為樂趣)一起修改完善。從1991年0.01版發(fā)布,到1994年Linux1.0正式版發(fā)布,三年時間,參與的程序員能輕松坐滿一個足球場,你猜代碼有多少行?一共17萬多行。
林納斯.托瓦茲(Linus Torvalds),Linux系統(tǒng)之父。你的手機、你家的電視機頂盒、你常取款的 ATM上的系統(tǒng),都是基于 Linux 系統(tǒng)改造而來,沒有這個人,就不會有現(xiàn)在的開源軟件。
除非你認為自己的編程天賦和勤奮努力程度能碾壓上述大牛,那么可以試試以個人之力,寫一個Linux級別的操作系統(tǒng)。
更重要的是,當(dāng)時還是486電腦當(dāng)?shù)赖臅r代,操作系統(tǒng)遠沒有今天復(fù)雜,那怕是iOS和安卓這樣的公司化運作的操作系統(tǒng)項目,也并沒有從0寫起,而是“踩在前人的肩膀上爬梯子”,iOS的內(nèi)核是Unix,安卓系統(tǒng)的內(nèi)核是Linux,蘋果公司和谷歌公司在原有系統(tǒng)上“改擴建”,搞成了自己的東西。
肯·湯普森(Kenneth Thompson),C語言前身B語言的作者,Unix的發(fā)明人之一,程序員們的祖師爺。
也不是潑冷水,不同的操作系統(tǒng)有不同的應(yīng)用領(lǐng)域,它是一個復(fù)雜的系統(tǒng)工程,只靠一個人的能力是無法實現(xiàn)的,精力能力都有限,需要掌握硬件,軟件的知識非常廣,例如,工程,通信,網(wǎng)絡(luò),個人等等,至今為止沒有一個操作系統(tǒng)是一個人來完成的,也許你會破例。
不請自來。
要寫操作系統(tǒng),你需要的是大量基礎(chǔ)知識,比如操作系統(tǒng)原理、保護模式、計算機組成原理、處理器架構(gòu)、匯編語言、鏈接與裝載等等。
具體怎么BOOT啟動,怎么跳20號地址線,怎么切換到保護模式之類就不說了,你需要對操作系統(tǒng)有個全面的架構(gòu)設(shè)計,中斷怎么響應(yīng),進程/線程怎么調(diào)度,內(nèi)存怎么管理……,慢慢地,你會搞出一個操作系統(tǒng)雛形出來了,當(dāng)然這里是指內(nèi)核。
等到這差不多了,重頭戲來了,你要開發(fā)一些驅(qū)動程序,沒錯,那些硬件廠商可不會隨便為新的操作系統(tǒng)開發(fā)驅(qū)動的(或者適配)。什么顯卡驅(qū)動,什么文件系統(tǒng)(當(dāng)然是創(chuàng)新的,不是NTFS,也不是EXT4之類),什么網(wǎng)卡驅(qū)動……又要拜托你開發(fā)了。
好了,經(jīng)過多年不懈努力,假設(shè)你終于完成驅(qū)動層了。
系統(tǒng)也跑起來沒藍屏了(假設(shè)內(nèi)核吐核時有藍屏)。
好的,重頭戲又來了,你這個操作系統(tǒng)還沒有一個應(yīng)用軟件。比如上面沒有Photoshop,沒有Chrome,沒有QQ……沒有任何軟件啊,這可怎么辦呢?那些軟件廠商可不會隨便為新的操作系統(tǒng)開發(fā)軟件的(或者適配),咦,這句話好熟悉的感覺。
對了,這就是所謂的操作系統(tǒng)的“生態(tài)”系統(tǒng),現(xiàn)在,已經(jīng)不是編程能力的問題了,你面對的,是海量的生態(tài)。
能問這個問題,就代表你就寫不出來了,不是打擊你,建議放棄,浪費時間,你先看懂了Linux 內(nèi)核早期版的源代碼后(網(wǎng)上有下載)再談這個話題。
其實沒那么復(fù)雜,我自己就寫過一款Rtos,簡單實現(xiàn)任務(wù)調(diào)度,任務(wù)間的通信,全部大概5000行代碼,操作系統(tǒng)現(xiàn)在分為微內(nèi)核和巨內(nèi)核,像Linux實現(xiàn)了用戶區(qū)和內(nèi)核區(qū)隔開,內(nèi)存機制需要Mmu支持,就非常復(fù)雜,想鴻蒙就實現(xiàn)了微內(nèi)核,就做操作系統(tǒng)而言并不像外面人認為那樣門檻高,熟悉普遍的操作系統(tǒng)的一些機制就可
大家好,我是十年linux程序員,我認為:操作系統(tǒng),說大可大,說小可小。
往大了說,一個操作系統(tǒng)并不單單是一個操作系統(tǒng),而是一個生態(tài)。在這個生態(tài)的后面,包含了芯片生產(chǎn)產(chǎn)商、底層內(nèi)核軟件提供者、還有各大發(fā)行版軟件公司。這些公司構(gòu)成了一個完整的生態(tài),在不同的層面上支持了操作系統(tǒng)的健康、穩(wěn)定的向前發(fā)展。
但是往小了說,操作系統(tǒng)也沒有那么神秘,因為它就是一個具有特權(quán)模式的應(yīng)用程序。linux最新的源碼因為加入了太多體系兼容的代碼,比較復(fù)雜,所以,不太容易看的出來。但是如果真想自己寫一個操作系統(tǒng),可以參考linux0.11內(nèi)核或者ucosII。
linux0.11內(nèi)核是linux的創(chuàng)始版本,里面都是linux的核心,而沒有太多的驅(qū)動架構(gòu)、KVM等非核心功能。所以,更適合研究、學(xué)習(xí)和模仿;而ucosII則更加精簡,只有幾十K,但是卻具備了一個操作系統(tǒng)的所有功能,ucosII的內(nèi)核體系結(jié)構(gòu)如下:
結(jié)合以上來看,如果要實現(xiàn)一個簡單的操作系統(tǒng),需要:
以上這些功能都是操作系統(tǒng)的必要組成部分,如果要自己寫一個操作系統(tǒng),則至少要實現(xiàn)以上這些部分。坦白來講,這個任務(wù)一點都不簡單,你需要具備的知識:
總之,自己寫一個操作系統(tǒng)挑戰(zhàn)是很大的,如果是基于學(xué)習(xí)的目的去寫一個操作系統(tǒng),我認為是值得鼓勵的;但是如果是基于商業(yè)的考慮去自己寫一個操作系統(tǒng),那么我認為是沒有意義的。
歡迎關(guān)注"技術(shù)簡說",帶你由淺入深、一步一步學(xué)習(xí)linux內(nèi)核源碼。
首先你要活一百年,為什么這么說呢?我告訴你吧,windos系統(tǒng)一共有1億行代碼,而且還是全球5萬開發(fā)人員花了5年才寫出來的,如果你一個人想寫出這樣的系統(tǒng)至少需要100年的時間,而且你還得24小時不休息,這點你能做到嗎?
不過你想學(xué)習(xí)相關(guān)編程技術(shù)我建議你可以先學(xué)Java或者是C語言今后會對你職業(yè)生涯有幫助。
想要寫一個操作系統(tǒng)的人大部分都是帶著興趣玩,畢竟現(xiàn)在主流的操作系統(tǒng)windows,蘋果系統(tǒng),linux系統(tǒng)屬于目前比較常見的系統(tǒng),其中l(wèi)inux內(nèi)核屬于開源可以看到其全部的代碼,很多研究操作系統(tǒng)都是以linux為參考的模型,畢竟開源的代碼研究起來也方便,但是對于個人來講要去寫一個操作系統(tǒng)難度可想而知了,曾經(jīng)有個北京的同事已經(jīng)工作了十幾年主要的精力就是在研究底層,是個瘋狂的linux內(nèi)核研究者只要是是家里沒事就會呆在公司加班研究linux內(nèi)核,有時候一起吃飯討論研究linux內(nèi)核的主要在哪塊,他講到其實linux內(nèi)核已經(jīng)不是當(dāng)初設(shè)計的樣子了,現(xiàn)在的代碼的更新速度之快讓人發(fā)指,在全球范圍內(nèi)真正對于核心內(nèi)核代碼具備修改能力的非常有限,而且已經(jīng)被國外巨頭公司收到自己的公司作為儲備資源。
說到linux內(nèi)核非常的關(guān)鍵代碼就是內(nèi)存管理,這塊也是linux內(nèi)核非常關(guān)鍵的代碼,每次和同事一起講到內(nèi)存管理他就會兩眼放光,曾經(jīng)有一次公司組織讓他給大家講下linux內(nèi)核的內(nèi)存管理,結(jié)果一口氣講了3個小時中間沒有任何的停歇,講的大家都快睡著了他還在激情澎湃在講著,說到內(nèi)存管理他能一口氣講3天3夜,說到linux代碼的貢獻者,大部分可能是對一些驅(qū)動細節(jié)或者測試用例的提交,這些本身的技術(shù)含量不是很大但是需要遵守里面的代碼規(guī)范,一旦不規(guī)范連基本的機器檢測都通過不了,雖然看起來是開源的社區(qū)對于代碼規(guī)范要求也是極其嚴(yán)格的。
說到每次研究linux內(nèi)核的心得,最大的快樂在于看懂一行里面核心代碼的設(shè)計意圖,能夠看懂linux核心代碼的為什么要這么實現(xiàn)就已經(jīng)代表水平非常不錯的人了,倒不是linux內(nèi)核代碼有多深奧,關(guān)鍵需要對于內(nèi)核的工作原理以及常見的知識有足量的儲備,當(dāng)然如果長期跟蹤代碼實現(xiàn)的規(guī)律可能研究起來就比較順暢了,如果短時間內(nèi)想徹底的看明白還是存在非常大的難度的,所以想要研究一個linux內(nèi)核的代碼,建議現(xiàn)在linux內(nèi)核社區(qū)浸泡一段時間,然后了解周圍的基本知識,當(dāng)然首先要具備一定程度的編程能力。
對于操作系統(tǒng)來講本質(zhì)還是一個軟件產(chǎn)品,但是又有其特殊性屬于給別的軟件產(chǎn)品提供開發(fā)的環(huán)境,所以對于硬件資源支配以及用戶的行為最貼近的軟件系統(tǒng)了,由于用戶體驗極強所以其開發(fā)語言需要在性能上極強,操作系統(tǒng)主要的開發(fā)語言有C語言和匯編語言,很多人在網(wǎng)絡(luò)上喊著C語言已經(jīng)過時了,這些都是只看到表面的現(xiàn)象,只不過底層的語言不像之前顯得那么重要了,但是很多軟件系統(tǒng)的底層還是離不開C語言,而且像操作系統(tǒng)這么繁雜的工程C語言也是主力軍,可以預(yù)見在未來C語言在應(yīng)用級別的開發(fā)在減少,但是對于底層的維護能力還是在加強,大家都跑去開發(fā)高級語言了,總得需要有人來維護底層的而且對于維護和修改能力還是非常高,真正掌握高技巧的C語言能力的人還是照樣在編程市場拿高薪。
由于操作系統(tǒng)功能太過復(fù)雜所以真要想要玩轉(zhuǎn)linux內(nèi)核建議看一本《linux內(nèi)核完全剖析基于0.12內(nèi)核》的書籍,專門抽取了早期的linux內(nèi)核的版本在逐行講解的一本書,里面詳細的介紹了linux內(nèi)核主要功能是如何實現(xiàn)的,以及為什么要這么去實現(xiàn),但是由于歷史太過久遠不要企圖和現(xiàn)在的linux內(nèi)核做對比,中間優(yōu)化迭代的版本太多了多的會讓你懷疑人生,所以不要企圖去了解其中的來龍去脈,還是先從基本的原理入手去解決,對于linux內(nèi)核需要掌握的知識先從基本的編程語言和常見的操作系統(tǒng)運行的原理開始著手準(zhǔn)備,希望能幫到你。
看這兩本書,一本《操作系統(tǒng):原理與精髓》,另一本《操作系統(tǒng):設(shè)計與實現(xiàn)》。后一本附minix 操作系統(tǒng)源代碼。
你唯一要做的就是:睡覺。
在睡夢中,也許你能出來個DreamUnix操作系統(tǒng)。
然后,一炮走紅!
然后,我們天天在你的操作系統(tǒng)里夢游!
0
回答0
回答0
回答8
回答3
回答0
回答0
回答0
回答0
回答7
回答