
Meu entendimento atual:
1) KVM
KVM (Máquina Virtual Baseada em Kernel) - um hypervisor (VMM - Virtual Machine Manager), operando como um módulo no SO Linux. Um hipervisor é necessário para executar algum software em um ambiente inexistente (virtual) e, ao mesmo tempo, ocultar deste software o hardware físico real no qual esse software funciona. O hipervisor atua como uma "faixa" entre o hardware físico (host) e o SO virtual (convidado).
Como o KVM é um módulo padrão do kernel Linux, ele recebe do kernel todo o nishtyaki necessário (trabalhando com memória, agendador, etc.). E, consequentemente, todas essas vantagens vão para os convidados (como os convidados trabalham em um hipervisor que é executado no / no kernel do Linux).
O KVM é muito rápido, mas por si só não é suficiente para executar um sistema operacional virtual, porque isso requer emulação de E / S. Para E / S (processador, unidades, rede, vídeo, PCI, USB, portas seriais, etc.), o KVM usa QEMU.
2) QEMU
QEMU (Quick Emulator) - um emulador de vários dispositivos que permite executar sistemas operacionais projetados para uma arquitetura em outra (por exemplo, ARM -> x86). Além do processador, o QEMU emula vários dispositivos periféricos: placas de rede, HDD, placas de vídeo, PCI, USB, etc.
Funciona assim:
As instruções / código binário (por exemplo, ARM) são convertidas em um código independente de plataforma intermediária usando o conversor TCG (Tiny Code Generator) e, em seguida, esse código binário independente de plataforma é convertido em instruções / código de destino (por exemplo, x86).
ARM -> middleware -> x86
De fato, você pode executar máquinas virtuais no QEMU em qualquer host, mesmo nos modelos de processadores mais antigos que não suportam Intel VT-x (Tecnologia de virtualização Intel) / AMD SVM (AMD Secure Virtual Machine). No entanto, nesse caso, ele funcionará muito lentamente, devido ao fato de que o binário deve ser recompilado em tempo real duas vezes usando o TCG (TCG é o compilador Just-in-Time).
I.e. O QEMU em si é mega legal, mas funciona muito lentamente.
3) Anéis de proteção

O código do programa binário nos processadores não funciona exatamente assim, mas está localizado em diferentes níveis (anéis de proteção) com diferentes níveis de acesso aos dados, desde os mais privilegiados (anel 0) até os mais limitados, super-regulados e com porcas apertadas (anel 3 )
O sistema operacional (kernel do SO) é executado no Ring 0 (modo kernel) e pode fazer qualquer coisa com quaisquer dados e dispositivos. Os aplicativos do usuário operam no nível Ring 3 (modo de usuário) e não têm o direito de fazer o que quiserem, mas devem sempre solicitar acesso para realizar uma operação (dessa maneira, os aplicativos do usuário têm acesso apenas aos seus próprios dados e não podem "Entre na" caixa de areia de outra pessoa "). Os anéis 1 e 2 destinam-se ao uso de drivers.
Antes da invenção do Intel VT-x / AMD SVM, os hipervisores trabalhavam no anel 0 e os convidados trabalhavam no anel 1. Como o anel 1 não possui direitos suficientes para a operação normal do sistema operacional e, em todas as chamadas privilegiadas do sistema convidado, o hipervisor precisava modificar essa chamada imediatamente e execute-o no anel 0 (algo como o QEMU faz). I.e. o código binário do convidado
NÃO foi executado diretamente no processador e, todas as vezes em que ocorreram várias modificações intermediárias.
A sobrecarga foi significativa e esse foi um grande problema, e os fabricantes de processadores, independentemente um do outro, lançaram um conjunto extenso de instruções (Intel VT-x / AMD SVM) que permitem executar o código do SO convidado
DIRETAMENTE no processador host (ignorando as etapas intermediárias caras, como foi antes).
Com o advento do Intel VT-x / AMD SVM, um novo nível Ring -1 especial foi criado (menos um). E agora o hypervisor está trabalhando nisso, e os convidados estão trabalhando no Ring 0 e obtêm acesso privilegiado à CPU.
I.e. como resultado:
- host é executado no anel 0
- os hóspedes trabalham no Ring 0
- o hypervisor é executado no Anel -1
4) QEMU-KVM
O KVM fornece aos convidados acesso ao Anel 0 e usa o QEMU para emular E / S (processador, discos, rede, vídeo, PCI, USB, portas seriais, etc.) que os convidados “veem” e trabalham com eles.
Daí o QEMU-KVM (ou KVM-QEMU) :)
CRÉDITOS
Uma imagem para atrair a atenção
Anéis de proteção de imagemPS O texto deste artigo foi publicado originalmente no canal Telegram @RU_Voip como resposta à pergunta de um dos participantes do canal.
Escreva nos comentários em que lugares eu não entendo o tópico corretamente ou se há algo para complementar.
Obrigada