
Min nuvarande förstÄelse:
1) KVM
KVM (Kernel-based Virtual Machine) â en hypervisor (VMM â Virtual Machine Manager) som fungerar som en modul i Linux-operativsystemet. Hypervisorn behövs för att köra programvara i en icke-existerande (virtuell) miljö och samtidigt dölja den fysiska hĂ„rdvaran som programvaran körs pĂ„. Hypervisorn fungerar som en 'bro' mellan den fysiska hĂ„rdvaran (vĂ€rden) och det virtuella operativsystemet (gĂ€sten).
Eftersom KVM Àr en standardmodul i Linux-kÀrnan fÄr den alla nödvÀndiga fördelar frÄn kÀrnan (minneshantering, schemalÀggare etc.). DÀrmed fÄr Àven gÀsterna alla dessa fördelar (dÄ gÀsterna arbetar pÄ hypervisorn som kör i/eller pÄ Linux-operativsystemets kÀrna).
KVM Àr vÀldigt snabb, men den ensam rÀcker inte för att köra ett virtuellt operativsystem, eftersom I/O-emulering ocksÄ krÀvs. För I/O (processor, diskar, nÀtverk, video, PCI, USB, seriekablar, etc.) anvÀnder KVM QEMU.
2) QEMU
QEMU (Quick Emulator) â en emulator för olika enheter som gör det möjligt att köra operativsystem som Ă€r avsedda för en arkitektur pĂ„ en annan (till exempel, ARM â> x86). Förutom processorn emulerar QEMU olika perifera enheter: nĂ€tverkskort, HDD, grafikkort, PCI, USB, etc.
Det fungerar sÄ hÀr:
Instruktioner/binar kod (exempelvis ARM) konverteras till en mellanliggande plattformsoberoende kod med hjÀlp av TCG (Tiny Code Generator), och sedan konverteras den plattformsoberoende binÀra koden till mÄlinstruktioner/kod (till exempel x86).
ARM â> mellanliggande_kod â> x86
I grund och botten kan du köra virtuella maskiner pÄ QEMU pÄ vilken vÀrd som helst, Àven med gamla processor-modeller som inte stödjer Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). Men i sÄ fall kommer det att fungera ganska lÄngsamt, eftersom den exekverbara binÀra koden mÄste omkompileras i realtid tvÄ gÄnger med hjÀlp av TCG (TCG Àr en Just-in-Time-compiler).
Det vill sÀga, QEMU i sig Àr verkligen imponerande, men det fungerar mycket lÄngsamt.
3) Skyddskringar

Den binĂ€ra programkoden pĂ„ processorer fungerar inte bara sĂ„, utan Ă€r placerad pĂ„ olika nivĂ„er (ringar / Protection rings) med olika Ă„tkomstrĂ€ttigheter, frĂ„n den mest privilegierade (Ring 0) till den mest begrĂ€nsade och âsĂ€kraâ (Ring 3).
Operativsystemet (kÀrna OS) arbetar pÄ Ring 0 (kernel mode) och kan göra vad som helst med alla data och enheter. AnvÀndarappar arbetar pÄ nivÄ Ring 3 (user mode) och fÄr inte göra vad de vill, utan mÄste varje gÄng begÀra Ätkomst för att utföra en viss ÄtgÀrd (sÄledes har anvÀndarappar endast tillgÄng till sina egna data och kan inte "blanda sig i" andras "sandbox"). Ring 1 och 2 Àr avsedda för anvÀndning av drivrutiner.
Innan uppfinningen av Intel VT-x / AMD SVM, arbetade hypervisorer pÄ Ring 0 och gÀsterna arbetade pÄ Ring 1. Eftersom Ring 1 inte hade tillrÀckliga rÀttigheter för att operativsystemet skulle fungera normalt, var hypervisorn tvungen att under varje privilegierad anrop frÄn gÀstsistemet modifiera den anropet i realtid och utföra den pÄ Ring 0 (ungefÀr som QEMU gör). Det vill sÀga, gÀsternas binÀrkod INTE utfördes direkt pÄ processorn, utan passerade varje gÄng flera mellansteg av modifieringar i realtid.
Ăverheaden var betydande och det var ett stort problem och dĂ„ slĂ€ppte processortillverkarna, oberoende av varandra, ett utökat instruktionsset (Intel VT-x / AMD SVM) som möjliggjorde körning av gĂ€st-OS-kod DIRECT pĂ„ vĂ€rdprocessorn (utan nĂ„gra kostsamma mellanliggande steg, som det var tidigare).
Med introduktionen av Intel VT-x / AMD SVM skapades en speciell ny nivÄ Ring -1 (minus ett). Och nu arbetar hypervisorn pÄ den, medan gÀsterna arbetar pÄ Ring 0 och fÄr privilegierad Ätkomst till CPU.
Det vill sÀga, slutligen:
- vÀrden arbetar pÄ Ring 0
- gÀster arbetar pÄ Ring 0
- hypervisorn arbetar pÄ Ring -1
4) QEMU-KVM
KVM ger gÀsterna Ätkomst till Ring 0 och anvÀnder QEMU för att emulera I/O (processor, diskar, nÀtverk, video, PCI, USB, seriella portar osv. som gÀsterna "ser" och arbetar med).
HĂ€rifrĂ„n kommer QEMU-KVM (eller KVM-QEMU) đ
CREDITS
P.S. Texten i denna artikel publicerades ursprungligen pÄ Telegramkanalen som ett svar pÄ en frÄga frÄn en av kanalens deltagare.
Skriv i kommentarerna var jag har missförstÄtt Àmnet eller om det finns nÄgot att tillÀgga.
Tack!
KĂ€lla: habr.com
