Você está na página 1de 29

Mquinas Virtuais e Emuladores

Conceitos, Tcnicas e Aplicaes

Marcos Laureano

Novatec Editora

Captulo 1
Mquinas virtuais

O que agora provado foi uma vez apenas imaginado. (William Blake, poeta ingls)

O conceito de mquina virtual no novo suas origens remetem ao incio da histria dos computadores, no final dos anos de 1950 e incio de 1960. As mquinas virtuais foram originalmente desenvolvidas para centralizar os sistemas de computador utilizados no ambiente VM/370 da IBM. Naquele sistema, cada mquina virtual simula uma rplica fsica da mquina real e os usurios tm a iluso de que o sistema est disponvel para seu uso exclusivo. A utilizao de mquinas virtuais est se tornando uma alternativa para vrios sistemas de computao, pelas vantagens em custos e portabilidade, inclusive em sistemas de segurana.

1.1 Por que mquinas virtuais?


Os sistemas de computadores so projetados com basicamente trs componentes: hardware, sistema operacional e aplicaes (Figura 1.1).
Aplicaes Sistema operacional Hardware

Figura 1.1 Sistema de computador. 15

16

Mquinas Virtuais e Emuladores

O papel do hardware executar as operaes solicitadas pelas aplicaes. O sistema operacional recebe as solicitaes das operaes (por meio das chamadas de sistemas) e controla o acesso ao hardware principalmente nos casos em que os componentes so compartilhados, como sistema de memria e Entrada e Sada. Os sistemas operacionais, assim como as aplicaes, so projetados para aproveitar o mximo dos recursos que o hardware fornece. Normalmente os projetistas de hardware, sistema operacional e aplicaes trabalham de forma independente (em empresas e tempos diferentes). Esses trabalhos independentes geraram, ao longo dos anos, vrias plataformas operacionais diferentes (e no compatveis entre si). Assim, aplicaes escritas para uma plataforma operacional (Figura 1.2) no funcionam em outras plataformas (Figura 1.3).
Aplicaes Macintosh Aplicaes Windows Aplicaes Linux

MacOS

Windows

Linux

Power PC

x86

x86

Figura 1.2 Alguns sistemas existentes.


Aplicaes Macintosh Aplicaes Windows

MacOS

Linux x86 x86

Figura 1.3 Incompatibilidade entre plataformas.


Nota: No contexto deste livro, plataforma operacional o conjunto formado pelo hardware, sistema operacional e aplicaes.

A utilizao de mquinas virtuais possibilita resolver esse problema, pois a mquina virtual cria uma camada para compatibilizar diferentes plataformas (Figura 1.4). Essa camada softwares que podem ser utilizados para fazer os

Captulo 1 Mquinas virtuais

17

recursos parecerem diferentes do que realmente so chamada de virtualizao. A conceituao de mquinas virtuais, seus tipos, caractersticas e mtodos sero detalhados nos prximos tpicos.
Aplicaes Sistema operacional Mquina virtual Hardware Camada de compatibilidade

Figura 1.4 Camada de compatibilidade.

1.2 Definio de mquinas virtuais


Uma mquina virtual (Virtual Machine VM) pode ser definida como uma duplicata eficiente e isolada de uma mquina real A IBM define uma mquina . virtual como uma cpia isolada de um sistema fsico, e essa cpia est totalmente protegida. O termo mquina virtual foi descrito na dcada de 1960 a partir de um termo de sistema operacional: uma abstrao de software que enxerga um sistema fsico (mquina real). Com o passar dos anos, o termo englobou um grande nmero de abstraes por exemplo, Java Virtual Machine (JVM), que no virtualiza um sistema real. Uma mquina real formada por vrios componentes fsicos que fornecem operaes para o sistema operacional e suas aplicaes. Iniciando pelo ncleo do sistema real, o processador central (CPU) e o chipset da placa-me fornecem um conjunto de instrues e outros elementos fundamentais para o processamento de dados, alocao de memria e processamento de E/S. Olhando mais detalhadamente um sistema fsico, temos ainda os dispositivos e os recursos, tais como a memria, o vdeo, o udio, os discos rgidos, os CD-ROMs e as portas (USB, paralela, serial). Em uma mquina real, a BIOS ou devices drivers especficos fornecem as operaes de baixo nvel para que um sistema operacional possa acessar os vrios recursos da placa-me, memria ou servios de E/S (Figura 1.5).

18
Camada de software Camada de hardware virtual Aplicaes Linux Aplicaes Windows

Mquinas Virtuais e Emuladores

Aplicaes Aplicaes McAfee

Aplicaes

Mquina virtual Sistema operacional

Aplicaes

Camada de hardware

Processador

Perifricos

Discos

Disquete

Figura 1.5 Diagrama de uma mquina virtual.

1.3 Emuladores e mquinas virtuais


Um emulador o oposto da mquina real. O emulador implementa todas as instrues realizadas pela mquina 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 instrues de um processador alvo para o processador no qual ele est rodando. Um emulador engana fazendo com que todas as operaes da mquina real , sejam implementadas em um software. Em outras palavras, ocorre a interpretao (em alguns casos, por meio de recompilao) de um cdigo desenvolvido para outra plataforma. Infelizmente, ele perde muito em eficincia ao traduzir cada instruo da mquina real. Alm disso, emuladores so bastante complexos, pois geralmente necessitam simular quase todas as instrues do processador e demais caractersticas do hardware que os circundam.

Captulo 1 Mquinas virtuais

19

