本文整理自 GoLand 官方博客的一篇文章:《OS in Go? Why Not?》,探討了為什么像 C 這樣的編程語言在 OS 開發(fā)中占據(jù)優(yōu)勢,以及是否可以使用 Go 編寫 OS。此外還提到了用 Go 開發(fā)操作系統(tǒng)的可行性、局限性,以及目前的部分成果。
操作系統(tǒng) (OS) 是計算機(jī)系統(tǒng)的心臟和靈魂,它管理著計算機(jī)的硬件和軟件資源,并為用戶提供與計算機(jī)交互的方式。傳統(tǒng)上,C 和 Assembly 等語言因其低開銷和 “接近機(jī)器碼” 的特性而被用于開發(fā)操作系統(tǒng)。 但諸如 Go 等高級語言的興起引入了一些特性,這些特性或許可以使開發(fā)操作系統(tǒng)等復(fù)雜軟件變得更加容易。例如,類型安全、錯誤處理和并發(fā)性在開發(fā)操作系統(tǒng)時應(yīng)該是有益的。 因此,采用像 Go 這樣的高級語言來開發(fā)操作系統(tǒng)理應(yīng)是自然選擇,但為什么并沒有成功的案例?
操作系統(tǒng)由不同的組件構(gòu)成,它們負(fù)責(zé)不同的功能,可以使用不同的編程語言編寫。 操作系統(tǒng)的核心是內(nèi)核 (Kernel),它負(fù)責(zé)與硬件交互 —— 幾乎都是采用 C 或匯編語言編寫。至于面向用戶的組件(例如 GUI 應(yīng)用程序),可以采用任何語言編寫。 例如,Android 采用 Java 編寫用戶層的組件,如 GUI 框架和系統(tǒng)應(yīng)用程序(相機(jī)、電話等)。相對應(yīng)的,其內(nèi)核采用 C 和匯編語言編寫;底層系統(tǒng)組件 —— 庫,則是用 C++ 編寫。 C 語言 “統(tǒng)治” 內(nèi)核的主要原因:
可直接管理內(nèi)存
缺少抽象
無需依賴運(yùn)行時
可移植性
Go 作為高級語言提供了許多令人滿意的特性。從這方面來看,它似乎可以成為開發(fā)操作系統(tǒng)的絕佳選擇:
某些類型的錯誤在高級語言中出現(xiàn)的可能性要小得多
并發(fā)性:在高級語言中處理并發(fā)更容易,因為幾乎每種高級語言都內(nèi)置處理并發(fā)所需的機(jī)制
類型安全:防止像 C 的寬松類型強(qiáng)制執(zhí)行
不過盡管 Go 提供了令人滿意的特性,可以讓操作系統(tǒng)開發(fā)者的工作更輕松,但它也有一些局限性。 作為一種具有垃圾回收功能的語言,Go 并不真正適合操作系統(tǒng)開發(fā)。使用 Go 編寫內(nèi)核意味著需要小心翼翼地繞過 Go 的垃圾收集。正如 Reddit 論壇中開發(fā)者提到的,鼠標(biāo)滯后可能是因為中斷處理程序分配了觸發(fā)垃圾回收的內(nèi)存。 此外,Go 還需要大量的 runtime 才能執(zhí)行,這意味著它不能直接在硬件上運(yùn)行。盡管 TinyGo 可以將 Go 編譯為在裸機(jī)上運(yùn)行,但與 C 相比,它只支持少量的架構(gòu),而 C 幾乎可以在任何架構(gòu)上運(yùn)行。 總的來說,使用 Go 開發(fā)一個不是 “玩具性質(zhì)” 的操作系統(tǒng)幾乎是不可能。尤其是要求支持在多種架構(gòu)上運(yùn)行、支持不同設(shè)備(如顯卡或網(wǎng)卡),并符合 POSIX 標(biāo)準(zhǔn),這更是極具挑戰(zhàn)性。 最后看一下探索用 Go 開發(fā)操作系統(tǒng)的案例。 Biscuit 是一個用 Go 開發(fā)的操作系統(tǒng),運(yùn)行在 64 位 X86 架構(gòu)上。它使用經(jīng)過修改的 Go 1.10 運(yùn)行時實(shí)現(xiàn),其中添加了更多匯編代碼來處理系統(tǒng)調(diào)用和中斷處理程序的引導(dǎo)和進(jìn)入 / 退出。
Biscuit 為用戶進(jìn)程提供 POSIX 接口,支持 fork、exec 等。它實(shí)現(xiàn)了支持核心 POSIX 文件系統(tǒng)調(diào)用的文件系統(tǒng)。Biscuit 為用 Go 編寫的 Intel PCI-Express 以太網(wǎng) NIC 實(shí)現(xiàn)了 TCP/IP 堆棧和驅(qū)動程序。使用 POSIX 接口,Biscuit 可以在不修改源代碼的情況下運(yùn)行許多 Linux C 程序。 然而,Biscuit 缺少許多功能,例如調(diào)度優(yōu)先級、換出頁面或磁盤,以及安全功能,例如用戶、訪問控制列表和地址空間隨機(jī)化。
審核編輯 :李倩
-
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6688瀏覽量
123141 -
Go
+關(guān)注
關(guān)注
0文章
43瀏覽量
12235 -
編程語言
+關(guān)注
關(guān)注
10文章
1930瀏覽量
34540
原文標(biāo)題:為什么不用Go開發(fā)操作系統(tǒng)?
文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論