
Ma compréhension actuelle:
1) KVM
KVM (Kernel-based Virtual Machine) - un hyperviseur (VMM - Virtual Machine Manager), fonctionnant comme un module sur le système d'exploitation Linux. Un hyperviseur est nécessaire pour exécuter certains logiciels dans un environnement (virtuel) inexistant et en même temps, cacher à ce logiciel le véritable matériel physique sur lequel ce logiciel fonctionne. L'hyperviseur agit comme une «bande» entre le matériel physique (hôte) et le système d'exploitation virtuel (invité).
Puisque KVM est un module standard du noyau Linux, il reçoit du noyau tous les nishtyaki requis (travail avec mémoire, ordonnanceur, etc.). Et en conséquence, en fin de compte, tous ces avantages vont aux invités (car les invités travaillent sur un hyperviseur qui fonctionne sur / dans le noyau Linux).
KVM est très rapide, mais il ne suffit pas à lui seul pour exécuter un système d'exploitation virtuel, car cela nécessite une émulation d'E / S. Pour les E / S (processeur, lecteurs, réseau, vidéo, PCI, USB, ports série, etc.) KVM utilise QEMU.
2) QEMU
QEMU (Quick Emulator) - un émulateur de divers appareils qui vous permet d'exécuter des systèmes d'exploitation conçus pour une architecture sur une autre (par exemple, ARM -> x86). En plus du processeur, QEMU émule divers périphériques: cartes réseau, disque dur, cartes vidéo, PCI, USB, etc.
Cela fonctionne comme ceci:
Les instructions / code binaire (par exemple, ARM) sont convertis en un code intermédiaire indépendant de la plate-forme à l'aide du convertisseur TCG (Tiny Code Generator), puis ce code binaire indépendant de la plate-forme est converti en instructions / code cible (par exemple, x86).
ARM -> middleware -> x86
En fait, vous pouvez exécuter des machines virtuelles sur QEMU sur n'importe quel hôte, même avec des modèles de processeur plus anciens qui ne prennent pas en charge Intel VT-x (Intel Virtualization Technology) / AMD SVM (AMD Secure Virtual Machine). Cependant, dans ce cas, cela fonctionnera très lentement, car le binaire doit être recompilé à la volée deux fois à l'aide de TCG (TCG est un compilateur Just-in-Time).
C'est-à-dire QEMU lui-même est méga cool, mais il fonctionne très lentement.
3) Anneaux de protection

Le code de programme binaire sur les processeurs ne fonctionne pas comme ça, mais est situé à différents niveaux (anneaux de protection) avec différents niveaux d'accès aux données, des plus privilégiés (anneau 0) aux plus limités, sur-réglementés et «avec des écrous serrés» (anneau 3 )
Le système d'exploitation (noyau OS) fonctionne sur Ring 0 (mode noyau) et peut faire n'importe quoi avec n'importe quelles données et périphériques. Les applications utilisateur fonctionnent au niveau Ring 3 (mode utilisateur) et n'ont pas le droit de faire ce qu'elles veulent, mais doivent à la place demander à chaque fois l'accès pour effectuer une opération (de cette manière, les applications utilisateur n'ont accès qu'à leurs propres données et ne peuvent pas "Entrez dans" le bac à sable de quelqu'un d'autre "). Les anneaux 1 et 2 sont destinés aux conducteurs.
Avant l'invention d'Intel VT-x / AMD SVM, les hyperviseurs fonctionnaient sur Ring 0, et les invités travaillaient sur Ring 1. Étant donné que Ring 1 ne dispose pas de droits suffisants pour le fonctionnement normal du système d'exploitation, puis à chaque appel privilégié du système invité, l'hyperviseur devait modifier cet appel à la volée. et l'exécuter sur Ring 0 (quelque chose comme QEMU fait). C'est-à-dire le code binaire invité n'a
PAS été exécuté directement sur le processeur, et à chaque vol, il y a eu plusieurs modifications intermédiaires.
La surcharge était importante et c'était un gros problème, puis les fabricants de processeurs, indépendamment les uns des autres, ont publié un ensemble étendu d'instructions (Intel VT-x / AMD SVM) qui permettent d'exécuter le code OS invité
DIRECTEMENT sur le processeur hôte (en évitant toutes les étapes intermédiaires coûteuses, comme c'était avant).
Avec l'avènement d'Intel VT-x / AMD SVM, un nouveau niveau spécial Ring -1 (moins un) a été créé. Et maintenant, l'hyperviseur y travaille, et les invités travaillent sur Ring 0 et obtiennent un accès privilégié au CPU.
C'est-à-dire en conséquence:
- l'hôte s'exécute sur Ring 0
- les clients travaillent au Ring 0
- l'hyperviseur fonctionne sur Ring -1
4) QEMU-KVM
KVM fournit aux clients un accès à Ring 0 et utilise QEMU pour émuler les E / S (processeur, disques, réseau, vidéo, PCI, USB, ports série, etc. que les clients «voient» et utilisent).
D'où le QEMU-KVM (ou KVM-QEMU) :)
CRÉDITS
Une image pour attirer l'attention
Anneaux de protection d'imagePS Le texte de cet article a été initialement publié dans la chaîne Telegram @RU_Voip en réponse à la question de l'un des participants à la chaîne.
Écrivez dans les commentaires dans quels endroits je ne comprends pas correctement le sujet ou s'il y a quelque chose à compléter.
Je vous remercie!