{eval=Array;=+count(Array);}

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄Q & A COLUMN

我想寫一個自己的操作系統,比如Unix或Linux,最起碼我需要具備些什么?然后我需要怎么做?

周國輝周國輝 回答0 收藏1
收藏問題

10條回答

lncwwn

lncwwn

回答于2022-06-27 17:20

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的發明人之一,程序員們的祖師爺。



當然,如果不是要寫Linux這樣的大型操作系統,就是想寫來玩玩,比如搞個mini的,還是有可操作性的:

  1. 建議從最基礎的玩起,先寫監控程序(操作系統的原型),僅具有加載程序和運行程序的功能。
  2. 監控程序玩熟練之后,可以寫用于單片機的微型操作系統,包含控制程序、編譯器和簡單的應用程序。

個人要熟練寫操作系統,大致說來需要具備下列素質:

  1. 熟練運用C語言編程;
  2. 會匯編語言;
  3. 了解基本的硬件知識;
  4. 會寫硬件驅動程序;
  5. 會軟件架構設計;

不過,上面這些都精通了,隨便去互聯網大廠拿個七八十萬年薪的offer是分分鐘的事,何苦自己折騰!

評論0 贊同0
  •  加載中...
mushang

mushang

回答于2022-06-27 17:20

也不是潑冷水,不同的操作系統有不同的應用領域,它是一個復雜的系統工程,只靠一個人的能力是無法實現的,精力能力都有限,需要掌握硬件,軟件的知識非常廣,例如,工程,通信,網絡,個人等等,至今為止沒有一個操作系統是一個人來完成的,也許你會破例。

評論0 贊同0
  •  加載中...
smartlion

smartlion

回答于2022-06-27 17:20

不請自來。

要寫操作系統,你需要的是大量基礎知識,比如操作系統原理、保護模式、計算機組成原理、處理器架構、匯編語言、鏈接與裝載等等。

具體怎么BOOT啟動,怎么跳20號地址線,怎么切換到保護模式之類就不說了,你需要對操作系統有個全面的架構設計,中斷怎么響應,進程/線程怎么調度,內存怎么管理……,慢慢地,你會搞出一個操作系統雛形出來了,當然這里是指內核。

等到這差不多了,重頭戲來了,你要開發一些驅動程序,沒錯,那些硬件廠商可不會隨便為新的操作系統開發驅動的(或者適配)。什么顯卡驅動,什么文件系統(當然是創新的,不是NTFS,也不是EXT4之類),什么網卡驅動……又要拜托你開發了。

好了,經過多年不懈努力,假設你終于完成驅動層了。

系統也跑起來沒藍屏了(假設內核吐核時有藍屏)。

好的,重頭戲又來了,你這個操作系統還沒有一個應用軟件。比如上面沒有Photoshop,沒有Chrome,沒有QQ……沒有任何軟件啊,這可怎么辦呢?那些軟件廠商可不會隨便為新的操作系統開發軟件的(或者適配),咦,這句話好熟悉的感覺。

對了,這就是所謂的操作系統的“生態”系統,現在,已經不是編程能力的問題了,你面對的,是海量的生態。

評論0 贊同0
  •  加載中...
gaara

gaara

回答于2022-06-27 17:20

能問這個問題,就代表你就寫不出來了,不是打擊你,建議放棄,浪費時間,你先看懂了Linux 內核早期版的源代碼后(網上有下載)再談這個話題。

評論0 贊同0
  •  加載中...
Jeffrrey

Jeffrrey

回答于2022-06-27 17:20

其實沒那么復雜,我自己就寫過一款Rtos,簡單實現任務調度,任務間的通信,全部大概5000行代碼,操作系統現在分為微內核和巨內核,像Linux實現了用戶區和內核區隔開,內存機制需要Mmu支持,就非常復雜,想鴻蒙就實現了微內核,就做操作系統而言并不像外面人認為那樣門檻高,熟悉普遍的操作系統的一些機制就可

評論0 贊同0
  •  加載中...
