Mac OS X 的窗口系统的架构是什么?

mig*_*aza 36 osx window-manager

我熟悉 X11 系统的工作原理,其中客户端通过套接字连接到服务器进程并将操作发送到窗口服务器以代表它们执行某些操作。

但我不明白(我找不到好的文档)描述 GUI 应用程序如何与 Mac OS X 上的窗口系统交互。我的一些问题包括:

  • 应用程序如何从窗口系统接收事件?
  • 应用程序是否需要向内核或某些窗口系统服务器注册?
  • 窗口系统如何请求应用程序更新其显示?
  • 应用如何触发重新显示操作?
  • 是否有基于套接字的协议,或者窗口系统的其他 RPC 系统?
  • 窗口系统或应用程序是否可以直接访问硬件?
  • 客户端应用程序和窗口系统之间有哪些可用的操作?

mig*_*aza 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 合成器。通常应用程序使用在 CoreGraphics API(CGXXX 函数)中公开的 Quartz2D API。应用程序创建 CoreGraphics“上下文”(CGContext)并在那里绘制。上下文是否在作为大位图完成时被推送,或者操作是否像在 X11 上一样发送到服务器仍然是一个悬而未决的问题。

公开了一个有限的 API 来控制 WindowServer 进程的某些方面,这种配置设置通常从 Settings 应用程序完成,但没有关于应用程序如何实际从服务器通信图形请求或泵消息的文档,除了暴露的碳/可可 API。


inv*_*ert 1

XQuartz 是在 Mac OS X 上运行的 X.org X Window 系统的开源项目。他们的开发人员 wiki 和邮件列表应该可以帮助您解决问题,似乎您需要深入参与该项目的人来回答这些问题。

  • 是的,但这仅涵盖 XQuartz,它只是一个与真实窗口系统对话的程序。问题是像 XQuarts 或 Finder 这样的应用程序如何与这个窗口系统对话 (4认同)