Min nåværende forståelse:
1) KVM
KVM (Kernel-basert Virtual Machine) er en hypervisor (VMM – Virtual Machine Manager) som kjører som en modul på Linux OS. En hypervisor er nødvendig for å kjøre noe programvare i et ikke-eksisterende (virtuelt) miljø og samtidig skjule fra denne programvaren den virkelige fysiske maskinvaren som denne programvaren kjører på. Hypervisoren fungerer som en "spacer" mellom den fysiske maskinvaren (verten) og det virtuelle operativsystemet (gjesten).
Siden KVM er en standardmodul av Linux-kjernen, mottar den alle nødvendige godbiter fra kjernen (minneadministrasjon, planlegger, etc.). Og følgelig, til slutt, går alle disse fordelene til gjestene (siden gjestene jobber på en hypervisor som kjører på/i Linux OS-kjernen).
KVM er veldig raskt, men i seg selv er det ikke nok til å kjøre et virtuelt operativsystem, fordi... Dette krever I/O-emulering. For I/O (CPU, disker, nettverk, video, PCI, USB, serielle porter, etc.) bruker KVM QEMU.
2) QEMU
QEMU (Quick Emulator) er en emulator for ulike enheter som lar deg kjøre operativsystemer designet for en arkitektur på en annen (for eksempel ARM -> x86). I tillegg til prosessoren emulerer QEMU ulike perifere enheter: nettverkskort, HDD, skjermkort, PCI, USB, etc.
Det fungerer slik:
Instruksjoner/binær kode (for eksempel ARM) konverteres til mellomliggende plattformuavhengig kode ved hjelp av TCG (Tiny Code Generator)-omformeren og deretter konverteres denne plattformuavhengige binære koden til målinstruksjoner/-kode (for eksempel x86).
ARM –> mellomkode –> x86
I hovedsak kan du kjøre virtuelle maskiner på QEMU på hvilken som helst vert, selv med eldre prosessormodeller som ikke støtter Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). I dette tilfellet vil det imidlertid fungere veldig sakte, på grunn av det faktum at den utførende binære koden må kompileres på nytt to ganger ved hjelp av TCG (TCG er en Just-in-Time-kompilator).
De. QEMU i seg selv er megakul, men den fungerer veldig sakte.
3) Beskyttelsesringer
Binær programkode på prosessorer fungerer av en grunn, men er plassert på forskjellige nivåer (ringer / beskyttelsesringer) med forskjellige nivåer av datatilgang, fra de mest privilegerte (Ring 0), til de mest begrensede, regulerte og "med mutrene strammet til ” (Ring 3 ).
Operativsystemet (OS-kjernen) kjører på Ring 0 (kjernemodus) og kan gjøre hva det vil med alle data og enheter. Brukerapplikasjoner opererer på Ring 3-nivå (brukermodus) og har ikke lov til å gjøre hva de vil, men må i stedet be om tilgang hver gang for å utføre en bestemt operasjon (derved har brukerapplikasjoner bare tilgang til sine egne data og kan ikke "få inn i en annens sandkasse). Ring 1 og 2 er beregnet for bruk av sjåfører.
Før oppfinnelsen av Intel VT-x / AMD SVM, kjørte hypervisorer på Ring 0, og gjester kjørte på Ring 1. Siden Ring 1 ikke har nok rettigheter for normal drift av OS, med hver privilegert samtale fra gjestesystemet, hypervisor måtte endre denne samtalen på fly og utføre den på Ring 0 (omtrent som QEMU gjør). De. gjest binær IKKE ble utført direkte på prosessoren, og gikk hver gang gjennom flere mellomliggende modifikasjoner i farten.
Overheaden var betydelig og dette var et stort problem, og deretter ga prosessorprodusenter, uavhengig av hverandre, ut et utvidet sett med instruksjoner (Intel VT-x / AMD SVM) som tillot utførelse av gjeste-OS-kode DIREKTE på vertsprosessoren (omgå eventuelle kostbare mellomtrinn, slik tilfellet var før).
Med bruken av Intel VT-x / AMD SVM, ble et spesielt nytt Ring-nivå -1 (minus en) opprettet. Og nå kjører hypervisoren på den, og gjestene kjører på Ring 0 og får privilegert tilgang til CPU.
De. etter hvert:
- vert kjører på Ring 0
- gjester jobber på Ring 0
- hypervisor kjører på Ring -1
4) QEMU-KVM
KVM gir gjestene tilgang til Ring 0 og bruker QEMU til å emulere I/O (prosessor, disker, nettverk, video, PCI, USB, serielle porter osv. som gjestene "ser" og jobber med).
Derfor QEMU-KVM (eller KVM-QEMU) :)
CREDITS
P.S. Teksten til denne artikkelen ble opprinnelig publisert i Telegram-kanalen
Skriv i kommentarfeltet hvor jeg ikke forstår temaet riktig eller om det er noe å legge til.
Takk!
Kilde: www.habr.com