Existem duas formas
de implementação dos monitores de máquina virtual: a
virtualização total e a
para-virtualização.
A
virtualização total tem por objetivo fornecer ao sistema
operacional visitante uma réplica do hardware
subjacente. Dessa forma, o sistema operacional visitante é
executado sem modificações sobre o monitor de
máquina virtual (VMM), o que traz alguns inconvenientes. O
primeiro é que o número de dispositivos a serem
suportados pelo VMM é extremamente elevado. Para resolver esse
contratempo, as implementações da virtualização
total usam dispositivos genéricos, que funcionam bem para a
maioria dos dispositivos disponíveis, mas não garantem o
uso da totalidade de sua capacidade. Outro inconveniente da
virtualização total é o fato de o sistema
operacional visitante não ter conhecimento de que está
sendo executado sobre o VMM, então as instruções
executadas pelo sistema operacional visitante devem ser testadas
pelo VMM para que depois sejam executadas diretamente no
hardware, ou executadas pelo VMM e simulada a
execução para o sistema visitante. Por fim, o último
inconveniente da virtualização total é o fato de ter
que contornar alguns problemas gerados pela implementação
dos sistemas operacionais, já que esses foram implementados
para serem executados como instância única nas
máquinas física, não disputando recursos com outros
sistemas operacionais. Um exemplo desse último inconveniente
é uso de paginação na memória virtual, pois
há a disputa de recursos entre diversas instâncias de
sistemas operacionais, o que acarreta em uma queda do desempenho
[2].
Figura 2: Virtualização total na
arquitetura x86 [11].
A
para-virtualização é uma alternativa à
virtualização total. Nesse modelo de
virtualização, o sistema operacional é modificado
para chamar o VMM sempre que executar uma instrução que
possa alterar o estado do sistema, uma instrução
sensível. Isso acaba com a necessidade de o VMM testar
instrução por instrução, o que representa um
ganho significativo de desempenho. Outro ponto positivo da
para-virtualização é que os dispositivos de
hardware são acessados por drivers da
própria máquina virtual, não necessitando mais do
uso de drivers genéricos que inibiam o uso da
capacidade total do dispositivo.
Embora a
para-virtualização apresentasse um ganho de desempenho
significativo frente à virtualização total, essa
disparidade tem sido superada devido à presença de
instruções de virtualização nos processadores
Intel e AMD, que favorecem a virtualização total. A
tecnologia de virtualização da Intel é a IVT
(Intel Virtualization Technology), codinome
Vanderpool. A da AMD é a AMD-V
(AMD-Virtualization), codinome Pacífica. Embora
tenham sido desenvolvidas para o mesmo propósito, foram
desenvolvidas de maneira independentes. Por esse motivo, há
alguns problemas na portabilidade de máquinas virtuais de uma
arquitetura Intel para a arquitetura AMD e
vice-versa.
Portanto, tendo em
vista as técnicas de virtualização, a decisão
de qual melhor a técnica de virtualização para um
dado ambiente está intimamente ligada a qual o processador da
máquina física que vai hospedar as virtuais, bem como se
o processador possui ou não uma extensão no seu conjunto
de instruções que suporte a
virtualização.
Figura 3: Para-virtualização na
arquitetura x86.