如何從零開始寫乙個簡單的作業系統?

時間 2021-05-06 14:40:55

1樓:後廠村村民甲

絕對的從零寫估計太難了,因為涉及的東西太多,光是bootloader細節就超級多,比如有些BootLoader的樣例中要用BIOS提供的指令去讀簡易的檔案系統,一般來說掌握這些的人,大概率比較熟悉os kernal了,除非閒得蛋疼,否則寫那玩意兒幹啥。

所以,簡單的方法就是先借用乙個現成的BootLoader,然後等kernel的雛形具備了,如果還有興趣,再回過頭寫個BootLoader。

這個時候,你的os可能還只能跑在虛擬器裡面,如果你不甘心,難免還得實現個檔案系統,能讓你的小玩意兒在物理機上跑一跑。

這個時候我估計kernel可能還是編譯出來的一坨二進位制,如果你考慮載入個其它的二進位制程式並執行,那麼「載入、鏈結」這些東西還得實現一遍。這個我也不知道難不難,反正我也沒寫過。反正原理都清楚,寫的可能矬一點,剩下就是力氣活兒了。

2樓:qi yu

其實沒什麼意義,簡單os和生產用的作業系統完全不是一回事,簡單os無非就是適應x86平台,很多功能乙個人是無法實現的,以寫底層程式為榮的時代早就過去了

3樓:Akton

下個安卓映象檔案,查詢所有安卓兩個字,然後替換成你自己的名字,這樣你就有乙個自主命名跟研發的移動端作業系統了。

想起某人買晶元刮乾淨印自己logo騙科研經費的

4樓:子實

我邊做邊譯了一套用rust寫系統的教程,是x86_64的,優點是有cargo輔助編譯,有乙個作者寫好的bios下的bootloader,因此可以專注寫中斷、記憶體、多工。

哦,教程裡的多工用async/await做的,很潮,那部分我還在啃,沒譯完。

子實總的來說,很長見識。

5樓:Linfrog

歪乙個樓,大三的作業系統的課程設計,有一堆的題目可以選,有且只有乙個題目可以兩人組隊並且拿優。最終和乙個要好的同學折騰完了這個課設。畢業的時候最終把它寫在了自己的簡歷上。

和其他的專案比起來這個專案一方面和工作並沒有太直接的聯絡,一方面也不夠nice。但我仍舊把它選擇作為我的簡歷的一部分。

面試現在這家公司時,最後一面和我司CTO(也是我現在的老闆)聊的時候聊到了這個專案,說「我知道這個專案不夠好,和工作也沒有太直接的聯絡,但這和我放上來的其他幾個專案經歷一樣都是我為之欣喜的工作,所以我就想把它放在這裡。」他開心的笑了起來然後點了點頭說:「我懂。」

6樓:pluntva

看《作業系統真象還原》就可以寫出來,但是我還是想說幾句,我一開始也是一根筋的去寫作業系統,寫到檔案管理那塊才發現並不是把作業系統寫出來你能力就有多少提公升,最終寫出來的也就是個玩具,希望你慎重考慮是否要把大量時間投入到這個工程當中,有很多文章把寫作業系統這件事說的很牛,其實也沒那麼神乎。如果你真的對OS很感興趣你弄這個還行,但是如果你也只是看一些文章然後想跟風的話建議你慎重考慮。

7樓:張正

我覺得在現有額電腦系統上去造輪子其實很難,有幾點:

1)體系龐大,硬體迭代非常快,可能你的系統更新不上硬體的換代。

2)軟體生態難以發展,沒人用。

3)如果沒有人用,你就沒有錢。

4)沒有錢就沒有繼續更新的資本。

所以現在的中國產系統基本都是軍用化路線,當然也有套了linux殼的那些系統,就不說了。

