如何從零開始開發一個操作系統?

哈希安全


操作算是在軟件開發裡面功能非常齊全難度非常大的一個超級工程,目前國內掌握操縱系統技術的科技公司也是少的可憐,而且不完全是技術層面的東西了,還需要構建生態鏈,國內的阿里公司在這方面已經做過嘗試了,只能講不是很成功,主要開發出來了需要真的有人去使用,現在無論桌面的操作系統還是移動端的操作系統都有巨無霸存在,而且還是壟斷性質般的存在,現在華為手機因為安卓禁止使用服務導致國外的銷量下滑,現在華山一條路只能啟動一個自主的操作系統的研發,還在華為公司已經做了大量的準備,不至於這麼被動,但任重而道遠。

回到主題從零開始開發一個操作系統,本身就不是一個人能做的事情。這個工程量巨大,但從學習的角度可以研究一下如何完成一個簡化版的linux,記得剛學習C語言的時候基本語法剛學習完的時候,就去學校的圖書館借了一本linux內核深度剖析,覺得自己的C語言基礎玩的差不多,結果看了100多頁實在是堅持不下去了,所以編程的學習是一個長期積累的過程,只是學了一門編程語言距離真正的編程還得差得遠,編程的學習是一個長期積累的過程。

要製作最簡單的操作系統需要掌握的基礎,C語言,彙編語言以及常見的操作系統常識,真要仔細的描述就不是幾百字能夠描述清楚地,bootloader加載,內存管理,系統進程調度,中斷處理等等這些簡單的功能實現可能會比較簡單,融合在一起流暢的運行就不是那麼簡單的事情了,現在網絡上很多簡單的幾十行彙編代碼,其實就是讓大家找個感覺感受下自己製作個操作系統是什麼感覺,真正玩起來需要做的細節太多,都不是一個人能玩的事情。

從工作上講操作系統的定製主要在嵌入式領域用的比較多,嵌入式領域因為受到硬件的限制,需要對載入的系統進行定製,不需要全套新功能可能涉及到操作系統的定製,這點是有技術含量,現在還是有很多微小的嵌入式系統需要精細化的定製,當然linux內核在有些場景下也需要定製。

對於初學者需要開發一個操作系統的東西,需要儲備大量的理論知識,需要對計算機的系統運行原理都需要有所瞭解,需要的編程語言,彙編,C語言,需要程序的加載以及內存運行管理,中斷等等理論有一個深刻的瞭解,一般做這方面工作的需要經驗豐富的老程序員,涉及到底層動作經驗佔據非常重要的因素。

如果覺得對於linux內核比較感興趣,可以學習下linux齧合深度剖析,裡面對於初級的linux主要框架進行了分解,剖析到了每個功能以及內部的原理實現,對於深入瞭解操作系統有非常大的好處,學習任何東西首先要掌握一定的理論才能去實踐,在不懂得理論的基礎上再進行實踐是最好的方式。

希望能幫到你。


大學生編程指南


這個問題我只能那麼回答你:

如果你會製造芯片,那麼系統怎麼做都可以。

如果你用別的芯片開發系統,只能向別人買開源指令,不同芯片指令不同。

最後一種第三方面仿真系統,列如在WIN和安卓操作系統製造第二系統。

一個是獨立完全屬於自己,一個需要授權於人構造上要以他的規則來寫系統。最後一個系統中寫系統。不知道你想用那種方式做系統!

第一種可以完全按照的意思去規劃,同時與芯片設計同步,那麼所有指令等都在你手上,各種設計運算規格都是自己的,做起來思維比較清晰不會出現任何雜亂現象,如果你用第二種第三種寫系統,等會別人把一些暗碼給鎖定不告訴你,芯片無法完全釋放功能上運算當然大大折扣,同樣的配置別人比流暢幾十倍,你反而慢的不行。

零開始學習製作系統沒有深厚的經驗底功,至少5年左右基礎學習,因為它包含有串口,無線等。有想法但系統一個人是做不過來的,要團隊合作,一個負責設計結構,然後分工寫系統,一個寫顯示,一個寫音頻,一個寫運算,等等!代碼至少1萬條,每一條代碼都有一定的作用!希望你好好努力吧,一個人做不過來,還是老老實實的學習編程小軟件小遊戲,修改程序之類複製過來在加工利用。


與自然做鬥爭


只說一下我的看法,不全面,希望有所幫助。

假設是個人想從零開始開發一個操作系統,要注意三點:

  1. 興趣:一個個人小操作系統很難有商業競爭力,只有依靠個人興趣來完成

  2. 簡單:別想一口吃成胖子,先完成一個極簡操作系統就是成功

  3. 堅持:開發過程中,會遇到很多挫折,要能堅持學習和實踐下去


