Moje súčasné chápanie:
1) KVM
KVM (Kernel-based Virtual Machine) je hypervízor (VMM – Virtual Machine Manager), ktorý beží ako modul v OS Linux. Hypervízor je potrebný na to, aby sa nejaký softvér spúšťal v neexistujúcom (virtuálnom) prostredí a zároveň sa pred týmto softvérom skrýval skutočný fyzický hardvér, na ktorom tento softvér beží. Hypervízor funguje ako „medzerník“ medzi fyzickým hardvérom (hostiteľ) a virtuálnym OS (hosť).
Keďže KVM je štandardný modul linuxového jadra, dostáva od jadra všetky požadované vychytávky (správa pamäte, plánovač atď.). A podľa toho nakoniec všetky tieto výhody pripadnú hosťom (keďže hostia pracujú na hypervízore, ktorý beží na/v jadre OS Linux).
KVM je veľmi rýchly, ale sám o sebe nestačí spustiť virtuálny OS, pretože... Vyžaduje si to emuláciu I/O. Pre I/O (CPU, disky, sieť, video, PCI, USB, sériové porty atď.) KVM používa QEMU.
2) QEMU
QEMU (Quick Emulator) je emulátor pre rôzne zariadenia, ktorý vám umožňuje spúšťať operačné systémy určené pre jednu architektúru na inej (napríklad ARM -> x86). Okrem procesora QEMU emuluje rôzne periférne zariadenia: sieťové karty, HDD, grafické karty, PCI, USB atď.
Funguje to takto:
Inštrukcie/binárny kód (napríklad ARM) sa pomocou konvertora TCG (Tiny Code Generator) konvertujú na prechodný kód nezávislý od platformy a potom sa tento binárny kód nezávislý od platformy skonvertuje na cieľové inštrukcie/kód (napríklad x86).
ARM –> prechodný_kód –> x86
V podstate môžete virtuálne stroje spustiť na QEMU na akomkoľvek hostiteľovi, dokonca aj so staršími modelmi procesorov, ktoré nepodporujú Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). V tomto prípade to však bude fungovať veľmi pomaly, pretože spustený binárny kód je potrebné prekompilovať za behu dvakrát pomocou TCG (TCG je kompilátor Just-in-Time).
Tie. Samotné QEMU je mega cool, ale funguje veľmi pomaly.
3) Ochranné krúžky
Binárny programový kód na procesoroch funguje z nejakého dôvodu, ale nachádza sa na rôznych úrovniach (krúžky / ochranné krúžky) s rôznymi úrovňami prístupu k údajom, od najprivilegovanejších (Ring 0), po najviac obmedzené, regulované a „s dotiahnutými maticami“. “ (Prsteň 3).
Operačný systém (kernel OS) beží na Ring 0 (režim jadra) a môže si robiť čo chce s akýmikoľvek dátami a zariadeniami. Používateľské aplikácie fungujú na úrovni Ring 3 (používateľský režim) a nemôžu si robiť, čo chcú, ale namiesto toho musia zakaždým požiadať o prístup, aby vykonali konkrétnu operáciu (používateľské aplikácie majú teda prístup len k svojim vlastným údajom a nemôžu do “pieskoviska niekoho iného). Krúžok 1 a 2 sú určené pre vodičov.
Pred vynálezom Intel VT-x / AMD SVM bežali hypervízory na Ring 0 a hostia bežali na Ring 1. Keďže Ring 1 nemá dostatočné práva na normálnu prevádzku OS, pri každom privilegovanom volaní z hosťujúceho systému hypervízor musel toto volanie za behu upraviť a vykonať na kruhu 0 (podobne ako to robí QEMU). Tie. hosťovská binárna NOT bol vykonaný priamo na procesore a zakaždým prešiel niekoľkými prechodnými úpravami za behu.
Réžia bola značná a to bol veľký problém a potom výrobcovia procesorov, nezávisle od seba, vydali rozšírenú sadu inštrukcií (Intel VT-x / AMD SVM), ktoré umožňovali spustenie kódu hosťujúceho OS. PRIAMO na hostiteľskom procesore (obchádzanie akýchkoľvek nákladných medzikrokov, ako to bolo predtým).
S príchodom Intel VT-x / AMD SVM bola vytvorená špeciálna nová úroveň Ring -1 (mínus jedna). A teraz na ňom beží hypervízor a hostia bežia na Ring 0 a získajú privilegovaný prístup k CPU.
Tie. nakoniec:
- hostiteľ beží na kruhu 0
- hostia pracujú na Ring 0
- hypervízor beží na kruhu -1
4) QEMU-KVM
KVM poskytuje hosťom prístup k Ring 0 a používa QEMU na emuláciu I/O (procesor, disky, sieť, video, PCI, USB, sériové porty atď., ktoré hostia „vidia“ a pracujú s nimi).
Preto QEMU-KVM (alebo KVM-QEMU) :)
ÚVERY
PS Text tohto článku bol pôvodne publikovaný na kanáli Telegram
Do komentárov napíšte, kde správne nerozumiem téme alebo či je potrebné niečo dodať.
Ďakujeme!
Zdroj: hab.com