
我熟悉 X11 系統的工作原理,其中客戶端透過套接字連接到伺服器進程,並將操作傳送到視窗伺服器以代表它們執行某些操作。
但我不明白(而且我找不到好的文件)描述 GUI 應用程式如何與 Mac OS X 上的視窗系統互動。
- 應用程式如何從視窗系統接收事件?
- 應用程式是否需要向核心或某些視窗系統伺服器註冊?
- 視窗系統如何請求應用程式更新其顯示?
- 應用程式如何觸發重新顯示操作?
- 是否有基於套接字的協議,或視窗系統的其他 RPC 系統?
- 視窗系統或應用程式是否可以直接存取硬體?
- 在客戶端應用程式和視窗系統之間可以進行哪些操作?
答案1
這是我到目前為止能夠收集到的:
應用程式透過某種私有 API 與 WindowServer 進程進行通信,WindowServer 進程實際上會取得硬體事件(滑鼠、鍵盤)並將這些事件分派給客戶端應用程式。 (這仍然是一個懸而未決的問題:他們使用什麼協議(如果有的話),他們是否使用 Mach 端口和 MIG,或者一些基於 Socket 的 API,不確定)。
一些資訊在這裡:
WindowServer 是 Quartz 合成器。通常應用程式使用 CoreGraphics API(CGXXX 函數)中公開的 Quartz2D API。應用程式建立 CoreGraphics「上下文」(CGContext) 並在那裡進行繪製。當上下文作為大位圖完成時是否會推送,或者操作是否像在 X11 上一樣發送到伺服器仍然是一個懸而未決的問題。
有一個有限的 API 可以用來控制 WindowServer 進程的某些方面,即通常從「設定」應用程式完成的配置設定類型,但沒有關於應用程式如何實際通信圖形請求或從伺服器發送訊息的文檔,除了暴露的Carbon/Cocoa API。
答案2
“什麼是可可?”的部分可可基礎指南有一堆從下到上的架構的精彩插圖。
答案3
OS X 內部的最佳資源是Amit Singh 的 Mac OS X 內部結構。它非常詳細,但不幸的是僅涵蓋 OS X 10.4 及以下版本。谷歌圖書有一個預覽。
Apple 的 OS X 文檔也是一個很好的資源,而且顯然是最新的。
答案4
在先前的 MacOS 版本中,提升是由 QuickDraw 完成的;在 OS X 中,它已被 Cocoa 取代......
但它不只是與 X11 平行。例如,X11 不包含音頻,但 Cocoa 包含音頻。