Mac OS X 的窗口系统的架构是怎样的?

Mac OS X 的窗口系统的架构是怎样的?

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

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

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

答案1

这是我到目前为止能够收集到的:

应用程序通过某种私有 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 进程的某些方面,通常是从“设置”应用程序完成的配置设置类型,但没有关于应用程序如何实际通信图形请求或从服务器发送消息的文档,除了暴露的 Carbon/Cocoa API。

答案2

“什么是可可?”的部分可可基础指南有一堆从下到上的架构的精彩插图。

答案3

OS X 内部的最佳资源是Amit Singh 的 Mac OS X 内部结构。它非常详细,但不幸的是仅涵盖 OS X 10.4 及以下版本。谷歌图书有一个预览

Apple 的 OS X 文档也是一个很好的资源,而且显然是最新的。

答案4

在之前的 MacOS 版本中,提升是由 QuickDraw 完成的;在 OS X 中,它已被 Cocoa 取代......

但它并不只是与 X11 平行。例如,X11 不包含音频,但 Cocoa 包含音频。

相关内容