segunda-feira, 14 de junho de 2010

Máquina Virtual

Uma máquina virtual (Virtual Machine – VM) pode ser definida como “uma duplicata eficiente e isolada de uma máquina real”.

Máquinas virtuais são extremamente úteis no dia-a-dia, pois permitem ao usuário rodar outros sistemas operacionais dentro de uma janela, tendo acesso a todos os softwares que precisa.

Definição
O termo máquina virtual foi descrito na década de 1960 utilizando um termo de sistema operacional: uma abstração de software que enxerga um sistema físico (máquina real). Com o passar dos anos, o termo englobou um grande número de abstrações – por exemplo, Java Virtual Machine – JVM que não virtualiza um sistema real.

Ao invés de ser uma máquina real, isto é, um computador real feito de hardware e executando um sistema operacional específico, uma máquina virtual é um computador fictício criado por um programa de simulação. Sua memória, processador e outros recursos são virtualizados. A virtualização é a interposição do software (máquina virtual) em várias camadas do sistema. É uma forma de dividir os recursos de um computador em múltiplos ambientes de execução.

Os emuladores são máquinas virtuais que simulam computadores reais. São bastante conhecidos os emuladores de vídeogames antigos e os emuladores de microcomputadores, como o VMware, o Bochs e o VirtualBox, software livre da Sun Microsystems.

Tipos
As máquinas virtuais podem ser divididas em dois tipos:
- Tipo 1: Sistema em que o monitor é implementado entre o hardware e os sistemas convidados (guest system).
- Tipo 2: Nele o monitor é implementado como um processo de um sistema operacional real, denominado sistema anfitrião (host system).

Tipos Híbridos: Os monitores de tipo 1 e 2 raramente são usados em sua forma conceitual em implementações reais. Na prática, várias otimizações são inseridas nas arquiteturas apresentadas, com o objetivo principal de melhorar o desempenho das aplicações nos sistemas convidados. Como os pontos cruciais do desempenho dos sistemas de máquinas virtuais são as operações de I/O, as principais otimizações utilizadas em sistemas de produção dizem respeito a essas operações.

Outra importante categoria de máquinas virtuais são as máquinas virtuais para computadores fictícios projetados para uma finalidade específica. Atualmente a mais importante máquina virtual desta família é a JVM (máquina virtual Java). Existem simuladores para ela em quase todos os computadores atuais, desde computadores de grande porte até telefones celulares, o que torna as aplicações Java extremamente portáveis.

Uma importante vantagem sem duvida de se escrever código para uma máquina virtual é a de se poder compilar o código sem que seja perdida a portabilidade, melhorando-se a velocidade em relação à programação interpretada, que também é portátil, porém mais lenta, já que neste caso cada linha será traduzida e executada em tempo de execução, e no caso da máquina virtual cada mnemônico da máquina virtual é convertido no equivalente em linguagem de máquina (ou assembly) da máquina real.

Vantagens
- Facilita o aperfeiçoamento e testes de novos sistemas operacionais.
- Possibilita a comparação de vários sistemas operacionais utilizando o mesmo equipamento.
- Executa diferentes sistemas operacionais sobre o mesmo hardware, simultaneamente.
- Simula alterações e falhas no hardware para testes ou reconfiguração de um sistema operacional, provendo confiabilidade e escalabilidade para as aplicações.
- Diminuição de custos com hardware.
- Facilidades no gerenciamento, migração e replicação de computadores, aplicações ou sistemas operacionais.
- Confiança e disponibilidade: A falha de um software não prejudica os demais serviços.

Desvantagens
- Gerenciamento: Os ambientes virtuais necessitam ser, monitorados, configurados e salvos . Existem produtos que fornecem essas soluções, mas esse é o campo no qual estão os maiores investimentos na área de virtualização, justamente por se tratar de um dos maiores contratempos na implementação da virtualização.

- Desempenho: Atualmente, não existem métodos consolidados para medir o desempenho de ambientes virtualizados. No entanto, a introdução de uma camada extra de software entre o sistema operacional e o hardware, o VMM ou hypervisor, gera um custo de processamento superior ao que se teria sem a virtualização. Outro ponto importante de ressaltar é que não se sabe exatamente quantas máquinas virtuais podem ser executadas por processador, sem que haja o prejuízo da qualidade de serviço.

Segurança
Embora a máquina necessite do sistema real para sua inicialização, trabalha de maneira independente como se fosse outro computador, isto requer também um sistema de segurança independente, ou seja, a ocorrência de infecção por vírus na máquina virtual não afeta a máquina real.