Resumo – Máquinas virtuais Leonardo Alexandre Ferreira Leite Máquinas virtuais (VM) são cópias em software do hardware de outras máquinas físicas. Estas cópias ficam protegidas e isoladas do hardware da máquina real que roda a máquina virtual. Temos então um ambiente em que várias máquinas virtuais acessam um único Virtual Machine Monitor (VMM), que é uma camada de software que abstrai o acesso aos recursos da máquina real, garantindo assim o isolamento das máquinas virtuais. Este isolamento faz com que várias máquinas virtuais rodem sem que o funcionamento de uma afete o desempenho das outras. Isto permite isolar certos serviços em uma máquina virtual, assim se ocorrer alguma falha crítica nestes serviços, outros serviços rodando em outras máquinas virtuais não serão afetados. O conceito de máquina virtual é definido com base nas seguintes propriedades: 1, o efeito demonstrado deve ser o mesmo de que se o software estivesse rodando no hardware real da MV; 2, um conjunto dominante de instruções do processador virtual é executado diretamente no processador da máquina real; 3, o VMM tem controle total sobre os recursos de hardware da máquina real, que não devem ser acessador diretamente pela MV. O conceito de virtualização é muito similar ao da emulação, sendo que a emulação tem um enfoque mais funcional de criar um ambiente em uma máquina X que seja capaz de rodar aplicativos escritos para a máquina Y, enquanto que a virtualização se preocupa mais na replicação da arquitetura desta máquina Y. No entanto muitas características práticas e/ou conceituais coincidem para ambos, como o não acesso direto ao hardware e o mapeamento virtual de memória. Do ponto de vista de arquitetura, temos que várias MVs rodam sobre um VMM comum, que acessa o hardware, enquanto que cada emulador roda sobre um emulator software package, que se comunicam com o sistema operacional. Muito embora, nada impede de se criar um emulator software package unificado, e também nada impede que o VMM controle o hardware através do sistema operacional, como de fato ocorre com o VMWare. Voltando a focar na virtualização, podemo classificala em virtualização completa e paravirtualização. A virtualização completa é uma réplica do hardware do sistema, de forma que o sistema operacional e o software podem rodar exatamente como eles fariam na máquina original. O exemplo mais popular de sistema de virtualização completa é o VMWare, que possui uma abordagem diferente dos outros sistemas do tipo, uma vez que ele não interage diretamente com o hardware, mas delega ao sistema operacional da máquina real estas tarefas. Mas a virtualização completa também traz problemas, além do baixo desempenho, como a dificuldade em se implementar um gerenciamento de memória virtual. Estes problemas ocorrem em parte porque as arquiteturas dos computadores não foram projetadas tendo a virtualização em mente, de forma que é preciso aplicar uma série de truques sofisticados para contornar a situação. A arquitetura do PC é em especial complicada para tal feito, proporcionando um grande desafio. A paravirtualização tenta minimizar os problemas mencionados acima alterando o sistema operacional virtual, implementando uma arquitetura que seja voltada para facilitar a virtualização. As duas principais soluções para isso são o Denali e o Xen. Uma das principais diferenças entre eles é que é muito difícil portar um SO para o Denali, o que faz com que ele já tenha um SO próprio, o Ilwaco, enquanto que o objetivo do Xen é poder rodar os SOs mais populares, como o Windows e sistemas Unixlike; lembrando que esses SOs necessitam de uma versão portada para o Xen, como é o caso do XenoLinux. A paravirtualização demonstra uma melhora de desempenho das máquinas virtais, mas acaba quebrando algumas regras conceituais que definem uma MV, como falta de “comportamento idêntico à máquina real” e a possibilidade de o SO virtual ter acesso direto à memória real. Bibliografia Robert Rose, Survey of System Virtualization Techniques (March 8, 2004) Efrem G. Mallach, On the Relationship Between Virtual Machines and Emulators. Proceedings of ACM SIGARCHSIGOPS Workshop on virtual computer systems. Cambridge, Massachusetts, United States (1973), 117126