
Я знаком с тем, как работает система X11, где клиенты подключаются через сокет к серверному процессу и отправляют операции на сервер Windows для выполнения определенных операций от их имени.
Но я не понимаю (и не смог найти хороших документов), как приложение с графическим интерфейсом взаимодействует с оконной системой в Mac OS X. Вот некоторые из вопросов, которые у меня возникли:
- Как приложение получает события от оконной системы?
- Нужно ли приложению регистрироваться на ядре или на каком-либо сервере оконной системы?
- Каким образом система управления окнами запрашивает у приложения обновление отображения?
- Как приложение запускает операцию повторного отображения?
- Существует ли протокол на основе сокетов или какая-либо другая система RPC для оконной системы?
- Имеет ли оконная система или приложение прямой доступ к оборудованию?
- Какие операции доступны между клиентскими приложениями и оконной системой?
решение1
Вот что мне удалось собрать на данный момент:
Приложения взаимодействуют с процессом WindowServer через некий частный API, процесс WindowServer фактически получает аппаратные события (мышь, клавиатура) и отправляет их клиентским приложениям. (Это все еще открытый вопрос: какой протокол они используют, если используют, используют ли они порты Mach и MIG или какой-то API на основе сокетов, не уверен).
Некоторая информация здесь:
WindowServer — это Quartz Compositor. Обычно приложения используют Quartz2D API, который представлен в CoreGraphics API (функции CGXXX). Приложения создают CoreGraphics "Contexts" (CGContext) и рисуют там. Выталкивается ли контекст, когда он делается как большой bitmap, или операции отправляются на сервер, как в X11, — все еще остается открытым вопросом.
Существует ограниченный API, доступный для управления определенными аспектами процесса WindowServer, своего рода настройки конфигурации, которые обычно выполняются из приложения «Настройки», но нет никакой документации о том, как приложения на самом деле обмениваются графическими запросами или передают сообщения с сервера, за исключением предоставленных API Carbon/Cocoa.
решение2
Раздел «Что такое какао?»Руководство по основам какаосодержит множество замечательных иллюстраций архитектуры снизу вверх.
решение3
Лучший ресурс по внутренним компонентам OS X —Внутреннее устройство Mac OS X Амита Сингха. Он удивительно подробный, но, к сожалению, охватывает только OS X до 10.4. В Google books естьпредварительный просмотр.
Документация Apple для OS Xтакже хороший ресурс, и, очевидно, более современный.
решение4
В предыдущих версиях MacOS подъем выполнялся с помощью QuickDraw; в OS X его заменил Cocoa...
Но это не просто параллель X11. Например, X11 не включает аудио, а Cocoa включает.