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

於寒洛


一個操作系統就算早期的XP系統,安裝完畢有好幾G,換算成代碼都不知道有多少字符,估計你一個人光把字符敲出來這輩子都無法完成。更不要說去思考怎麼寫程序了。


管慶林2


大概翻了一下回答,絕大多數都是些沒寫過操作系統,估計連操作系統教材都沒通讀過的扯雞蛋沒用的建議。寫個能跑起來的操作系統沒那麼難。我好多年前就玩過。在這裡我給你整點乾的。

你需要熟悉x86彙編和C語言就足夠了。

C語言至少要有單個程序5000-8000行以上的編程經驗,否則你很難駕馭即便是玩具規模的操作系統代碼量。彙編需要熟悉保護模式。模式的轉換,特權級,分頁等等等等。

我當時彙編看的楊季文的《80X86彙編語言程序設計教程》。記得他花了大篇幅講保護模式的。

然後《操作系統設計與實現》這是必須要看的。但是理論艱深、沒有基礎的人看之前需要有鋪墊,我路子野,沒正經上過大學。全靠自學。所以當時看了好些別的書。走了彎路。但是現在是信息時代,知識大爆炸。絕世武功秘籍到處都是。就看你能不能耐住性子克服浮躁習得一身本領。

無意中翻過一本書《一個操作系統的實現》寫得相當用心。這本書作為《操作系統設計與實現》的鋪墊再好沒有了。而且這本書本身就作為這個目的寫的。另外推薦《返璞歸真UNIX技術內幕》這也是一本好書。主要講解unix版本6的內核代碼,講得非常到位,覺得值得一看。在你實現你自己的操作系統的過程中應該會遇到的疑問這裡基本上都帶著講到了。

有了這三本書在手邊實現基本的內存管理,輸入輸出,進程間通信,簡單文件系統應該不會再有什麼大問題了。

org 07c00h 開始玩吧!

別把這太當個事兒,寫操作系統很大程度就是玩。怎麼高興怎麼來。要記住,你在實現過程中可能會遇到的各種問題在好久好久以前都已經被大牛們解決掉了。信息時代,你怕啥啊?就是玩。玩的高興。


主恩永銘


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


我的名字一直有人


幾個人寫操作系統?自己的操作系統?一個人寫出來的不叫操作系統,對於操作系統的概念你可以借鑑一下《操作系統原理》一書。我們退後100步,假如寫出來了,能用來幹嘛?能用嗎?Windows7 幾萬人幾千萬條代碼,現在都還在改補丁,在更新,說明還是不足。再退一步,假如可以用,獨立?你在現在這個互聯網和馬上要到來的物聯網時代,獨立這個詞是大忌!


一顆豆芽哇


恭喜你選擇了一個光榮並且艱鉅的任務!

如果你純粹是玩,這比較簡單,網上很多教程講到怎麼構建一個操作系統,並且有很多開源的代碼可以嘗試閱讀改寫;如果要在實際中應用操作系統,形成一個產品,推向市場,這條路是漫長而艱辛的。

現代計算機系統由一個或者多個處理器、主存、磁盤、打印機、鍵盤、鼠標、顯示器、網絡接口以及各種輸入輸出設備構成的。一般而言,現代計算機系統是一個複雜系統。如果每位程序員都不得不掌握系統的所有細節,那就不可能再編寫代碼了,所以計算機安裝了一層軟件,稱為操作系統,操作系統既作為機器的擴展,面向用戶提供抽象的功能,也管理計算機的軟硬件。


計算機的類型,操作系統可以分為大型機操作系統、服務器操作系統、多處理器操作系統、個人計算機操作系統、掌上計算機操作系統、嵌入式操作系統、傳感器節點操作系統、實時操作系統、智能卡操作系統等。

如果想要自己開發操作系統,首先要對計算機的硬件結構有大體的掌握,對處理器、存儲器、硬盤、I/O設備、總線有比較深刻的理解,熟悉進程、地址空間、文件、輸入/輸出、保護、SHELL、系統調用等操作系統的基本概念,另外還要掌握數據結構和算法的基本邏輯。當然,懂彙編語言和C語言是必須的。

在掌握這些之後,就可以開發操作系統了。


第一,設計操作系統的目標。即為什麼要設計這個操作系統,要解決什麼樣問題,用在什麼地方,要具備什麼性能,客戶是誰。

