Linux kernel 的設計是否已經過時?

發表於2017-05-15

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 具有良好的設計和一些很棒的功能,但硬體支援很少,幾乎沒有人為此平臺開發。

……

歡迎大家就此事在下方回覆自己的看法。

相關文章