為什麼微內核系統在PC不如宏內核普及?
Linux kernel的源碼已經上升到千萬級別了。這麼龐大的代碼量必然包含了很多bug。從原理上講,微內核在安全性和性能上勝過了宏內核。為什麼微內核遠不如宏內核流行呢?
微內核必須要合理設計,真正的純微內核,像minix這樣,你真的玩過了,你會發現有很多很棒的特性,任何進程出錯,甚至driver進程出錯,我都可以隨意kill+resume,甚至要改kernel,我只要有源碼,本機build,重啟之後就是用新的kernel了,真的驚人的穩定和好用。
但性能真的太爛了,為了保證可靠性,所有driver全都挪出kernel space當作user process,driver甚至簡單的讀寫文件都要多了5-6次context switch,性能落後不是單純的2-4倍,而是10倍20倍的落後,個人感覺,除非你在設計kernel之初就已經決定這個系統要執行什麼任務,然後我嚴格控制kernel path專門優化10個左右的service,在特定需要極高穩定性的任務下,微內核會完勝,但做general computing,除非未來硬體上有驚人突破,還有天才的設計,根本不可能取代宏內核(windows和mac都是似是而非,取個中間值罷了)
不好做個P,那麼多人寫Unix這麼多年,一個微內核還做不出來。根本原因是性能不夠,你需要層層調用。對於內核,許多地方用宏甚至彙編,因為性能需要
內核模式與用戶模式不僅是虛擬地址空間的區別。二者有許多上下文切換、非同步過程調用等等操作。許多計算加速模塊一定要將自己載入到內核模式,就是為了避免這些開銷。
為了實現微內核,基本的一些函數調用也要改用IPC通信,有時需要多次內存拷貝。結果就是早期經典意義上的微內核,連C標準庫調用,耗時也會超過宏內核十倍以上。
1. 微內核和結構化、模塊化是兩碼事。
2. 當今主流的Windows、MacOSX、Linux三者都屬於混合內核。
3. 在一些對響應時間要求極端嚴格的實時操作系統中,為提高性能會儘可能減輕內核的開銷,甚至不再劃分出用戶模式。
4. 應用程序可以揮霍硬體資源,因為有內核給它們兜底。想像下如果民用操作系統也追求學術理想,甩手不顧性能優化……還記得GNU Hurd開發了幾年嗎?
5. 過去比較成功的微內核有:QNX、L4、Minix。
不好做啊,微內核需要更高的技術設計功底,否則不如大部分宏內核系統。聽過一家qnx,可以搜搜。以前宣傳的不錯。不知道現在怎麼樣了。
Linus表示,微內核個性能渣渣,老子不喜歡.Gates表示,俺們是有部分微內核的.Jobs表示,俺們是從微內核fork過來的,不過俺們不打算去改.
「微內核在性能上勝過了宏內核??」,大哥您這是在意淫吧。講操作系統的書里對宏內核與微內核都有詳細的解釋和比較,比如《現代操作系統》,題主不如自己去看看書。
性能問題吧,模塊許可權弱,交互多,檢查多...
誰說性能超過的?主要就是 overhead 太大的原因呀。
推薦閱讀:
※platform driver 是作為一個怎樣的概念出現的?
※如何製造一個內核態的軟鎖死?
※如何正確開發 linux bsp?
※linux mmap匿名映射的作用是什麼?
※segfault at xxx的地址是物理地址還是線性地址,objdump出來的呢?