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