Quick Emulator ( QEMU ) [ 3 ]は、無料のオープンソースのマシンエミュレータおよび仮想化ツールです。仮想マシンモニタ (VMM) として、Linux ベースのKernel-based Virtual Machine (KVM)、Xen、macOS の HVF、Windows のHyper-Vなど、多数のハイパーバイザをサポートしています。[ 4 ]また、Tiny Code Generator (TCG) と呼ばれるJITバイナリトランスレータを介して、サポートされている任意のホスト上で多数の命令セットアーキテクチャをエミュレートできます。これにより、システム全体をエミュレートしたり、あるプロセッサアーキテクチャ用にコンパイルされた個々のプログラムを他の任意のプロセッサアーキテクチャで実行したりできます。QEMU は、 x86、ARM、PowerPC、RISC-Vなどのエミュレーションをサポートしています。 [ 5 ]
QEMUは、元々Fabrice Bellardによって開発されたフリーソフトウェアで、最初のプレビュー版は2003年にリリースされました。[ 6 ] QEMUのさまざまなコンポーネントは、 GNU General Public License (GPL)、BSDライセンス、GNU Lesser General Public License (LGPL)、またはその他のGPL互換ライセンスの下でライセンスされています。 [ 7 ]
QEMUには複数の動作モードがあります: [ 8 ]
QEMU は、x86、MIPS64 (リリース 6 まで)、[ 11 ] SPARC (sun4m および sun4u)、ARM (Integrator/CP および Versatile/PB)、SuperH、PowerPC ( PRePおよびPower Macintosh )、ETRAX CRIS、MicroBlaze、RISC-Vなど、さまざまなアーキテクチャのエミュレーションをサポートしています。すべてのプログラムの実行中に仮想マシンの状態を保存することもサポートしています。ゲスト オペレーティングシステムは、QEMU 内で実行するためにパッチを適用する必要はありません。
仮想マシンは、ユーザーのハードディスク、CD-ROMドライブ、ネットワークカード、オーディオインターフェース、USBデバイスなど、多くの種類の物理ホストハードウェアとインターフェースできます。USBデバイスは完全にエミュレートすることも、ホストのUSBデバイスを使用することも可能ですが、後者の場合は管理者権限が必要であり、一部のデバイスでは動作しません。
仮想ディスクイメージはQCOW形式で保存することができ、これによりイメージサイズを大幅に削減できます。QCOWイメージは、実際に使用されているディスク容量のみを占有し、設定された容量全体を占有しません。つまり、120GBと設定されたディスクでも、ホスト上では数百メガバイトしか占有しない可能性があります。これは、QCOWが未使用のディスク領域をイメージファイルに保存しないためです。
QCOW2 フォーマットでは、オーバーレイ イメージの作成も可能です。オーバーレイ イメージとは、元の (変更されていない) ベース イメージ ファイルからの変更点のみを保存するファイルです。これにより、エミュレートされたディスクの内容を以前の状態に戻すことができます。たとえば、ベース イメージには既知の動作確認済みのオペレーティングシステムの新規インストールを含めることができ、オーバーレイ イメージを使用して変更点を記録できます。ゲスト システムが使用不能になった場合 (ウイルス攻撃、偶発的なシステム破壊など)、ユーザーはオーバーレイを削除して以前のエミュレートされたディスク イメージを使用できます。[ 12 ]
QEMUは、ホストシステムの接続性を共有するネットワークカード(異なるモデルでも可)を、ネットワークアドレスを変換することでエミュレートできます。これにより、ゲストOSはホストOSと同じネットワークを実質的に使用できます。仮想ネットワークカードは、他のQEMUインスタンスのネットワークカードやローカルTAPインターフェースにも接続できます。また、ホストOSのブリッジ機能を使用して、QEMUが使用するTUN/TAPインターフェースとホストOS上の非仮想イーサネットインターフェースをブリッジ接続することでも、ネットワーク接続を実現できます。
QEMUは、ホストシステムとゲストシステム間の通信を可能にするために、いくつかのサービスを統合しています。例えば、統合されたSMBサーバーやネットワークポートのリダイレクト(仮想マシンへの着信接続を可能にするため)などです。また、ブートローダーなしでLinuxカーネルを起動することもできます。
QEMUはホストシステムにグラフィカル出力機能が存在することを前提としていません。代わりに、統合されたVNCサーバーを介してゲストOSの画面へのアクセスを提供します。また、対応OSであれば、画面のないエミュレートされたシリアル回線を使用することも可能です。
複数のCPUがSMPを実行するシミュレーションは可能です。
QEMUは、速度向上のために追加のカーネルモジュール( KQEMUなど)を使用したり、ネットワーク接続モデルの特定のモードを利用したりしない限り、実行に管理者権限を必要としません。
QEMU バージョン 0.10.0 以降、Tiny Code Generator (TCG) が、動作に GCC 3.x を必要としていた以前のDynGenシステムに取って代わりました。 [ 13 ] [ 14 ]
QEMU の実行中、ターゲット コードの基本ブロックは、 TCG ops [ 15 ]と呼ばれるマシン非依存の中間表現に変換されます。その後、操作は簡単な最適化パスを経て、ホストのアーキテクチャ用のターゲット コードを出力するバックエンドに渡されます。TCG は、実行されるすべてのアーキテクチャをサポートするために記述された専用コードを必要とします。これにより、JIT はTCG ops を何に変換すればよいかを知ることができます。アーキテクチャ用の専用 JIT コードが利用できない場合、TCG はTCG Interpreter (TCI) と呼ばれる低速のインタープリタモードにフォールバックします。
KQEMU は、 Fabrice Bellardによって書かれたLinux カーネルモジュールで、特に同じ CPU アーキテクチャを持つプラットフォーム上で x86 または x86-64 ゲストのエミュレーションを高速化しました。これは、ユーザー モードコード (およびオプションで一部のカーネル コード) をホスト コンピュータの CPU 上で直接実行し、プロセッサと周辺機器のエミュレーションをカーネル モードおよびリアル モードコードにのみ使用することで実現しました。KQEMU は、ホスト CPU がハードウェア支援仮想化をサポートしていなくても、多くのゲスト オペレーティングシステムのコードを実行できました。KQEMUは当初、無料で利用できるクローズド ソース製品でしたが、バージョン 1.3.0pre10 (2007 年 2 月) 以降[ 16 ] 、 GNU General Public Licenseの下で再ライセンスされました。QEMU のバージョンは 0.12.0 ( 2009 年8 月現在)から始まります。 )大容量メモリをサポートしているため、KQEMU と互換性がありません。[ 17 ] QEMU の新しいリリースでは、KQEMU のサポートが完全に削除されています。
QVM86は、当時クローズドソースだったKQEMUの代替として、GNU GPLv2ライセンスで提供されていた。QVM86の開発者は2007年1月に開発を終了した。
KQEMUとQVM86のサポートがなくなったため、 Kernel-based Virtual Machine(KVM)がQEMUで使用するLinuxベースのハードウェア支援仮想化ソリューションとしてほぼ取って代わりました。QEMUはARMやMIPSなどの他のアーキテクチャでもKVMを使用できます。[ 18 ]
Intelのハードウェアアクセラレーション実行マネージャ(HAXM )は、 Intel VTを使用してNetBSD、Linux、Windows、macOS上でx86ベースのハードウェア支援仮想化を実現するKVMのオープンソース代替品である[ 19 ]。2013年現在Intel は主に Android 開発用の QEMU での使用を推奨しています。[ 20 ]バージョン 2.9.0 以降、公式の QEMU にはHaxという名前で HAXM のサポートが含まれています。[ 21 ]
QEMU は以下のアクセラレータもサポートしています: [ 21 ]
Hypervisor.frameworkIntel VT をベースにしています。QEMUは多数のディスクイメージ形式をサポートしています。[ 22 ]
.img)ディスクのセクターごとの内容を含む最も単純なイメージ.qcow2) - スナップショット、圧縮、暗号化などの多くの機能をサポートするQEMUネイティブフォーマット.vdi).vmdk).vhd, .vhdx)読み取り専用アクセスが可能で、以下の形式を含む多数の形式に対応しています。
.dmg).hdd, .hds).iso)は、光ディスクのセクターごとの内容(ライブOSの起動など)を含んでいます[ 23 ]QEMUはホストデバイスやパーティションに直接アクセスできるため、iSCSI、LVM、LUKS、NBD、NVMe、ZFSなどの他のストレージ技術と連携して動作することができます。
また、ファイルシステムを仮想VFATデバイスにエクスポートする機能もサポートしています。
QEMUオブジェクトモデル(QOM)は、ユーザーが作成できる型を登録し、それらの型からオブジェクトをインスタンス化するためのフレームワークを提供する。[ 24 ]
QOMは以下の機能を提供します。
QEMUを使用する仮想化ソリューションは、複数の仮想CPUを並列実行できます。ユーザーモードのエミュレーションでは、QEMUはエミュレートされたスレッドをホストスレッドにマッピングします。QEMUは、システム全体のエミュレーションのために、エミュレートされた仮想CPU(vCPU)ごとにホストスレッドを実行できます。これは、並列システムエミュレーションをサポートするようにゲストOSが更新されているかどうかに依存します。現在サポートされているのは、ARM、Alpha、HP-PA、PowerPC、RISC-V、s390x、x86、およびXtensaです。それ以外の場合は、単一のスレッドを使用してすべての仮想CPU(vCPU)をエミュレートし、各vCPUをラウンドロビン方式で実行します。
2007 年 1 月に初めてリリースされたVirtualBox は、QEMU の仮想ハードウェア デバイスの一部を使用し、QEMU をベースにした組み込みの動的再コンパイラを備えていました。KQEMU と同様に、VirtualBox は VMM (Virtual Machine Manager) を介してホスト上でほぼすべてのゲスト コードをネイティブに実行し、再コンパイラはフォールバック メカニズムとしてのみ使用します (たとえば、ゲスト コードがリアル モードで実行される場合)。[ 25 ]さらに、VirtualBox は組み込みの逆アセンブラを使用して多くのコード分析とパッチを適用し、再コンパイルを最小限に抑えました。VirtualBox は、特定の機能を除いて、無料かつオープンソース ( GPLの下で利用可能) です。
仮想マシンモニタであるXen は、 Intel VT-xまたはAMD-Vハードウェアx86 仮想化拡張機能とARM Cortex-A7およびCortex-A15仮想化拡張機能を使用して、HVM (ハードウェア仮想マシン) モードで実行できます。[ 26 ]これは、準仮想化デバイスの代わりに、実際の仮想ハードウェアのセットが DomU に公開され、実際のデバイスドライバを使用できるようになることを意味します。
QEMU には、CPU エミュレータ、エミュレートされたデバイス、汎用デバイス、マシン記述、ユーザー インターフェイス、デバッガなど、いくつかのコンポーネントが含まれています。QEMU のエミュレートされたデバイスと汎用デバイスは、I/O 仮想化のためのデバイス モデルを構成します。[ 27 ]これらは、PIIX3 IDE (基本的な PIIX4 機能を含む)、Cirrus Logic または通常の VGA エミュレートされたビデオ、RTL8139 または E1000 ネットワーク エミュレーション、および ACPI サポートで構成されています。[ 28 ] APIC サポートは Xen によって提供されます。
Xen-HVMは、QEMUプロジェクトに基づくデバイスエミュレーションを利用して、仮想マシン(VM)にI/O仮想化機能を提供します。ハードウェアは、Dom0のバックエンドとして動作するQEMUの「デバイスモデル」デーモンによってエミュレートされます。動的変換やKVMなどの他のQEMUモードとは異なり、ハイパーバイザは仮想CPUを完全に管理し、必要に応じてCPUを一時停止させながら、QEMUがメモリマップドI/Oエミュレーションを処理します。
KVM(カーネルベース仮想マシン)は、FreeBSDおよびLinuxカーネルモジュールであり、ユーザー空間プログラムがさまざまなプロセッサのハードウェア仮想化機能にアクセスできるようにするもので、QEMUはこれを利用してx86、PowerPC、およびS/390ゲストの仮想化を提供できます。ターゲットアーキテクチャがホストアーキテクチャと同じ場合、QEMUはアクセラレーションなどのKVMの特定の機能を利用できます。[ 29 ]
2005 年初頭、Win4Lin はQEMU と KQEMU の「チューニング」バージョンをベースにした Win4Lin Pro Desktop を発表し、Windows の NT バージョンをホストしました。2006 年 6 月、[ 30 ] Win4Lin は同じコードベースをベースにした Win4Lin Virtual Desktop Server をリリースしました。Win4Lin Virtual Desktop Server は、Linux サーバーからシン クライアントに Microsoft Windows セッションを提供します。
2006年9月、Win4Linは社名をVirtual Bridgesに変更し、FreeBSDとPC-BSDへの移植版であるWin4BSD Pro Desktopをリリースした。Solarisのサポートは2007年5月にWin4Solaris Pro DesktopとWin4Solaris Virtual Desktop Serverのリリースで続いた。[ 31 ]
SerialICEは、QEMUベースのファームウェアデバッグツールで、QEMU内でシステムファームウェアを実行しながら、シリアル接続を介してホストシステムから実際のハードウェアにアクセスします。これは、ハードウェアインサーキットエミュレータ(ICE)の安価な代替として使用できます。[ 32 ]
WinUAEはバージョン3.0.0でQEMU PPCコアを使用してCyberStorm PPCおよびBlizzard 603eボードのサポートを導入しました。 [ 33 ]
Unicornは、QEMUの「TCG」CPUエミュレータをベースにしたCPUエミュレーションフレームワークです。QEMUとは異なり、UnicornはCPUのみに焦点を当てており、周辺機器のエミュレーションは提供されておらず、(実行可能ファイルやシステムイメージのコンテキスト外の)生のバイナリコードを直接実行できます。Unicornはスレッドセーフであり、複数のバインディングと計測インターフェースを備えています。[ 34 ]
Limboは、Android向けのx86およびARM64 QEMUベースの仮想マシンです。[ 35 ]これは、LinuxとDOSをエミュレートするように設計されているにもかかわらず、Microsoft WindowsをエミュレートできるAndroid向けの仮想マシンソフトウェアとしては数少ないものの1つです。 [ 36 ]他のQEMUベースのエミュレータとは異なり、Limboはユーザーがコマンドを入力する必要がなく、代わりに仮想マシンの設定を行うためのユーザーインターフェイスを備えています。
Limboは、Androidオペレーティングシステムの使用率が高いため、インド、マレーシア、タイなどのアジアの発展途上国でYouTube上でより人気があります。[ 37 ] Limboは、2019年2月から2020年12月の間に、理由は不明ですがGoogle Playストアから削除されましたが、開発者のWebサイトからAPK(Androidパッケージ)をインストールすることでインストールすることは可能です。[ 38 ] Limboは、オーディオ品質と再生に関して問題が発生する傾向があります。2024年現在、これらの問題に対する修正は見つかっていません。[ 39 ]全体的に、Limboは他の仮想マシンソフトウェアよりも知名度が低く、トラブルシューティングに関する情報が少なくなっています。
Limbo x86 では、Ctrl、Alt、Del、ファンクション キーなど、基本的な Android キーボードではできない多くのキーボード機能を使用するには、「Hacker's Keyboard」と呼ばれるアプリケーションをインストールする必要があります。[ 40 ] Google Play 版は新しいバージョンの Android では動作しないとされているため、APK ファイルを使用して Hacker's Keyboard をインストールすることをお勧めします。[ 41 ]
QEMUはi386およびx86_64アーキテクチャをエミュレートできます。中央処理装置(CPU)(これも構成可能で、2018年3月3日現在、Sandy Bridge [ 42 ] 、Ivy Bridge [ 43 ] 、Haswell [ 44 ] 、Broadwell [ 45 ] [ 46 ] 、 Skylake [ 44 ]を含む多数のIntel CPUモデルをエミュレートできます)に加えて、以下のデバイスがエミュレートされます。
QEMUがバージョン0.12以降で使用しているBIOS実装はSeaBIOSです。SeaBIOSのVGA BIOS実装もバージョン2.0.0以降で使用されています。QEMUのUEFIファームウェアはOVMFです。[ 50 ]
QEMUは、以下のPowerMac周辺機器をエミュレートします。
ファームウェアにはOpenBIOSが使用されています。
QEMUは以下のPREP周辺機器をエミュレートします。
PREPターゲットでは、オープンファームウェア互換BIOSであるOpen Hack'Wareが使用されています。
QEMUは、以下の周辺機器を使用して準仮想化sPAPRインターフェースをエミュレートできます。
sPAPRターゲットでは、SLOFと呼ばれる別のOpen-Firmware互換BIOSが使用されている。

QEMUは、 NEON拡張機能を備えたARMv7命令セット(およびARMv5TEJまで)をエミュレートします。[ 51 ] Integrator/CPボード、Versatileベースボード、RealView Emulationベースボード、XScaleベースのPDA、Palm Tungsten|E PDA、Nokia N800およびNokia N810インターネットタブレットなどの完全なシステムをエミュレートします。QEMUは、 Android SDKの一部であるAndroidエミュレータも駆動します(現在のAndroid実装のほとんどはARMベースです)。Samsungは、Bada SDKのバージョン2.0.0から、エミュレートされた「Wave」デバイスの開発を支援するためにQEMUを選択しました。
バージョン1.5.0および1.6.0では、Samsung Exynos 4210(デュアルコアCortex-A9)とVersatile Express ARM Cortex-A9 ARM Cortex-A15がエミュレートされます。バージョン1.6.0では、ARMv8(AArch64)アーキテクチャの32ビット命令はエミュレートされますが、64ビット命令はサポートされていません。
Xilinx Cortex A9ベースのZynq SoCは、以下のコンポーネントで構成されています。
QEMUは、ARM Cortex-A53、ARM Cortex-A57、ARM Cortex-A72など、Linuxが一般的に動作する64ビット「Aプロファイル」CPUをエミュレートできます。[ 52 ]これにより、 Raspberry Pi 3および4をエミュレートできます。 [ 53 ]
QEMUは、32ビットおよび64ビットのSPARCアーキテクチャの両方をサポートしています。
JavaStation (sun4m アーキテクチャ)のファームウェアがバージョン 0.8.1 に更新されたとき、[ 54 ] PROM の代替品である Proll はバージョン 0.8.2 でOpenBIOSに置き換えられました。
QEMUは、以下のsun4m/sun4c/sun4d周辺機器をエミュレートします。
QEMUは、 Sun4u(UltraSPARC PCのようなマシン)、Sun4v(T1 PCのようなマシン)、または汎用Niagara(T1)マシンを、以下の周辺機器とともにエミュレートします。
QEMUは以下の周辺機器をサポートしています。
サポートされている周辺機器: Milkymist SoCから
外部ツリーが存在し、以下のターゲットをサポートしています。
{{cite web}}: CS1 maint: postscript (リンク)は現在オープンソースです。
Hardware Accelerated Execution Manager(Intel® HAXM)は、Intel Virtualization Technology(Intel® VT)を使用してホストマシン上でのAndroidアプリのエミュレーションを高速化するハードウェア支援型仮想化エンジン(ハイパーバイザー)です。