操作系統從簡單到複雜,差距極大。

如果是個人想從零開始開發一個操作系統,比較現實的是開發一個簡單系統。但無論有多簡單,都要做好投入大量精力的準備,當然,技術上的收穫也會很豐富。


有幾個簡單操作系統是帶有教學性質的,可以學習相關書籍,閱讀代碼,並嘗試自己實現,如:

  • µC/OS:極簡單、適用於單片機的實時操作系統(RTOS)

  • Minix:簡單的類UNIX操作系統,Linus的靈感和入門教程


其實有很多好項目都是個人或小團隊完成的,如Lua語言,Linux系統(早期)。夢想還是要有的,萬一實現了呢?


夏冬


學過單片機和彙編,推薦看一本書<30天自制操作系統>,看完就會寫了。大致的流程是調用BOIS中斷從磁盤的0扇區讀取程序加載到內存boot區,CPU就會開始執行,再調用BOIS的顯示中斷往顯存填充數據,就能顯示出來。切換到32位保護模式,加上內存分頁管理,進程調度管理,一個操作系統的雛形就完成了。當然要商用的話,基本不可能,硬件廠商不會為你的系統開發驅動,那系統也只是個玩具而已。


光明右使8787


在數學領域,0不是起點也不是終點,改革開放以來,我們的拿來主義一度盛行,靠買技術,買產品來模仿日子讓我們一度感覺良好,但每一次的全球技術升級我們都要再買人家丟下的技術,我們永遠都會落後一代或兩代,國家也發現了這個弊端,所以我們在買科技的時候組織專家進行逆向研究,在硬件領域我們有些能和人家齊頭並進了,一些能超出,但也遭到打壓,操作系統方面國家並沒有太重視,因為兩大操作系統基本覆蓋全球應用的運行,我們即使有操作系統也是國內可以,全球則不靈,因為話語權控制在美國公司手裡,但我們有必要去做,畢竟我們國家是最大的全球單一市場,如果所有國內手機都用我們的自有系統,你覺得,他們會不會低頭呢,我認為會,因為誰跟錢有仇


萬通建材401


從0開始,你心真大。其實沒必要,現在有開源的linux/unix類,有aosp,最關鍵的有應用生態


d238037885


不會從零開始,以當時技術儲備為基礎。


程傑副研究員


研究一下老前輩是如何成功研發“兩彈一星”的,研究透了,沒有中國人幹不成的事情。當然,首先是當官的必須無腐敗。


示範車


編程語言開始吧?


薏米印記


1、一套高水準的操作系統,就是一個社會的縮影,它要兼顧萬般需求、兼容各類客戶,它的穩定性、多功能性、兼容性、可擴展性這些看似矛盾的要求必須提現在一套軟件內,因此首先就要求研製者本身具備對社會萬象具備極高的理解力,要見多識廣,否則一個社會可能的需要什麼你都不清楚,又如何研發出一款可以滿足社會各類需求的軟件呢?不可能。

但很多社會本身就不發達、文化單一,那麼這個社會的需求與見識就必定有限,這就意味著一套成功的操作系統,只能在一個開放多元、高度發達社會、各類文化豐富多彩的社會內才可能被研製出來,因為一套操作系統其實就是一個社會的縮影,沒有極為豐富的見識、沒有千奇百怪的需求,你如何做出一套可以兼容這個社會99%的需求的產品?這就是常說的“你的見識決定了你的高度”。

2、其次是競爭的壓力,即便是在一個發達的社會中,各類需求要素都被你掌握了,但如果沒有貌似殘酷的競爭,沒有巨大的壓力,一套成功的系統也不可能被研製出來。

這就像戰爭一樣,沒有生與死的壓力,你個人的才華與潛能根本就不可能被髮揮出來。操作系統也是如此,如果你只是國家出面組織一幫人,關起門來埋頭研發,我敢說“十年也只是搞出一個四不像來”,因為根本就沒有在市場中被反覆的蹂躪、實證和PK過,不可能有好產品。只有在生與死的壓力下,才可能出好貨。

換言之: 只有在一個純粹市場經濟的環境中才可能競爭出一個好的操作系統。

3、我們知道,天才之火也要靠利益之油來維持,在軟件行業特別依靠對知識產權的尊重,必須依靠購買正版軟件,讓研發的公司有巨大的利益,願意持續投入,才能讓一套操作系統可以數十年的持續改進,維持高水準、高性能、高的兼容性,在一個盜版橫生的市場上,是不可能誕生一套高級的操作系統的,因為研發人員早就餓死了。





分享到:


相關文章: