Linux 多年來取得的成績毋庸多言。但最近,reddit 上有人發(fā)起了一個話題,想知道 Linux 的內(nèi)核設(shè)計是否已經(jīng)過時,并得到了一些有趣的答案。
這位Ronis_BR的用戶提問大致如下:
Linux 是在 1992 年啟動的,一些特性到現(xiàn)在都沒有改變。我猜想最新的操作系統(tǒng)內(nèi)核設(shè)計技術(shù)(如果存在…)應(yīng)該較之前有很大的進(jìn)步。那 Linux 內(nèi)核是否已經(jīng)過時?
與 Windows、macOS、FreeBSD 內(nèi)核的設(shè)計相比,Linux 內(nèi)核的設(shè)計有沒有在哪些方面比較先進(jìn)?(注意,重點是設(shè)計的先進(jìn),而不是哪一個更好)。
該話題引起了近 400 條回復(fù),大家紛紛發(fā)表了自己對內(nèi)核設(shè)計的看法,節(jié)選幾條不同的觀點:
ExoticMandibles:
“過時”?不存在的。Linux kernel 對現(xiàn)代內(nèi)核的設(shè)計其實是非常了解的,只是它選擇了保持傳統(tǒng)的形式。
內(nèi)核設(shè)計的核心在于“安全/穩(wěn)定”和“性能”之間的關(guān)系。Microkernels(微內(nèi)核)以性能為代價保證安全。如果你有極小的微內(nèi)核,那么它將具有相對較小的 API surface,使其難以被攻擊。而且當(dāng)你有一個錯誤的文件時,驅(qū)動程序崩潰而不占用內(nèi)核,可以無損重啟。優(yōu)越的穩(wěn)定性!優(yōu)越的安全性!一切很美好。
但這種方案的缺點是所有 IPC 永遠(yuǎn)且不可避免的開銷。如果你的程序想從文件加載數(shù)據(jù),則必須訪問文件系統(tǒng)驅(qū)動,這意味著 IPC 要處理進(jìn)程上下文切換和兩次 ring transitions 。然后,文件系統(tǒng)驅(qū)動要求內(nèi)核與硬件通信,這也意味著兩次 ring transitions。然后文件系統(tǒng)驅(qū)動發(fā)送其回復(fù),這意味著又一輪的兩次,以及另一次上下文切換??傞_銷:兩次上下文切換,兩次 IPC 調(diào)用和六次 ring transitions。非常貴!
宏內(nèi)核將所有設(shè)備驅(qū)動合攏到內(nèi)核中。所以當(dāng)出現(xiàn)一個錯誤的圖形驅(qū)動,就可以占用內(nèi)核,或者如果它有一個安全漏洞,那么可能被用來危及系統(tǒng)。但是,如果你的程序需要從磁盤加載某些東西,則會調(diào)用內(nèi)核,進(jìn)行 ring transitions,與硬件通話,計算結(jié)果,并返回結(jié)果,進(jìn)行另一個 ring transitions??傞_銷:兩次 ring transitions。便宜得多,也快得多!
簡而言之,微內(nèi)核是:“放棄性能來提高安全性和穩(wěn)定性”;宏內(nèi)核是:“保持性能,只要修復(fù)安全和穩(wěn)定性問題就可以了”。而目前,大家更愿意接受后者。
Scandalousmambo:
開發(fā)一個和Linux kernel 相同的系統(tǒng),從本質(zhì)上決定了它一旦設(shè)計出來就會“過時”。
KugelKurt:
盡管這里討論的大部分內(nèi)容都是關(guān)于微內(nèi)核與宏內(nèi)核的關(guān)系,但是最近的研究還涉及到編程語言。如果你今天啟動一個全新的內(nèi)核,那么就可能不會用 C 去寫。微軟的 Singularity 和 Midori 項目探討了用 C#托管代碼內(nèi)核的可行性。
Daemonpenguin:
有一些概念,在理論上可以提供更好的內(nèi)核設(shè)計。比如,理論上微內(nèi)核也有一些非常好的設(shè)計選擇,使得它們具有便攜性、可靠性和潛在的自我修正能力。
然而,無論理論多么好,人們總是會根據(jù)實際情況進(jìn)行設(shè)計。Linux 內(nèi)核擁有如此多的硬件支持,那么多公司支持開發(fā),其他內(nèi)核(不管設(shè)計得多炫酷)都不太可能趕得上。
例如,MINIX 具有良好的設(shè)計和一些很棒的功能,但硬件支持很少,幾乎沒有人為此平臺開發(fā)。
-
Linux
+關(guān)注
關(guān)注
87文章
11213瀏覽量
208736
原文標(biāo)題:Linux kernel 的設(shè)計是否已經(jīng)過時?
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論