?文章來源地址http://www.zghlxwxcb.cn/news/detail-462554.html
操作系統(tǒng) (OS) 是計(jì)算機(jī)系統(tǒng)的心臟和靈魂,它管理著計(jì)算機(jī)的硬件和軟件資源,并為用戶提供與計(jì)算機(jī)交互的方式。傳統(tǒng)上,C 和 Assembly 等語言因其低開銷和 “接近機(jī)器碼” 的特性而被用于開發(fā)操作系統(tǒng)。
但諸如 Go 等高級(jí)語言的興起引入了一些特性,這些特性或許可以使開發(fā)操作系統(tǒng)等復(fù)雜軟件變得更加容易。例如,類型安全、錯(cuò)誤處理和并發(fā)性在開發(fā)操作系統(tǒng)時(shí)應(yīng)該是有益的。
因此,采用像 Go 這樣的高級(jí)語言來開發(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ī)、電話等)。相對(duì)應(yīng)的,其內(nèi)核采用 C 和匯編語言編寫;底層系統(tǒng)組件 —— 庫,則是用 C++ 編寫。
C 語言 “統(tǒng)治” 內(nèi)核的主要原因:
-
可直接管理內(nèi)存
-
缺少抽象
-
無需依賴運(yùn)行時(shí)
-
可移植性
Go 作為高級(jí)語言提供了許多令人滿意的特性。從這方面來看,它似乎可以成為開發(fā)操作系統(tǒng)的絕佳選擇:
-
某些類型的錯(cuò)誤在高級(jí)語言中出現(xiàn)的可能性要小得多
-
并發(fā)性:在高級(jí)語言中處理并發(fā)更容易,因?yàn)閹缀趺糠N高級(jí)語言都內(nèi)置處理并發(fā)所需的機(jī)制
-
類型安全:防止像 C 的寬松類型強(qiáng)制執(zhí)行
不過盡管 Go 提供了令人滿意的特性,可以讓操作系統(tǒng)開發(fā)者的工作更輕松,但它也有一些局限性。
作為一種具有垃圾回收功能的語言,Go 并不真正適合操作系統(tǒng)開發(fā)。使用 Go 編寫內(nèi)核意味著需要小心翼翼地繞過 Go 的垃圾收集。正如 Reddit 論壇中開發(fā)者提到的,鼠標(biāo)滯后可能是因?yàn)橹袛嗵幚沓绦蚍峙淞擞|發(fā)垃圾回收的內(nèi)存。
此外,Go 還需要大量的 runtime 才能執(zhí)行,這意味著它不能直接在硬件上運(yùn)行。盡管 TinyGo 可以將 Go 編譯為在裸機(jī)上運(yùn)行,但與 C 相比,它只支持少量的架構(gòu),而 C 幾乎可以在任何架構(gòu)上運(yùn)行。
總的來說,使用 Go 開發(fā)一個(gè)不是 “玩具性質(zhì)” 的操作系統(tǒng)幾乎是不可能。尤其是要求支持在多種架構(gòu)上運(yùn)行、支持不同設(shè)備(如顯卡或網(wǎng)卡),并符合 POSIX 標(biāo)準(zhǔn),這更是極具挑戰(zhàn)性。
最后看一下探索用 Go 開發(fā)操作系統(tǒng)的案例。
Biscuit 是一個(gè)用 Go 開發(fā)的操作系統(tǒng),運(yùn)行在 64 位 X86 架構(gòu)上。它使用經(jīng)過修改的 Go 1.10 運(yùn)行時(shí)實(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ū)動(dòng)程序。使用 POSIX 接口,Biscuit 可以在不修改源代碼的情況下運(yùn)行許多 Linux C 程序。
然而,Biscuit 缺少許多功能,例如調(diào)度優(yōu)先級(jí)、換出頁面或磁盤,以及安全功能,例如用戶、訪問控制列表和地址空間隨機(jī)化。
?文章來源:http://www.zghlxwxcb.cn/news/detail-462554.html
歡迎點(diǎn)贊收藏轉(zhuǎn)發(fā)????
? ? ? ? ? ? ? ? ??? ----? END? ----
?
?
?
?
?
?
?
?
?
?
?
到了這里,關(guān)于為什么不用Go開發(fā)操作系統(tǒng)?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!