본문 바로가기
영문 위키피디아 번역

(번역) QEMU

by 다움위키 2023. 12. 22.

QEMU자유와 오픈-소스 하이퍼바이저입니다. 그것은 동적 바이너리 변환을 통해 시스템의 프로세서를 에뮬레이트하고 시스템에 다양한 하드웨어 및 장치 모델 집합을 제공하여, 다양한 게스트 운영 시스템을 실행할 수 있도록 합니다. 그것은 가상 기계를 네이티브에 가까운 속도로 실행하기 위해 커널-기반 가상 기계 (KVM)과 상호 운용합니다. QEMU는 역시 사용자-수준 프로세스에 대한 에뮬레이션을 수행하여, 하나의 아키텍처에 대해 컴파일된 응용 프로그램을 다른 아키텍처에서 실행하는 것을 허용합니다.

Licensing

QEMU는 Fabrice Bellard에 의해 작성되었고, 주로 GNU General Public License (줄여서 GPL)에 따라 라이선스가 부여된 자유 소프트웨어입니다. 다양한 부분이 BSD 라이선스, GNU Lesser General Public License (LGPL) 또는 다른 GPL-호환 라이선스에 따라 출시됩니다.

Operating modes

QEMU에는 여러 작동 모드를 가집니다:

User-mode emulation 이 모드에서, QEMU는 다른 명령어 집합에 대해 컴파일된 단일 리눅스 또는 Darwin/macOS 프로그램을 실행합니다. 시스템 호출은 엔디언 및 32/64 비트 불일치에 대해 썽크됩니다. 빠른 크로스-컴파일과 크로스 디버깅은 사용자 모드 에뮬레이션의 주요 대상입니다. System emulation 이 모드에서, QEMU는 주변 장치를 포함한 전체 컴퓨터 시스템을 에뮬레이트합니다. 그것은 단일 컴퓨터에서 여러 가상 컴퓨터의 가상 호스팅을 제공하기 위해 사용될 수 있습니다. QEMU는 Linux, Solaris, Microsoft Windows, DOS, 및 BSD를 포함한 많은 게스트 운영 시스템을 부팅할 수 있습니다; 그것은 x86, MIPS, 32-bit ARMv7, ARMv8, PowerPC, SPARC, ETRAX CRISMicroBlaze를 포함하여 여러 명령어 집합을 에뮤레이터하는 것을 지원합니다. KVM Hosting 여기서 QEMU는 KVM 이미지의 설정과 마이그레이션을 다룹니다. 그것은 여전히 하드웨어 에뮬레이션과 관련되어 있지만, 게스트의 실행은 QEMU에 의한 요청에 따라 KVM에서 수행됩니다. Xen Hosting QEMU는 오직 하드웨어 에뮬레이션에 관여합니다; 게스트 실행은 Xen 내에서 수행되고 QEMU에서 완전히 숨겨집니다.

Features

QEMU는 실행 중인 모든 프로그램과 함께 가상 기계의 상태를 저장하고 복원할 수 있습니다. 게스트 운영 시스템은 QEMU 내에서 실행하기 위해 패치를 필요로 하지 않습니다.

QEMU는 x86, MIPS64 (릴리스 6까지), SPARC (sun4m 및 sun4u), ARM (Integrator/CP 및 Versatile/PB), SuperH, PowerPC (PRePPower Macintosh), ETRAX CRIS, MicroBlaze, 및 RISC-V를 포함하여 다양한 아키텍처의 에뮬레이트를 지원합니다.

가상 기계는 사용자의 하드 디스크, CD-ROM 드라이브, 네트워크 카드, 오디오 인터페이스, 및 USB 장치를 비롯한 다양한 유형의 물리적 호스트 하드웨어와 인터페이스할 수 있습니다. USB 장치는 완전히 에뮬레이트되거나, 호스트의 USB 장치는 사용될 수 있지만, 관리자 권한을 요구하고 모든 장치에서 작동하지는 않습니다.

가상 디스크 이미지는 게스트 OS가 실제로 사용하는 만큼만 디스크 공간을 차지하는 특수 형식 (qcow 또는 qcow2)으로 저장될 수 있습니다. 이런 식으로, 에뮬레이트된 120 GB 디스크는 호스트에서 수백 메가바이트만 차지할 수 있습니다. QCOW2 형식은 역시 수정되지 않은 다른 기본 이미지 파일과의 차이를 기록하는 오버레이 이미지의 생성을 허용합니다. 이것은 에뮬레이트된 디스크의 내용을 이전 상태로 되돌릴 수 있는 가능성을 제공합니다. 예를 들어, 기본 이미지는 작동하는 것으로 알려진 운영 시스템을 새로 설치할 수 있고, 오버레이 이미지가 사용됩니다. 게스트 시스템이 사용할 수 없게 되면 (바이러스 공격, 우발적인 시스템 파괴 등), 사용자는 오버레이를 삭제하고 이전에 에뮬레이트된 디스크 이미지를 사용할 수 있습니다.

