A QEMU-KVM általános működési elvei

A QEMU-KVM általános működési elvei

Jelenlegi értelmezésem:

1) KVM

A KVM (Kernel-alapú virtuális gép) egy hypervisor (VMM – Virtual Machine Manager), amely modulként fut Linux operációs rendszeren. A hipervizorra azért van szükség, hogy bizonyos szoftvereket nem létező (virtuális) környezetben tudjunk futtatni, és ezzel egyidejűleg elrejteni a szoftver elől a valódi fizikai hardvert, amelyen a szoftver fut. A hypervisor „távtartóként” működik a fizikai hardver (gazda) és a virtuális operációs rendszer (vendég) között.

Mivel a KVM a Linux kernel szabványos modulja, megkapja az összes szükséges jótékonyságot a kerneltől (memóriakezelés, ütemező stb.). És ennek megfelelően végül mindezek az előnyök a vendégeket illetik meg (hiszen a vendégek egy hypervisoron dolgoznak, amely a Linux OS kernelen vagy abban fut).

A KVM nagyon gyors, de önmagában nem elegendő egy virtuális operációs rendszer futtatásához, mert... Ehhez I/O emulációra van szükség. I/O-hoz (CPU, lemezek, hálózat, videó, PCI, USB, soros portok stb.) a KVM QEMU-t használ.

2) QEMU

A QEMU (Quick Emulator) egy emulátor különféle eszközökhöz, amely lehetővé teszi az egyik architektúrához tervezett operációs rendszerek futtatását egy másikon (például ARM -> x86). A QEMU a processzoron kívül különféle perifériás eszközöket emulál: hálózati kártyákat, HDD-t, videokártyákat, PCI-t, USB-t stb.

Ez így működik:

Az utasítások/bináris kódok (például ARM) a TCG (Tiny Code Generator) konverter segítségével köztes platformfüggetlen kódokká alakulnak, majd ezt a platformfüggetlen bináris kódot célutasításokká/kódokká (például x86) alakítják át.

ARM –> köztes_kód –> x86

Lényegében a virtuális gépeket QEMU-n futtathatja bármely gazdagépen, még olyan régebbi processzormodellekkel is, amelyek nem támogatják az Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine) szabványt. Ebben az esetben azonban nagyon lassan fog működni, mivel a végrehajtó bináris kódot menet közben kétszer kell újrafordítani TCG segítségével (a TCG egy Just-in-Time fordító).

Azok. A QEMU maga nagyon menő, de nagyon lassan működik.

3) Védőgyűrűk

A QEMU-KVM általános működési elvei

A processzorokon lévő bináris programkód okkal működik, de különböző szinteken (gyűrűk / védelmi gyűrűk) található, különböző szintű adathozzáféréssel, a legkiváltságosabbaktól (0. gyűrű) a legkorlátozottabbakig, szabályozottakig és „meghúzott anyákig” ” (3. gyűrű).

Az operációs rendszer (OS kernel) Ring 0-n (kernel mód) fut, és bármit megtehet bármilyen adattal és eszközzel. A felhasználói alkalmazások a Ring 3 szinten működnek (felhasználói mód), és nem tehetnek azt, amit akarnak, hanem minden alkalommal hozzáférést kell kérniük egy adott művelet végrehajtásához (így a felhasználói alkalmazások csak a saját adataikhoz férnek hozzá, és nem tudnak valaki más homokozójába). Az 1. és 2. gyűrűt a járművezetők használhatják.

Az Intel VT-x / AMD SVM feltalálása előtt a hipervizorok a 0-ás gyűrűn, a vendégek pedig az 1-es gyűrűn futottak. Mivel a Ring 1 nem rendelkezik elegendő jogosultsággal az operációs rendszer normál működéséhez, a vendégrendszer minden egyes kiemelt hívása esetén a A hypervisornak menet közben kellett módosítania ezt a hívást, és a 0-ás gyűrűn végrehajtani (akárcsak a QEMU). Azok. vendég bináris NEM közvetlenül a processzoron hajtották végre, és minden alkalommal több közbenső módosításon ment keresztül.

A többletköltség jelentős volt, és ez nagy probléma, majd a processzorgyártók egymástól függetlenül kibővített utasításkészletet adtak ki (Intel VT-x / AMD SVM), amely lehetővé tette a vendég operációs rendszer kódjának végrehajtását. KÖZVETLENÜL a gazdagép processzoron (a költséges közbenső lépések megkerülésével, ahogy az korábban is történt).

Az Intel VT-x / AMD SVM megjelenésével egy speciális új gyűrűszint -1 (mínusz egy) jött létre. És most a hypervisor fut rajta, a vendégek pedig a Ring 0-n futnak, és kiváltságos hozzáférést kapnak a CPU-hoz.

Azok. végül is:

  • a gazdagép a 0-ás gyűrűn fut
  • a vendégek a 0-ás gyűrűn dolgoznak
  • A hypervisor a -1 gyűrűn fut

4) QEMU-KVM

A KVM hozzáférést biztosít a vendégeknek a Ring 0-hoz, és a QEMU-t használja az I/O (processzor, lemezek, hálózat, videó, PCI, USB, soros portok stb.) emulálására, amelyeket a vendégek „látnak” és dolgoznak velük.

Ezért a QEMU-KVM (vagy KVM-QEMU) :)

CREDITS
Kép felkelti a figyelmet
Védőgyűrűk képe

PS A cikk szövege eredetileg a Telegram csatornán jelent meg @RU_Voip válaszként a csatorna egyik résztvevőjének kérdésére.

Írd meg kommentben, hogy hol nem értem a témát, vagy van-e hozzáfűznivaló.

Köszönöm!

Forrás: will.com

Hozzászólás