Linux, OS X, Windows 的圖形界面架構是如何的?

Linux 的圖形桌面是一個進程,沒有了這個圖形桌面也可以運行也就是通過命令行的方式,還有什麼 C/S 架構的圖形環境導致了 GUI 的效率相比另外兩個差。那麼同樣是 UNIX-like 的 OS X 是怎樣的情況呢?問題描述很不專業,那麼懇請了解這方面的專業人士解答下。


從Windows Vista之後,desktop composition的部分就由Desktop Window Manager完成了(當然是啟用Aero的情況下,Windows 8起DWM是必須開啟的)。

如圖,DWM就是做這麼個事兒……(就是說,應用程序畫完了界面,告訴DWM,DWM把它放到桌面上去)

DWM本身是基於Direct3D的,D3D下面是WDDM驅動們……

至於應用程序,想用GDI的就用GDI(絕大多數win應用都是基於GDI的,很老的圖形庫 (從某個版本起GDI也是跑在D3D之上了,於是顯卡vendors就不用寫GDI驅動了)),想用D3D就用D3D(比如基於WPF的應用,或者Zune Software這樣的),想用OpenGL就用OpenGL(現在的Windows的圖形architecture是以DirectX為主,OpenGL支持需要OpenGL installable client driver)……

若有謬誤請指正~

Windows Display Driver Model (WDDM) Architecture (Windows Drivers)

The Desktop Window Manager (Windows)


Linux上的X Window system一直被人詬病。

簡單的說,X Window system分成client端和server端,server端負責監聽滑鼠鍵盤,繪製窗口,而client端則是GUI程序,負責接收滑鼠鍵盤事件,並處理這些事件。Server和client是可以完全分離的,比如說你在遠程機器上開個GUI(client)可以在本地機器(server)上去顯示和操縱。

然而,現代的圖形界面越來越複雜,X的插件越來越多,需要處理的東西越來越多,速度也就慢起來了。特別是繪製這個方面有很多圖形庫,他們希望可以繞過X直接和顯卡打交道,這方面的努力促成了Wayland的誕生。

OS X的情況不是特別清楚。只是知道它的底層是一個叫Quartz的庫,負責與硬體打交道,而GUI Aqua構造建在Quartz之上,同時也保留X window system的兼容,X程序也能跑在OS X上。而其他GUI程序,使用和Aqua程序一樣使用系統庫cocoa編寫。OS X通過重現構建圖形層使得系統庫完全圖形化。


從控制台登陸系統會系統一個圖形shell環境,OS X使用的就是Finder(等同於Windows中的Explorer)。Finder依賴至少30個庫和框架,有一些是私有框架(可以用otool -lV /System/Library/CoreServices/Finder.app/Contents/MacOS/Finder顯示這些依賴,可以看到Finder是一個少有的加密的二進位程序)。

OS X的GUI處理被分離成了不同進程,因為GUI所需要的工作對於單獨一個進程來說太過繁重,這些進程都在/System/Library/CoreServices下。

比如:Dock.app負責底部托盤,這個進程還負責設置牆紙(根窗口),kill這個進程的話就可以看出來。com.apple.dock.extra進程為Dock.app提供輔助,前者將UI動作連接至Dock的動作outlet。

SystemUIServer.app負責狀態條右側的狀態菜單項(Menu Extra),這些菜單項從/System/Library/CoreServices/Menu Extras載入,菜單控制的應用程序負責創建這些菜單。

Apple不希望自己的UI被其他系統抄襲,這些Finder的輔助程序(包括其他CoreService應用)都是加密的。


推薦閱讀:

Mac 中的頭像最近使用的圖片如何清除?
Mac / OS X 如何快速顯示桌面(Desktop)?
蘋果的各種軟體名字為什麼鍾情使用羅馬數字 X 代替 10?
OS X 和 Windows 相比,誰的快捷鍵設計更科學方便好用?
在Finder里如何打開iterm2並定位到當前目錄?

TAG:macOS | MicrosoftWindows | 操作系統 | Linux |