2010-12-21 147 views
27

我喜歡代碼,但我目前只在做web開發。我希望做一些與網絡編程相比獨特而有趣的事情。如何編程操作系統?

是的,這可能是一個愚蠢的問題,但我認爲構建一個非常簡單的操作系統真的很酷。所以請不要說任何粗魯的話。我只想知道以下幾點:

*從哪裏開始? *參考資料 *我可以使用哪種語言?

我通過閱讀一些操作系統書想一些簡單的像基於

+6

在開始接近編寫實際控制檯/「cmd」軟件的位置之前,您將編寫大量代碼。 – Joe 2010-12-21 18:18:08

+6

感謝您的投票,這真的有幫助 – Kevin 2010-12-21 18:37:21

回答

2

當你爲他們的谷歌有相當一些資源,但我會鼓勵你不是邁出這一步呢!

要編寫一個操作系統,即使是一個簡單的操作系統,您也需要很好地理解您的計算機在低級別上的工作方式,而且您至少需要C或C++,最好還需要Assembly。沒有這些技能,這將是一個乏味而令人沮喪的項目。即使對熟練的C程序員來說也很困難和具有挑戰性。

5

這裏有一些鏈接,讓你開始:

http://www.brokenthorn.com/Resources

http://wiki.osdev.org/Main_Page/

你會需要GCC和NASM。 我想你也可以使用GASM。

學習BIOS中斷。

而且之前,你甚至開始搶了一堆的標準,如: APIC A20門 PCI & PCIEX - 祝你好運試圖獲得其中的一個。花費一些改變。 英特爾& AMD - 看看這些,給你很多信息。 VGA ATA & SATA etc ...有很多。

也搶仿真器,如:Bochs的和QEMU

瞭解如何在計算機工作,也就是說,它是如何開機。

有很多信息,你只需要做你的研究。

祝你好運。

7

從webdev切換到後端將非常令人沮喪。

首先,選擇一個電路板/硬件/體系結構 - 甚至可以使用可以在您的機器上運行的OS模擬器。學習C和一些程序集(intel,MIPS,ARM,coldfire/motorolla 68k),這取決於你在爲哪種CPU架構構建你的操作系統。

我已經看到C++包允許你在C++中創建一個操作系統,然後自動將它轉換爲程序集,但是讓它們正確轉換是件很頭痛的事情。我不會推薦他們。

在開始編寫代碼之前,您應該設計您的操作系統。甚至可以把你的設計決定放在一張帶有一些圖表的50頁的論文中。

有些事情要考慮:

  • 存儲器映射(確切位置在內存中,你加載操作系統的部分,在那裏將它駐留)
  • 如何您的調度將工作(處理和/或線程感知,優先級)。也許是一個排隊不同優先級的圖表;如何進行進程間通信(郵箱,互斥體,原子性,同步與異步通信,格式爲message envelopes {sender process id, receiver process id, message type, message}
  • 如何進行進程間通信(郵箱,互斥體,原子性,同步與異步通信,格式爲message envelopes {sender process id, receiver process id, message type, message}
  • 如何處理內核和用戶模式
  • 內存分配算法 - 您將編寫自己的malloc/free操作符(如何在用戶動態分配內存時保持跟蹤?您會使用夥伴樹算法?鏈表?堆棧?等等)
  • 如何處理中斷(同時上下文切換進入 - 如何保存所有寄存器並恢復它們:你有一個棧需要跟蹤你是對的話)
  • 標準工藝,其中:鍵盤過程中,監視器輸出,定時,
  • 怎麼加授時服務
  • 如何加載用戶進程和運行它們
  • 添加搶佔或不
  • 添加熱鍵(有助於調試您的操作系統。在凍結的情況下,你可以添加熱鍵檢查內存)
  • 測試你的OS

編輯 - URL更新 開發自己的32位操作系統是絕版的,但可在網上: http://www.ipdatacorp.com/mmurtl/mmurtlv1.pdf

2

寫操作系統很難。我建議在成爲OS開發人員之前成爲開發人員。您將需要了解C/C++和彙編以構建基本的操作系統。您將需要考慮如何使您的操作系統,即內核類型,實模式或保護模式,內存映射和許多其他事情。