web-dev-qa-db-ja.com

Mac OS Xのウィンドウシステムのアーキテクチャは何ですか?

X11システムの仕組みに精通しています。クライアントはソケットを介してサーバープロセスに接続し、操作をウィンドウサーバーに送信して、クライアントに代わって特定の操作を実行します。

しかし、GUIアプリケーションがMac OS Xのウィンドウシステムとどのように相互作用するかを説明していません(また、適切なドキュメントを見つけることができませんでした)。

  • アプリはウィンドウシステムからイベントをどのように受信しますか?
  • アプリはカーネルやウィンドウシステムサーバーに登録する必要がありますか?
  • ウィンドウシステムは、アプリが表示を更新することをどのように要求しますか?
  • アプリはどのようにして再表示操作をトリガーしますか?
  • ソケットベースのプロトコル、またはウィンドウシステムの他のRPCシステムはありますか?
  • ウィンドウシステムまたはアプリケーションは、ハードウェアに直接アクセスできますか?
  • クライアントアプリとウィンドウシステムの間で実行できる操作は何ですか?
35
miguel.de.icaza

これは私がこれまでに集めることができたものです:

アプリケーションは何らかのプライベートAPIを介してWindowServerプロセスと通信します。WindowServerプロセスは、実際にハードウェアイベント(マウス、キーボード)を取得し、それらをクライアントアプリケーションにディスパッチします。 (これはまだ未解決の問題です:使用するプロトコルがある場合、どのプロトコルを使用するか、マッハポートとMIG、またはソケットベースのAPIを使用するかどうかは不明です)。

いくつかの情報はここにあります:

https://developer.Apple.com/mac/library/documentation/MacOSX/Conceptual/OSX_Technology_Overview/GraphicsTechnologies/GraphicsTechnologies.html#//Apple_ref/doc/uid/TP40001067-CH273-SW1

WindowServerはQuartzコンポジターです。通常、アプリケーションは、CoreGraphics API(CGXXX関数)で公開されているQuartz2D APIを使用します。アプリケーションはCoreGraphicsの「コンテキスト」(CGContext)を作成し、そこに描画します。大きなビットマップとして行われるときにコンテキストがプッシュされるのか、それともX11のように操作がサーバーに送信されるのかは、未解決の問題です。

WindowServerプロセスの特定の側面を制御するために公開されたAPIは限られています。通常、設定アプリケーションから行われる一種の構成設定ですが、アプリがサーバーからグラフィックリクエストまたはポンプメッセージを実際に通信する方法に関するドキュメントはありません。公開されたCarbon/Cocoa API。

14
miguel.de.icaza

「ココアとは?」 Cocoa Fundamentals Guide のセクションには、アーキテクチャのすばらしいイラストが下から上にたくさんあります。

3
Kevin Cantu

OS X内部の最良のリソースは Amit SinghのMac OS X内部 です。驚くほど詳細ですが、残念ながらOS X 10.4までしかカバーしていません。 Googleブックには プレビュー があります。

OS Xに関するAppleのドキュメント もすばらしいリソースであり、明らかに最新の情報です。

2
redacted

XQuartzは、Mac OS Xで動作するX.org X Window Systemのオープンソースプロジェクトです。彼らの 開発者Wikiとメーリングリスト は、あなたの質問に役立つはずです。それらに答えるプロジェクト。

1
invert

以前のMacOSバージョンでは、解除はQuickDrawによって行われました。 OS Xでは、Cocoaに取って代わられました...

ただし、X11を単純に並列化するわけではありません。たとえば、X11にはオーディオは含まれていませんが、Cocoaには含まれています。

1
Kevin Cantu