Sobre o curso
Escrevi esta página porque diversas pessoas me pergutam "o que é estudado em um curso de máquinas virtuais". Se você está interessado em saber do que este curso se trata você está no lugar certo.

O que é uma máquina virtual?

Uma máquina virtual, como definida originalmente por Popek e Goldberg (Popek e Goldberg 1974), é uma duplicata, isolada e eficiente, de uma máquina real. Atualmente o termo é usado de forma mais genérica e não está necessariamente associado à duplicata de máquinas implementadas em hardware. A máquina virtual Java, ou JVM, é exemplo de uma máquina virtual moderna que não está associada a um hardware.

Onde é aplicada e porque é importante

Suporte à linguagens de alto nível

Máquinas virtuais têm sido aplicadas em múltiplos contextos para resolver problemas relacionados à sistemas de computação. Na área de linguagens de programação, máquinas virtuais permitem que programas sejam executados em diversos sistemas, independente da plataforma. A infraestrutura de linguagem comum, ou CLI, da Microsoft, a plataforma Java, introduzida pela Sun Microsystems, e a plataforma Android, da Google, são exemplos de infraestruturas que implementam máquinas virtuais para dar suporte à execução de programas independente de plataforma.

Emulação

Emuladores são máquinas virtuais usadas para se executar programas que foram compilados para uma arquitetura com conjunto de instruções diferente. Podemos citar como exemplo de emuladores as ferramentas Rosetta, Digital FX!32 e Intel IA-32 EL. A ferramenta Rosetta é distribuída como parte do sistema operacional Mac OS X, pela Apple, e permite que os usuários dos novos sistemas (baseados na arquitetura IA-32) executem programas que foram compilados para a arquitetura dos sistemas antigos, PowerPC. Analogamente, as ferramentas Digital FX!32 e Intel IA-32 EL são emuladores que permitem a execução de programas IA-32 em arquiteturas Alpha e Itanium, respectivamente.

Instrumentação e otimização de binários

Ferramentas de instrumentação dinâmica de binários, como Pin e Valgrind, são exemplos de máquinas virtuais que analisam e instrumentam programas binários durante a sua execução. Os binários são geralmente aplicações que foram compiladas para o mesmo conjunto de instruções e, diferente dos emuladores, o principal objetivo é a instrumentação do código binário. Otimizadores dinâmicos de binários, como a ferramenta Dynamo, desenvolvida pela HP, e a ferramenta StarDBT, desenvolvida pela Intel, são máquinas virtuais similares às ferramentas de instrumentação, entretanto, ao invés da instrumentação, o objetivo destes é a melhora do desempenho através da otimização do programa.

Projeto de processadores

Na área de arquitetura de computadores, máquinas virtuais permitem a otimização dinâmica de binários para melhora de desempenho e redução de energia. Os processadores Crusoe e Efficeon, da Transmeta, implementam a arquitetura IA-32 a partir de uma máquina virtual com projeto integrado de hardware e software. O hardware implementa um processador com um conjunto de instruções VLIW (Very-Long Instruction Word) proprietário e o software, executando sobre o hardware proprietário, emula a arquitetura IA-32 utilizando-se de técnicas como interpretação e tradução dinâmica de binários. Neste caso, a tradução dinâmica é acompanhada da otimização dinâmica do código para melhora de desempenho e redução de energia. O único software executado sobre as instruções VLIW é o Code Morphing Software (CMS), uma máquina virtual capaz de emular o conjunto de instruções da arquitetura IA-32 de forma eficiente. Para permitir a emulação eficiente, o hardware é especializado para dar suporte às técnicas de emulação implementadas no CMS.

Compartilhamento de recursos e emulação de sistemas

A virtualização de processadores para execução de múltiplos sistemas operacionais em um mesmo processador é uma tecnologia que permite um uso mais eficaz do processador através do compartilhamento de recursos. A empresa VMware tem produzido máquinas virtuais que permitem a execução segura de múltiplos sistemas operacionais em um mesmo processador, ou servidor, criando oportunidade para o compartilhamento de recursos computacionais. A virtualização de processadores também é usada para execução de sistemas operacionais em processadores com conjunto de instruções diferentes. A ferramenta Virtual PC, por exemplo, é uma máquina virtual que executa sistemas operacionais Microsoft Windows em uma plataforma Macintosh. Apesar da similaridade com emuladores, os professores James Smith e Ravi Nair, autores do livro "Virtual Machines: Versatile Platforms for Systems and Processes" (Smith e Nair 2005), classificam ferramentas de virtualização de processadores e emuladores de forma diferente. Emuladores são classificados como máquinas virtuais de processo, enquanto as ferramentas de virtualização de processadores são classificadas como máquinas virtuais de sistema.

Implementação de simuladores eficientes

Além desses usos, máquinas virtuais também são importantes para o desenvolvimento de sistemas onde a implementação do hardware é concomitante ao desenvolvido do software. Nestes sistemas, uma máquina virtual permite a execução e testes eficientes do software sem que o hardware esteja completamente implementado. Simuladores de processadores e plataformas, como os simuladores gerados pelo ArchC, são exemplos típicos de máquinas virtuais.

Sobre o que é este curso

Apesar de não terem o mesmo propósito, as máquinas virtuais descritas acima podem ser vistas como programas de computador que emulam interfaces para execução de outros programas. A interface emulada por uma máquina virtual pode ser o conjunto de instruções da arquitetura de um processador, como o conjunto de instruções IA-32 no processador Efficeon, ou uma interface concebida para dar suporte à execução de uma nova linguagem de alto nível, como é o caso do bytecode na máquina virtual Java. A maioria dessas máquinas utiliza técnicas de tradução e otimização dinâmica de binários para realizar a emulação de forma eficiente.

O propósito deste curso é prover uma visão geral das técnicas em software e hardware que dão suporte ao processo de emulação em máquinas vituais eficientes.

Durante o curso utilizaremos o livro texto de Smith e Nair (2005): Virtual Machines: Versatile Platforms for Systems and Processes.

Se você tem dúvidas sobre o curso, não exite em me contactar.

Este curso não é

Referências