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 classifica­la em virtualização completa e para­virtualizaçã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 para­virtualizaçã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 Unix­like; lembrando que esses SOs necessitam de uma versão portada para o Xen, como é o caso do XenoLinux. A para­virtualizaçã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 SIGARCH­SIGOPS Workshop on virtual computer systems. Cambridge, Massachusetts, United States (1973), 117­126