其實自己以前寫過rtos,發現寫乙個rtos並不難,甚至還可以在沒有mmu的系統上實現動態載入的功能。但是發現國內受技術限制的地方不是一點點,編譯器,寫乙個作業系統要能夠實現自舉,可以說很流弊了,自舉是個什麼概念,就是你寫的作業系統上擁有編譯器,你可以用這個編譯器編譯出作業系統本身來,這樣已經可以在不借助其它作業系統的環境下進行開發自己。等到你的系統基本穩定,你就可以開源了,能不能成紀要看造化了額

8樓:yaoyao

1、有現成的教學用OS可以參考,你可以知道乙個最簡易的OS需要什麼。

2、有現成的使用最廣泛的Linux架構可以參考,你可以知道實際上可以投入生產的OS是怎麼樣的。

3、無論如何,第一步是完成自舉!

9樓:吳璽煜

有本書不錯,叫做作業系統設計:Xinu方法 (豆瓣)手把手寫作業系統。作者是普度大學大名鼎鼎的Comer。

譯者是交大的鄒恒明。

麻雀雖小,五臟齊全:程序排程,訊號量,訊息傳遞,記憶體池,io中斷,時鐘,檔案系統,shell(叫做tty),還有驅動(雖然只是路由器),甚至還寫了個小型的UDP協議棧。

不過有一點,作者用的是mips,雖然有改寫成x86版本(xinu在vbox上,使用debian8,並在上面進行xinu程式設計 - u011274209的專欄 - 部落格頻道 - CSDN.NET)。而且裡面用的是核心級執行緒,但作者稱為程序。

10樓:白彬

試著做過。這是乙個極有挑戰的事情。它需要你有非常廣的知識:

最基本數位電路知識,這樣你才能知道如何控制晶元。

你需要熟悉一款CPU,這很難。新出的CPU如ARM資料少。傳統的CPU如x86設定起來又極為複雜。

你需要非常熟悉C語言、比較熟悉組合語言,還要熟悉彙編inline,需要比較熟悉編譯器,熟悉freestanding的環境。

你需對作業系統是如何工作的非常清楚,因為你幾乎不可能設計出乙個標新立異的作業系統來。

你需要有極強的診斷除錯能力,你通常無法知道你的程式為什麼不能正常執行,這幾乎會逼瘋你。

如果是x86建議按以下步驟來走:

1、寫乙個bootloader能輸出HelloWorld.

2、你的Bootload能載入另一段程式主程式,主程式能顯示HelloWorld。

3、主程式能進入保護模式,能接收定時中斷、並在螢幕上顯示時間。

能做到第3點你應該就知道下面應該幹什麼了。但我覺得工作5年,能做到第3點的人少於1%。

如何從零開始寫乙個簡單的遊戲引擎?

Xi Yang 你不可能只用D3D或者OpenGL,因為這只是圖形而已。遊戲引擎最起碼還有聲音 輸入裝置。實際上,通常還有網路 指令碼系統 物理系統。以上只是乙個維度。另乙個麻煩的維度是內容建立。對於乙個正經的遊戲引擎,你不大可能把內容硬編碼在程式裡,通常都是作為資料讀進來。而聲音 3D模型等等,在...

如何從零開始手寫乙個tiny STL?

maxint 因某某原因不能用ndk的stl,手擼vector,string,type traits,alogorithm等,功能不完整,用到才實現。vector主要是參考cppreference的文件和vc的實現,支援allocator 因為需要用到自定義記憶體管理器 exception safe...

如何從零開始建乙個論壇

汪老師 首先準備乙個建論壇站點的主機空間,要穩定執行,我這裡推薦一下阿貝雲伺服器 阿貝雲 ABY 領先的雲伺服器 虛擬主機 免費空間 免備案網域名稱註冊服務商 我已經使用有半年多了,不僅是可以免費用的,而且是免費使用的。阿貝雲的雲伺服器網速很好,非常穩定好用,而且免費雲伺服器,價效比真的很高,對新人...