Wie ist die Architektur des Fenstersystems von Mac OS X?

Wie ist die Architektur des Fenstersystems von Mac OS X?

Ich bin mit der Funktionsweise des X11-Systems vertraut, bei dem Clients über einen Socket eine Verbindung zum Serverprozess herstellen und Vorgänge an den Fensterserver senden, um in ihrem Namen bestimmte Vorgänge auszuführen.

Ich verstehe jedoch nicht (und konnte keine guten Dokumente finden), wie eine GUI-Anwendung mit dem Fenstersystem unter Mac OS X interagiert. Einige meiner Fragen sind:

  • Wie empfängt eine App Ereignisse vom Fenstersystem?
  • Muss sich die App beim Kernel oder einem Fenstersystemserver registrieren?
  • Wie fordert das Fenstersystem eine App auf, ihre Anzeige zu aktualisieren?
  • Wie löst eine App einen Neuanzeigevorgang aus?
  • Gibt es ein Socket-basiertes Protokoll oder ein anderes RPC-System für das Fenstersystem?
  • Verfügt das Fenstersystem oder die Anwendung über direkten Hardwarezugriff?
  • Welche Operationen sind zwischen Client-Apps und dem Fenstersystem verfügbar?

Antwort1

Dies ist, was ich bisher herausfinden konnte:

Anwendungen kommunizieren über eine Art private API mit dem WindowServer-Prozess. Der WindowServer-Prozess ist derjenige, der tatsächlich Hardwareereignisse (Maus, Tastatur) empfängt und diese an die Clientanwendungen weiterleitet. (Dies ist noch eine offene Frage: Welches Protokoll verwenden sie, wenn überhaupt, verwenden sie Mach-Ports und MIG oder eine Socket-basierte API, ich bin nicht sicher.)

Einige Informationen finden Sie hier:

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

Der WindowServer ist der Quartz Compositor. Normalerweise verwenden Anwendungen die Quartz2D-API, die in der CoreGraphics-API (CGXXX-Funktionen) verfügbar ist. Anwendungen erstellen CoreGraphics-„Kontexte“ (CGContext) und zeichnen dort. Ob der Kontext gepusht wird, wenn er als großes Bitmap erstellt wird, oder ob die Operationen wie bei X11 an den Server gesendet werden, ist noch eine offene Frage.

Es steht eine eingeschränkte API zur Verfügung, um bestimmte Aspekte des WindowServer-Prozesses zu steuern, also die Art von Konfigurationseinstellungen, die normalerweise über die Anwendung „Einstellungen“ vorgenommen werden. Abgesehen von den bereitgestellten Carbon/Cocoa-APIs gibt es jedoch keine Dokumentation darüber, wie Apps tatsächlich Grafikanforderungen kommunizieren oder Nachrichten vom Server übermitteln.

Antwort2

Der Abschnitt „Was ist Kakao?“ derLeitfaden zu den Grundlagen von Kakaoenthält eine Reihe großartiger Illustrationen der Architektur von Grund auf.

Antwort3

Die beste Quelle für interne Informationen zu OS X istAmit Singhs Mac OS X-Interna. Es ist erstaunlich detailliert, deckt aber leider nur OS X bis 10.4 ab. Google Books hat eineVorschau.

Apples Dokumentation für OS Xist auch eine gute Ressource und offensichtlich aktueller.

Antwort4

In früheren MacOS-Versionen wurde das Anheben durch QuickDraw durchgeführt; in OS X wurde dies durch Cocoa ersetzt ...

Es ist jedoch nicht einfach eine Parallele zu X11. Beispielsweise enthält X11 kein Audio, Cocoa jedoch schon.

verwandte Informationen