Monolithic Kernel
無論是Windows還是Linux等等,這些尋常使用的操作系統,都是用內核和管理和使用硬件的。
宏內核。
Monolithic,詞典義是『單一的,龐大的』,簡單理解,就是內核的所有功能,從文件系統,到內存管理,到CPU調度,等等等等,都放在內核態中。這樣做有一個很大的好處,那就是所有這些功能都在同一個地址空間下,大家做通信會非常方便,而且通信的成本肯定也是低的,實現起來會快糙猛一些。就是很莽很厲害。
但是,這樣也會導致一些其他問題。我覺得最大的問題就是代碼復雜度會提高。Linux Kernel的代碼量太美不看。同時,這樣也會導致容錯性不是很好,只要一個地方出了問題,會導致整個Kernel都掛掉。
Micro Kernel
那既然Monolithic Kernel有這樣的問題,做研究的人一定不會放過這樣的好機會,於是就有了微內核的概念。所謂微內核,是指內核只提供最必要的功能,比如IPC,內存管理,CPU調度等等。而其他,諸如文件系統,網絡IO等等,都放在用戶態來實現。
這樣做的好處首先是內核變小了,內核是常駐內存的,小了自然就節約了內存的空間。但是,這樣的性能就會不如很莽很厲害的Monolithic Kernel要好,因為IPC通信的overhead還是有一些的。
Hybrid Kernel
那既然Micro Kernel和Monolithic Kernel都有問題,能不能把兩個結合一下,互相中和呢。
PPAP (Kernel Version)
I have a Monolithic Kernel.
I have a Micro Kernel.
Bow!
Hybrid Kernel!
這大概是研究的慣用套路,一個事情有兩種極端的做法,然后中和一下,就有了第三種做法。那Hybrid Kernel就是把一部分不常使用的內核模塊,或者是原本需要的時間就很長,因此IPC的overhead看起來就不是那么誇張的功能,移出內核,而其他的就會放在內核里。
之前說到的Monolithic Kernel也好,Micro Kernel也好,它們對資源的保護和管理都是在內核里去做的,也就是說,它們都是先對硬件做抽象,然后向上不直接暴露硬件,而是暴露硬件的抽象。一個例子,硬盤是硬件設備,但是我們的應用程序看到的是一個個的文件,文件本身就是一種抽象。而應用程序,是沒辦法直接操作硬件的,只能跟操作系統提供的抽象打交道。
https://zhuanlan.zhihu.com/p/34334336