QEMU는 네트워크 주소 변환을 수행함으로써 호스트 시스템의 연결을 공유하는 (다른 모델의) 네트워크 카드를 에뮬레이트할 수 있으며, 게스트에게 호스트와 같은 네트워크를 효과적으로 사용하는 것을 허용합니다. 가상 네트워크 카드는 다른 QEMU 인스턴스의 네트워크 카드 또는 로컬 TAP 인터페이스에도 연결할 수 있습니다. 네트워크 연결은 QEMU에 의해 사용된 TUN/TAP 인터페이스를 호스트 OS의 브리징 기능을 사용하여 호스트 OS의 비가상 이더넷 인터페이스와 브리징하여 달성할 수도 있습니다.

QEMU는 호스트와 게스트 시스템이 통신할 수 있도록 여러 서비스를 통합합니다; 예를 들어 통합 SMB 서버 및 (가상 머신에 대한 수신 연결 허용하기 위해) 네트워크 포트 리다이렉션을 통합합니다. 그것은 역시 부트로더 없이 리눅스 커널을 부팅할 수도 있습니다.

QEMU는 호스트 시스템의 그래픽 출력 방식에 의존하지 않습니다. 대신, 그것은 통합 VNC 서버를 통해 게스트 OS 화면에 접근할 수 있습니다. 그것은 여시 적용 가능한 운영 시스템에서 화면 없이 에뮬레이트된 직렬 회선을 사용할 수도 있습니다.

SMP를 실행하는 여러 CPU를 시뮬레이션하는 것이 가능합니다.

속도 향상을 위한 추가 커널 모듈 (예를 들어 KQEMU)을 사용하거나 네트워크 연결 모델의 특정 모드를 사용하지 않는 한 QEMU는 실행하기 위해 관리 권한을 요구하지 않습니다.

Tiny Code Generator

Tiny Code Generator (TCG)는 실행-시간에 QEMU에 의해 수행된 다른 작업에 컴파일러 (코드 생성기)를 통합하는 대신 특정 버전의 GCC 또는 임의의 컴파일러에 의존하는 단점을 제거하는 것을 목표로 합니다. 전체 번역 작업은 따라서 두 부분으로 구성됩니다: 대상 코드 (TB)의 기본 블록TCG ops – 일종의 기계-독립적 중간 표기법 – 로 다시 작성되고, 이어서 이 표기법이 TCG에 의해 호스트 아키텍처에 대해 컴파일됩니다. JIT (Just-In-Time Compiler) 모드에 대해, 선택적 최적화 패스가 이들 사이에서 수행됩니다.

TCG는 그것이 TCG ops를 번역할 대상을 알 수 있도록 그것이 실행하는 모든 각 아키텍처를 지원하기 위해 작성된 전용 코드가 필요합니다. 만약 아키텍처에 사용할 수 있는 전용 JIT 코드가 없으면, TCG는 TCI (TCG Interpreter)라는 느린 인터프리터 모드로 폴백합니다. 그것은 역시 이전 dyngen ops 대신 TCG ops를 사용하기 위해 대상 코드를 업데이트해야 합니다.

QEMU 버전 0.10.0에서 시작하는, TCG는 QEMU 안정 릴리스와 함께 제공됩니다. 그것은 GCC 3.x를 사용하여 작동하던 dyngen을 대체합니다.

Accelerator

KQEMUFabrice Bellard에 의해 작성된 리눅스 커널 모듈로, 같은 CPU 아키텍처를 갖는 플랫폼에서 x86 또는 x86-64 게스트의 에뮬레이션 속도를 현저히 높였습니다. 이것은 호스트 컴퓨터의 CPU에서 직접 사용자 모드 코드 (및 선택적으로 일부 커널 코드)를 실행하고, 커널-모드실제-모드 코드에 대해서만 프로세서와 주변 장치 에뮬레이션을 사용함으로써 작동했습니다. KQEMU는 호스트 CPU가 하드웨어-지원 가상화를 지원하지 않더라도 많은 게스트 OS에서 코드를 실행할 수 있습니다. KQEMU는 처음에 무료로 사용할 수 있는 비공개-소스 제품이었지만, 버전 1.3.0pre10 (2007년 2월)부터 시작하여, 그것은 GNU 일반 공중 사용 허가서에 따라 다시-라이선스되었습니다. 0.12.0으로 시작하는 QEMU 버전 (2009년 8월 기준)은 대용량 메모리를 지원하여 KQEMU와 호환되지 않습니다. QEMU의 더 최신 출시는 KQEMU에 대한 지원이 완전히 제거되었습니다.

