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


34

클라이언트가 소켓을 통해 서버 프로세스에 연결하고 창 서버로 작업을 보내서 자신을 대신하여 특정 작업을 수행하는 X11 시스템의 작동 방식에 익숙합니다.

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

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

답변:


14

이것이 내가 지금까지 수집 한 것입니다.

응용 프로그램은 일종의 개인 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가 있지만 앱이 실제로 서버에서 그래픽 요청 또는 펌프 메시지를 전달하는 방법에 대한 문서는 없습니다. 노출 된 카본 / 코코아 API


링크가 끊어짐
Mick

3

"코코아 란?" Cocoa Fundamentals Guide의 섹션 에는 아키텍쳐에 대한 멋진 일러스트가 있습니다.


2
(죄송하지만 아직 메모를 게시 할 수 없음) : Quartz 또는 Core Graphics는 OS X의 그리기 및 창 시스템입니다 (QuickDraw 대체). 코어 그래픽은 Cocoa의 한 부분입니다 (Cocoa는 GDI, Direct2D 또는 X가 아닌 전체 Win32 API와 비교할 수 있습니다)
KellyClowers


1

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


4
그러나 XQuartz는 실제 윈도우 시스템과 통신하는 프로그램 일뿐입니다. 문제는 XQuarts 또는 Finder와 같은 앱이이 윈도우 시스템과 어떻게 대화하는지에 관한 것입니다.
miguel.de.icaza

1

이전 MacOS 버전에서는 리프팅이 QuickDraw에 의해 수행되었습니다. OS X에서는 Cocoa로 대체되었습니다 ...

그것은 단순히 X11과 평행하지 않습니다. 예를 들어 X11에는 오디오가 포함되어 있지 않지만 Cocoa에는 오디오가 포함되어 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.