나는 클라이언트가 소켓을 통해 서버 프로세스에 연결하고 윈도우 서버에 작업을 보내 대신 특정 작업을 수행하는 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 외에 애플리케이션이 실제로 그래픽 요청을 전달하거나 서버에서 메시지를 보내는 방법에 대한 문서는 없습니다. /코코아 API.
답변2
“코코아란 무엇인가?”에 관한 부분코코아 기본 가이드아래에서 위로 건축에 대한 훌륭한 일러스트레이션이 많이 있습니다.
답변3
OS X 내부의 최고의 리소스는Amit Singh의 Mac OS X 내부. 매우 상세하지만 불행히도 OS X 10.4 이하에만 적용됩니다. Google 도서에는시사.
Apple의 OS X 문서또한 훌륭한 리소스이며 최신 버전입니다.
답변4
이전 버전의 MacOS에서는 승격이 QuickDraw로 이루어졌으나 OS X에서는 Cocoa로 대체되었습니다.
하지만 X11과 단지 평행을 이루는 것은 아닙니다. 예를 들어 X11에는 오디오가 포함되어 있지 않지만 Cocoa에는 포함되어 있습니다.