Linux 多年來(lái)取得的成績(jī)毋庸多言。但最近,reddit 上有人發(fā)起了一個(gè)話題,想知道 Linux 的內(nèi)核設(shè)計(jì)是否已經(jīng)過(guò)時(shí),并得到了一些有趣的答案。
這位Ronis_BR的用戶提問(wèn)大致如下:
Linux 是在 1992 年啟動(dòng)的,一些特性到現(xiàn)在都沒(méi)有改變。我猜想最新的操作系統(tǒng)內(nèi)核設(shè)計(jì)技術(shù)(如果存在…)應(yīng)該較之前有很大的進(jìn)步。那 Linux 內(nèi)核是否已經(jīng)過(guò)時(shí)?
與 Windows、macOS、FreeBSD 內(nèi)核的設(shè)計(jì)相比,Linux 內(nèi)核的設(shè)計(jì)有沒(méi)有在哪些方面比較先進(jìn)?(注意,重點(diǎn)是設(shè)計(jì)的先進(jìn),而不是哪一個(gè)更好)。
該話題引起了近 400 條回復(fù),大家紛紛發(fā)表了自己對(duì)內(nèi)核設(shè)計(jì)的看法,節(jié)選幾條不同的觀點(diǎn):
ExoticMandibles:
“過(guò)時(shí)”?不存在的。Linux kernel 對(duì)現(xiàn)代內(nèi)核的設(shè)計(jì)其實(shí)是非常了解的,只是它選擇了保持傳統(tǒng)的形式。
內(nèi)核設(shè)計(jì)的核心在于“安全/穩(wěn)定”和“性能”之間的關(guān)系。Microkernels(微內(nèi)核)以性能為代價(jià)保證安全。如果你有極小的微內(nèi)核,那么它將具有相對(duì)較小的 API surface,使其難以被攻擊。而且當(dāng)你有一個(gè)錯(cuò)誤的文件時(shí),驅(qū)動(dòng)程序崩潰而不占用內(nèi)核,可以無(wú)損重啟。優(yōu)越的穩(wěn)定性!優(yōu)越的安全性!一切很美好。
但這種方案的缺點(diǎn)是所有 IPC 永遠(yuǎn)且不可避免的開(kāi)銷。如果你的程序想從文件加載數(shù)據(jù),則必須訪問(wèn)文件系統(tǒng)驅(qū)動(dòng),這意味著 IPC 要處理進(jìn)程上下文切換和兩次 ring transitions 。然后,文件系統(tǒng)驅(qū)動(dòng)要求內(nèi)核與硬件通信,這也意味著兩次 ring transitions。然后文件系統(tǒng)驅(qū)動(dòng)發(fā)送其回復(fù),這意味著又一輪的兩次,以及另一次上下文切換。總開(kāi)銷:兩次上下文切換,兩次 IPC 調(diào)用和六次 ring transitions。非常貴!
宏內(nèi)核將所有設(shè)備驅(qū)動(dòng)合攏到內(nèi)核中。所以當(dāng)出現(xiàn)一個(gè)錯(cuò)誤的圖形驅(qū)動(dòng),就可以占用內(nèi)核,或者如果它有一個(gè)安全漏洞,那么可能被用來(lái)危及系統(tǒng)。但是,如果你的程序需要從磁盤(pán)加載某些東西,則會(huì)調(diào)用內(nèi)核,進(jìn)行 ring transitions,與硬件通話,計(jì)算結(jié)果,并返回結(jié)果,進(jìn)行另一個(gè) ring transitions。總開(kāi)銷:兩次 ring transitions。便宜得多,也快得多!
簡(jiǎn)而言之,微內(nèi)核是:“放棄性能來(lái)提高安全性和穩(wěn)定性”;宏內(nèi)核是:“保持性能,只要修復(fù)安全和穩(wěn)定性問(wèn)題就可以了”。而目前,大家更愿意接受后者。
Scandalousmambo:
開(kāi)發(fā)一個(gè)和Linux kernel 相同的系統(tǒng),從本質(zhì)上決定了它一旦設(shè)計(jì)出來(lái)就會(huì)“過(guò)時(shí)”。
KugelKurt:
盡管這里討論的大部分內(nèi)容都是關(guān)于微內(nèi)核與宏內(nèi)核的關(guān)系,但是最近的研究還涉及到編程語(yǔ)言。如果你今天啟動(dòng)一個(gè)全新的內(nèi)核,那么就可能不會(huì)用 C 去寫(xiě)。微軟的 Singularity 和 Midori 項(xiàng)目探討了用 C#托管代碼內(nèi)核的可行性。
Daemonpenguin:
有一些概念,在理論上可以提供更好的內(nèi)核設(shè)計(jì)。比如,理論上微內(nèi)核也有一些非常好的設(shè)計(jì)選擇,使得它們具有便攜性、可靠性和潛在的自我修正能力。
然而,無(wú)論理論多么好,人們總是會(huì)根據(jù)實(shí)際情況進(jìn)行設(shè)計(jì)。Linux 內(nèi)核擁有如此多的硬件支持,那么多公司支持開(kāi)發(fā),其他內(nèi)核(不管設(shè)計(jì)得多炫酷)都不太可能趕得上。
例如,MINIX 具有良好的設(shè)計(jì)和一些很棒的功能,但硬件支持很少,幾乎沒(méi)有人為此平臺(tái)開(kāi)發(fā)。
-
Linux
+關(guān)注
關(guān)注
87文章
11352瀏覽量
210551
原文標(biāo)題:Linux kernel 的設(shè)計(jì)是否已經(jīng)過(guò)時(shí)?
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
騰訊云內(nèi)核團(tuán)隊(duì)修復(fù)Linux關(guān)鍵Bug
嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植之內(nèi)核簡(jiǎn)介
飛凌嵌入式ElfBoard ELF 1板卡-Linux內(nèi)核移植之內(nèi)核簡(jiǎn)介
Linux系統(tǒng)中shell命令解析
需要將TLV320aic3120使用在一個(gè)Linux3.0.35的系統(tǒng)中,請(qǐng)問(wèn)是否有適應(yīng)于老內(nèi)核的驅(qū)動(dòng)?
Linux根文件系統(tǒng)的掛載過(guò)程
詳解linux內(nèi)核的uevent機(jī)制
linux驅(qū)動(dòng)程序如何加載進(jìn)內(nèi)核
Linux內(nèi)核測(cè)試技術(shù)
![<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>測(cè)試技術(shù)](https://file1.elecfans.com/web2/M00/02/4E/wKgZoma68fmAMBkcAADMAfJtb9Y443.png)
Linux內(nèi)核中的頁(yè)面分配機(jī)制
![<b class='flag-5'>Linux</b><b class='flag-5'>內(nèi)核</b>中的頁(yè)面分配機(jī)制](https://file1.elecfans.com/web2/M00/01/F5/wKgaomazJ8-AL_POAAAOtG0PZQM563.png)
歡創(chuàng)播報(bào) 華為宣布鴻蒙內(nèi)核已超越Linux內(nèi)核
TC3x多核使用與TC2x多核使用相比是否有任何限制?
使用 PREEMPT_RT 在 Ubuntu 中構(gòu)建實(shí)時(shí) Linux 內(nèi)核
![使用 PREEMPT_RT 在 Ubuntu 中構(gòu)建實(shí)時(shí) <b class='flag-5'>Linux</b> <b class='flag-5'>內(nèi)核</b>](https://file.elecfans.com/web2/M00/9B/81/pYYBAGQiWjaAbkZoAACBrWp1TiE766.png)
評(píng)論