説説微內核與宏內核_風聞
钲钲铁鼓-2019-08-10 21:33
微內核的概念與宏內核的概念是相互對立的。宏內核,一般是將系統的主要核心組件全部在內核實現。例如,內存管理器、進程管理器和I/O管理器等。可以想象,這樣設計的內核各組件之間的關聯很大,也就是常説的耦合性很大,不利於模塊化設計。但優點也顯而易見,就是速度快。各組件之間的通信全部在內核模式下完成,沒有進程間的切換,也沒有從用户模式到內核模式的切換。典型的宏內核的操作系統就是Linux操作系統和Android系統。
和宏內核相反,微內核定義,操作系統的主要組件(例如,內存管理器、進程管理器和I/O管理器)運行在獨立的進程中,它們有自己私有的地址空間,在組件之上是微內核提供的一組服務原語。原語是通過進程間通信組成的,頻繁的進程間通訊需要以消耗昂貴的CPU時間為代價。而這種代價,換來的是操作系統核心模塊的耦合性降低。例如,如果想改變進程模塊中進程調度的算法,只需更換進程調度模塊,保持原有的原語接口。而在宏內核的操作系統中,各個模塊的數據結構緊密結合,牽一髮而動全身,即有一個地方稍有改動,則需要進行較大的改動。
Windows NT在設計之初,曾考慮設計成為一個純粹的微內核操作系統。Windows的所有程序,全部依賴於Win32核心子系統的3大模塊,即Kernel32.dll、User32.dll、Gdi32.dll。其中,User32.dll負責對窗口消息的分發處理等,GDI32.dll負責對窗口的圖形操作。以前這部分的實現完全是在用户模式下實現的,而在Windows NT 4.0之後,這兩個dll的核心代碼被放進內核模式下的Win32k.sys,同時也保留了用户模式下的原有的dll。這使得User32.dll和Gdi32.dll變得很小,它們只是負責調用內核模式下的Win32k.sys。這樣提高了Windows的繪製圖形的效率。因此,Windows能在眾多操作系統中,圖形能力表現得非常出色。
由此可以看出,Windows不是純粹的微內核系統,但它在內核的各個組件,達到了相對小的耦合性,同時在效率上克服了微內核效率低的特點。