원문 보기: https://dawoum.duckdns.org/wiki/Windowing_system
컴퓨팅에서, 윈도잉 시스템 (또는 윈도우 시스템)은 디스플레이 화면의 여러 부분을 개별적으로 관리하는 소프트웨어 모음입니다. 그것은 사용자 인터페이스에 대한 WIMP (윈도우, 아이콘, 메뉴, 포인터) 패러다임을 구현하는 유형의 그래픽 사용자 인터페이스 (GUI)입니다.
현재 실행 중인 각 응용 프로그램은 사용자에게 GUI를 제공하기 위해 보통 크기를 조절할 수 있고 보통 디스플레이의 직사각형 표면이 할당됩니다; 이들 윈도우는 서로 겹칠 수 있으며, 그것들이 겹치는 것을 허용하지 않는 타일링 인터페이스와 대조적입니다. 보통 각 윈도우 주위에 윈도우 모양새가 그려집니다. 윈도우 모양새와 윈도우 내부의 사용 가능한 위젯 (슬라이더, 단추 등 사용자와의 직접적인 상호작용을 위한 그래픽 요소)의 프로그래밍은 위젯 툴킷을 사용하여 쉽고 간소화됩니다.
Technical details
윈도잉 시스템의 주요 구성 요소는 보통 디스플레이 서버라고 하지만, 윈도우 서버나 컴포지터와 같은 대안적인 명칭도 사용됩니다. 윈도우에서 실행되고 GUI를 표시하는 어떤 응용 프로그램은 디스플레이 서버의 클라이언트입니다. 디스플레이 서버와 그 클라이언트는 응용 프로그램 프로그래밍 인터페이스 (API) 또는 보통 디스플레이 서버 프로토콜이라고 불리는 통신 프로토콜을 통해 서로 통신하며, 디스플레이 서버는 클라이언트와 사용자 사이의 중재자 역할을 합니다. 그것은 키보드, 포인팅 장치, 또는 터치스크린과 같은 모든 부착된 입력 장치에서 커널이 수신하는 모든 입력을 커널에서 수신하고 올바른 클라이언트로 전송합니다. 디스플레이 서버는 역시 클라이언트의 컴퓨터 모니터 출력을 담당합니다. 사운드의 출력은 보통 디스플레이 서버에 의해 관리되지 않지만, 사운드 볼륨은 보통 GUI 애플릿을 통해 처리되고 어떤 응용 프로그램이 맨 위에 있는지 결정하는 것은 디스플레이 서버입니다. 윈도잉 시스템은 컴퓨터 사용자에게 여러 프로그램을 동시에 사용하도록 활성화합니다. 각 프로그램은 일반적으로 화면의 직사각형 영역인 자체 윈도우에 GUI를 표시합니다.
프로그래머의 관점에서, 윈도잉 시스템은 그래픽 기본 요소를 구현합니다. 예를 들어: 글꼴을 렌더링하거나 화면에 선을 그리는 것입니다. 그것은 윈도우 관리자와 같은 그래픽 인터페이스의 상위 요소에서 사용할 수 있도록 그래픽 하드웨어의 추상화를 제공합니다.
디스플레이 서버 프로토콜은 네트워크가 가능하거나 심지어 네트워크 투명성을 가질 수 있어, 씬 클라이언트 구현을 용이하게 해줍니다.
Display server
디스플레이 서버 또는 윈도우 서버는 클라이언트의 입력과 출력을 운영 시스템의 나머지 부분, 하드웨어, 및 서로 사이에 조정하는 것이 주요 작업인 프로그램입니다. 디스플레이 서버는 디스플레이 서버 프로토콜을 통해 클라이언트와 통신하며, 이 통신 프로토콜은 네트워크-투명성 또는 단순히 네트워크-가능성일 수 있습니다.
디스플레이 서버는 모든 그래픽 사용자 인터페이스, 특히 윈도잉 시스템의 핵심 구성 요소입니다.
독립형 디스플레이 서버의 서버/클라이언트 관계는 다소 반직관적이며, 이것에서 "서버"는 보통 대형 원격 기계로 생각되고, 반면에 독립형 "디스플레이 서버"는 대부분의 클라이언트가 대형 중앙 기계에서 실행되는 소규모 지역 시스템입니다. 설명은 디스플레이 서버가 디스플레이 및 입력 장치의 서비스를 제공한다는 것입니다.
Display server communications protocols
X11
디스플레이 서버의 한 예제는 커널 (보통 리눅스 또는 BSD와 같은 유닉스-계열 커널) 꼭대기에서 실행되는 X.Org 서버입니다. 그것은 사용자 입력 데이터 (예를 들어, 리눅스의 evdev에서)를 수신하고 클라이언트 중 하나에 전달합니다. 디스플레이 서버는 역시 클라이언트로부터 데이터를 수신합니다; 그것은 데이터를 처리하고, 합성을 수행하고, 리눅스에서는 데이터를 DRM, gem, 또는 KMS 드라이버의 세 가지 커널 구성 요소 중 하나에 전달합니다. 구성 요소는 데이터를 프레임버퍼에 쓰고 프레임버퍼의 컨텐츠는 연결된 화면으로 전송되어 표시됩니다. X는 GLX에 의존합니다.
디스플레이 서버 개념의 구현 중 하나는 X Window System이며, 특히 실제로 사용되는 버전인 X.Org Server 및 Xlib 및 XCB 클라이언트 라이브러리입니다. X.Org Server는 디스플레이 서버이지만, 현재 구현에서 그것은 합성을 수행하기 위해 두 번째 프로그램, 합성 윈도우 관지라에 의존합니다. 예로는 Mutter 또는 KWin이 있습니다.
X11 디스플레이 서버 프로토콜을 구현하는 디스플레이 서버의 주요 예로는 X.Org Server, XFree86, XQuartz, 및 Cygwin/X가 있으며, X11 디스플레이 서버 프로토콜을 구현하는 클라이언트 라이브러리로는 Xlib 및 XCB가 있습니다.
Wayland
Wayland 디스플레이 서버 프로토콜을 구현하는 디스플레이 서버는 Wayland 컴포지터라고 불립니다. 임의의 디스플레이 서버와 마찬가지로, Wayland 컴포지터는 클라이언트에 대한 입력과 출력을 처리하고, X11과 달리 합성도 담당합니다. 예로는 Weston, Mutter, KWin, 또는 Enlightenment가 있습니다.
Wayland 컴포지터는 Wayland 디스플레이 서버 프로토콜을 통해 Wayland 클라이언트와 통신합니다. 이 프로토콜은 클라이언트가 EGL 렌더링 API를 사용하여 프레임버퍼에 직접 데이터를 쓸 수 있도록 정의합니다. 디스플레이 서버는 여전히 어떤 윈도우가 꼭대기에 있고 따라서 사용자에게 보이는지 결정하고 evdev에서 클라이언트로 입력 장치와 관련된 데이터를 전달하는 일을 담당합니다.
Wayland는 Fedora와 같은 일부 리눅스 데스크탑 배포판에서 어느 정도 사용됩니다. 그것은 역시 모바일 컴퓨팅에 적합하고 예를 들어 스마트폰-중심 프로젝트와 태블릿-중심 프로젝트 Tizen, Sailfish OS, 및 AsteroidOS에 의해 채택되어 왔습니다.
Wayland 구현은 MIT 라이선스, libwayland-client, 및 libwayland-server 라이브러리에 따라 제공됩니다.
ChromeOS에 Wayland 지원을 추가하기 위한 노력이 진행 중입니다.
Mir
Mir 디스플레이 서버는 X11 및 Wayland에 의해 사용되는 것과 다른 자체 Mir 디스플레이 서버 프로토콜과 함께 제공됩니다. Mir은 추가적으로 X11 프로토콜을 지원합니다. 그것은 Canonical에 의해 개발되었고 Ubuntu에 대해 선택 디스플레이 서버가 되도록 의도되었습니다. 2017년 기준, 그것은 우분투 데스크탑 에디션에 대해 Wayland 디스플레이 서버로 대체되어 왔습니다.
GPLv3 아래에서 Mir 디스플레이 서버, libmir-server, 및 libmir-client 라이브러리의 구현이 제공됩니다.
Windowing systems with APIs
SurfaceFlinger
Google은 Android에 대해 SurfaceFlinger라는 디스플레이 서버를 개발했습니다:
Android에서 모든 것은 "표면"에 렌더링됩니다; "표면"은 응용 프로그램에 의해 생성되고 SurfaceFlinger에 의해 관리되는 대기열에 배치됩니다.
또 다른 Android-전용 해결책은 "Gralloc"입니다. Gralloc은 장치 메모리를 처리하며, 즉, 그것은 할당, 중재를 수행하고, Android/Linux 펜스 파일 설명자를 통해 동기화를 처리합니다. Gralloc은 Mesa의 Generic Buffer Management (GBM) 또는 Nvidia의 EGLStream와 같은 다른 해결책과 경쟁합니다. Gralloc 하드웨어 추상화 계층 (HAL)은 "표면" 아래에 있는 버퍼를 할당하기 위해 사용됩니다.
Android에서 합성을 위해, Surface는 SurfaceFlinger로 전송되며, 이는 OpenGL ES를 합성을 수행하도록 사용합니다.
하드웨어 컴포저 HAL (HWC)은 Android 3.0에 도입되었고 수년에 걸쳐 꾸준히 발전해 왔습니다. 주요 목적은 사용 가능한 하드웨어로 버퍼를 합성하는 가장 효율적인 방법을 결정하는 것입니다. HAL로서, 구현은 장치-지정이고 보통 디스플레이 하드웨어 OEM에 의해 수행됩니다.
Quartz Compositor
Apple의 macOS 제품군 운영 시스템에서, Quartz Compositor는 윈도잉 시스템에서 디스플레이 서버와 윈도우 관리자의 역할을 수행합니다.
Desktop Window Manager
Microsoft Windows에 대해, Windows Vista부터, Desktop Window Manager는 하드웨어 가속의 사용을 그래픽 사용자 인터페이스를 렌더링하기 위해 활성화합니다. 그것은 원래 투명도, 3D 윈도우 전환, 등의 효과를 허용하는 새로운 "Windows Aero" 사용자 환경의 일부를 활성화하기 위해 만들어졌습니다. 그것은 역시 Windows Server 2008에도 포함되어 있지만, "데스크탑 경험" 기능과 호환되는 그래픽 드라이버를 설치해야 합니다. Windows 8부터 DWM은 비활성화될 수 없고 적합한 그래픽 카드가 설치되지 않으면 소프트웨어 렌더링됩니다.
List of windowing systems
For Unix-like operating systems
- 8½ and rio for Plan 9
- fbui (with a modified Linux kernel)
- HP Windows/9000 (on early versions of HP-UX)
- CMU Andrew Window Manager
- Sapphire for the PERQ
- Whitechapel Oriel
- Silicon Graphics MEX
- ManaGeR (MGR)
- Metisse
- Mir
- NeWS / OpenWindows
- NeXT DPS
- Orbital (Redox)
- Qt Extended
- Quartz Compositor (macOS)
- SunView
- Twin (Text WINdows)
- W Window System
- Wayland
- X Window System
- XFast
- Xynth
For Windows NT-family operating systems
- Desktop Window Manager (DWM) in Microsoft Windows (Vista and later)
- ReactOS Explorer
- Classic Shell
- Pokki
- RetroUI
Web windowing systems
- Dojo
- ExtJS
- TIBCO General Interface
- Web Window Manager
Other
- DM
- GEM
- Intuition
- Microwindows
- MiniGUI
- OOHG
- Visi On
- VWS (VAX Workstation Software)
- mpx/mux (for the Bell Labs Blit terminal)
- Symbolics Dynamic Windows
Microsoft Windows (XP, 9x, 및 이전 버전), 클래식 Mac OS (버전 9 및 이전 버전), 및 Palm OS와 같은 일부 시스템에는 OS와 통합된 윈도잉 시스템이 포함되어 있습니다.