乙個人寫的作業系統 Sparrow OS

2021-06-19 20:15:29 字數 2929 閱讀 1794

自己寫乙個作業系統,這是在過去的幾年裡我一直為之努力的目標,現在終於完成了。

自己動手寫作業系統的動機最初來自於學習linux遇到的困難。

我是乙個linux愛好者,這裡所說的linux主要指核心。但我的工作從來都沒有與linux聯絡得上:一開始的幾年是做嵌入式linux手機上的一些應用,在愛可信(access)和三星(samsung)工作過;再後來到了愛立信(ericsson)做3g通訊,工作內容與作業系統核心離得更遠了。

從大學時代動手配置和編譯核心開始,一直對linux念念不忘,但是總也沒有足夠的精力去深入學習。看過很多核心方面的書,但是理解得終究是比較膚淺。讀**也不容易,因為核心的**已經足夠龐大和複雜,不太容易入手。

在2023年底的時候,我終於想到了乙個突破性的辦法:仿照linux,自己寫乙個系統。這樣做有兩個好處,一是當你要完成乙個功能的時候,必須要參考linux的實現,而且必須學懂學通,關鍵的技術不能繞開,不然自己的系統就運動不起來;二是自己寫的小型系統必然以實現基本功能為最大目標,會自然地撇下複雜的高階功能,只關注核心部分,這樣在學習linux的時候針對性就更強,目標明確。

我一直喜歡玩arm開發板,以前在愛可信工作的時候我就買了s3c2410開發板,在上面移植過directfb桌面系統。還一度曾嘗試過在上面設計和實現一套3d桌面管理器,但最終因為難度和工作量太大而失敗。後來又買了s3c6410x的開發板。

所以我對arm的架構還是比較熟的,而且也很看好arm的前景。所以最終決定做乙個嵌入式的系統,一開始只支援arm架構,也只支援s3c6410x一種晶元。

這個系統可以功能簡單,但是一定要有現代作業系統的基本功能,比如頁式記憶體管理,多工等等。所謂「麻雀雖小,五臟俱全」,「麻雀/sparrow」是我能想到的最符合自己初衷的名字,就叫這個了。

我還為這個系統製作了乙個logo:

帶著這樣的目標,我在2023年春天上路了。

萬事開頭難。但是事情也有另一方面:一旦你決定開始了,困難都會給你讓路。在最開始的階段,我很幸運地找到了一本書《一步一步寫嵌入式作業系統— — arm程式設計的方法與實踐》,給了我非常大的幫助。這本書的內容也是講怎樣一點一點地搭建起乙個作業系統,而且它也是基於arm處理器的,真是太巧了。它對一些基本原理講解得非常非常詳細,比如處理器的不同模式、mmu的原理以及中斷處理**的設計等等,很多章節我讀了一遍又一遍。但這本書的內容比較簡單,我的系統的複雜性很快就超過了這本書的覆蓋內容,當我開始設計記憶體分頁管理功能的時候它就已經幫不上忙了。

在實現這個作業系統的過程中,我一直牢記這樣一條準則:寫乙個自己的系統不是目的,目的是學習linux。所以在每開發乙個新的功能時都遵循了同樣的過程:先學習linux的設計,完全弄懂原理之後再寫自己的設計。而且往往前者的時間比較長。

除去耽擱的時候,sparrow的開發過程是一年半,業餘時間。粗略估計了一下,大約是1200個小時。

對於sparrow,我的最初構想很簡單:只要能同時執行兩個程序,每個程序列印"hellow"然後休眠一會兒,並不停地重複這個過程。最終,sparrow要比預期強大得多,它可以執行更多的程序和更複雜的功能。我在sparrow上寫的最大的應用程式是乙個「數獨」遊戲,它可以生成乙個數獨迷題並解決。

最大的感悟是關於「堅持」。

用大把的業餘時間來獨自推進乙個專案是有挑戰的,特別是當你遇到挫折的時候。不記得有多少次,面對那些已經花去了你很多個小時,但仍然看不到希望的技術難題時,信念就變得非常脆弱,自己不停地問自己「繼續做下去到底有沒有意義」。對意義的懷疑常常讓人放棄。

能夠堅持把這件事做完也多虧了我妻子的支援,她承擔了大量的家務,讓我每週六都能專心於這項工作。

sparrow的全部目前都放在github上面,包括**、文件和tool-chain。

我相信,即使sparrow看上去有點意思,也不會有人去研究它的**。但文件卻更能幫助別人。

在這個專案的後期,我精心整理了一批文件用於分享。

如果我寫乙份面面具到技術文件,枯燥程度足以逼退每乙個人;如果其中能有一些插圖,讀者會感覺好一些;而如果以為主,文字很簡練的話,可能很多人會樂於翻看一下。

最初我制定了乙個詳細的文件計畫,按照那個計畫,最終將會完成乙份超過100頁的完整設計文件。當我完成最初的10頁之後,就果斷放棄了。因為我意識到,寫文件更主要是為了分享給別人,但那麼冗長的文字並不能達到目的,更何況是用英文。

最終我決定把文件製作成ppt,盡可能多地用而不是文字,而且只寫重要的內容。並且選擇了比較**的模板,盡可能地讓讀者感覺輕鬆。

至於文字就還是用英文了。文字既然少了,也就沒有翻譯的困難;而且這樣可以避免一些術語方面的歧義。

chapter 01: introduction

chapter 02: user guide

chapter 02: user guide - demo

chapter 03: process

chapter 04: memory management

chapter 05: boot memory allocator

chapter 06: page allocator

chapter 07: slab allocator

chapter 08: user space

chapter 09: file system

chapter 10: interrupt

chapter 11: tracing

chapter 12: programming guide

本人(趙鳳陽)現工作於南京愛立信。您可以通過[email protected]找到我。

在csdn的部落格裡斷斷續續地寫過一些東西:或者

還有微博:@_第二月_

我有乙個**,但一直疏於維護。不過如果您細心,可以找到一些集郵、蒸汽機車、唯識宗以及《紅樓夢》方面的東西:

20131221讀後感

大牛,我想和你做個朋友。

20131221結束

乙個人久了

乙個人久了,會懶得戀愛 乙個人久了,朋友會越重要 乙個人久了,會越來越喜歡聽歌 乙個人久了,會常常忘記帶 乙個人久了,對愛情會越來越挑剔 乙個人久了,會更加勤奮 乙個人久了,除了寂寞點外還是蠻開心的 乙個人久了,會慢慢變得成熟起來 乙個人久了,會比以前更重視更愛父母,更重視親情 乙個人久了,對所有的...

很愛乙個人

外邊的雨依然下著,沒有停的意思 下了兩天兩夜,感覺好悶 這幾天看著男友,很心疼,每天要洗碗,洗衣服 我很聽話不去惹寶貝生氣,醫生不讓我用冷水,我也很害怕 害怕身體因此而跨掉 我們都還年輕 以後的路還很長 這個代價會很大 我也希望這些日子能過的快些,自己的身體能恢復的快些,為此事我們花了一千元,想來不...

乙個人而已

黑夜如手冽風如喉 窗外的寒雪映白了竹樓 誰在夢中為我煮沸一杯清酒 茺涼的夜風霜雨雪 是誰的嫵媚風情把我淹沒 是誰的美麗 放蕩了我的心魔 是誰在無情地將我一刀一刀地割 直到割得滿地燃燒的鮮血開出美麗的紅蓮花朵 黑暗的夜冷風雨雪 是誰在靜悄悄地欣賞著那無盡的孤獨流淌在我的黑夜 身似激情背後的那片虛無 心...