
Kuptimi im aktual:
1) KVM
KVM (Kernel-based Virtual Machine) – një hipervizor (VMM – Menaxhuesi i Makinerive Virtuale), i cili funksionon si një modul në OS Linux. Hipervizori është i nevojshëm për të ekzekutuar ndonjë softuer në një mjedis të paparë (virtual) dhe në të njëjtën kohë t'i fshehë këtij softueri harduerin fizik real mbi të cilin funksionon ky softuer. Hipervizori funksionon si një "ndërmjetës" midis harduerit fizik (host) dhe OS virtuale (mysafir).
Duke qenë se KVM është një modul standard i kernelit Linux, ai merr të gjitha përfitimet nga bërthama (puna me memorien, planifikuesi, etj.). Prandaj, në fund të fundit, të gjitha këto avantazhe arrihen edhe nga mysafirët (pasi mysafirët funksionojnë në hipervizorin, i cili punon në / në bërthamën e OS Linux).
KVM është shumë i shpejtë, por vetë ai nuk mjafton për të ekzekutuar një OS virtuale, pasi nevojitet gjithashtu emulimi i I/O. Për I/O (procesori, disqet, rrjeti, video, PCI, USB, porte seriale, etj.) KVM përdor QEMU.
2) QEMU
QEMU (Quick Emulator) – një emulator i pajisjeve të ndryshme, i cili lejon ekzekutimin e sistemeve operative të destinuara për një arkitekturë, në një tjetër (p.sh., ARM -> x86). Përveç procesorit, QEMU emulon pajisje periferike të ndryshme: kartela rrjeti, HDD, kartela video, PCI, USB etj.
Kjo ndodh kështu:
Udhëzimet / kodi binar (p.sh., ARM) konvertohen në kod të ndërmjetëm platformës, me ndihmën e konvertuesit TCG (Tiny Code Generator) dhe pastaj ky kod binar i platformës konvertohet në udhëzime / kodin përkatës (p.sh., x86).
ARM -> kod_i_ndërmjetëm -> x86
Në thelb, ju mund të ekzekutoni makinat virtuale në QEMU në çdo host, madje edhe me modele të vjetra procesorësh që nuk mbështesin Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). Megjithatë, në këtë rast, kjo do të funksionojë mjaft ngadalë, pasi kodi binar që ekzekutohet duhet të rikompilohet në fluks dy herë, duke përdorur TCG (TCG është një kompilator Just-in-Time).
Pra, vetë QEMU është jashtëzakonisht i bukur, por punon shumë ngadalë.
3) Rrethet e mbrojtjes

Kodi programit binar në procesorë funksionon jo thjesht kështu, por ndodhet në nivele të ndryshme (rrethe / Rrethet e Mbrojtjes) me nivele të ndryshme aksesesh në të dhëna, nga më privilegjiuese (Ring 0), deri te më të kufizuar, të rregulluar dhe "të ngjeshur" (Ring 3).
Sistemi operativ (nëndërmarrja e OS) funksionon në Ring 0 (modalitetin kernel) dhe mund të bëjë çfarëdo me çdo të dhënë dhe pajisje. Aplikacionet e përdoruesve funksionojnë në nivelin Ring 3 (modaliteti i përdoruesit) dhe nuk kanë të drejtë të bëjnë çfarë të duan, por çdo herë duhet të kërkojnë akses për të kryer një operacion (pra, aplikacionet e përdoruesve kanë qasje vetëm në të dhënat e veta dhe nuk mund të "ndërhyjnë" në "sandkastën" e të tjerëve). Ring 1 dhe 2 janë për t'u përdorur nga drejtuesit.
Para shpikjes së Intel VT-x / AMD SVM, hipervizorët punonin në Ring 0, ndërsa mysafirët punonin në Ring 1. Duke qenë se Ring 1 nuk kishte mjaft të drejta për të funksionuar normalisht sistemi operativ, me çdo thirrje të privilegjuar nga sistemi mysafir, hipervizorit i duhej të modifikonte në flakë këtë thirrje dhe ta kryente atë në Ring 0 (afërsisht ashtu siç bën QEMU). Pra, kodi binar mysafir NUK ekzekutohej drejtpërdrejt në procesor, por çdo herë kalonte disa modifikime ndërmjetësuese.
Kostot kishin qenë të mëdha dhe kjo ishte një problem i madh dhe atëherë prodhuesit e procesorëve, pa ndihmën e njëri-tjetrit, nxorrën një set të avancuar instrukcionesh (Intel VT-x / AMD SVM), që lejojnë ekzekutimin e kodit të sistemeve operative mysafirë DREJTË në procesorin e hostit (duke kaluar të gjitha fazat ndërmjetësuese të kushtueshme, siç ishin më parë).
Me shfaqjen e Intel VT-x / AMD SVM, u krijua një nivel të ri të veçantë Ring -1 (minus një). Tani, atje punon hipervizori, ndërsa mysafirët punojnë në Ring 0 dhe marrin akses të privilegjuar në CPU.
Pra, në fund:
- hosti punon në Ring 0
- mysafirët punojnë në Ring 0
- hipervizori punon në Ring -1
4) QEMU-KVM
KVM ofron qasje mysafirëve në Ring 0 dhe përdor QEMU për të emuluar I/O (procesorin, disqet, rrjetin, videon, PCI, USB, portat seriale etj., që "shohin" dhe me të cilat punojnë mysafirët).
Prandaj QEMU-KVM (ose KVM-QEMU) 🙂
CREDITS
P.S. Teksti i këtij artikulli fillimisht është publikuar në kanalin Telegram si përgjigje për pyetjen e një prej anëtarëve të kanalit.
Shkruani në komentet se në cilat vende nuk e kuptoj saktë temën ose nëse ka diçka për të shtuar.
Faleminderit!
Burimi: habr.com
