當前位置: 華文星空 > 知識

Windows 內核和 Linux 內核誰更復雜?

2019-11-19知識

說沒有可比性的,估計是為了防止引戰。

作為一個讀過Windows和Linux內核源碼,寫過幾年內核驅動程式的同學,我個人的觀點: Windows內核更加復雜

討論這個觀點之前,咱們得先明確「 內核 」的概念,劃定討論的範圍,否則就是扯淡。

狹義上的作業系統內核,可能只包含了 行程執行緒管理、記憶體管理、同步與異步、IO管理、檔案系統、協定棧(勉強算?) 這幾塊部份。

如果只在這個層面上討論問題,我覺得兩個系統確實平分秋色,復雜度相當。各有長短,比如Windows的行程執行緒劃分的更加清晰明確,而Linux那糟糕的LWP和fork機制實在讓人難受。而在檔案系統方面,NTFS又不如VFS來的清晰明了(雖然兩者不是一個層面的東西)。

廣義上的作業系統內核,還包含各自作業系統向上提供服務的一系列配套設施,但它們同樣執行在內核模式下,註意,這裏不包含第三方的驅動程式。

在這個層面,我認為Windows的復雜性要高了不少,舉幾個例子:

相容性

最典型的就是Windows的子系統機制,為了歷史相容,Windows內核提供了OS/2、POSIX、Windows三個子系統,Win10還支持了Linux。所以在Windows上,不是只有Win32應用程式可以執行,其他子系統的程式也能跑。

圖形視覺化

眾所周知,Windows的一大成功來自於其優秀的視覺化互動能力,微軟為了實作高效的視覺化互動,將整個GUI的實作放到了內核中來完成,win32k.sys就是非常重要的組成部份。系統呼叫表,Linux上叫sys_call_table,Windows裏叫SSDT,但Windows除了這個,還有一個SSDTShadow,它就在win32k.sys裏面。圖形處理,想也知道很復雜的東西,所以這個win32k.sys歷史上鬧出了不少的內核0day漏洞,透過幾個視窗函式呼叫就能控制電腦的事情屢見不鮮。

安全性

如果要問一個問題:Windows和Linux誰更安全?我想絕大多數人會認為Linux更安全,畢竟我們經常聽到Windows又暴漏洞了,又被攻擊了···

沒辦法,誰叫Windows曾經是世界上執行裝置最多的作業系統呢(好像現在被Android超過了),樹大自然招風。因為面臨無數的安全攻擊,從Windows 2000到XP,到Win7、Win8到Win10,一直在不斷增強自己的安全性,什麽Session隔離、地址空間隨機化ASLR、系統記憶體保護DEP、內核地址空間隨機化KASLR、控制流保護CFG、返回流保護RFG等等,這些安全機制的落地都離不開作業系統內核的支持,使得內核的程式碼變得越來越臃腫復雜。

當然Linux上也有SELinux,namespace、CGroup等等內核安全機制,但總的來說,Linux歷史包袱比不上Windows,復雜度要低不少。

除了這些真正的內核,Windows上還有不少的服務有執行在內核態的部份,你看C:\Windows\System32\drivers目錄下大量的sys檔就知道了,這些又算不算是內核呢?

總體來說,微軟喜歡把很多東西都往內核裏塞,塞成了一個大胖子,是好是壞?不好說,但就題主的問題而言,在我看來,Windows的復雜度還是要更高一些。