QVM86은 당시 비공개-소스 KQEMU에 대해 GNU GPLv2 라이선스 드롭-인 대체품이었습니다. QVM86의 개발자는 2007년 1월에 개발을 중단했습니다.

커널-기반 가상 기계 (KVM)은 KQEMU와 QVM86에 대한 지원 부족의 여파로 QEMU와 함께 사용하기 위한 리눅스-기반 하드웨어-지원 가상화 솔루션으로 대부분 인수되어 왔습니다. QEMU는 ARMMIPS와 같은 다른 아키텍처에서도 KVM을 사용할 수 있습니다.

인텔의 Hardware Accelerated Execution Manager (HAXM)은 Intel VT를 사용하는 NetBSD, Linux, Windows, 및 macOS에서 x86-기반 하드웨어-지원 가상화에 대해 KVM으로의 오픈-소스 대체품입니다. 2013년 기준, 인텔은 대부분 Android 개발을 위해 QEMU와 함께 사용을 요청하고 있습니다. 버전 2.9.0부터 시작하여, 공식 QEMU는 hax라는 이름 아래에서 HAXM에 대한 지원을 포함합니다.

QEMU는 역시 다음 가속기를 지원합니다:

  • hvf, Intel VT를 기반으로 하는 애플의 Hypervisor.framework.
  • whpx, Intel VT 또는 AMD-V를 기반으로 하는 Microsoft's Windows Hypervisor Platform.
  • tcg, QEMU의 자체 Tiny Code Generator. 이것이 기본입니다.

Supported disk image formats

QEMU는 다음 디스크 이미지 형식을 지원합니다:

QEMU Object Model

QEMU Object Model (QOM)은 사용자에게 생성할 수 있는 유형을 등록하고 해당 유형에서 객체를 인스턴스화하기 위한 프레임워크를 제공합니다.

QOM은 다음과 같은 기능을 제공합니다:

  • 유형을 동적으로 등록하는 시스템
  • 유형의 단일-상속에 대한 지원
  • 상태-비저장 인터페이스의 다중 상속

Hardware-assisted emulation

MIPS-호환 Loongson-3 프로세서는 QEMU가 x86 명령어를 변환하는 데 도움이 되도록 200개의 새로운 명령어를 추가합니다; 그들 새로운 명령어는 MIPS 파이프라인에서 x86/CISC-스타일 명령어를 실행하는 오버헤드를 줄입니다. 중국 과학 아카데미에 의한 QEMU에서 추가 개선과 함께, Loongson-3은 9개 벤치마크에서 x86 바이너리를 실행하면서 네이티브 바이너리를 실행하는 성능의 평균 70%를 달성했습니다. 2020년 6월 기준, 이 포크에 대한 소스 코드가 게시되지 않았으므로, 그 주장은 독립적으로 확인될 수 없습니다.

Parallel emulation

QEMU를 사용하는 가상화 솔루션은 여러 가상 CPU를 병렬로 실행할 수 있습니다. 사용자-모드 에뮬레이션에 대해, QEMU는 에뮬레이트된 스레드를 호스트 스레드에 매핑합니다. 전체 시스템 에뮬레이션에 대해, QEMU는 에뮬레이트된 각 가상 CPU (vCPU)에 대해 호스트 스레드를 실행할 수 있습니다. 이것은 병렬 시스템 에뮬레이션, 현재 ARM, Alpha, HP-PA, PowerPC, RISC-V, s390x, x86, 및 Xtensa을 지원하도록 업데이트된 게스트에 따라 다릅니다. 그렇지 않으면 단일 스레드가 라운드-로빈 방식으로 각 vCPU를 실행하는 모든 가상 CPUS (vCPUS)를 에뮬레이트하기 위해 사용됩니다.

Integration

VirtualBox

2007년 1월에 처음 출시된 VirtualBox는 QEMU의 가상 하드웨어 장치 중 일부를 사용했고, QEMU 기반의 내장된 동적 재컴파일러를 가졌습니다. KQEMU와 마찬가지로, VirtualBox는 VMM (Virtual Machine Manager)을 통해 호스트에서 기본적으로 거의 모든 게스트 코드를 실행하고 재컴파일러를 폴백 메커니즘으로만 – 예를 들어, 게스트 코드가 실제 모드에서 실행될 때 사용합니다. 게다가, VirtualBox는 재컴파일을 최소화하기 위해 내장 디스어셈블러를 사용하여 많은 코드 분석 및 패치를 수행했습니다. VirtualBox는 특정 기능을 제외하고 자유와 오픈-소스입니다 (GPL 아래에서 사용할 수 있습니다).

Xen-HVM

