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

哈希安全


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

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

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

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

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

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

希望能幫到你。


大學生編程指南


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

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

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

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

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


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

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


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

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

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


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


夏冬


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


光明右使8787


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

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

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

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

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

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

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


與自然做鬥爭


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


萬通建材401


軟盤讀盤D3

簡單的寫顯存-圖形顯示D4

鼠標,鍵盤驅動D6-D8

內存管理(動態分區+相鄰回收)D9,10

timer+FIFO長緩衝區(鏈表)+中斷號管理時間片D12-13

分辨率提高-圖形驅動D14

多任務處理(優先級+等長時間片?)D15-D16

控制檯:鍵盤IO,窗口滾動,控制檯命令 D17-19

FAT: D19

系統級API D20

系統安全防護:容錯輸入,防非法內存訪問,支持異常【考慮用系統態/用戶態解決】 D21

C程序實例 D22

圖形處理 D23

窗口切換,移動(包括優化),關閉,輸入定向,多窗口,D24-26文件操作API D28*

按內容分大概就是這樣:

內存: D9,D10

鼠標,鍵盤驅動:D6-D8

圖形處理相關: D4,D14,D23,D24-D26

多任務相關: D12-D13,D15-D16

文件管理: D19,D28

系統庫: D20,D27

具體功能:

控制檯:D17-19

系統安全:D21

C程序實例:D23

其他未收錄的大部分都是一些具體的細節優化

目前讀到D19的樣子,記錄下一些很散的點:(改進用加粗)

P115,關於系統態/應用態的設置

P154 本OS用486彙編

關於時間中斷號,對中斷號基值改為宏定義,可減少全局變量

直接往顯存寫內容 0xa0000

http://community.osdev.info/?(AT)BIOS這個網站貌似已經沒有信息了不能使用

關於線程調度,原OS只有簡單的運行態,就緒態,目前對於硬件IO的部分還有阻塞態,用多級優先級反饋隊列,但不存在末隊列為輪轉,並且,系統功能目前還沒有分成幾個線程去支持。

至今為止很多模塊還沒有獨立開來,日後可能會獨立出來【D16】

P344“處於32位模式無法向BIOS查詢?”

老師的相關回答:BIOS的中斷例程適用於16位的實模式(就是以前的DOS,可直接訪問空間為1MB,不支持虛擬存儲),32位以後要支持虛擬存儲就必須採用保護模式,所以就不用BIOS的中斷例程了。之所以這麼長時間以來BIOS不改進,一是為了兼容,二是windows自己提供保護模式下的中斷服務例程,且是可擴展可升級的,所以用不著BIOS提供。

【要自己寫IO】

小BUG:按下一次shift後,小字母無法輸入【真機正確,模擬器的問題】

sprintf:將字符串格式化以後存入s,然後再調用自己實現的寫顯存顯示的函數putfont_XX兩個函數配套使用。

網上找到的鼠標排列【比原來的好看點】:

"*...............\

山西新華電腦職業學校


編程語言開始吧?


薏米印記


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

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

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

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

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

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





小張在浙


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


示範車


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


分享到:


相關文章: