
나는 클라이언트가 소켓을 통해 서버 프로세스에 연결하고 윈도우 서버에 작업을 보내 대신 특정 작업을 수행하는 X11 시스템 작동 방식을 잘 알고 있습니다.
그러나 나는 GUI 응용 프로그램이 Mac OS X의 윈도우 시스템과 어떻게 상호 작용하는지 설명하는 것을 이해하지 못합니다(그리고 좋은 문서를 찾을 수도 없습니다). 내가 가진 몇 가지 질문은 다음과 같습니다.
- 앱은 윈도우 시스템에서 이벤트를 어떻게 수신하나요?
- 앱을 커널이나 일부 윈도우 시스템 서버에 등록해야 합니까?
- 윈도우 시스템은 앱이 디스플레이를 업데이트하도록 어떻게 요청하나요?
- 앱은 어떻게 다시 표시 작업을 실행하나요?
- 윈도우 시스템에 소켓 기반 프로토콜이나 다른 RPC 시스템이 있습니까?
- 윈도우 시스템이나 애플리케이션이 하드웨어에 직접 액세스할 수 있나요?
- 클라이언트 앱과 윈도우 시스템 간에 사용할 수 있는 작업은 무엇입니까?
답변1
제가 지금까지 수집한 내용은 다음과 같습니다.
응용 프로그램은 일종의 개인 API를 통해 WindowServer 프로세스와 통신합니다. WindowServer 프로세스는 실제로 하드웨어 이벤트(마우스, 키보드)를 가져와 클라이언트 응용 프로그램에 전달하는 프로세스입니다. (이것은 아직 공개된 질문입니다. 어떤 프로토콜을 사용하는지, Mach 포트와 MIG를 사용하는지, 또는 일부 소켓 기반 API를 사용하는지 확실하지 않습니다.)
일부 정보는 다음과 같습니다.
WindowServer는 Quartz 합성기입니다. 일반적으로 애플리케이션은 CoreGraphics API(CGXXX 기능)에 노출된 Quartz2D API를 사용합니다. 응용 프로그램은 CoreGraphics "컨텍스트"(CGContext)를 생성하고 거기에 그립니다. 큰 비트맵으로 수행될 때 컨텍스트가 푸시되는지 아니면 X11에서와 같이 작업이 서버로 전송되는지 여부는 여전히 열려 있는 질문입니다.
일반적으로 설정 애플리케이션에서 수행되는 일종의 구성 설정인 WindowServer 프로세스의 특정 측면을 제어하기 위해 노출되는 제한된 API가 있지만 앱이 실제로 그래픽 요청을 전달하거나 서버에서 메시지를 펌프하는 방법에 대한 문서는 없습니다. Carbon/Cocoa API가 노출되었습니다.
답변2
"코코아란 무엇인가?" 섹션코코아 기초 가이드아래에서 위로 건축물에 대한 훌륭한 그림이 많이 있습니다.
답변3
OS X 내부를 위한 최고의 리소스는 다음과 같습니다.Amit Singh의 Mac OS X 내부. 놀라울 정도로 상세하지만 불행하게도 OS X 10.4까지만 다루고 있습니다. Google 도서에는시사.
OS X용 Apple 설명서또한 좋은 리소스이며 확실히 최신 버전입니다.
답변4
이전 MacOS 버전에서는 QuickDraw가 리프팅을 수행했습니다. OS X에서는 Cocoa로 대체되었습니다.
하지만 단순히 X11과 평행을 이루는 것은 아닙니다. 예를 들어 X11에는 오디오가 포함되어 있지 않지만 Cocoa에는 포함되어 있습니다.