가상 머신 모니터, XenIntel VT-x 또는 AMD-V 하드웨어 x86 가상화 확장과 ARM Cortex-A7Cortex-A15 가상화 확장을 사용하여 HVM (하드웨어 가상 머신) 모드에서 실행할 수 있습니다. 이것은 반가상화 장치 대신 실제 가상 하드웨어 세트가 domU에 노출되어 실제 장치 드라이버를 사용하여 대화할 수 있음을 의미합니다.

QEMU는 CPU 에뮬레이터, 에뮬레이트된 장치, 일반 장치, 기계 설명, 사용자 인터페이스, 및 디버거와 같은 여러 구성 요소를 포함하고 있습니다. QEMU의 에뮬레이트된 장치와 일반 장치는 I/O 가상화를 위한 장치 모델을 구성합니다. 그것들은 PIIX3 IDE (일부 기초적인 PIIX4 기능을 포함), Cirrus Logic 또는 일반 VGA 에뮬레이트 비디오, RTL8139 또는 E1000 네트워크 에뮬레이션, 및 ACPI 지원으로 구성됩니다. APIC 지원은 Xen에 의해 제공합니다.

Xen-HVM은 VM에 I/O 가상화를 제공하기 위해 QEMU 프로젝트를 기반으로 하는 장치 에뮬레이션을 가집니다. 하드웨어는 dom0에서 백엔드로 실행하는 QEMU "장치 모델" 데몬을 통해 에뮬레이트됩니다. 다른 QEMU 실행 모드 (동적 변환 또는 KVM)와 달리, 가상 CPU는 QEMU가 메모리-매핑된 I/O 접근을 에뮬레이트하는 동안 중지를 처리하는 하이퍼바이저에서 완전히 관리됩니다.

KVM

KVM (커널-기반 가상 기계)는 사용자 공간 프로그램에게 다양한 프로세서로의 하드웨어 가상화 특색으로의 사용자 모드 프로그램 접근을 허용하는 FreeBSD와 리눅스 커널 모듈로, 이를 통해 QEMU는 x86, PowerPC, 및 S/390 게스트에 대한 가상화를 제공할 수 있습니다. 대상 아키텍처가 호스트 아키텍처와 같을 때, QEMU는 가속과 같은 KVM 특정 기능을 사용할 수 있습니다.

Win4Lin Pro Desktop

2005년 초에, Win4Lin은 QEMU와 KQEMU의 '튜닝된' 버전을 기반으로 하는 Win4Lin Pro Desktop을 도입했었고 Windows NT 버전을 호스팅합니다. 2006년 6월에, Win4Lin은 같은 코드 기반을 기반으로 하는 Win4Lin Virtual Desktop Server를 출시했습니다. Win4Lin Virtual Desktop Server는 리눅스 서버에서 씬 클라이언트에 Microsoft Windows 세션을 제공합니다.

2006년 9월에, Win4Lin은 제품을 FreeBSD와 PC-BSD로 이식한 Win4BSD Pro Desktop을 출시하면서, Virtual Bridges로 회사명을 변경했다고 발표했습니다. Solaris 지원은 2007년 5월 Win4Solaris Pro Desktop과 Win4Solaris Virtual Desktop Server 출시로 이어졌습니다.

SerialICE

SerialICE는 호스트 시스템에 직렬 연결을 통해 실제 하드웨어에 접근하면서 QEMU 내부에서 시스템 펌웨어를 실행하는 QEMU 기반 펌웨어 디버깅 도구입니다. 이것은 하드웨어 회로-내 에뮬레이터 (ICE)의 저렴한 대체품으로 사용할 수 있습니다.

WinUAE

WinUAE는 버전 3.0.0에서 QEMU PPC 코어를 사용하는 CyberStorm PPC와 Blizzard 603e 보드에 대한 지원을 도입했습니다.

Unicorn

Unicorn은 QEMU의 "TCG" CPU 에뮬레이터를 기반으로 하는 CPU 에뮬레이션 프레임워크입니다. QEMU와 달리, Unicorn은 CPU에만 중점을 둡니다. 주변 장치의 에뮬레이션이 제공되지 않고 원시 바이너리 코드 (실행 파일 또는 시스템 이미지 컨텍스트 외부에서)를 직접 실행할 수 있습니다. Unicorn은 스레드로부터 안전하고 다중 바인딩과 계측 인터페이스를 가지고 있습니다.

Emulated hardware platforms

x86

CPU 외에도 (2018년 3월 3일 당시, Sandy Bridge, Ivy Bridge, Haswell, BroadwellSkylake를 포함하여 여러 인텔 CPU 모델을 구성-가능하고 에뮬레이션할 수 있습니다), 다음 장치가 에뮬레이트됩니다:

버전 0.12부터 QEMU에 의해 사용되는 BIOS 구현은 SeaBIOS입니다. VGA BIOS 구현은 Plex86/Bochs에서 제공됩니다. QEMU에 대한 UEFI 펌웨어는 OVMF입니다.

External links