2011年5月25日 星期三

精簡版作業系統實戰: 自製OS用Qemu執行

源起一直以來想自己寫一個OS,練練功,去年到今年斷斷續續花了一至兩個月時間,寫了 我自己的陽春作業系統,最近正在整理程式碼做個記錄;證明有達成自己的目標。以下是從我的Xubuntu 10.10 執行benos 使用QEMU的畫面截圖。

qemu-system-x86_64 -boot a -M pc-0.11 -fda /home/ben/osdev/../main.img


畫面左上為Ben OS 執行結果。

目前實作了下列功能:

  1. 簡易的記憶體管理

  2. Timer中斷處理

  3. 鍵盤I/O, 佇列

  4. 多個執行緒的多工切換

  5. 簡單的命令模式 (ps, uname, free, clear, type mem)

  6. 精簡 libc 函式庫
在寫自己小OS過程中,最痛苦的莫過於不知道為什麼OS又沒畫面了。開發期間,學習了不少以前觀念有些模糊的部分,例如:如何進入保護模式、程式執行期權限模式、記憶管理、多工處理等等。
之後可能的研究議題如下:
  • 如何編繹及改寫BenOS支援網路開機方式(PXE)?

  • 如何支援檔案系統從S-ATA 硬碟?
如果想寫自己的OS,如何開始呢?
首先在完全沒有基礎情況,起步是最難的。
其實坊間有多本自製OS的書,以下是本人看過書:
- 偏重Linux 0.01 相關觀念介紹
- 較不適合初學者
- 偏重圖形介面實作,且用到許多自制工具或其他工具
- 較適合進階網友
- 比較全面詳細介紹觀念細節
- 較適合初學者
作業系統開發實戰手冊:以開發一個視窗多工作業系統為例(2011.5)
- 圖形介面實作
- 提供多平台的開發
- 使用大量表格來對照行號,進行解說。
再來最常遇到就是卡關,卡在某一環節良久,無法解決。這時如果有人可以討論,相信情況會大為改善。
wiki at osdev.org裡有英文文章,如英文尚可考慮精讀,有很多初學者的參考文章。
另外在Jserv's CURT v1 ARM 精簡作業系統一文中,Jserv 留言說有熱心網友將CURT v1移植到i386平台,可供大家參考練習。以上一點淺見,希望對您有所幫助。

更新2011-07-22:
建立共筆用的站台:Julu 作業系統開發協作平台,有興趣的人可留言(改到社群論壇,詳參閱協作平台),歡迎一同編修內容。

更新2011-08-17:

更新2011-12-14
BOS 使用新的bootloader(By Dennis) 以及初步整合VFS(By Wayling) 

14 則留言:

jserv 提到...

Great work!

Thanks for bringing it to the world. :)

超軟之家 提到...

感謝你的支持, 希望有空多交流!

Kanru Chen 提到...

+1

魔法設計師 提到...

GJ++

超軟之家 提到...

Hi GJ, 已將相關訊息寄到您的信箱,請查收後,回覆. THX

匿名 提到...

碁峰資訊,作業系統開發實戰手冊,以開發一個視窗作業系統為例.有說到桌面部分.

超軟之家 提到...

已更新書目

Ruinland 提到...
作者已經移除這則留言。
Ruinland 提到...

m(_ _)m(拜)

對您這篇文章非常有興趣~小弟今年剛成為資工系新鮮人,也很想自己實作一個OS。但是我沒有組語的基礎,不知您推薦的書目中是否都需要組語的基礎呢?

目前我手上有一本2005年的NASM教學書(當時想玩玩ollydbg,結果忙一忙就忘了),但組語似乎都跟CPU的關聯很深,不知那本書的code現在是否還能用?

還請閣下指點迷津m(_ _)m

超軟之家 提到...

目前所列書目,大都需要部分組合語言來實作Bootloader,保護模式相關與硬體基本IO port部分。 NASM對i386的程式碼而言,應該都還適用。對於i386自製OS相當多,有個小建議,在OSDev.org裡有相關bootloader,保護模式實作範例,你可從中找到可執行的精簡OS,再開始試著修改,會較容易瞭解組語運作,另外,國外MIT OSE 的課程 http://pdos.csail.mit.edu/6.828/2010/schedule.html,其中開始的幾堂課也有十分詳細的OS開發新手所需觀念說明。如果你想買書來參考,你可以考慮Orange's一個作業系統的實現或作業系統開發實戰手冊這二本書。另外可參考我的朋友的自製OS:ChildhoodOS(http://www.codemud.net/~thinker/GinGin_CGI.py/show_id_doc/414)幾乎由C及極少量的C內嵌組語寫成,若你不想碰太多組語的話。

odie 提到...

找了好久...終於也看到自製OS的同好啦
不然都是去os dev看英文(暈)
也不敢問XD

太棒囉!

超軟之家 提到...

歡迎加入討論,可參考社群活動http://julu.staros.mobi/或到 http://groups.google.com/group/juluosdev?hl=zh-TW論壇提出你的問題,大家交流一下.(^.^)

張某某 提到...

您很厲害呢
請問我可以再我自己寫的作業系統中使用您的原始碼嗎

超軟之家 提到...

筆者著重在學習的部分,所以有引入部分第三方的原始碼,所以請參閱下列本專案BSD License部分, 你可以註明出處並自由使用。其他第三方部分,用來學習應該沒有問題,如果用於商業請洽各作者。
https://github.com/benwei/bos/blob/develop/License

你的目的要學習寫OS,建議你從下列MIT開放課程會對OS開發有更完整的認識。
http://pdos.csail.mit.edu/6.828/2011/overview.html
MIT 的 xv6 OS
http://pdos.csail.mit.edu/6.828/2011/xv6.html