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

於寒洛


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

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

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


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

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

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


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

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

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

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

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

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

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


石家莊陀螺科技


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

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

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

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

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

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

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

org 07c00h 開始玩吧!

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


主恩永銘


操作系統也有大有小,有簡單有複雜。大的如桌面級的,小的如路由器,單片機。

所以你應該首先知道自己的第一步目標該怎麼走了吧?

別看大部頭的教科書,那隻會讓你心態奔潰掉。

先給自己一個小目標:搞定一個單片機或者把你自己的路由器搞定。

彙編會嗎?C語言呢?不會的話先從基礎語言學起。這個難度不是太高,比較未來你是要搞定操作系統的大神。

那開始從單片機開始吧,自己網上買點基礎的開發板,這個也不貴。找些資料,代碼也不多。網上買板子,很多資料會附送。

到這一步,你就開始擼吧。實戰才是轉化腦動力的唯一途徑。當你感覺擼的差不多幹淨了,就開始進入下一階段吧。我相信經過這場實戰,你應該已經乾貨滿滿。對未來充滿憧憬。少年,向更高級別奮鬥吧。

每一階段,你的朋友圈都會刷新一次。打入更高級別的圈子,與更高級別的大神們共同戰鬥。

注意愛護自己的頭髮,它們總有一天會離你而去,因為它們在你那越來越聰明的腦袋上,壓力越來越大。

不要在這種問答類平臺上混,那隻會浪費你的時間,對於未來的男人,或者女人。時間就是生命。

對了,把英語一定要學好。畢竟很多大神和資料都是英語的。

相信自己,從現在開始,別放棄。翻過所有的高山,你會看到最美的風景 >>一位只混到單片機級別就放棄的失敗者忠告


八零蝸牛


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

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

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

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

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

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

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


鄭州小哥哥


這個要懂硬件,基礎是彙編語言,c++,操作系統跟應用軟件不一樣,要懂得控制硬件,最簡單的是怎麼控制一個二極管燈亮起,怎麼讓他關掉,怎麼讓閃兩次,然後滅掉!對的,這個就是最小系統,所謂的學習單片機


小程序輔助器


最起碼要大學本科計算機軟件相關專業,學過計算機原理,彙編和C語言,編譯原理,操作系統原理。自學或培訓出來的想寫一個真正意義上的操作系統,根本就是做夢。話又說回來,即使一不小心被你寫出來了,硬件驅動如何解決,那些硬件廠商不可能為了一個小眾系統給你開發驅動,所以最終也只是能玩玩而已,沒有生態。重複造輪子是愚蠢的。


光明右使8787


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


一顆豆芽哇


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


用戶3372871735244


1.精通處理器架構,比如x86,保護 分頁 異常 中斷 任務切換 ring0-3 GDT IDT

2.嫻熟的彙編及C語言功底

以上是最基本的兩條


職場風雷動


你先要讀過計算機專業本科,然後碩士,然後博士,然後當上中國第一計算機專家,然後院士,這樣了,就可以了嗎,不行,還差得遠,你需要建立一個研究操作系統的團隊,這個團隊要是把windows那夥人弄過來最好,然後你得建立一個實驗室,或者研究所什麼的,然後整個幾十年就差不多啦


分享到:


相關文章: