Кіріспе
Тегін виртуализация және эмуляция бағдарламалық жасақтамасы
виртуалды машина мониторы
the virtual machine monitor
QEMU (Quick Emulator) – тегін және ашық кодты эмулятор. Ол динамикалық екілік аударма арқылы компьютердің процессорын эмуляциялайды және машина үшін әртүрлі аппараттық және құрылғы модельдері жиынтығын ұсынады, бұл оған әртүрлі қонақ операциялық жүйелерді іске қосуға мүмкіндік береді. QEMU виртуалды машиналарды түпкілікті жылдамдыққа жақын жылдамдықпен іске қосу үшін ядролық негіздегі виртуалды машинамен (KVM) өзара әрекеттесе алады. QEMU сондай-ақ пайдаланушы деңгейіндегі процестерді эмуляциялай алады, бұл бір архитектура үшін құрастырылған бағдарламаларды басқа архитектурада іске қосуға мүмкіндік береді. QEMU x86, ARM, PowerPC, RISC V және басқалар сияқты әртүрлі архитектураларды эмуляциялауды қолдайды.
Лицензиялау
QEMU Фабрис Беллард жазған және ол ашық кодты бағдарламалық қамтамасыз ету, көбінесе GNU General Public License (қысқаша GPL) лицензиясымен лицензияланған. Әртүрлі бөлімдері BSD лицензиясы, GNU Lesser General Public License (LGPL) немесе басқа GPL-мен үйлесімді лицензиялар бойынша таратылады.
Ерекшеліктері
QEMU барлық бағдарламалары жұмыс істеп жатқан виртуалды машинаның күйін сақтай және қалпына келтіре алады. Қонақ операциялық жүйелерге QEMU-да жұмыс істеу үшін жаңарту қажет емес. QEMU әртүрлі архитектураларды эмуляциялауды қолдайды, соның ішінде x86, MIPS64 (6-шы релизге дейін), SPARC (sun4m және sun4u), ARM (Integrator/CP және Versatile/PB), SuperH, PowerPC (PReP және Power Macintosh), ETRAX CRIS, MicroBlaze және RISC V. Виртуалды машина көптеген физикалық хост аппараттарымен байланыса алады, соның ішінде пайдаланушының қатты дискілерімен, CD-ROM дискілерімен, желілік карталармен, аудио интерфейстерімен және USB құрылғыларымен. USB құрылғыларын толық эмуляциялау мүмкін, немесе хосттың USB құрылғыларын пайдалануға болады, бірақ бұл әкімшілік құқықтарды қажет етеді және кейбір құрылғылармен жұмыс істемейді. Виртуалды диск кескіндері арнайы форматта (qcow немесе qcow2) сақталуы мүмкін, бұл тек қонақ ОЖ-ның іс жүзінде пайдаланатын дискінің көлемін алады. Осылайша, эмуляцияланған 120 ГБ дискі хосттағы бірнеше жүз мегабайтты ғана алады. QCOW2 форматы басқа (өзгертілмеген) негізгі бейне файлынан айырмашылықты тіркейтін үстінен жазылған кескіндерді жасауға мүмкіндік береді. Бұл эмуляцияланған дискінің мазмұнын бұрынғы күйіне қайтару мүмкіндігін береді. Мысалы, базалық кескінде жұмыс істейтін операциялық жүйенің жаңа орнатылған нұсқасы болуы мүмкін, ал үстінен жазылған кескіндер пайдаланылады. Егер қонақ жүйесі жарамсыз болып қалса (вирустық шабуыл, жүйелік апат, т.б.), пайдаланушы үстінен жазылған файлды жоюға және бұрын эмуляцияланған диск кескінін пайдалануға болады. QEMU желілік адрестерді аудару арқылы хост жүйесінің қосылысын бөлісетін желілік карталарды (әр түрлі модельдердің) эмуляциялай алады, бұл қонаққа хост сияқты сол желіні пайдалануға мүмкіндік береді. Виртуалды желілік карталар QEMU-ның басқа инстанцияларының желілік карталарына немесе жергілікті TAP интерфейстеріне қосылуы мүмкін. Желілік қосылысқа QEMU қолданатын TUN/TAP интерфейсін хост ОС-дегі виртуалды емес Ethernet интерфейсімен хост ОС-нің көпірлік мүмкіндіктерін пайдалану арқылы да қол жеткізуге болады. QEMU хост пен қонақ жүйелердің байланысуына мүмкіндік беретін бірнеше қызметтерді біріктіреді; мысалы, интеграцияланған SMB сервері және желілік портты қайта бағыттау (виртуалды машинаға кіретін қосылымдарға мүмкіндік беру үшін). Ол сондай-ақ Linux ядроларын жүктеушісіз жүктей алады. QEMU хост жүйесінде графикалық шығару әдістерінің болуына байланысты емес. Оның орнына, ол қонақ ОЖ экранына қол жеткізуге мүмкіндік береді, интеграцияланған VNC сервері арқылы. Ол сондай-ақ қолданылатын операциялық жүйелермен эмуляцияланған сериялық желісін, ешқандай экрансыз пайдалана алады. SMP-ді іске асыратын бірнеше CPU-ды симуляциялау мүмкін. QEMU жылдамдықты жақсарту үшін қосымша ядролық модульдер (KQEMU сияқты) немесе оның желілік қосылым моделінің белгілі бір режимдері пайдаланылмаса, QEMU-ны орындау үшін әкімшілік құқықтарды қажет етпейді.
The virtual machine can interface with many types of physical host hardware, including the user's hard disks, CD ROM drives, network cards, audio interfaces, and USB devices. USB devices can be completely emulated, or the host's USB devices can be used, although this requires administrator privileges and does not work with some devices. Virtual disk images can be stored in a special format (qcow or qcow2) that only takes up as much disk space as the guest OS actually uses. This way, an emulated 120 GB disk may occupy only a few hundred megabytes on the host. The QCOW2 format also allows the creation of overlay images that record the difference from another (unmodified) base image file. This provides the possibility for reverting the emulated disk's contents to an earlier state. For example, a base image could hold a fresh install of an operating system that is known to work, and the overlay images are used. Should the guest system become unusable (through virus attack, accidental system destruction, etc. ), the user can delete the overlay and use an earlier emulated disk image. QEMU can emulate network cards (of different models) which share the host system's connectivity by doing network address translation, effectively allowing the guest to use the same network as the host. The virtual network cards can also connect to network cards of other instances of QEMU or to local TAP interfaces. Network connectivity can also be achieved by bridging a TUN/TAP interface used by QEMU with a non virtual Ethernet interface on the host OS using the host OS's bridging features. QEMU integrates several services to allow the host and guest systems to communicate; for example, an integrated SMB server and network port redirection (to allow incoming connections to the virtual machine). It can also boot Linux kernels without a bootloader. QEMU does not depend on the presence of graphical output methods on the host system. Instead, it can allow one to access the screen of the guest OS via an integrated VNC server. It can also use an emulated serial line, without any screen, with applicable operating systems. Simulating multiple CPUs running SMP is possible. QEMU does not require administrative rights to run unless additional kernel modules for improving speed (like KQEMU) are used or certain modes of its network connectivity model are utilized.
Кішкентай код генераторы
Tiny Code Generator (TCG) GCC-нің нақты бір нұсқасына немесе кез келген компиляторға тәуелділіктің кемшілігін жоюды мақсат етеді, оның орнына компиляторды (код генераторын) QEMU-дың жұмыс істеу кезінде атқаратын басқа тапсырмаларына біріктіреді. Сондықтан, бүкіл аударма жұмысы екі кезеңнен тұрады: мақсатты кодтың негізгі блоктары (TB) TCG операцияларымен (ops) қайта жазылады – бұл машинадан тәуелсіз аралық белгілеу түрі, содан кейін бұл белгілеу хост архитектурасы үшін TCG арқылы құрастырылады. Оптимизациялау кезеңдері уақытында компиляция (JIT) режимі үшін ғана қолданылады. TCG-ге әрбір архитектураны қолдау үшін арнайы код қажет, сонда ғана JIT TCG операцияларын неге аудару керектігін біледі. Егер архитектура үшін арнайы JIT коды болмаса, TCG TCG Interpreter (TCI) деп аталатын баяу интерпретатор режиміне көшеді. Сондай-ақ, мақсатты кодты TCG операцияларын пайдалану үшін, ескі Dyngen операцияларының орнына жаңарту қажет. QEMU нұсқасы 0.10.0-ден бастап TCG QEMU тұрақты нұсқасымен бірге шығады. Ол GCC 3.x-ке тәуелді болған Dyngen-ді алмастырады.
Параллель эмуляция
QEMU-ны пайдаланатын виртуализациялық шешімдер бірнеше виртуалды процессорды (CPU) параллель түрде орындай алады. Пайдаланушы режимінде эмуляция үшін QEMU эмуляцияланған түйіндік процестерді хост түйіндік процестеріне бейімдейді. Толық жүйелік эмуляция үшін QEMU әрбір эмуляцияланған виртуалды процессорға (vCPU) хост түйіндік процессорды қосуға қабілетті. Бұл, қонақ жүйенің параллель жүйе эмуляциясын қолдау үшін жаңартылуына байланысты, қазіргі уақытта ARM, Alpha, HP PA, PowerPC, RISC V, s390x, x86 және Xtensa процессорлары үшін қолдау бар. Әйтпесе, барлық виртуалды процессорларды (vCPUS) эмуляциялау үшін бір түйіндік процесс қолданылады, ол әрбір vCPU-ны кезегімен орындайды.
VirtualBox- тің атауы
VirtualBox, алғаш рет 2007 жылдың қаңтарында жарық көрді, QEMU-ның бірқатар виртуалды аппараттық құрылғыларын пайдаланды және QEMU негізіндегі динамикалық қайта компилятормен жабдықталды. KQEMU сияқты, VirtualBox қонақ жүйесінің кодын VMM (Virtual Machine Manager) арқылы хост жүйеде дерлік толығымен орындайды және қайта компиляторды тек қана резервтік механизм ретінде қолданады, мысалы, қонақ коді нақты режимде жұмыс істеген кезде. Бұдан өзге, VirtualBox құрастыруды азайту мақсатында кіріктірілген декомпиляторды қолданып, көптеген кодты талдап, түзетулер енгізді. VirtualBox – GPL лицензиясы бойынша қолжетімді, ашық бастапқы коды бар және тегін бағдарлама, бірақ кейбір мүмкіндіктері үшін төлем қажет.
Xen-HVM
Xen виртуалды машина мониторы HVM (аппараттық виртуалды машина) режимінде Intel VT-x немесе AMD-V аппараттық x86 виртуализациялық кеңейтімдерін, сондай-ақ ARM Cortex A7 және Cortex A15 виртуализациялық кеңейтімдерін пайдалана алады. Бұл паравиртуалды құрылғылардың орнына domU-ға нақты виртуалды аппараттық жиынтық ұсынылады, олармен байланысу үшін нақты құрылғы драйверлерін пайдаланады. QEMU бірнеше компоненттерді қамтиды: CPU эмуляторлары, эмуляцияланған құрылғылар, жалпы құрылғылар, машина сипаттамалары, пайдаланушы интерфейсі және түзету құралы. QEMU-дағы эмуляцияланған және жалпы құрылғылар I/O виртуализациясы үшін оның құрылғы модельдерін құрайды. Оларға PIIX3 IDE (кейбір қарапайым PIIX4 мүмкіндіктерімен), Cirrus Logic немесе қарапайым VGA эмуляцияланған бейне, RTL8139 немесе E1000 желілік эмуляциясы және ACPI қолдауы кіреді. APIC қолдауын Xen қамтамасыз етеді. Xen HVM виртуалды машиналарға I/O виртуализациясын ұсыну үшін QEMU жобасына негізделген құрылғы эмуляциясын пайдаланады. Аппараттық құралдар dom0-да артқы жағынан (backend) жұмыс істейтін QEMU "құрылғы моделі" демоны арқылы эмуляцияланады. QEMU-ның басқа жұмыс режимдерінен (динамикалық аударма немесе KVM) айырмашылығы, виртуалды CPU-лар толығымен гипервизорға бағынады, ол QEMU жадқа карталанған I/O-ға қол жеткізуді эмуляциялағанда оларды тоқтатуды қамтамасыз етеді.
KVM
KVM (Kernel based Virtual Machine) – FreeBSD және Linux ядролық модулі, ол пайдаланушы кеңістігіндегі бағдарламаға түрлі процессорлардың аппараттық виртуализация мүмкіндіктеріне қол жеткізуге мүмкіндік береді, соның арқасында QEMU x86, PowerPC және S/390 виртуальды машиналары үшін виртуализацияны ұсына алады. Егер мақсатты архитектура хост архитектурасымен сәйкес келсе, QEMU KVM-нің жылдамдату сияқты арнайы мүмкіндіктерін пайдалана алады.
Win4Lin Pro үстелінің
2005 жылдың басында Win4Lin QEMU және KQEMU-ның «реттелген» нұсқасына негізделген Win4Lin Pro Desktop-ты таныстырды, ол Windows-тың NT нұсқаларын іске қосады. 2006 жылдың маусым айында Win4Lin сол код базасына негізделген Win4Lin Virtual Desktop Server-ді шығарды. Win4Lin Virtual Desktop Server Linux серверінен жұқа клиенттерге Microsoft Windows сессияларын қызмет көрсетеді. 2006 жылдың қыркүйегінде Win4Lin компаниясының атауын Virtual Bridges деп өзгерту туралы хабарлады, сонымен қатар өнімнің FreeBSD және PC BSD-ге портталған Win4BSD Pro Desktop-ын жариялады. 2007 жылдың мамыр айында Win4Solaris Pro Desktop және Win4Solaris Virtual Desktop Server бағдарламаларын шығару арқылы Solaris қолдауы да қосылды.
Сериялы
SerialICE – бұл QEMU негізіндегі, жүйелік микрокодты QEMU ішінде іске қосып, хост-жүйеге сериялық байланыс арқылы нақты аппараттық құралдарға қол жеткізуге мүмкіндік беретін микрокодты зерттеу құралы. Оны аппараттық эмуляторлардың (ICE) орнына қолдануға болады, бұл аппараттық құралдарға қарағанда арзан нұсқа.
WinUAE
WinUAE 3.0.0 нұсқасында QEMU PPC өзегі арқылы CyberStorm PPC және Blizzard 603e тақталарына қолдау қосылды.
Біріккен мүйіз
Unicorn - QEMU-дың "TCG" CPU эмуляторы негізінде құрылған CPU эмуляциялық фреймворк. QEMU-дан ерекшелігі, Unicorn тек CPU-ға ғана бағытталған: қандай да бір перифериялық құрылғылардың эмуляциясы қолдау көрсетілмейді және өнімдік файл немесе жүйелік кескін контексінен тыс шикі бинарлық кодты тікелей іске қосу мүмкіндігі бар. Unicorn жіптік қауіпсіздікті қамтамасыз етеді және көптеген байланыстар мен құралдар интерфейстеріне ие.
Limbo X86 компьютерлік эмуляторы
Limbo – QEMU-ға негізделген Android үшін X86 және ARM64 виртуалды машинасы. Ол Microsoft Windows-ты эмуляциялай алатын Android үшін қолжетімді виртуалды машина бағдарламалық қамтамасының бірі, бірақ ол Linux және DOS-ты эмуляциялау үшін жасалған. Басқа QEMU-ға негізделген эмуляторлардан айырмашылығы, оны пайдалану үшін пайдаланушыларға командаларды енгізу қажет емес, оның орнына виртуалды машинаның параметрлерін орнатуға арналған пайдаланушы интерфейсі бар. Android операциялық жүйесінің танымал болуына байланысты, бұл Үндістан, Малайзия және Таиланд сияқты Азия елдерінде YouTube арқылы кеңінен танымал. Limbo 2019 жылдың ақпаны мен 2020 жылдың желтоқсаны аралығында белгісіз себептермен Google Play дүкенінен алынып тасталды, бірақ оны әзірлеушілердің веб-сайтынан APK (Android Package) арқылы орнатуға болады. Limbo нашар сапалы, кекешті дыбысымен белгілі, және 2023 жылға дейін ешқандай түзету табылмады. Limbo басқа виртуалды машина бағдарламалық қамтамасымен салыстырғанда көпшілікке беймәлім, сондықтан ақауларды жою қиын. Limbo X86-да негізгі Android пернетақтасының мүмкіндіктерін қамтамасыз ете алмайтын Ctrl, Alt, Del және функция пернелері сияқты көптеген пернетақта функцияларын пайдалану үшін "Хакердің пернетақтасы" деп аталатын арнайы қосымшаны орнату қажет. Google Play дүкені Android-тің жаңа нұсқаларын қолдамайтынын мәлімдегендіктен, Hacker's Keyboard-ті APK файлы арқылы орнату ұсынылады, бірақ APK файлы арқылы Hacker's Keyboard-ті Android-тің жаңа нұсқаларына орнатуға болады.
SPARC
QEMU 32 және 64 биттік SPARC архитектураларын қолдайды. JavaStation (sun4m архитектурасы) микропрограммасы 0.8.1 Proll нұсқасына жеткенде, 0.8.2 нұсқасында пайдаланылған PROM, OpenBIOS-пен алмастырылды.