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


34

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

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

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

回答:


14

これは私がこれまでに収集できたものです。

アプリケーションは、何らかのプライベートAPIを介してWindowServerプロセスと通信します。WindowServerプロセスは、実際にハードウェアイベント(マウス、キーボード)を取得し、それらをクライアントアプリケーションにディスパッチします。(これはまだ未解決の質問です。もしあれば、どのプロトコルを使用し、MachポートとMIG、またはいくつかのSocketベースの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 Compositorです。通常、アプリケーションはCoreGraphics API(CGXXX機能)で公開されたQuartz2D APIを使用します。アプリケーションはCoreGraphicsの「コンテキスト」(CGContext)を作成し、そこに描画します。大きなビットマップとして実行されたときにコンテキストがプッシュされるかどうか、または操作がX11上にあるようにサーバーに送信されるかどうかは未解決の問題です。

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


リンクが壊れています
ミック

3

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


2
(申し訳ありませんが、まだメモを投稿できません):QuartzまたはCore Graphicsは、OS Xの描画およびウィンドウシステムです(QuickDrawに置き換わります)。コアグラフィックスはCocoaの一部です(GDI、Direct2D、またはXではなく、全体としてWin32 APIに匹敵するCocoa)
-KellyClowers


1

XQuartzは、Mac OS Xで実行されるX.org X Window Systemのオープンソースプロジェクトです。開発者向けのwikiとメーリングリストは、質問に役立つはずです。これらに答えるには、プロジェクトに深く関与する人が必要なようです。


4
確かに、それはXQuartzのみを対象としています。XQuartzは、実際のウィンドウシステムと通信するプログラムです。質問は、このウインドウシステムにXQuartsまたはFinderの話のようなアプリケーションを行う方法についてでした
miguel.de.icaza

1

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.