CENTRO UNIVERSITÁRIO DE VOLTA REDONDA – UniFOA Curso Tecnológico de Redes de Computadores – 5º período Disciplina: Tecnologia WEB Professor: José Maurício S. Pinheiro V. 2009-2 Aula 3 – Virtualização de Sistemas 1. Conceito Virtualização pode ser definida como uma “técnica que combina ou divide recursos computacionais para prover um ou mais ambientes operacionais de execução”. Os ambientes criados através dessa técnica são chamados máquinas virtuais. Virtualização é um recurso de software que permite a execução de forma virtual de um ou mais sistemas operacionais em apenas uma máquina física, que por sua vez já possui um sistema operacional nativo instalado. Ou seja, é instalado um software no sistema operacional e a partir desse software, outros sistemas operacionais podem ser instalados de forma virtual. O software de virtualização de sistemas operacionais também funciona de forma nativa, ou seja, o próprio software é o sistema operacional e com este em execução, os demais sistemas operacionais são instalados de forma virtual. 2. Máquina Real, Emuladores e Máquinas Virtuais Uma máquina real é um conjunto de componentes físicos que fornecem operações para os níveis de abstração acima. Seu núcleo é o processador e o chip-set da placa-mãe, e inclui todos os recursos como o áudio, o vídeo, a memória, as portas, etc. Um emulador é um programa que funciona para enganar uma aplicação. Seja uma aplicação que funciona em certa máquina real. Caso ela tenha que funcionar em outra máquina que não oferece os mesmos recursos, um emulador pode ser usado. Ele será capaz de traduzir instruções definidas para a máquina de origem em instruções para a máquina emulada, de forma a obter os mesmos resultados que obteria se executasse na original. Uma máquina virtual é a imitação, por software, de uma máquina real. O software de virtualização define quais recursos de hardware serão utilizados e como serão utilizados. O software é gerenciável e pode realocar os recursos de memória, processamento, espaço em disco e outros recursos de acordo com a demanda do sistema operacional virtual. Sendo assim, sistemas operacionais podem rodar em máquinas virtuais, e terão a ilusão de rodarem em uma máquina real. Essas imitações podem ser criadas no nível de aplicação ou no nível de sistema operacional. Uma das vantagens da aplicação desse recurso é que os recursos dos microcomputadores ou servidores podem ser aproveitados ao máximo, uma vez que quando softwares e sistemas operacionais são utilizados de forma nativa, ou seja, sem virtualização, diversos recursos do equipamento ficam ociosos, como memória, espaço em disco e processamento. CENTRO UNIVERSITÁRIO DE VOLTA REDONDA – UniFOA O esquema da Figura 1 ilustra a emulação de um sistema operacional, técnica que permite rodar uma aplicação projetada para um sistema operacional em outro incompatível. Figura 1 - Emulação de Sistema Operacional virtualizado Quando criadas no nível de aplicação, uma máquina virtual é executada em cima de um sistema operacional, chamado anfitrião. Como o nível acima vai acreditar que abaixo dele há uma máquina real, pode-se executar outro sistema operacional possivelmente diferente do que está abaixo da imitação. Isso é extremamente útil quando se deseja rodar uma aplicação projetada para um sistema operacional em outro incompatível. Quando criadas no nível de sistema operacional, um Monitor de Máquina Virtual ou “Virtual Machine Monitor” – VMM é implementado. Ele controla o hardware e cria várias máquinas virtuais, ou seja, várias imitações do mesmo. Em cada “imitação” pode-se rodar um sistema operacional, que acreditará estar usando uma máquina real e não uma imitação. O resultado vantajoso é poder rodar diversos sistemas operacionais, cada um com suas aplicações específicas, em uma mesma máquina. Todos os componentes físicos são emulados na maquina virtual. Mas para o sistema operacional, seja ele hospedeiro ou convidado, interpreta como hardware físico. É função do monitor de máquinas virtuais o gerenciamento do uso dos dispositivos, multiplexando no tempo as tentativas dos diversos programas em usar a máquina real. Outros recursos tais como uso de memória e de dispositivos de entrada e saída também devem ser administrados uma vez que a virtualização não resolve o problema de um hardware não poder ser duplicado fisicamente. Dessa forma, a virtualização faz com que todos os recursos da máquina sejam compartilhados entre os usuários sem que eles saibam disso. Continuarão acreditando estar rodando direto em uma máquina real. A Figura 2 ilustra os dois tipos de máquina virtual e a comparação com um sistema não virtualizado. CENTRO UNIVERSITÁRIO DE VOLTA REDONDA – UniFOA Figura 2 - Máquina Virtual e Sistema não virtualizado A virtualização consiste na emulação de ambientes isolados, capazes de rodar diferentes sistemas operacionais dentro de uma mesma máquina, aproveitando ao máximo a capacidade do hardware, que muitas vezes fica ociosa em determinados períodos do dia, da semana ou do mês. Esse aproveitamento é maior devido à possibilidade de fornecer ambientes de execução independentes a diferentes usuários em um mesmo equipamento físico, concomitantemente. Além disso, esse procedimento diminui o poder dos sistemas operacionais, que, muitas vezes, restringem o uso do hardware, quanto à utilização de software. Isso acontece porque softwares normalmente só rodam sobre o sistema operacional para o qual foram projetados para rodar. Diferentes sistemas operando em uma mesma máquina aumentam a gama de softwares que podem ser utilizados sobre o mesmo hardware. Essa técnica, largamente empregada em servidores, ainda tem como vantagem oferecer uma camada de abstração dos verdadeiros recursos de uma máquina, provendo um hardware virtual para cada sistema, tornando-se também uma excelente alternativa para migração de sistemas. 3. Classificações da Virtualização 3.1. Quanto à Arquitetura 3.1.1. Arquitetura Tipo I Nesta arquitetura, o Monitor de Máquina Virtual é implementado diretamente sobre o hardware hospedeiro, como indicado no esquema da Figura 3. CENTRO UNIVERSITÁRIO DE VOLTA REDONDA – UniFOA Figura 3 - Arquitetura tipo I Dessa forma, o monitor controla todas as operações de acesso requisitadas pelos sistemas convidados, simulando máquinas físicas com propriedades distintas, trabalhando de forma isolada. Com isso, diferentes computadores virtuais operam sobre o mesmo hardware. Exemplos de Monitores desse tipo: VMM’s XEN e VMWARE ESX SERVER 3.1.2. Arquitetura Tipo II Esta arquitetura se caracteriza pela implementação do Monitor de Máquina Virtual sobre o sistema operacional instalado no hardware anfitrião e opera como um processo desse sistema operacional. O esquema da Figura 4 ilustra essa arquitetura: Figura 4 - Arquitetura tipo II Vale observar que as operações que seriam controladas pelo sistema operacional do hospedeiro são simuladas pelo monitor para as máquinas virtuais. Exemplos de Monitores: VMWARE SERVER e VIRTUALBOX 3.1.3. Arquitetura Híbrida Esta arquitetura reúne qualidades das duas arquiteturas anteriores. Nessa arquitetura, podem ser agregadas características da arquitetura tipo I à arquitetura tipo II ou o contrário. Tais mudanças são feitas habitualmente, pois a aplicação pura de apenas uma das arquiteturas citadas nos itens anteriores pode comprometer o desempenho da máquina virtual. Portanto, a hibridização tem por objetivo a otimização dos sistemas acima. São exemplos de Monitores desse tipo: VIRTUAL PC e VIRTUAL SERVER CENTRO UNIVERSITÁRIO DE VOLTA REDONDA – UniFOA 3.2. Quanto à Técnica 3.2.1. Virtualização Completa Como o nome sugere, o hardware hospedeiro é completamente abstraído e todas as características de um equipamento virtual são emulados, ou seja, todas as instruções solicitadas pelo sistema convidado são interpretados no Monitor de Máquina Virtual. O sistema hospedado ignora a existência da máquina virtual e opera como se funcionasse diretamente sobre o sistema operacional para o qual foi projetado para funcionar. 3.2.2. Paravirtualização Nessa técnica, a máquina virtual não é idêntica ao equipamento físico original, para que o sistema hospedado possa enviar as instruções mais simples diretamente para o hardware, restando apenas as instruções de nível mais alto para serem interpretadas pelo MMV. Entretanto, esse procedimento requer que o sistema operacional convidado seja modificado para interagir com o MMV e selecionar quais instruções devem ser interpretadas nele ou diretamente no hardware hospedeiro. 3.2.3. Recompilação Dinâmica Na recompilação dinâmica, as instruções são traduzidas durante a execução do programa da seguinte forma: as instruções do programa são identificadas em forma de sequência de bits. Em seguida, as sequências são agrupadas em instruções mais próximas do sistema operacional hospedeiro. Por último, essas instruções são reagrupadas em um código de mais alto nível, que, por sua vez, é compilado na linguagem nativa do sistema hospedeiro. 3.3. Vantagens e Desvantagens de cada técnica A virtualização completa é mais flexível em termos de SO convidados, uma vez que este não precisa ser modificado para implementação dessa técnica. Todas as instruções são interpretadas pelo monitor de máquina virtual. Em compensação, essa interpretação de cada instrução provoca perda de desempenho de processamento, uma vez que o monitor de máquina virtual se utiliza de dispositivos de virtualização que atendem a uma gama de aplicativos e, por isso, possuem uma baixa especialização. Assim, não é possível ter o máximo desempenho desse aplicativo. A paravirtualização é menos flexível, pois carece de modificações no sistema operacional convidado, para que este possa trabalhar perfeitamente nas condições descritas anteriormente. Porém, o fato de o sistema operacional convidado saber que opera sobre uma máquina virtual e transmitir instruções diretamente para o hardware, diminui a sobrecarga no MMV e permite uma maior especialização dos dispositivos de virtualização. Dessa forma os aplicativos operam mais próximos de sua capacidade máxima, melhorando seu desempenho em comparação à virtualização completa. Além disso, na CENTRO UNIVERSITÁRIO DE VOLTA REDONDA – UniFOA paravirtualização, a complexidade das máquinas virtuais a serem desenvolvidas diminui consideravelmente. A recompilação dinâmica tem como principal vantagem a melhor adequação do código gerado ao ambiente de virtualização, que, com a compilação durante a execução, pode refletir melhor o ambiente original do aplicativo. Isso acontece porque durante a execução, há novas informações disponíveis, às quais um compilador estático não teria acesso. Dessa forma o código gerado se torna mais eficiente. Em contrapartida, essa técnica exige maior capacidade de processamento, visto que a recompilação acontece em tempo real de execução do programa. 3.4. Outras Classificações Os tipos de virtualização podem ainda ser divididos segundo os seguintes critérios: 3.4.1. Abstração do ISA (Instruction Set Arquiteture) Algumas máquinas virtuais utilizam-se dessa tecnologia, que consiste da total abstração do ISA, isto é, todas as instruções dos aplicativos que funcionam sobre a máquina virtual são traduzidas para instruções do sistema nativo. Essa técnica tem implementação simples e apresenta boa flexibilidade. Em contrapartida, há uma grande perda de desempenho. São exemplos dessa tecnologia Bochs e Crusoe. 3.4.2. Hardware Abstraction Layer O monitor de máquina virtual simula todo o sistema de hardware para o aplicativo da máquina virtual. O aplicativo acredita estar funcionando diretamente sobre o hardware virtual. Tanto VMWare quanto Xen funcionam dessa maneira. 3.4.3. OS Level Nessa tecnologia utiliza-se uma chamada de sistema específica para a virtualização. Dessa maneira é possível isolar processos. Cada máquina é virtualizada com IP e recursos de hardware próprios. A virtualização ocorre a partir de um diretório criado exclusivamente para isso. Jail e Ensim são exemplos dessa forma de virtualização. 4. Empregos da Virtualização Softwares podem ser usados para gerar abstrações de recursos (reais ou virtuais) de forma que eles pareçam ser diferentes do que realmente são. Essa possibilidade é no que consiste a virtualização. Esse conceito é estendido para ser executado em três frentes: virtualização de hardware, virtualização de sistema operacional e virtualização de linguagem de programação. Virtualização de hardware é a técnica que imita a máquina real. A máquina virtual executa em cima de um sistema operacional e outros sistemas CENTRO UNIVERSITÁRIO DE VOLTA REDONDA – UniFOA operacionais podem ser executados em cima dela. O sistema abaixo da máquina pode ser um Monitor de Máquina Virtual ou um sistema operacional real. Exemplos de sua utilização são VMware e Xen na plataforma x86. Virtualização de sistema operacional é a técnica que cria a simulação de um sistema operacional, mas é implementada em cima de outro sistema. Serve para resolver, sem muitos outros ganhos significativos, a necessidade de execução de aplicações em sistemas operacionais incompatíveis. O FreeBsd Jail e o User-mode Linux representam essa categoria. Outra forma de virtualização é a de linguagens de programação. Com ela é possível fingir que o computador se comporte diferente, ou seja, com outras instruções. A máquina virtual é responsável por executar o programa de acordo com esse comportamento fictício, do jeito que o usuário definir. Fica encarregada, portanto, de traduzir essas ações em ações do sistema operacional abaixo. Java e Smalltalk atuam nesse sentido. A Figura 5 mostra um exemplo de cada forma de virtualização: Figura 5 - Exemplos de formas de virtualização A virtualização de sistemas operacionais abrange uma série de vantagens no que diz respeito à segurança e custo. Ela permite o teste de sistemas operacionais sem risco de danificar o sistema nativo instalado no computador e também executar programas que necessitam de uma versão de Sistema Operacional anterior ou superior para o seu funcionamento. A virtualização, no entanto, não é implementada sempre. Algumas funções específicas levam à escolha dessa solução: 1. Facilitar o desenvolvimento de softwares e sistemas operacionais Como a máquina real é simulada, um sistema operacional em evolução pode realizar testes sem o risco de danificar o material. Os softwares, da mesma forma, podem ser testados em sistemas virtuais. A possibilidade de rodar mais de um sistema operacional na mesma máquina permite também CENTRO UNIVERSITÁRIO DE VOLTA REDONDA – UniFOA que um processo possa comparar sua execução em diferentes sistemas operacionais. 2. Executar aplicações diversas na mesma máquina - A virtualização faz vários sistemas diferentes usarem a mesma máquina (Figura 6), e assim várias tarefas projetadas para sistemas incompatíveis podem ser executadas. 3. Simular cenas fictícias - Como a máquina virtual pode criar a ilusão de recursos reais, algumas situações críticas cujos tratamentos precisam de estudo podem ser simuladas para teste. Uma máquina virtual é criada e nela acontecem situações diferentes do mundo real, que serão usadas com algum objetivo específico. 4. Suportar software legados - As máquinas virtuais permitem que programas antigos, com funções muito específicas e de difícil adaptação, sejam executados sobre elas. 5. Consolidar servidores - A virtualização atua para usar o máximo da capacidade da máquina, o que significa, na prática, diminuir custos com hardware. 6. Prover serviços seguros e confiáveis - A utilização de máquina virtual permite o fornecimento de serviços dedicados a clientes específicos. A inviolabilidade das máquinas virtuais se traduz em processos mais seguros, enquanto a dedicação de um ambiente de trabalho garante confiabilidade e disponibilidade. 7. Atuar como honeypots contra hackers na Internet - Como o ataque a uma máquina virtual não compromete o sistema físico, é possível criar instâncias de máquinas virtuais para serem atacadas por hackers propositalmente. Essas máquinas são chamadas honeypots e servem para monitorar os possíveis ataques e criar meios de prevenção contra eles. 5. Ferramentas de Virtualização A virtualização é empregada através de ferramentas, que apresentam diferenças entre si e possuem suas vantagens e desvantagens. Atualmente há uma gama enorme de softwares livres e empresas que fornecem soluções com esse conceito. A tabela 1 apresenta as tecnologias de virtualização mais atuais, suas características mais relevantes, bem como estabelecem comparações entre estas tecnologias. Tabela 1 – Tipos de ferramentas de virtualização Tabela 1 – Tipos de ferramentas de virtualização