





















Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
capitulo de livro que fala de diferentes sistemas operacionais e maquinas virtuais
Tipologia: Manuais, Projetos, Pesquisas
1 / 29
Esta página não é visível na pré-visualização
Não perca as partes importantes!






















Máquinas Virtuais e Emuladores
Conceitos, Técnicas e Aplicações
Marcos Laureano
15
“O que agora é provado foi uma vez apenas imaginado.” (William Blake, poeta inglês)
O conceito de máquina virtual não é novo – suas origens remetem ao início da história dos computadores, no final dos anos de 1950 e início de 1960. As má- quinas virtuais foram originalmente desenvolvidas para centralizar os sistemas de computador utilizados no ambiente VM/370 da IBM. Naquele sistema, cada máquina virtual simula uma réplica física da máquina real e os usuários têm a ilusão de que o sistema está disponível para seu uso exclusivo.
A utilização de máquinas virtuais está se tornando uma alternativa para vários sistemas de computação, pelas vantagens em custos e portabilidade, inclusive em sistemas de segurança.
1.1 Por que máquinas virtuais?
Os sistemas de computadores são projetados com basicamente três componentes: hardware, sistema operacional e aplicações (Figura 1.1).
Sistema operacional
Hardware
Aplicações
Figura 1.1 – Sistema de computador.
Capítulo 1• Máquinas virtuais^17
recursos parecerem diferentes do que realmente são – é chamada de virtualização. A conceituação de máquinas virtuais, seus tipos, características e métodos serão detalhados nos próximos tópicos.
Sistema operacional
Aplicações
Hardware
Máquina virtual “Camada” de compatibilidade
Figura 1.4 – “Camada” de compatibilidade.
1.2 Definição de máquinas virtuais
Uma máquina virtual (Virtual Machine – VM) pode ser definida como “uma duplicata eficiente e isolada de uma máquina real”. A IBM define uma máquina virtual como uma cópia isolada de um sistema físico, e essa cópia está totalmente protegida.
O termo máquina virtual foi descrito na década de 1960 a partir de 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.
Uma máquina real é formada por vários componentes físicos que fornecem operações para o sistema operacional e suas aplicações. Iniciando pelo núcleo do sistema real, o processador central (CPU) e o chipset da placa-mãe fornecem um conjunto de instruções e outros elementos fundamentais para o processamento de dados, alocação de memória e processamento de E/S. Olhando mais detalha- damente um sistema físico, temos ainda os dispositivos e os recursos, tais como a memória, o vídeo, o áudio, os discos rígidos, os CD-ROMs e as portas (USB, paralela, serial). Em uma máquina real, a BIOS ou devices drivers específicos for- necem as operações de baixo nível para que um sistema operacional possa acessar os vários recursos da placa-mãe, memória ou serviços de E/S (Figura 1.5).
(^18) Máquinas Virtuais e Emuladores
Camada de software
Camada de hardware
Aplicações
Processador Periféricos Discos Disquete
Aplicações Linux Windows
Aplicações McAfee
Aplicações
Sistema operacional
Aplicações Máquina virtual Aplicações
Camada de hardware virtual
Figura 1.5 – Diagrama de uma máquina virtual.
1.3 Emuladores e máquinas virtuais
Um emulador é o oposto da máquina real. O emulador implementa todas as instruções realizadas pela máquina real em um ambiente abstrato de software, possibilitando executar um aplicativo de uma plataforma em outra, por exemplo, um aplicativo do Windows sendo executado no Linux ou um aplicativo i386 sendo executado em uma plataforma Sparc. Um emulador é um software que simula um computador real, ou seja, um emulador é um software criado essencialmente para transcrever instruções de um processador alvo para o processador no qual ele está rodando.
Um emulador “engana”, fazendo com que todas as operações da máquina real sejam implementadas em um software. Em outras palavras, ocorre a interpretação (em alguns casos, por meio de recompilação) de um código desenvolvido para outra plataforma. Infelizmente, ele perde muito em eficiência ao traduzir cada instrução da máquina real. Além disso, emuladores são bastante complexos, pois geralmente necessitam simular quase todas as instruções do processador e demais características do hardware que os circundam.
(^20) Máquinas Virtuais e Emuladores
diferente. É a mais rápida tecnologia de emulação, mas também a mais complexa de se implementar e de se manter a compatibilidade com versões anteriores.
A classificação mais atual, e mais completa, define que os emuladores podem ser divididos em quatro tipos básicos:
Capítulo 1• Máquinas virtuais^21
Os emuladores podem ser classificados ainda de acordo com a natureza do uso:
1.5 Tipos de máquinas virtuais
Existem basicamente duas abordagens para a construção de sistemas de má- quinas virtuais:
As Figuras 1.6 e 1.7 ilustram a organização tradicional de um sistema de máquinas virtuais. Para maximizar o desempenho, o monitor, sempre que pos- sível, permite que a máquina virtual execute diretamente sobre o hardware, em modo usuário. O monitor retoma o controle sempre que a máquina virtual tenta executar uma operação que possa afetar o correto funcionamento do sistema, o conjunto de operações de outras máquinas virtuais ou do próprio hardware. O monitor simula com segurança a operação antes de retornar o controle à máquina virtual.
1.5.1 Máquinas virtuais de tipo I
O monitor tem o controle do hardware e cria um ambiente de máquinas virtu- ais; cada máquina virtual se comporta como uma máquina física completa que pode executar o seu próprio sistema operacional, semelhante a um sistema ope- racional tradicional que está no controle da máquina. O resultado da completa virtualização da máquina é um conjunto de computadores virtuais executando sobre o mesmo sistema físico.
Capítulo 1• Máquinas virtuais^23
Em monitores de tipo I (Figura 1.8):
Hardware
Monitor
Aplicação Aplicação
Sistema convidado Sistema convidado
1 1
Figura 1.8 – Abordagem híbrida para tipo I.
Em monitores de tipo II (Figura 1.9):
Hardware
Sistema anfitrião
Aplicação
Aplicação Aplicação Aplicação
Monitor
Sistema convidado
3
1 2
Figura 1.9 – Abordagem híbrida para tipo II.
(^24) Máquinas Virtuais e Emuladores
Essas otimizações levam a arquiteturas que diferem dos modelos básicos I e II, sendo por isso chamadas de abordagens híbridas.
1.6 Formas de virtualização
Os softwares podem ser utilizados para fazer os recursos parecerem diferentes do que realmente são e essa capacidade é chamada de virtualização. A virtua- lizaçã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. Existem três formas de virtualização: virtualização do hardware, virtualização do sistema operacional e virtualização de linguagens de programação.
1.6.1 Virtualização do hardware
A virtualização exporta o sistema físico como uma abstração do hardware (Figura 1.10). Nesse modelo, qualquer software escrito para a arquitetura (x86, por exemplo) irá funcionar. Esse foi o modelo adotado na década de 1960 para o VM/370 nos mainframes IBM e é a tecnologia de virtualização utilizada pelo VMware na plataforma x86.
(^26) Máquinas Virtuais e Emuladores
1.6.3 Virtualização de linguagens de programação
A camada de virtualização cria uma aplicação no topo do sistema operacional. Na prática, as máquinas virtuais nessa categoria são desenvolvidas para computa- dores fictícios projetados para uma finalidade específica. A camada exporta uma abstração para a execução de programas escritos para essa virtualização (Figura 1.12). Java e Smalltalk são exemplos desse tipo de máquina virtual.
Aplicação
Sistema operacional (Linux, Windows, Unix)
CPU, RAM, dispositivos de E/S - Real
Máquina virtual
Figura 1.12 – Virtualização de linguagens de programação.
1.6.4 O poder da virtualização
O uso das máquinas virtuais e emuladores possibilitam:
a. executar um sistema operacional (e suas aplicações) sobre outro;
b. utilizar uma aplicação de outra plataforma operacional;
c. executar múltiplos sistemas operacionais;
d. flexibilizar uma plataforma complexa de trabalho.
Um exemplo claro sobre o poder da virtualização (sua aplicação) seria um usuário executar uma aplicação em Java sobre a máquina virtual User-Mode Linux, que por sua vez estaria sobre um sistema Linux, que poderia estar sendo executado sob outra máquina virtual (VMware) e que, por fim, estaria sobre um sistema operacional (Windows) (Figura 1.13).
Capítulo 1• Máquinas virtuais^27
Windows
Linux
VMware
Hardware (x86)
User - Mode Linux
Java Virtual Machine
Aplicação Java
Figura 1.13 – Exemplo de virtualização em seqüência.
A Figura 1.14 apresenta um exemplo mais complexo de utilização de máquinas virtuais. Este exemplo teoricamente é possível, mas só implementável se todas as aplicações de máquinas virtuais e emuladores suportassem a auto-virtualização, ou seja, se fossem capazes de executar uma cópia de si internamente. Infelizmente nem todas as máquinas virtuais ainda têm essa capacidade.
Hardware (x86)
XEN
JVM UML QEMU
Windows Linux
Aplicação AplicaçãoLinux^ AplicaçãoMac
VMware
FreeBSD
JAIL JAIL
Apl Apl
Windows II
Aplicação Windows II
Figura 1.14 – Exemplo complexo de múltiplas virtualizações.
Capítulo 1• Máquinas virtuais^29
1.7 Técnicas de virtualização e emulação
As técnicas mais utilizadas para virtualização atualmente são a paravirtualiza- ção (paravirtualization), virtualização total (full virtualization) e recompilação dinâmica (dynamic recompilation).
1.7.1 Virtualização total
Na virtualização total, uma estrutura completa de hardware é virtualizada, portanto, o sistema a ser virtualizado (sistema convidado) não precisa sofrer qualquer tipo de alteração (Figura 1.15).
Hardware x86 virtualizado totalmente
Hardware x
Máquina virtual
Sistema convidado padrão (sem modificações)
Chamada de sistema padrão
Figura 1.15 – Representação da virtualização total.
O principal benefício da virtualização total é justamente o fato de que o sis- tema a ser virtualizado não sofre qualquer tipo de alteração; em compensação, o sistema virtualizado executa de forma mais lenta e o monitor de máquinas virtuais precisa implementar alternativas para que as operações privilegiadas possam ser executadas em processadores que não suportem a virtualização nativamente, tais como os processadores Intel 32 bits disponíveis atualmente.
(^30) Máquinas Virtuais e Emuladores
1.7.2 Paravirtualização
Na paravirtualização, o sistema a ser virtualizado (sistema convidado) sofre modificações para que a interação com o monitor de máquinas virtuais seja mais eficiente (Figura 1.16).
Hardware x86 virtualizado totalmente
Hardware x
Máquina virtual
Chamadas de sistema do sistema paravirtualizado
Sistema convidado paravirtualizado (com modificações)
Chamada de sistema padrão
Figura 1.16 – Representação da paravirtualização.
A paravirtualização – embora exija que o sistema a ser virtualizado precise ser modificado, o que diminui a portabilidade do sistema – permite que o sistema convidado consiga acessar recursos do hardware diretamente. O acesso é mo- nitorado pelo monitor de máquinas virtuais, que fornece ao sistema convidado todos os “limites” do sistema, tais como endereços de memória que podem ser utilizados e endereçamento em disco, por exemplo.
A paravirtualização reduz a complexidade do desenvolvimento das máquinas virtuais, já que, historicamente, os processadores não suportam a virtualização nativa. A performance obtida, a principal razão para utilizar a paravirtualização, compensa as modificações que serão implementadas nos sistemas convidados.
1.7.3 Relação entre a virtualização total e a paravirtualização
A virtualização total exige do monitor de máquinas virtuais um trabalho adi- cional para gerenciamento da memória. Ao ser instanciado, o monitor reserva um espaço da memória para trabalho, mas o sistema convidado acredita estar
(^32) Máquinas Virtuais e Emuladores
1.7.4 Recompilação dinâmica
Outra técnica bastante utilizada é a recompilação dinâmica (dynamic recompila- tion) de partes do código. Com a compilação, durante a execução, o sistema pode adequar o código gerado de forma a refletir o ambiente original do programa, explorando informações que normalmente não estão disponíveis para um compi- lador estático tradicional, para que o código gerado seja mais eficiente. Em outros casos, um sistema pode empregar a recompilação dinâmica como parte de uma estratégia de otimização adaptável para executar uma representação portátil do programa, tal como bytecodes de Java.
A recompilação dinâmica – que também pode ser chamada de translation (tradução) – é composta de sete passos:
Capítulo 1• Máquinas virtuais^33
1.8 Propriedades de monitores de máquinas virtuais
Os monitores possuem algumas propriedades que também podem ser utilizadas na segurança de sistemas e outras aplicações: