2008-09-24 175 views
32

我打算爲x86架構開發操作系統。爲x86架構開發操作系統

  • 我有哪些編程語言選項?
  • 有哪些類型的編譯器可用,最好在Windows環境中?
  • 有沒有什麼好的資源可以幫助我學習更多關於操作系統開發的知識?
  • 在虛擬機或物理硬件上測試我的操作系統會更好嗎?

有什麼建議嗎?

+1

什麼是最好的語言?在X86架構中,x86彙編語言和C是最好的選擇! – AminM 2013-04-26 13:03:03

+1

投票結束太寬泛。另請參閱:http://stackoverflow.com/questions/254149/how-do-you-write-a-basic-operating-system?rq=1u – 2015-08-15 20:23:53

回答

1

如果您要製作完整的操作系統,則需要使用多種語言。我期望至少Assembly,C和C++。

我會在大多數測試中使用虛擬機。

+0

爲什麼你可能需要C++和C? – 2008-09-24 21:37:44

+0

@Daniel:雖然C對於硬件級別附近的高性能,低級編程非常有用,但我會推薦C++用於所有其他更高級別的東西。 不知道爲什麼你/不會/需要C和C++。 – GEOCHET 2008-09-25 00:49:22

+3

@Rich:你不需要超過一種語言。你可能想要使用多個。讓我們不要把「需要」和「非常想要很好」混爲一談。 – 2008-12-04 14:47:40

3

您可能想查找XINU。這對x86來說是一個很小的操作系統,除了被學生解析之外,它並不是真正用於其他任何東西。

-5

如果你想寫一個操作系統,那麼你需要幾個人。一個操作系統不能寫一個人。我覺得這是更好地在現有的OS項目

這僅僅是一個OS項目的短名單。你如何看到每個可能的語言都有一個項目。

+1

編寫操作系統是CS本科生的標準項目。只需要他們一個學期。 – 2008-09-24 21:38:34

2

我已經爲386SX做過一次,這是在PCI板上。關於如何在保護模式下啓動X86 CPU的一個很好的資源是linux的源代碼。這只是幾個彙編語句。之後,您可以使用gcc編譯您的C代碼。結果是ELF格式的objectcode。我編寫了自己的鏈接器,用來編寫目標代碼。是的,它的工作!祝你好運。

5

語言和編譯器完全依賴於你正在嘗試完成的內容。不過,我會建議你可能會由於水平太低而接近問題。

操作系統基礎知識中有一些材料。 MIT has OpenCourseware on the subject。請仔細閱讀Andrew TannenbaumOperating Systems series,然後看看諸如Minix之類的內容。

想一下有什麼。開始修補東西。借鑑想法,並看看他們去哪裏。如果你真的想要,你可以重新發明輪子,但你會通過建立在別人的作品上來學習更多。

3

使用ANSI C,並從模擬器開始。 當您移植到真機上時,會出現一些彙編代碼。上下文切換和中斷處理(例如)更容易在彙編器中編寫。

Andy Tannenbaum在OS上寫了一本好書。還有許多其他好的存在。

祝你好運!沒有什麼比寫自己的操作系統要小,

3

另外檢查出OSDev.org哪些有你需要的所有信息開始。

41

對於我在拼貼中的最後一年項目,我開發了一個帶有虛擬內存管理器,虛擬文件​​系統和完全搶先式多任務的小型x86操作系統。我做到了開放源碼和代碼是大量註釋,在檢查其源鍛造頁:

https://github.com/stephenfewer/NoNameOS

從我的經驗,我可以提出以下建議:

需要x86彙編語言對於各個部分來說,這是不可避免的,但可以保持在最低限度。相當快你會得到運行C代碼,這是一個經過驗證的操作系統開發的選擇。一旦你有了某種可用的內存管理器,如果你願意,你可以進入C++(你需要一些內存管理器來處理新的和刪除的東西)。

不管你選擇哪種語言,你仍然需要彙編& C,以使系統從BIOS引導到你離開你進入任何可用的形式。

最終,您選擇的主要語言將取決於您要開發的操作系統類型。

我的開發環境是GNU開發工具DJGPP的Windows端口以及NASM彙編器。對於我的IDE,我使用了IBM的Eclipse和CDT插件,該插件在Eclipse中提供了C/C++開發環境。

對於測試我推薦BOCHS,一個開源的x86 PC模擬器。它可讓您快速啓動您的操作系統,這對測試非常有用,並且可以集成到eclipse中,因此您只需按一下按鈕即可構建和運行您的操作系統。我也建議偶爾使用VMWare和物理PC,因爲您可以通過這種方式獲取一些微妙的錯誤。

P.S.操作系統的開發非常有趣,但非常密集,我的12個月的時間最好。我的建議是計劃好,你的設計是關鍵!享受:)

5

它並不重要,你選擇什麼語言。如果語言是圖靈完成的,那麼你可以在其中編寫一個操作系統。

但是,語言的表現力會使某些設計非常容易或很難實現。例如,舊的Smalltalk操作系統的「活力」和動態取決於它們在Smalltalk中實現的事實。你也可以用這樣做,但它可能會很難,你甚至不會去想它。 JavaScript或Ruby OTOH可能會非常適合。

Microsoft Research's Singularity是另一個例子。除了Sing#,Spec#C#(或類似語言)以外,其它任何內容都無法實現,因爲體系結構的大部分依賴於這些語言的靜態類型安全性和靜態可驗證性。

有一點需要記住:在C中實現的操作系統的設計空間已經得到了充分的探索。其中幾乎有成千上萬。然而,在其他語言中,您可能會發現以前沒有人發現過的東西!有大約只有十幾操作系統用Java編寫的,大約有一半在C#中有十幾個,某項內容的兩個操作系統的哈斯克爾的順序,只一個在Python和沒有用Ruby或JavaScript。

試着寫在二郎山或Io操作系統,並看看如何影響你對操作系統的思維!

4

有一個在馬里蘭州的利用GeekOS大學提供的課程OS。這是一個小型的,廣泛評論的操作系統,專爲教育目的而設計,可以使用Bochs或QEMU仿真器運行。

對於它是如何在一個過程中使用,在類webpage檢查過程中的以前的產品的例子。在那裏,你會發現你必須爲GeekOS添加不同的功能。

它是一種偉大的方式來獲得熟悉的x86架構上運行的小型和簡單的操作系統。

1

毫無疑問,我會使用阿達。這是我遇到的最好的通用系統編程語言,無論如何。舉一個例子,Ada在指定記錄中對象的位佈局方面比C更好.Ada還支持在特定內存位置上疊加記錄。 C要求你玩指針來獲得相同的效果。這有效,但更容易出錯。 Ada也有中斷的語言支持。

另:安全。 Ada默認綁定檢查數組賦值,但可以在需要時將其關閉。 C「默認」在數組上不進行綁定檢查,所以你必須自己手動執行它,只要你想要它。時間已經顯示這是不是正確的默認值。你會忘記需要的地方。緩衝區溢出攻擊是破解者使用的最常見的安全缺陷。他們有整個網站解釋如何找到並使用它們。

至於學習這樣做,我知道的兩本書是XINU(Unix向後,與Scientology無關)和Project Oberon。第一個是在我的操作系統研究生課程中使用的,第二個是由Pascal的創建者Nikalus Wirth編寫的。

1

C最有可能...所有主要的操作系統都是用C/C++或Objective-C(Apple)編寫的