
私は、クライアントがソケットを介してサーバー プロセスに接続し、ウィンドウ サーバーに操作を送信して、クライアントに代わって特定の操作を実行する X11 システムの動作方法に精通しています。
しかし、Mac OS X 上の GUI アプリケーションがウィンドウ システムとどのように対話するかについては理解していません (また、適切なドキュメントも見つかりませんでした)。次のような疑問があります。
- アプリはウィンドウ システムからイベントをどのように受信するのでしょうか?
- アプリはカーネルまたは何らかのウィンドウ システム サーバーに登録する必要がありますか?
- ウィンドウ システムはどのようにしてアプリの表示の更新を要求するのでしょうか?
- アプリはどのようにして再表示操作をトリガーしますか?
- ウィンドウ システムにはソケット ベースのプロトコル、または他の RPC システムがありますか?
- ウィンドウ システムまたはアプリケーションはハードウェアに直接アクセスできますか?
- クライアント アプリとウィンドウ システム間で実行できる操作は何ですか?
答え1
これまでに私が収集できた情報は次のとおりです。
アプリケーションは、何らかのプライベート API を介して WindowServer プロセスと通信します。WindowServer プロセスは、実際にハードウェア イベント (マウス、キーボード) を取得し、それをクライアント アプリケーションにディスパッチするプロセスです。(これはまだ未解決の問題です。使用するプロトコルは何か、Mach ポートと MIG を使用するのか、それともソケット ベースの API を使用するのか、よくわかりません)。
いくつかの情報はここにあります:
WindowServer は Quartz Compositor です。通常、アプリケーションは CoreGraphics API (CGXXX 関数) で公開されている Quartz2D API を使用します。アプリケーションは CoreGraphics の「コンテキスト」(CGContext) を作成し、そこに描画します。大きなビットマップとして実行されるときにコンテキストがプッシュされるかどうか、または操作が X11 の場合のようにサーバーに送信されるかどうかは、まだ未解決の問題です。
WindowServer プロセスの特定の側面を制御するための限定的な API が公開されています。これは、通常、設定アプリケーションから実行される構成設定の一種ですが、公開されている Carbon/Cocoa API 以外に、アプリが実際にグラフィック要求を通信したり、サーバーからメッセージを送信したりする方法に関するドキュメントはありません。
答え2
「ココアとは何か?」のセクションCocoa 基礎ガイド建築を下から上まで描いた素晴らしいイラストが多数掲載されています。
答え3
OS Xの内部構造に関する最良のリソースはAmit Singh の Mac OS X 内部驚くほど詳細ですが、残念ながらOS X 10.4までしかカバーしていません。Googleブックスにはプレビュー。
AppleのOS Xに関するドキュメントも優れたリソースであり、明らかに最新のものです。
答え4
以前の MacOS バージョンでは、このリフティングは QuickDraw によって実行されていましたが、OS X では、Cocoa に置き換えられました...
ただし、単純に X11 と同等というわけではありません。たとえば、X11 にはオーディオは含まれていませんが、Cocoa には含まれています。