나는 클라이언트가 소켓을 통해 서버 프로세스에 연결하고 윈도우 서버로 작업을 보내 자신을 대신하여 특정 작업을 수행하는 X11 시스템의 작동 방식에 대해 잘 알고 있습니다.
그러나 나는 GUI 응용 프로그램이 Mac OS X의 윈도우 시스템과 상호 작용하는 방식을 설명하는 것을 이해하지 못합니다 (좋은 문서를 찾을 수 없었습니다). 제가 가진 몇 가지 질문은 다음과 같습니다.
이것이 내가 지금까지 모을 수 있었던 것입니다.
응용 프로그램은 일종의 개인 API를 통해 WindowServer 프로세스와 통신합니다. WindowServer 프로세스는 실제로 하드웨어 이벤트 (마우스, 키보드)를 가져 와서이를 클라이언트 응용 프로그램에 전달하는 프로세스입니다. (이것은 여전히 열려있는 질문입니다.있는 경우 어떤 프로토콜을 사용합니까, Mach 포트와 MIG를 사용합니까, 또는 일부 소켓 기반 API를 사용하는지 확실하지 않습니다).
여기에 몇 가지 정보가 있습니다.
WindowServer는 Quartz Compositor입니다. 일반적으로 애플리케이션은 CoreGraphics API (CGXXX 기능)에 노출 된 Quartz2D API를 사용합니다. 애플리케이션은 CoreGraphics "컨텍스트"(CGContext)를 생성하고 거기에 그립니다. 컨텍스트가 빅 비트 맵으로 완료 될 때 푸시되는지 또는 작업이 X11에서와 같이 서버로 전송되는지 여부는 여전히 열린 질문입니다.
WindowServer 프로세스의 특정 측면, 일반적으로 설정 애플리케이션에서 수행되는 일종의 구성 설정을 제어하기 위해 노출 된 제한된 API가 있지만 앱이 실제로 서버에서 그래픽 요청 또는 펌프 메시지를 전달하는 방법에 대한 문서는 없습니다. Carbon/Cocoa API가 노출되었습니다.
"코코아는 무엇입니까?" Cocoa Fundamentals Guide 섹션에는 아래에서 위로 아키텍처에 대한 훌륭한 그림이 많이 있습니다.
OS X 내부에 가장 적합한 리소스는 Amit Singh의 Mac OS X 내부 입니다. 놀랍도록 상세하지만 안타깝게도 OS X 10.4까지만 다룹니다. Google 도서에는 미리보기 가 있습니다.
Apple의 OS X 문서 도 Nice 리소스이며 분명히 최신입니다.
XQuartz는 Mac OS X에서 실행되는 X.org X Window System의 오픈 소스 프로젝트입니다. 그들의 개발자 위키 및 메일 링리스트 질문에 도움이 될 것입니다. 그에 대답하는 프로젝트.
이전 MacOS 버전에서는 QuickDraw가 해제했습니다. OS X에서는 Cocoa로 대체되었습니다.
하지만 단순히 병렬 X11이 아닙니다. 예를 들어 X11에는 오디오가 포함되어 있지 않지만 Cocoa에는 포함되어 있습니다.