¿Cuál es la arquitectura del sistema de ventanas de Mac OS X?

34

Estoy familiarizado con el funcionamiento del sistema X11, donde los clientes se conectan mediante un socket al proceso del servidor y envían operaciones al servidor de Windows para realizar ciertas operaciones en su nombre.

Pero no entiendo (y no pude encontrar buenos documentos) que describa cómo una aplicación GUI interactúa con el sistema de ventanas en Mac OS X. Algunas de las preguntas que tengo incluyen:

  • ¿Cómo recibe una aplicación eventos del sistema de ventanas?
  • ¿La aplicación necesita registrarse con el kernel o con algún servidor del sistema de ventanas?
  • ¿Cómo solicita el sistema de ventanas que una aplicación actualice su pantalla?
  • ¿Cómo desencadena una aplicación una operación de re-visualización?
  • ¿Existe un protocolo basado en socket o algún otro sistema RPC para el sistema de ventanas?
  • ¿El sistema de ventanas o la aplicación tienen acceso directo al hardware?
  • ¿Cuáles son las operaciones disponibles entre las aplicaciones cliente y el sistema de ventanas?
miguel.de.icaza
fuente

Respuestas:

14

Esto es lo que he podido reunir hasta ahora:

Las aplicaciones se comunican a través de algún tipo de API privada al proceso WindowServer, el proceso WindowServer es el que realmente recibe eventos de hardware (mouse, teclado) y los envía a las aplicaciones del cliente. (esta sigue siendo una pregunta abierta: ¿qué protocolo usan si es que usan? ¿Usan puertos Mach y MIG, o alguna API basada en Socket? No estoy seguro).

Alguna información está aquí:

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

WindowServer es el compositor de cuarzo. Por lo general, las aplicaciones usan la API Quartz2D que se expone en la API CoreGraphics (funciones CGXXX). Las aplicaciones crean "Contextos" de CoreGraphics (CGContext) y dibujan allí. Si el contexto se empuja cuando se hace como un gran mapa de bits, o si las operaciones se envían al servidor como si estuvieran en X11 sigue siendo una pregunta abierta.

Hay una API limitada expuesta para controlar ciertos aspectos del proceso de WindowServer, el tipo de configuración que generalmente se realiza desde la aplicación Configuración, pero no hay documentación sobre cómo las aplicaciones realmente comunican solicitudes gráficas o envían mensajes desde el servidor, aparte de las API de carbono / cacao expuestas.

miguel.de.icaza
fuente
el enlace está roto
Mick
3

El "¿Qué es el cacao?" La sección de la Guía de Fundamentos de Cocoa tiene un montón de excelentes ilustraciones de la arquitectura de abajo hacia arriba.

Kevin Cantu
fuente
2
(lo siento, todavía no puedo publicar notas): Quartz o Core Graphics es el sistema de dibujo y ventanas en OS X (que reemplaza a QuickDraw). Core Graphics es una parte de Cocoa (Cocoa en su conjunto es más comparable a toda la API Win32, en lugar de GDI, Direct2D o X)
KellyClowers
1

XQuartz es el proyecto de código abierto del sistema X.org X Window que se ejecuta en Mac OS X. Su wiki de desarrollador y su lista de correo deberían ayudarlo con sus preguntas, parece que necesita a alguien profundamente involucrado en el proyecto para responderlas.

invertir
fuente
44
Correcto, pero eso solo cubre XQuartz, que es solo un programa que habla con su verdadero sistema de ventanas. La pregunta era sobre cómo las aplicaciones como XQuarts o Finder hablan con este sistema de ventanas
miguel.de.icaza
1

En versiones anteriores de MacOS, el levantamiento fue realizado por QuickDraw; en OS X, que ha sido reemplazado por Cocoa ...

Sin embargo, no es simplemente paralelo a X11. Por ejemplo, X11 no incluye audio, pero Cocoa sí.


fuente