it-swarm-korea.com

Mac OS X의 윈도우 시스템의 아키텍처는 무엇입니까?

나는 클라이언트가 소켓을 통해 서버 프로세스에 연결하고 윈도우 서버로 작업을 보내 자신을 대신하여 특정 작업을 수행하는 X11 시스템의 작동 방식에 대해 잘 알고 있습니다.

그러나 나는 GUI 응용 프로그램이 Mac OS X의 윈도우 시스템과 상호 작용하는 방식을 설명하는 것을 이해하지 못합니다 (좋은 문서를 찾을 수 없었습니다). 제가 가진 몇 가지 질문은 다음과 같습니다.

  • 앱은 윈도우 시스템에서 이벤트를 어떻게 수신합니까?
  • 앱이 커널 또는 일부 윈도우 시스템 서버에 등록해야합니까?
  • 윈도우 시스템은 앱이 디스플레이를 업데이트하도록 어떻게 요청합니까?
  • 앱은 다시 표시 작업을 어떻게 트리거합니까?
  • 소켓 기반 프로토콜이나 윈도우 시스템에 대한 다른 RPC 시스템이 있습니까?
  • 윈도우 시스템 또는 응용 프로그램이 하드웨어에 직접 액세스 할 수 있습니까?
  • 클라이언트 앱과 윈도우 시스템간에 사용할 수있는 작업은 무엇입니까?
35
miguel.de.icaza

이것이 내가 지금까지 모을 수 있었던 것입니다.

응용 프로그램은 일종의 개인 API를 통해 WindowServer 프로세스와 통신합니다. WindowServer 프로세스는 실제로 하드웨어 이벤트 (마우스, 키보드)를 가져 와서이를 클라이언트 응용 프로그램에 전달하는 프로세스입니다. (이것은 여전히 ​​열려있는 질문입니다.있는 경우 어떤 프로토콜을 사용합니까, Mach 포트와 MIG를 사용합니까, 또는 일부 소켓 기반 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 Compositor입니다. 일반적으로 애플리케이션은 CoreGraphics API (CGXXX 기능)에 노출 된 Quartz2D API를 사용합니다. 애플리케이션은 CoreGraphics "컨텍스트"(CGContext)를 생성하고 거기에 그립니다. 컨텍스트가 빅 비트 맵으로 완료 될 때 푸시되는지 또는 작업이 X11에서와 같이 서버로 전송되는지 여부는 여전히 열린 질문입니다.

WindowServer 프로세스의 특정 측면, 일반적으로 설정 애플리케이션에서 수행되는 일종의 구성 설정을 제어하기 위해 노출 된 제한된 API가 있지만 앱이 실제로 서버에서 그래픽 요청 또는 펌프 메시지를 전달하는 방법에 대한 문서는 없습니다. Carbon/Cocoa API가 노출되었습니다.

14
miguel.de.icaza

"코코아는 무엇입니까?" Cocoa Fundamentals Guide 섹션에는 아래에서 위로 아키텍처에 대한 훌륭한 그림이 많이 있습니다.

3
Kevin Cantu

OS X 내부에 가장 적합한 리소스는 Amit Singh의 Mac OS X 내부 입니다. 놀랍도록 상세하지만 안타깝게도 OS X 10.4까지만 다룹니다. Google 도서에는 미리보기 가 있습니다.

Apple의 OS X 문서 도 Nice 리소스이며 분명히 최신입니다.

2
redacted

XQuartz는 Mac OS X에서 실행되는 X.org X Window System의 오픈 소스 프로젝트입니다. 그들의 개발자 위키 및 메일 링리스트 질문에 도움이 될 것입니다. 그에 대답하는 프로젝트.

1
invert

이전 MacOS 버전에서는 QuickDraw가 해제했습니다. OS X에서는 Cocoa로 대체되었습니다.

하지만 단순히 병렬 X11이 아닙니다. 예를 들어 X11에는 오디오가 포함되어 있지 않지만 Cocoa에는 포함되어 있습니다.

1
Kevin Cantu