宏内核linux,Linux 为什么还要坚持使用宏内核?
導(dǎo)航:網(wǎng)站首頁 >
Linux 為什么還要堅(jiān)持使用宏內(nèi)核?
時(shí)間:2016-5-14
相關(guān)問題:
匿名網(wǎng)友:
目前主流的操作系統(tǒng)(MAC OS X,Windows)都是使用了微內(nèi)核來實(shí)現(xiàn),但是...答:這問題就和 CISC 和 RISC 之爭一樣沒有意義。容易歸納出來一個(gè)結(jié)論,很多時(shí)候極端終將會(huì)歸于中庸。
熱心網(wǎng)友:
這問題就和 CISC 和 RISC 之爭一樣沒有意義。容易歸納出來一個(gè)結(jié)論,很多時(shí)候極端終將會(huì)歸于中庸。
熱心網(wǎng)友:
本文還這個(gè)回答的一個(gè)債:Linux 戰(zhàn)略或生態(tài)圈是什么? - in nek 的回答。里面提到微內(nèi)核都是學(xué)院派的意淫,這里回答為什么。
我沒有指向——我只是為了說明問題——如果是真心問這個(gè)問題很大程度上反映了提問者還是個(gè)代碼中二:)
我說的“中二”,是那種沒有經(jīng)驗(yàn),只有“名”,沒有“實(shí)”的思考者。具體名稱空間定義參考這里:《道德經(jīng)》講了什么?為什么它廣受推崇? - in nek 的回答。這種人,在社會(huì)中是會(huì)被老子這樣的人K的:)
對(duì)應(yīng)地,這樣的人在Linux世界中也是要被Linus K的。
我解釋一下為什么:“是否微內(nèi)核”僅僅是一個(gè)名字定義的問題,和用戶要解決的問題一點(diǎn)關(guān)系都沒有。我們在維護(hù)架構(gòu)的時(shí)候,首先保證不創(chuàng)建額外的概念解決非直接用戶相關(guān)的問題。這種情況下,為什么要為Linux引入微內(nèi)核?現(xiàn)在沒有問題要解決了?到了吃飽飯沒事干瞎做死的時(shí)候了嗎?
微內(nèi)核只是學(xué)院概念,學(xué)院概念都是聽著很有道理,但經(jīng)過打磨以后才能肯定是否正確道路的。你看每年有多少紅點(diǎn)設(shè)計(jì)獎(jiǎng)?有幾個(gè)被復(fù)制到所有的類似產(chǎn)品中的?為什么沒有復(fù)制?不是專利和版權(quán)限制,是那個(gè)設(shè)計(jì)有創(chuàng)意,但并不實(shí)用。
微內(nèi)核有成功的例子么?Minix是個(gè)教學(xué)系統(tǒng),WindowsNT一開始說微內(nèi)核,結(jié)果怎么呢?把圖像渲染丟內(nèi)核里了,QNX算是最成功的商用微內(nèi)核系統(tǒng)了,但我告訴你QNX是怎么工作的:你要把用戶程序,協(xié)議棧,驅(qū)動(dòng)都放到一個(gè)進(jìn)程中的。
這背后反映了什么?這反映了,如果你要參與市場競爭,你要用盡一切能力去保證功能和性能,其他一切理論優(yōu)勢,都是不靠譜的。微內(nèi)核可以優(yōu)化到和宏內(nèi)核一樣的數(shù)據(jù)流效率嗎?如果它能夠,它就不是微內(nèi)核了好吧?所以,你讓微內(nèi)核系統(tǒng)如何在市場競爭中活下去?不能在市場競爭中活下去,誰來開發(fā)微內(nèi)核系統(tǒng)?
而且,比如Linux這樣的架構(gòu),有什么東西阻止你把驅(qū)動(dòng)放到用戶態(tài)了嗎?(否則你以為fuse是什么?)有什么阻止你在其中增加一個(gè)優(yōu)化的進(jìn)程間通訊嗎?什么都沒有。換言之,宏內(nèi)核系統(tǒng)分分鐘可以變成微內(nèi)核系統(tǒng),而微內(nèi)核系統(tǒng)是無法回頭的。
你要成為一個(gè)想Linus那樣的好架構(gòu)師,真要好好學(xué)學(xué)這個(gè)基礎(chǔ)的虛心實(shí)腹的設(shè)計(jì)理念。這個(gè)理念現(xiàn)在貫穿所有的Linux核心維護(hù)者的維護(hù)哲學(xué)。比如他們基本上,不接受沒有硬件支持的代碼,不接受概念產(chǎn)品的代碼,不接受已經(jīng)上市產(chǎn)品的代碼。這些都是這個(gè)基本理念的一脈相承。
熱心網(wǎng)友:
我想說,現(xiàn)在沒有絕對(duì)宏內(nèi)核,也沒有絕對(duì)微內(nèi)核,只是某種形式的雜種
熱心網(wǎng)友:
目前得票第二的 @王垠 的答案比較有誤導(dǎo)性。所以說明一下。
Micro-kernel 和 kernel 的「動(dòng)態(tài)性」無關(guān)。實(shí)際上,Linux kernel 內(nèi)部有大量的動(dòng)態(tài)行為。包括動(dòng)態(tài)地使用文件系統(tǒng) driver,動(dòng)態(tài)加載 module。只要這些動(dòng)態(tài)行為都發(fā)生在 kernel-space,就還是 monolithic-kernel。所以 @王垠 的基本比喻就是錯(cuò)誤的。
用類似的比喻,Micro-kernel 的性能問題不在于「問這東西在哪」,而在于必須「把這東西復(fù)制一份,外加校驗(yàn)」,從而防止內(nèi)存 corruption 引起的 bug。
系統(tǒng)越大,bug 越多,這個(gè)事實(shí)不假。但是 micro-kernel 的擁躉搞錯(cuò)了一件事情:bug 增長的拐點(diǎn)在什么地方。在拐點(diǎn)之前,要用艱苦奮斗修 bug 來解決,拐點(diǎn)之后,才需要加 defensive 機(jī)制。否則就是 over-defensive。什么叫 over-defensive?如果你的代碼每次訪問一個(gè)指針都要檢查 nullity,不管是高層模塊還是底層模塊,就是 over-defensive。Over-defensive 不光不能減少 bug,還會(huì)把一些在 sanity/smoking test 就能發(fā)現(xiàn)的 bug 整成 random failure。事實(shí)證明,Unix 內(nèi)核根據(jù)「mechanism, not policy」制定的極為精簡的功能需求的復(fù)雜度遠(yuǎn)遠(yuǎn)在造成 bug 增長的拐點(diǎn)之前。
最后,monolithic-kernel 就是 micro-kernel。誰也不能阻止你把 Linux kernel driver 的 policy 部分挪到 user-space,甚至你可以把 Linux 的 paging policy 也寫成 demon。很多 Linux 的 CPU 中斷相應(yīng)調(diào)度就是在 user-space 控制的。Micro-kernel 只是強(qiáng)制的 micro-kernel。
大家還關(guān)注:
問題推薦
總結(jié)
以上是生活随笔為你收集整理的宏内核linux,Linux 为什么还要坚持使用宏内核?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计大改!魅族Flyme 10系统界面遭
- 下一篇: linux 删除乱码的文件夹,Linux