混合核心
![本页使用了标题或全文手工转换](http://178.128.105.246/content-http-upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
![](http://178.128.105.246/content-http-upload.wikimedia.org/wikipedia/commons/1/11/Kernel-hybrid-CN.jpg)
![](http://178.128.105.246/content-http-upload.wikimedia.org/wikipedia/commons/thumb/d/d0/OS-structure2.svg/450px-OS-structure2.svg.png)
混合核心(英語:Hybrid kernel),又譯為混合式核心、混合內核,一種作業系統內核架構。傳統上的作業系統內核可以分為整塊性核心(Monolithic kernel)與微核心(Micro kernel)兩大基本架構,混合核心結合了這兩種核心架構。
混合核心的基本設計理念,是以微核心架構來設計作業系統核心,但在實作上則採用整塊性核心的作法。混合核心實質上是微核心,只不過它讓一些微核結構執行在用戶空間的代碼執行在核心空間,這樣讓核心的執行效率更高些。這是一種妥協做法,設計者參考了微核心結構的系統執行速度不佳的理論。
大多數現代作業系統遵循這種設計範疇,是用微核心的概念來設計,但是實作上則採用整塊性核心的作法,結合整塊性核心(Monolithic kernel)與微核心(Micro kernel)兩種設計方法,形成第三種分類。但是這種分類法受到一些批評,如林纳斯·托瓦兹認為這種分類只是一種市場行銷手法,因為它的架構實作方式接近於整塊性核心[1]。
最有名的混合核心為Windows NT核心與XNU。
概論
[编辑]這個設計方式是一種妥協下的設計。在設計理念上,採用微核心架構來設計,但因為微核心結構一直被批評為效能不佳,因此在實作上,則採用整塊性核心的作法。微核心架構將作業系統服務(task server)運行在用戶空間,以保證系統的穩定可靠。與典型的微核心設計相較,在混合核心中,多數的作業系統服務(task server)仍然運行在核心空間中,與整塊性核心相同。因為讓作業系統服務運行在核心空間,減少了訊息傳遞及環境切換(content switch)帶來的系統負擔,這可以避免微核心架構常被批評的效能不佳問題;但也因此,這種設計無法提供微核心系統架構下的穩定性保證。
批評
[编辑]林纳斯·托瓦兹認為,採用可載入核心模組不代表這個作業系統就是一種混合核心,如果模組跟內核使用同樣的定址空間,能夠存取內核的資料結果,這種實作方式就是整塊性核心[2]。以這種定義來看,混合核心實際上是整塊性核心的變種。
例子
[编辑]NT内核
[编辑]XNU内核
[编辑]其他
[编辑]- BeOS内核
- DragonFly BSD
- ReactOS内核
参见
[编辑]註釋
[编辑]- ^ Linus Torvalds. [2018-06-13]. (原始内容存档于2021-01-09).
As to the whole "hybrid kernel" thing - it's just marketing. It's "Oh, those microkernels had good PR, how can we try to get good PR for our working kernel? Oh, I know, let's use a cool name and try to imply that it has all the PR advantages that that other system has.
- ^
The article goes to say that a hybrid kernel like NT's is not to be confused with a with monolithic kernels that can load modules like Linux. Again, this seems like nonsense to me - the stable driver ABI (and the closed source) has facilitated creating of many drivers outside of the NT kernel tree, but this is not a conceptual difference. The precise technique of loading a driver/module into the kernel doesn't really matter, if the driver shares the same address space and can have access to kernel structures.
|