第二,功能模塊的設計和接口的設計。編寫一個操作系統並不容易,從接口開始是最好的起點,除了主要的系統調用接口,還有其他的接口。比如某些程序員需要編寫插入到操作系統中的設備驅動程序這樣的接口設計。

第三、系統的實現。系統的結構,機制與策略、正交性、命名、綁定的時機、靜態與動態的結構都是需要考慮的問題。

第四、還要考慮系統的性能,考慮什麼應該優化,空間-時間的權衡,高速緩存、安全性等等。

第五,考慮開發團隊的管理與協調。帶領團隊開發操作系統。

操作系統是大型、複雜和長壽命的程序。LINUX和WINDOWS操作系統的源代碼有500萬行,相當於16K,1000頁厚的一本書,所以要開發一個產品級別的大型操作系統絕非易事。

祝你在學習的路上不斷成功,不斷努力實現自己的夢想,實現人生價值。


石家莊陀螺科技


你起碼得是個教授,你得會設計io,阻塞,非阻塞,單路複用,得分情況,你得懂內存和cpu交互,你要設計內存模型,如何做到多用戶,多任務,多線程,你得懂網絡,那些底層協議得自己搞,至於代碼,只是工具,你用什麼都可以,但是你要想有點競爭力,那你只用用接近底層的彙編和c,我們碼農平時研究的什麼數據結構算法設計模式,你得當吃飯隨便用,你有這水平麼


殺死那個青白江人


你問問李納斯脫襪子,他就寫了一個內核,其他周邊的程序都是開源組織貢獻出來的,是全世界開源愛好的結晶。

你要寫操作系統,是要在馮諾依曼結構上寫呢,還是推倒了,重新設計計算機,不過量子計算機出來後,很有可能顛覆原來的設計,那微軟的windows就開始落寞了,linux以及前生都將會變革,不過想要打倒它們你必須有產品,有超前的設計,就是一個字“快”,處理速度比現在快個幾十億億億億循環,被,人們才會接受你的產品,才能顛覆他們。

把計算機的結構重新設計出來,然而這只是第一步,第二步找材料,材料對於產品研發至關重要,比如說導電性能,磁場性能,耐高溫,等等,地球上沒有的話只能等,天上掉餡兒餅了,哪天掉個隕石什麼的,

硬件都設計好了後,開始研發語言,因為你的計算機重新設計了,所以編程語言也需要重新定義,C語言已經算最好的了,你可以設計出D語言,E語言,要比C或者彙編快更多,特性更強。

語言設計出來後,就開始設計操作系統了,操作系統就是虛擬在硬件的一個入口,協調各個硬件溝通交流,把結果返回過來。

第四步完事後一個完整的產品就設計出來了,但你要把眼光放高點,因為你的產品不是賣給別人,不是讓它普及,是要打出地球,打太空仗,你要把計算機送到太空去,多多益善,因為計算能力超前,光速也不在話下,所以你可以通過量子,讓時空扭曲,輕而易舉到另一個星球,這樣的話發現下一個文明也就是輕而易舉的事了,你要記住,等你找到適合人類居住的新環境不要忘了我,路我已經給你鋪好了,孩子快動手吧。


fleeing_alone


不請自來。

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

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

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

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

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

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

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


超級碼農衝呀


1.取個響亮的名字,比如鴻蒙。

2.githab下載linux源碼。

3.找個半吊子c coder改ui.

搞定


普羅米修斯啊


既然你想寫,那你必須先要買一支水筆,哦對了,至少得買兩支,一支黑色的,用於寫,另外一支紅色的,用於改,因為估計你在寫的過程中難免會出錯。然後你還得買一些白紙,俗話說白紙黑字嘛,50張估計不夠用,至少你得買100張,寫操作系統畢竟是大工程,多買幾張也不算浪費,A4、B5兩種規格都可以,B5的便宜一些,但是可寫的字少啊,A4的貴一些但能寫更多的字,這要看你的預算有多少了,你家要是有礦,大可不必糾結,直接買A4就可以了。但是Unix和Linux你就別寫了,因為已經有人寫了,但也沒有關係你可以寫Unix-2或Linux-2,將來你寫完以後發佈時,可以這樣說:我的操作系統的最大特點就是“2”。


分享到:


相關文章: