Virtualização completa versus paravirtualização
- 4 minutos
Ocorre um problema quando uma instrução que é sensível e não privilegiada é emitida por um processo em execução em uma VM no modo de usuário. De acordo com Popek e Goldberg (1974), as instruções sensíveis precisarão interceptar o hipervisor, se executadas no modo de usuário. No entanto, conforme explicado anteriormente, instruções sensíveis podem ser privilegiadas (por exemplo, LPSW) e não privilegiadas (por exemplo, POPF). As instruções não privilegiadas não interceptam o hipervisor. As instruções sensíveis e não privilegiadas são chamadas de críticas (veja a Figura 4). ISAs que contêm instruções críticas não obedecem ao teorema de Popek e Goldberg.1 O seguinte vídeo aborda esse conceito e formas relacionadas a ele:
O desafio é construir um hipervisor na presença de instruções críticas. Isso pode ser feito, mas Smith e Nair2 fazem a distinção de um hipervisor que obedece ao teorema de Popek e Goldberg e um que não obedece a ele referindo-se ao primeiro como um hipervisor verdadeiro ou eficiente e ao último simplesmente como hipervisor.

Figura 4: as instruções que não obedecem ao teorema de Popek e Goldberg são chamadas de instruções críticas
Se um processador não obedecer ao requisito de virtualização de Popek e Goldberg, um hipervisor poderá ser construído usando a aplicação de patch de código, a virtualização completa e/ou a paravirtualização. Conforme ilustrado na Figura 5, a aplicação de patch de código exige que o hipervisor verifique o código do convidado antes da execução, descubra todas as instruções críticas e substitua-as por interceptações (chamadas do sistema) ao hipervisor. A virtualização completa emula todas as instruções no ISA. A emulação degrada o desempenho porque reproduz o comportamento de todas as instruções de origem primeiro traduzindo-o em uma instrução de destino e, em seguida, executando-o em um ISA de destino (mais na emulação em breve). A paravirtualização lida com instruções críticas por meio da modificação de SOs convidados. Especificamente, isso envolve a reescrita de cada instrução crítica como uma hiperchamada que intercepta o hipervisor Xen. Da mesma forma, a paravirtualização aprimora o desempenho, evitando a emulação às custas da modificação do SO convidado. Ao contrário, a virtualização completa evita a modificação de SOs convidados às custas da degradação do desempenho do sistema. Como exemplos, o VMware usa a virtualização completa, enquanto o Xen emprega a paravirtualização. O Xen é compatível com a maioria dos principais SOs, incluindo Windows, Linux, Solaris e NetBSD.

Figura 5: a verificação de código e a aplicação de patch impõem instruções críticas para interceptar o hipervisor. O código é mostrado em um formato próximo a um diagrama de fluxo de controle.
Referências
- Popek, J., e Goldberg, R. (1974). Requisitos formais para arquiteturas virtualizáveis de terceira geração Commun. ACM, Vol. 17, Nº 7.
- Smith, J. E., e Nair, R. (2005). A arquitetura do computador de máquinas virtuais, 38(5), 32-38.