A funcionalidade e o nvel de abstrao de uma mquina virtual encontramse em uma posio intermediria entre uma mquina real e um emulador, de forma que os recursos de hardware e de controle so abstrados e usados pelas aplicaes. Uma mquina virtual um ambiente criado por um monitor de mquina virtual (Virtual Machine Monitor VMM), tambm denominado sistema operacional para sistemas operacionais . O monitor de mquinas virtuais tambm conhecido como hypervisor. O monitor pode criar uma ou mais mquinas virtuais sobre uma nica mquina real. Enquanto um emulador fornece uma camada de abstrao completa entre o sistema em execuo e o hardware, um monitor fornece uma interface (por meio da multiplexao do hardware) que idntica ao hardware subjacente e controla uma ou mais mquinas virtuais. Cada mquina virtual, que recebe uma cpia (virtual) do computador, fornece facilidades para uma aplicao ou um sistema convidado que acredita estar executando sobre um ambiente convencional com acesso direto ao hardware, ou seja, cada mquina virtual trabalha como um PC completo (normalmente possuindo BIOS e sendo passvel de configurao utilizando-se o Setup). Dispositivos como o CD-ROM e unidades de disquetes podem ser compartilhados entre as mquinas virtuais e o sistema host, em alguns casos at mesmo simultaneamente (uma unidade de CD pode ser acessada por todos os sistemas). Um emulador fornece uma abstrao idntica do hardware que est em uso, mas tambm pode simular outros diferentes do atual.
Nota: As finalidades primrias de um sistema operacional so habilitar aplicaes a interagir com um hardware de computador e gerenciar os recursos de hardware e software de um sistema. Por tal motivo, o monitor de mquinas virtuais pode ser definido como sistema operacional para sistemas operacionais.

1.4 Tipos de emuladores


A primeira classificao para emuladores a mais antiga e amplamente utilizada; embora seja mais simplificada. dividida em trs tipos: Firmware: Um firmware pode ser definido como programao em hardware, programa ou dados de computador que so armazenados permanentemente em um chip de memria de hardware, como uma ROM ou EPROM. Nesse caso, o emulador contido dentro de um hardware. Usualmente envolve um ou mais emuladores embutidos em uma ROM que reconfiguram todo o sistema em uso para outro completamente

20

Mquinas Virtuais e Emuladores

diferente. a mais rpida tecnologia de emulao, mas tambm a mais complexa de se implementar e de se manter a compatibilidade com verses anteriores. Software: Toda emulao feita por software, ou seja, o emulador reconfigura a mquina em uso para a aplicao que se deseja emular. A emulao por software a mais fcil de se implementar e portar para outras plataformas, mas em compensao a forma mais lenta de emulao. Combinao, emulao combinada ou combo: O emulador composto de hardware e software. O software normalmente faz o papel principal da emulao, enquanto o hardware fornece partes chaves do processo. Oferece grande flexibilidade em termos de projeto. A classificao mais atual, e mais completa, define que os emuladores podem ser divididos em quatro tipos bsicos: Totalmente baseada em hardware: A soluo independe de software para ser utilizada. Um exemplo de aplicao seria um processador emulando uma arquitetura mais antiga para garantir a execuo de softwares legados, como os atuais processadores de 64 bits da AMD, que rodam aplicaes 32 bits por meio da emulao do processador. Parcialmente baseada em hardware: O hardware projetado para suportar a emulao, mas precisa de uma aplicao em software para que seus recursos sejam utilizados. O hardware da IBM para mainframes um exemplo, pois foi desenvolvido para suportar a virtualizao, porm necessita de um sistema operacional que utilize esses recursos disponveis. Parcialmente baseada em software: A emulao obtida pelo software que utiliza alguns recursos do hardware para prover a emulao. Alguns emuladores na plataforma Macintosh utilizam-se de recursos de algumas placas de vdeo (3dFX Voodoo2, por exemplo) diretamente, mesmo que a plataforma no suporte o perifrico adequadamente ou o prprio perifrico no disponibilize nativamente os recursos para o sistema operacional. Totalmente baseada em software: O emulador no precisa de nenhum hardware para prover a emulao, ou seja, o software prov todos os recursos para isso. Esse tipo de emulador o mais popular pela adaptabilidade (o cdigo-fonte de um emulador pode ser aproveitado para emular vrias plataformas parecidas) e portabilidade. Emuladores de plataformas Atari e Amiga so alguns exemplos.

Captulo 1 Mquinas virtuais

21

Os emuladores podem ser classificados ainda de acordo com a natureza do uso: Emulao do processador. Emulao de um sistema operacional. Emulao de uma plataforma de (hardware) especfico. Consoles de videogames.

1.5 Tipos de mquinas virtuais


Existem basicamente duas abordagens para a construo de sistemas de mquinas virtuais: Tipo I: sistema em que o monitor implementado entre o hardware e os sistemas convidados (guest system). Tipo II: nele o monitor implementado como um processo de um sistema operacional real subjacente, denominado sistema anfitrio (host system). As Figuras 1.6 e 1.7 ilustram a organizao tradicional de um sistema de mquinas virtuais. Para maximizar o desempenho, o monitor, sempre que possvel, permite que a mquina virtual execute diretamente sobre o hardware, em modo usurio. O monitor retoma o controle sempre que a mquina virtual tenta executar uma operao que possa afetar o correto funcionamento do sistema, o conjunto de operaes de outras mquinas virtuais ou do prprio hardware. O monitor simula com segurana a operao antes de retornar o controle mquina virtual.

1.5.1 Mquinas virtuais de tipo I


O monitor tem o controle do hardware e cria um ambiente de mquinas virtuais; cada mquina virtual se comporta como uma mquina fsica completa que pode executar o seu prprio sistema operacional, semelhante a um sistema operacional tradicional que est no controle da mquina. O resultado da completa virtualizao da mquina um conjunto de computadores virtuais executando sobre o mesmo sistema fsico.

22
Aplicao Convidado Monitor Hardware

Mquinas Virtuais e Emuladores


Aplicao Convidado

Figura 1.6 Mquina virtual de tipo I.

1.5.2 Mquinas virtuais de tipo II


O monitor executa sobre um sistema anfitrio, como um processo num sistema real. O monitor de tipo II funciona de forma anloga ao de tipo I, sendo a sua maior diferena a existncia de um sistema abaixo deste. Neste modelo, o monitor simula todas as operaes que o sistema anfitrio controlaria.
Aplicao Aplicao

Sistema convidado Monitor Sistema anfitrio Hardware Aplicao

Figura 1.7 Mquina virtual de tipo II.

1.5.3 Abordagens hbridas


Os monitores de tipo I e II raramente so usados em sua forma conceitual em implementaes reais. Na prtica, vrias otimizaes so inseridas nas arquiteturas apresentadas, com o objetivo principal de melhorar o desempenho das aplicaes nos sistemas convidados. Como os pontos cruciais do desempenho dos sistemas de mquinas virtuais so as operaes de E/S, as principais otimizaes utilizadas em sistemas de produo dizem respeito a essas operaes. Quatro otimizaes so usuais:

Captulo 1 Mquinas virtuais

23

Em monitores de tipo I (Figura 1.8):


Aplicao Sistema convidado 1 Monitor Hardware
Figura 1.8 Abordagem hbrida para tipo I.

Aplicao Sistema convidado 1

1. O sistema convidado (guest system) acessa diretamente o hardware. Essa forma de acesso se d pela implementao de modificaes no ncleo do sistema convidado e no monitor. Essa otimizao ocorre, por exemplo, no subsistema de gerncia de memria do ambiente Xen. Em monitores de tipo II (Figura 1.9):
Aplicao Aplicao Aplicao Sistema convidado 1 2 3 Sistema anfitrio Hardware

Monitor

Aplicao

Figura 1.9 Abordagem hbrida para tipo II.

1. O sistema convidado (guest system) acessa diretamente o sistema anfitrio (host system). Essa otimizao implementada pelo monitor, oferecendo partes da API do sistema anfitrio ao sistema convidado. Um exemplo dessa otimizao ocorre no sistema de arquivos no VMware: em vez de reconstruir integralmente o sistema de arquivos sobre um dispositivo virtual provido pelo monitor, o sistema convidado faz uso da implementao de sistema de arquivos nativa existente no sistema anfitrio.

24

Mquinas Virtuais e Emuladores

2. O sistema convidado (guest system) acessa diretamente o hardware. Essa otimizao implementada parcialmente pelo monitor e parcialmente pelo sistema anfitrio, pelo uso de um device driver especfico. Um exemplo tpico dessa otimizao o acesso direto a dispositivos fsicos como leitor de CDs, hardware grfico e interface de rede provida pelo sistema VMware aos sistemas operacionais convidados. 3. O monitor acessa diretamente o hardware. Neste caso, um device driver especfico instalado no sistema anfitrio, oferecendo ao monitor uma interface de baixo nvel para acesso ao hardware subjacente. Essa abordagem usada pelos sistemas VMware e UML. Essas otimizaes levam a arquiteturas que diferem dos modelos bsicos I e II, sendo por isso chamadas de abordagens hbridas.

1.6 Formas de virtualizao


Os softwares podem ser utilizados para fazer os recursos parecerem diferentes do que realmente so e essa capacidade chamada de virtualizao. A virtualizao a interposio do software (mquina virtual) em vrias camadas do sistema. uma forma de dividir os recursos de um computador em mltiplos ambientes de execuo. Existem trs formas de virtualizao: virtualizao do hardware, virtualizao do sistema operacional e virtualizao de linguagens de programao.

1.6.1 Virtualizao do hardware


A virtualizao exporta o sistema fsico como uma abstrao do hardware (Figura 1.10). Nesse modelo, qualquer software escrito para a arquitetura (x86, por exemplo) ir funcionar. Esse foi o modelo adotado na dcada de 1960 para o VM/370 nos mainframes IBM e a tecnologia de virtualizao utilizada pelo VMware na plataforma x86.

Captulo 1 Mquinas virtuais

25

Aplicao

Aplicao

Sistema operacional (Linux, Windows, Unix) CPU, RAM, dispositivos de E/S - Virtual Mquina virtual Sistema operacional (Linux, Windows, Unix) CPU, RAM, dispositivos de E/S - Real
Figura 1.10 Virtualizao do hardware.

1.6.2 Virtualizao do sistema operacional


A virtualizao exporta um sistema operacional como abstrao de um sistema especfico (Figura 1.11). A mquina virtual roda aplicaes ou um conjunto de aplicaes de um sistema operacional especfico. O FreeBSD Jail ou o UserMode Linux so exemplos dessa tecnologia.

Aplicao

Aplicao

Sistema operacional (Linux, Windows, Unix) - Virtual Mquina virtual Sistema operacional (Linux, Windows, Unix) CPU, RAM, dispositivos de E/S - Real
Figura 1.11 Virtualizao do sistema operacional.

26

Mquinas Virtuais e Emuladores

1.6.3 Virtualizao de linguagens de programao


A camada de virtualizao cria uma aplicao no topo do sistema operacional. Na prtica, as mquinas virtuais nessa categoria so desenvolvidas para computadores fictcios projetados para uma finalidade especfica. A camada exporta uma abstrao para a execuo de programas escritos para essa virtualizao (Figura 1.12). Java e Smalltalk so exemplos desse tipo de mquina virtual.

Aplicao

Mquina virtual Sistema operacional (Linux, Windows, Unix) CPU, RAM, dispositivos de E/S - Real
Figura 1.12 Virtualizao de linguagens de programao.

1.6.4 O poder da virtualizao


O uso das mquinas virtuais e emuladores possibilitam: a. executar um sistema operacional (e suas aplicaes) sobre outro; b. utilizar uma aplicao de outra plataforma operacional; c. executar mltiplos sistemas operacionais; d. flexibilizar uma plataforma complexa de trabalho. Um exemplo claro sobre o poder da virtualizao (sua aplicao) seria um usurio executar uma aplicao em Java sobre a mquina virtual User-Mode Linux, que por sua vez estaria sobre um sistema Linux, que poderia estar sendo executado sob outra mquina virtual (VMware) e que, por fim, estaria sobre um sistema operacional (Windows) (Figura 1.13).

Captulo 1 Mquinas virtuais


Aplicao Java Java Virtual Machine User - Mode Linux Linux VMware Windows Hardware (x86)

27

Figura 1.13 Exemplo de virtualizao em seqncia.

A Figura 1.14 apresenta um exemplo mais complexo de utilizao de mquinas virtuais. Este exemplo teoricamente possvel, mas s implementvel se todas as aplicaes de mquinas virtuais e emuladores suportassem a auto-virtualizao, ou seja, se fossem capazes de executar uma cpia de si internamente. Infelizmente nem todas as mquinas virtuais ainda tm essa capacidade.
Apl JAIL Apl JAIL Aplicao Windows II Windows II Windows XEN Hardware (x86)
Aplicao

FreeBSD VMware

Aplicao Linux UML Linux

Aplicao Mac QEMU

JVM

Figura 1.14 Exemplo complexo de mltiplas virtualizaes.

28

Mquinas Virtuais e Emuladores

1.6.5 Outras classificaes de virtualizao


Existem outras classificaes para a tecnologia de virtualizao: Abstrao do ISA (Instruction Set Architecture): A virtualizao implementada com o uso da emulao completa do ISA. O emulador executa as instrues do sistema convidado (a mquina virtual obtida por meio da emulao) utilizando a traduo das instrues para o sistema nativo. Essa arquitetura robusta e simples para implementao, mas a perda de performance significativa. Bochs, Crusoe e QEMU so exemplos dessa arquitetura. Hardware Abstraction Layer (HAL): O monitor simula uma arquitetura completa para o sistema convidado. Dessa forma, o sistema convidado acredita estar executando sobre um sistema completo de hardware. VMware, Virtual PC, Denali e Xen so exemplos dessa arquitetura.
Nota: O termo Instruction Set Architecture (ISA) uma definio utilizada para distinguir formalmente de outros usos formais do termo arquitetura quando se refere a outros aspectos de implementao de arquitetura de hardware. O ISA descreve os aspectos da arquitetura do computador visvel ao programador, tais como: tipos nativos de dados, instrues, registradores, modos de endereamento, arquitetura de memria, interrupes e excees.

OS Level (sistema operacional): Esse nvel de virtualizao obtido utilizando-se uma chamada de sistema (system call) especfica. O principal benefcio da virtualizao nesse nvel criar uma camada para obter o isolamento de processos. Cada sistema virtualizado com seu prprio endereo IP e outros recursos de hardware (embora limitado). A virtualizao ocorre a partir de um diretrio ou sistema de arquivos previamente preparado para esse fim. O Jail e o Ensim so exemplos dessa arquitetura. Nvel de aplicao ou virtualizao de linguagens de programao: A virtualizao obtida por meio da abstrao de uma camada de execuo Uma aplicao utiliza essa camada para executar as instrues do . programa. Essa soluo garante que uma aplicao possa ser executada em qualquer plataforma de software ou hardware, pois a camada abstrada de forma idntica em todas as plataformas, porm necessria uma mquina virtual especfica para cada plataforma. Java, Microsoft .NET CLI e Parrot so exemplos dessa arquitetura.

Captulo 1 Mquinas virtuais

29

User level library interface (biblioteca de interface para usurio) : Vrios sistemas e aplicaes so escritos utilizando-se um conjunto de APIs fornecidos pelo sistema (aplicaes sob o sistema Windows so os exemplos mais populares), exportados para o nvel do usurio por meio de bibliotecas. A virtualizao nesse nvel obtida com a abstrao do topo do sistema operacional para que as aplicaes possam executar em outra plataforma. O Wine um exemplo desse tipo de arquitetura.

1.7 Tcnicas de virtualizao e emulao


As tcnicas mais utilizadas para virtualizao atualmente so a paravirtualizao (paravirtualization), virtualizao total (full virtualization) e recompilao dinmica (dynamic recompilation).

1.7.1 Virtualizao total


Na virtualizao total, uma estrutura completa de hardware virtualizada, portanto, o sistema a ser virtualizado (sistema convidado) no precisa sofrer qualquer tipo de alterao (Figura 1.15).
Sistema convidado padro (sem modificaes) Chamada de sistema padro Hardware x86 virtualizado totalmente Mquina virtual Hardware x86
Figura 1.15 Representao da virtualizao total.

O principal benefcio da virtualizao total justamente o fato de que o sistema a ser virtualizado no sofre qualquer tipo de alterao; em compensao, o sistema virtualizado executa de forma mais lenta e o monitor de mquinas virtuais precisa implementar alternativas para que as operaes privilegiadas possam ser executadas em processadores que no suportem a virtualizao nativamente, tais como os processadores Intel 32 bits disponveis atualmente.

30

Mquinas Virtuais e Emuladores

1.7.2 Paravirtualizao
Na paravirtualizao, o sistema a ser virtualizado (sistema convidado) sofre modificaes para que a interao com o monitor de mquinas virtuais seja mais eficiente (Figura 1.16).
Sistema convidado paravirtualizado (com modificaes) Chamadas de sistema do sistema paravirtualizado Chamada de sistema padro Hardware x86 virtualizado totalmente Mquina virtual Hardware x86
Figura 1.16 Representao da paravirtualizao.

A paravirtualizao 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 monitorado pelo monitor de mquinas virtuais, que fornece ao sistema convidado todos os limites do sistema, tais como endereos de memria que podem ser utilizados e endereamento em disco, por exemplo. A paravirtualizao reduz a complexidade do desenvolvimento das mquinas virtuais, j que, historicamente, os processadores no suportam a virtualizao nativa. A performance obtida, a principal razo para utilizar a paravirtualizao, compensa as modificaes que sero implementadas nos sistemas convidados.

1.7.3 Relao entre a virtualizao total e a paravirtualizao


A virtualizao total exige do monitor de mquinas virtuais um trabalho adicional para gerenciamento da memria. Ao ser instanciado, o monitor reserva um espao da memria para trabalho, mas o sistema convidado acredita estar

Captulo 1 Mquinas virtuais

31

utilizando o incio da memria. A Figura 1.17 demonstra exatamente essa dificuldade: a mquina real tem endereamento de memria iniciando em 0000 at FFFF. O monitor reserva o espao de memria compreendido entre 000F e 00FF, mas o sistema convidado enxerga esse espao reservado como sua memria total e, portanto, iniciando em 0000 e finalizando em 000F. Sempre que o sistema convidado acessa a memria virtual, o monitor faz a traduo dos endereos para acessar a memria real. Isso no ocorre na paravirtualizao, pois o monitor informa ao sistema convidado qual o espao de memria que pode ser utilizado. Dessa forma, o sistema convidado acessa diretamente a memria fornecida sem interferncia do monitor de mquinas virtuais.
FFFF 0FFF Memria fsica 0000 Memria virtual

00FF 0000

000F

Espao reservado pela mquina virtual para o sistema convidado

Figura 1.17 Alocao de memria para o sistema convidado.

O mesmo processo ocorre para acesso a disco: enquanto num sistema com virtualizao total o sistema convidado enxerga o disco como seu para uso exclusivo, na paravirtualizao o sistema convidado sabe que o disco compartilhado. Ainda, na virtualizao total, sempre que o sistema realiza uma chamada de sistema para acesso a disco, o monitor de mquinas virtuais deve capturar essa chamada, interpret-la e repass-la para que o sistema anfitrio execute a operao (em casos de mquinas virtuais de tipo II); em mquinas virtuais de tipo I, o monitor de mquinas virtuais realiza a chamada de sistema a disco. O resultado da chamada de sistema ento repassado para o sistema convidado. Na paravirtualizao, o sistema convidado sabe que o disco compartilhado e realiza diretamente o acesso ao disco (sem a interferncia do monitor de mquinas virtuais), bem como aos demais dispositivos (mouse, teclado etc.); o monitor somente controla a ordem de acesso, no caso de mltiplos sistemas convidados em execuo simultaneamente.

32

Mquinas Virtuais e Emuladores

1.7.4 Recompilao dinmica


Outra tcnica bastante utilizada a recompilao dinmica (dynamic recompilation) de partes do cdigo. Com a compilao, durante a execuo, o sistema pode adequar o cdigo gerado de forma a refletir o ambiente original do programa, explorando informaes que normalmente no esto disponveis para um compilador esttico tradicional, para que o cdigo gerado seja mais eficiente. Em outros casos, um sistema pode empregar a recompilao dinmica como parte de uma estratgia de otimizao adaptvel para executar uma representao porttil do programa, tal como bytecodes de Java. A recompilao dinmica que tambm pode ser chamada de translation (traduo) composta de sete passos: 1. Agrupamento de bits: Quando um programa compilado (com o gcc, por exemplo) e transformado em um arquivo executvel utilizando a linkedio, ele guarda uma srie de caractersticas comuns que identificam como a memria, os registradores e as funes do sistema operacional so manipulados. Um emulador ou uma mquina virtual pode usar o conhecimento sobre o formato do executvel e, pelo uso de tcnicas heursticas, recuperar os conjuntos de bits do executvel e reorden-los. 2. Desmontagem (disassembling): Os bits so desmontados e transformados em um conjunto de instrues e operadores ordenados em pares. 3. Gerao intermediria do cdigo: As instrues so transformadas para uma representao de mquina independente. 4. Decompilao: A representao gerada transformada em uma linguagem de alto nvel (como o cdigo na linguagem C). 5. Compilao: O cdigo gerado novamente compilado para a nova plataforma. 6. Montagem (assembling): Os cdigos-objeto (gerados pela compilao) so novamente montados (linkeditados), preparando a criao de um novo executvel. 7. Armazenagem dos bits: Os bits so agrupados de forma a gerar o novo executvel.
Nota: O termo dynamic translation (traduo dinmica) tambm utilizado para se referir compilao just-in-time (JIT). Essa tcnica utilizada para aumentar a performance de aplicativos usando a converso de bytecodes compilados previamente (como o Java) para uma linguagem que a mquina entenda.

Captulo 1 Mquinas virtuais

33

1.8 Propriedades de monitores de mquinas virtuais


Os monitores possuem algumas propriedades que tambm podem ser utilizadas na segurana de sistemas e outras aplicaes: Isolamento: Essa propriedade garante que um software em execuo em uma mquina virtual no acesse nem modifique outro software em execuo no monitor ou em outra mquina virtual, ou seja, faz com que o software funcione na mquina virtual e em outras mquinas virtuais e mquinas reais sem que um software interfira na execuo do outro. Essa propriedade utilizada para que erros de um software ou hackers possam ser contidos dentro da mquina virtual sem afetar as outras partes do sistema. Alm do isolamento dos dados, a camada de virtualizao possibilita a reduo do desempenho de um sistema convidado de modo que os recursos consumidos por uma mquina virtual no prejudiquem necessariamente o desempenho de outras mquinas virtuais (gerncia dos recursos). Inspeo: O monitor tem acesso e controle sobre todas as informaes do estado da mquina virtual, como estado da CPU, contedo de memria, eventos etc. Interposio: O monitor pode intercalar ou acrescentar instrues em certas operaes de uma mquina virtual, como, por exemplo, quando da execuo de instrues privilegiadas por parte da mquina virtual. Eficincia: Instrues inofensivas podem ser executadas diretamente no hardware, pois no iro afetar outras mquinas virtuais ou aplicaes. Gerenciabilidade: Como cada mquina virtual uma entidade independente das demais, a administrao das diversas instncias simplificada e centralizada. Compatibilidade do software: A mquina virtual fornece uma abstrao compatvel, de modo que todo o software escrito para ela funcione. Por exemplo, em uma mquina virtual com um sistema operacional de alto nvel funcionaro os programas escritos na linguagem de alto nvel. A abstrao da mquina virtual freqentemente pode mascarar diferenas nas camadas do hardware e do software abaixo da mquina virtual. Um exemplo disso escrever uma vez o software em Java e execut-lo em qualquer outra mquina virtual Java.

34

Mquinas Virtuais e Emuladores

Encapsulamento: A camada de virtualizao pode ser usada para manipular e controlar a execuo do software na mquina virtual. Pode tambm usar uma ao indireta para dar prioridade ao software ou fornecer um ambiente melhor para execuo. Por exemplo, mquinas virtuais para as verificaes de runtime podem ajudar a reduzir a quantidade de erros de programas. O encapsulamento fornece outra propriedade, que o encapsulamento de estado, que pode ser utilizado para construir checkpoints do estado da mquina virtual. Estados salvos tm vrios usos, como rollback e anlise post-mortem. Desempenho: Adicionar uma camada de software a um sistema pode afetar o desempenho do software que funciona na mquina virtual, mas os benefcios proporcionados pelo uso de sistemas virtuais compensam a perda de desempenho. Hardwares virtualizveis, como as mquinas mainframe da IBM, tm uma propriedade chamada execuo direta que permite que esses sistemas obtenham, com a utilizao de mquinas virtuais, desempenho similar ao de um sistema convencional equivalente.

1.9 Uso de mquinas virtuais


Ao longo dos anos, as mquinas virtuais vm sendo utilizadas com vrias finalidades, como processamento distribudo e segurana. Um uso freqente de sistemas baseados em mquinas virtuais a chamada consolidao de servidores Em vez . da utilizao de vrios equipamentos com seus respectivos sistemas operacionais, utiliza-se somente um computador com mquinas virtuais abrigando os vrios sistemas operacionais e suas respectivas aplicaes e servios. A utilizao de mquinas virtuais e emuladores em sistemas ser discutida com mais detalhes no Captulo 2.

1.9.1 Benefcios ao utilizar mquinas virtuais


A abordagem da IBM, que define uma mquina virtual como uma cpia totalmente protegida e isolada de um sistema fsico, permite que testes de sistemas na fase de desenvolvimento no prejudiquem os demais usurios em caso de um travamento do equipamento virtualizado. Nos mainframes, as mquinas virtuais tambm so utilizadas para time-sharing ou diviso de recursos para as diversas aplicaes.

Captulo 1 Mquinas virtuais

35

Muitos dos benefcios das mquinas virtuais utilizadas no ambiente dos mainframes tambm podem ser obtidos nos computadores pessoais. Existem vrias vantagens para a utilizao de mquinas virtuais em sistemas de computao: Facilitar o aperfeioamento e testes de novos sistemas operacionais. Auxiliar no ensino prtico de sistemas operacionais e programao ao permitir a execuo de vrios sistemas para comparao no mesmo equipamento. Executar diferentes sistemas operacionais sobre o mesmo hardware, simultaneamente. Simular configuraes e situaes diferentes do mundo real, como, por exemplo, mais memria disponvel ou a presena de outros dispositivos de E/S. Simular alteraes e falhas no hardware para testes ou reconfigurao de um sistema operacional, provendo confiabilidade e escalabilidade para as aplicaes. Garantir a portabilidade das aplicaes legadas (que executariam sobre uma mquina virtual simulando o sistema operacional original). Desenvolvimento de novas aplicaes para diversas plataformas, garantindo a portabilidade dessas aplicaes. Diminuio de custos com hardware, utilizando a consolidao de servidores. Facilidades no gerenciamento, migrao e replicao de computadores, aplicaes ou sistemas operacionais. Prover um servio dedicado a um cliente especfico com segurana e confiabilidade.

1.9.2 Dificuldades para o uso de mquinas virtuais


Alm do custo do processo de virtualizao em si, existem outras dificuldades para a ampla utilizao de mquinas virtuais em ambientes de produo:

36

Mquinas Virtuais e Emuladores

Processador no virtualizado: A arquitetura dos processadores Intel 32 bits no permite naturalmente a virtualizao. O trabalho Formal Requirements for Virtualizable Third Generation Architectures demonstra que uma arquitetura pode suportar mquinas virtuais somente se todas as instrues aptas a inspecionar ou modificar o estado privilegiado da mquina forem executadas em modo mais privilegiado e puderem ser interceptadas. O processador Intel de 32 bits no se encontra nessa situao, pois no possvel virtualizar o processador para executar todas as operaes em um modo menos privilegiado.
Nota: Esto sendo conduzidas pesquisas por parte dos fabricantes de processadores para a implementao da virtualizao nos processadores atuais. Um exemplo tecnologia da Advanced Micro Devices (AMD) batizada de Pacifica adotada nos processadores de 64 bits. Outro exemplo a tecnologia de virtualizao do processador batizada de Vanderpool adotada pela Intel nos seus processadores Itanium. Infelizmente as tecnologias Pacifica e Vanderpool no sero compatveis em sua totalidade, o que certamente ir dificultar o desenvolvimento de novos softwares para essas arquiteturas.

Diversidade de equipamentos : Existe uma grande quantidade de equipamentos disponveis (caractersticas da arquitetura aberta do PC). Em uma execuo tradicional, o monitor teria de controlar todos esses dispositivos, o que requer um grande esforo de programao por parte dos desenvolvedores de monitores. Preexistncia de softwares: Ao contrrio de mainframes, que so configurados e controlados por administradores de sistema, os desktops e workstations normalmente j vm com um sistema operacional instalado e pr-configurado, e que normalmente ajustado pelo usurio final. Nesse ambiente, extremamente importante permitir que um usurio possa utilizar a tecnologia das mquinas virtuais, mas sem perder a facilidade de continuar utilizando seu sistema operacional padro e aplicaes. A principal desvantagem do uso de mquinas virtuais o custo adicional de execuo dos processos em comparao com a mquina real. Esse custo muito varivel, podendo chegar a 50% ou mais em plataformas sem suporte de hardware virtualizao, como os PCs de plataforma Intel. Esse problema inexiste em ambientes de hardware com suporte virtualizao, como o caso de mainframes. Todavia, pesquisas recentes tm obtido a reduo desse custo a patamares abaixo de 20%, graas, sobretudo, a ajustes no cdigo do sistema anfitrio.

Captulo 1 Mquinas virtuais

37

Outra tcnica utilizada a reescrita on-the-fly de partes do cdigo executvel das aplicaes, inserindo pontos de interceptao do controle antes/aps as instrues privilegiadas cuja virtualizao no permitida na plataforma Intel de 32 bits. Um exemplo desse avano o projeto Xen, no qual foram obtidos custos da ordem de 3% para a virtualizao de ambientes Linux, FreeBSD e Windows XP. Esse trabalho abre muitas perspectivas na utilizao de mquinas virtuais em ambientes de produo, ainda mais com novas pesquisas para suporte de virtualizao nos processadores.

1.10 Abstrao e virtualizao


Embora a virtualizao seja descrita como uma abstrao em software, existe uma diferena entre os termos abstrao e virtualizao. A abstrao uma forma simples de prover alguns recursos especficos de hardware para um software, enquanto a virtualizao prov um conjunto completo de recursos. A Figura 1.18 ilustra um exemplo de armazenamento em disco. A abstrao permite que softwares acessem os arquivos para operaes especficas e simples (read ou write, por exemplo). A virtualizao fornece para o software um sistema de arquivos (disco virtual) montado sobre um arquivo e, nesse caso, possvel realizar operaes mais complexas (mkdir ou chmod, por exemplo).
Software Software

Software

Software

Virtualizao
Arquivo Arquivo

Arquivo

Arquivo

Abstrao

Figura 1.18 Diferena entre abstrao e virtualizao.

1.11 O futuro
O uso de mquinas virtuais atingir o seu auge em um curto espao de tempo, pois as pesquisas na indstria e nas universidades para aprimorar as questes de segurana, mobilidade e performance tm crescido bastante.

38

Mquinas Virtuais e Emuladores

Os principais campos de pesquisas nos prximos anos, para melhorar o suporte a virtualizao, devero ser: CPU: AMD e Intel anunciaram tecnologias (Pacifica e Vanderpool, respectivamente) para que a virtualizao sobre a plataforma x86 ocorra de forma mais natural e tranqila. Essas tecnologias simplificaro o desenvolvimento de novos monitores de mquinas virtuais. Memria: Vrias tcnicas tm permitido que a virtualizao da memria seja mais eficiente. Pesquisas futuras devem levar os sistemas operacionais convidados a gerenciar a memria juntamente com o monitor de mquinas virtuais (gerncia cooperativa). Dispositivos de E/S: Os dispositivos de E/S sero projetados para fornecer suporte virtualizao com alta-performance. O prprio dispositivo ir suportar a multiplexao, de forma a permitir o acesso simultneo por vrios sistemas virtuais. A responsabilidade pelo acesso aos dispositivos dever passar do monitor para o sistema convidado. O passo mais importante para a ampla adoo das mquinas virtuais so as pesquisas para uma nova gerao de processadores. Os processadores atuais implementam quatro nveis de operao (0,1,2 e 3). Cada nvel representa o privilgio para a execuo de cdigos binrios dentro do processador. Quanto maior o nvel, menor o privilgio para execuo. Por vrias razes de implementao dos sistemas operacionais, somente os nveis 0 e 3 so utilizados (Figura 1.19).
Aplicao No utilizado No utilizado Sistema operacional CPU Intel x86
Figura 1.19 Estrutura atual de um processador x86.
3 2 1 0

Como os sistemas operacionais executam no modo mais privilegiado (level 0), os sistemas de virtualizao precisam implementar vrias tcnicas (discutidas

Captulo 1 Mquinas virtuais

39

nos tpicos anteriores) para fornecer a virtualizao, forando que os sistemas operacionais convidados rodem no privilgio 1 ou 3 (Figura 1.20).
Aplicao No utilizado Sistema convidado Sistema convidado Aplicao
3 2 1 ou 3 0

Camada de virtualizao CPU Intel x86

Figura 1.20 Estrutura atual do funcionamento da mquina virtual num processador x86.

Essas tcnicas de retirar privilgios causam alguns problemas:

Virtualizao total: Introduz muito overhead para a traduo de instrues. Paravirtualizao: Exige modificaes nos sistemas operacionais convidados, limitando sua compatibilidade e suporte.
Na nova gerao de processadores ser implementado um assistente em hardware (hardware assist) para suportar nativamente a virtualizao. Esse assistente ir rodar em um modo mais privilegiado. A Intel, com sua tecnologia Vanderpool, prope uma estrutura de processadores com esse hardware assist (Figura 1.21).
Aplicao Sistema convidado Aplicao Sistema convidado
3 0 Hardware Assist

Camada de virtualizao CPU Intel x86

Figura 1.21 Virtualizao com o uso do hardware assist.

claro, as mquinas virtuais existentes devero ser alteradas para obterem os benefcios dessa nova tecnologia.

40

Mquinas Virtuais e Emuladores

1.12 Consideraes finais


Como visto nas sees anteriores, a utilizao de mquinas virtuais est se tornando uma alternativa para vrios sistemas de computao pelas vantagens em custos e portabilidade. Os desafios para a utilizao de mquinas virtuais vm sendo superados devidos s vrias pesquisas que esto sendo realizadas. A lio mais importante deste captulo que a virtualizao s possvel para sistemas convidados que utilizem o mesmo conjunto de instrues do sistema hospedeiro (exemplo: Linux x86 sendo virtualizado sobre o Windows x86) e que a emulao constituda de vrias instrues que traduzem em tempo de execuo todas as instrues (solicitaes) do sistema convidado para o conjunto de instrues do sistema hospedeiro. Dessa forma, possvel executar o TigerOS (sistema operacional da Apple para o Power PC) sobre um Linux x86.

1.13 Bibliografia
GREN, Ola. Teaching computer concepts using virtual machines. SIGCSE Bulletin, v. 31, p. 84-85, 1999. AMD Advanced Micro Devices. AMD64 Virtualization Codenamed Pacifica Technology. Secure Virtual Machine Architecture Reference Manual, 2005. ATTANASIO, C. R. Virtual machines and data security. Proceedings of the workshop on virtual computer systems, 1973. Cambridge, Massachusetts, USA, p. 206-209. BARHAM, Paul et al. Xen and the art of virtualization. Proceedings of the 19th ACM Symposium on Operating Systems Principles SOSP 2003, p. 164-177. BARHAM, Paul et al. Xen 2002. Technical Report Number 553, UCAM-CL-TR553, ISSN 1476-2986. University of Cambridge, 2003. BELPAIRE, Gerald; HSU, Nai-Ting. Formal properties of recursive virtual machine architectures. Proceedings of the 5th ACM Symposium on Operating Systems Principles, 1973. Austin, Texas USA, p. 89-96. BLUNDEN, Bill. Virtual machine design and implementation in C/C++. Texas: Wordware Publishing, 2002. DEITEL, Harvey M.; DEITEL, Paul J.; CHOFFNES, David R. Operating systems. 3rd ed. New Jersey: Pearson Education, 2004.

Captulo 1 Mquinas virtuais

41

DIKE, Jeff. A User-mode port of the Linux Kernel. Proceedings of the 4th Annual Linux Showcase & Conference, 2000. Atlanta USA. Disponvel em: <http://usermode-linux.sourceforge.net/als2000/index.html>. Acesso em: 20 mar. 2003. FRASER, Keir et al. The Xenoserver computing infrastructure. Technical Report Number 552, UCAM-CL-TR-552, ISSN 1476-2986. University of Cambridge, 2003. GARFINKEL, Tal; ROSENBLUM, Mendel. A virtual machine introspection based architecture for intrusion detection. Proceedings of the 2003 Network and Distributed System Security Symposium (NDSS), 2003. GOLDBERG, Robert. Architecture of virtual machines. AFIPS National Computer Conference. New York: NY USA, 1973. GOLDBERG, Robert. Survey of virtual machine research. IEEE Computer Magazine, v. 7, p. 34-45, 1974. GOLDBERG, Robert; MAGER, Peter. Virtual machine technology: a bridge from large mainframes to networks of small computers. IEEE Proceedings Compcon Fall 79, p. 210-213, 1979. HONEYNET PROJECT. Know your enemy: defining virtual honeynets Differents types of virtual honeynets. Disponvel em: <http://project. honeynet.org/papers/virtual/>. Acesso em: 15 dez. 2003. INTEL, Intel Corporation. Intel Architecture. Developers Manual. Santa Clara, CA, v. 1, 2 and 3, 1998. INTEL. Intel virtualization technology specification for the Intel Itanium Architecture. Document Number 305942-002, 2005. KELEM, Nancy; FEIERTAG, Richard. A separation model for virtual machine monitors. Research in security and privacy,1991. Proceedings.1991 IEEE Computer Society Symposium on 1991, Oakland, California USA, p. 78-86. KING, Samuel; CHEN, Peter. Operating system extensions to support host based virtual machines. Technical Report CSE-TR-465-02. University of Michigan, 2002. KING, Samuel; DUNLAP, George; CHEN, Peter. Operating system support for virtual machines. Proceedings of the 2003 USENIX Technical Conference, 2003. p. 71-84. MALLACH, Efrem. On the relationship between virtual machines and emulators. Proceedings of the Workshop on Virtual Computer Systems, 1973. Cambridge, Massachusetts USA, p. 117-126.

42

Mquinas Virtuais e Emuladores

NANDA, Susanta; CHIUEH, Tzi-cker. A survey on virtualization technologies. Technical Report. Departament of Computer Science. University at Stony Brook, NY, 2005. ZDEN, Banu; GOLDBERG, Aaron; SILBERSCHATZ, Avi. Virtual computers: a new paradigm for distributed operating systems. AT&T Bell Laboratories, Murray Hill, New Jersey USA, 1994. POPEK, Gerald; GOLDBERG, Robert. Formal requirements for virtualizable third generation architectures. Communications of the ACM, v. 17, n. 7, p. 412421, 1974. ROSENBLUM, Mendel. The reincarnation of virtual machines. New York, Queue Focus ACM Press, 2004, p. 34-40. ROSENBLUM, Mendel; GARFINKEL, Tal. Virtual machine monitors: current tecnhology and future trends. IEEE Computer Magazine, v. 38, n. 5, p. 39-47, mai. 2005. SILBERCHATZ, Avi; GALVIN, P. Sistemas operacionais: conceitos. So Paulo: Prentice Hall, 2000. SIRER, Emin; GRIMM, Arthur; BERSHAD, Brian. Design and implementation of a distributed virtual machine for network computers. Proceedings of the 17th ACM Symposium on Operating Systems Principles, 1999. Charleston, Carolina do Sul USA, p. 202-216. SMITH, James E.; NAIR, Ravi. The architecture of virtual machines. IEEE, p. 3238, 2005. SUGERMAN, Jeremy; VENKITACHALAM, Ganesh; LIM, Beng-Hong. Virtualizing I/O devices on Vmware workstations hosted virtual machine monitor. Proceedings of the 2001 USENIX Annual Technical Conference, 2001, p. 1-14. TIJMS, Arjan. Binary translation: classification of emulators. Technical Report. Leiden Institute for Advanced Computer Science University Leiden, 2000. VARIAN, Melinda. VM and the VM community: past, present, and future. Sessions of SHARE. Sessions 9059-9061. Melbourne Australia, 1989 (ltima reviso agosto de 1997). VMware Inc. VMware Technical White Paper. Palo Alto, CA USA, 1999. WHITAKER, Andrew; SHAW Marianne; GRIBBLE, Steven. Denali: A scalable , isolation kernel. Proceedings of the Tenth ACM SIGOPS European Workshop, Saint-Emilion Frana, 2002.