defcon

defcon

回答于2022-06-27 17:20

大家好,我是十年linux程序員,我認為:操作系統,說大可大,說小可小。

往大了說,一個操作系統并不單單是一個操作系統,而是一個生態。在這個生態的后面,包含了芯片生產產商、底層內核軟件提供者、還有各大發行版軟件公司。這些公司構成了一個完整的生態,在不同的層面上支持了操作系統的健康、穩定的向前發展。

但是往小了說,操作系統也沒有那么神秘,因為它就是一個具有特權模式的應用程序。linux最新的源碼因為加入了太多體系兼容的代碼,比較復雜,所以,不太容易看的出來。但是如果真想自己寫一個操作系統,可以參考linux0.11內核或者ucosII。

linux0.11內核是linux的創始版本,里面都是linux的核心,而沒有太多的驅動架構、KVM等非核心功能。所以,更適合研究、學習和模仿;而ucosII則更加精簡,只有幾十K,但是卻具備了一個操作系統的所有功能,ucosII的內核體系結構如下:


結合以上來看,如果要實現一個簡單的操作系統,需要:

  1. 實現中斷部分,中斷是系統的核心,時鐘的產生需要中斷,而時鐘
  2. 實現時鐘部分,時鐘是操作系統的心臟和脈搏。人無心臟則怠,操作系統無時鐘則運不轉;
  3. 實現內存管理部分,這樣程序才有了運行的載體。
  4. 進程調度器,這是應用程序運行的基礎
  5. 存儲+文件系統
  6. (可選)外設驅動架構,如果你的操作系統要支持各種各樣的外設,那么可能要為不同類型的外設編寫不同的驅動架構或者模型,這個部分非核心功能,所以是可選的。

以上這些功能都是操作系統的必要組成部分,如果要自己寫一個操作系統,則至少要實現以上這些部分。坦白來講,這個任務一點都不簡單,你需要具備的知識:

  • 匯編知識(x86匯編和arm匯編不同)
  • 處理器體系架構知識(不同處理器,對中斷等的實現是不同的)
  • 精通C語言(基于效率考慮,操作系統幾乎全部都是C寫的)
  • 精通操作系統知識,此處細節繁多,可參考任何一本關于操作系統原理的書籍

總之,自己寫一個操作系統挑戰是很大的,如果是基于學習的目的去寫一個操作系統,我認為是值得鼓勵的;但是如果是基于商業的考慮去自己寫一個操作系統,那么我認為是沒有意義的。

歡迎關注"技術簡說",帶你由淺入深、一步一步學習linux內核源碼。

評論0 贊同0
  •  加載中...
NicolasHe

NicolasHe

回答于2022-06-27 17:20

首先你要活一百年,為什么這么說呢?我告訴你吧,windos系統一共有1億行代碼,而且還是全球5萬開發人員花了5年才寫出來的,如果你一個人想寫出這樣的系統至少需要100年的時間,而且你還得24小時不休息,這點你能做到嗎?

不過你想學習相關編程技術我建議你可以先學Java或者是C語言今后會對你職業生涯有幫助。

評論0 贊同0
  •  加載中...
liaoyg8023

liaoyg8023

回答于2022-06-27 17:20

想要寫一個操作系統的人大部分都是帶著興趣玩,畢竟現在主流的操作系統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
  •  加載中...
Developer

Developer

回答于2022-06-27 17:20

看這兩本書,一本《操作系統:原理與精髓》,另一本《操作系統:設計與實現》。后一本附minix 操作系統源代碼。

評論0 贊同0
  •  加載中...
vpants

vpants

回答于2022-06-27 17:20

你唯一要做的就是:睡覺。

在睡夢中,也許你能出來個DreamUnix操作系統。

然后,一炮走紅!

然后,我們天天在你的操作系統里夢游!


評論0 贊同0
  •  加載中...

最新活動

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關注的人
向幫助了您的網友說句感謝的話吧!
付費偷看金額在0.1-10元之間
<