Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


livro vm laureano, Manuais, Projetos, Pesquisas de Informática

capitulo de livro que fala de diferentes sistemas operacionais e maquinas virtuais

Tipologia: Manuais, Projetos, Pesquisas

2012

Compartilhado em 12/11/2012

isaac-luz-1
isaac-luz-1 🇧🇷

1 documento

1 / 29

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Novatec Editora
Máquinas Virtuais e Emuladores
Conceitos, Técnicas e Aplicações
Marcos Laureano
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d

Pré-visualização parcial do texto

Baixe livro vm laureano e outras Manuais, Projetos, Pesquisas em PDF para Informática, somente na Docsity!

Novatec Editora

Máquinas Virtuais e Emuladores

Conceitos, Técnicas e Aplicações

Marcos Laureano

15

Capítulo 1

Máquinas virtuais

“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.

  • Software : Toda emulação é feita por software, ou seja, o emulador recon- figura a máquina em uso para a aplicação que se deseja emular. A emu- lação por software é a mais fácil de se implementar e portar para outras plataformas, mas em compensação é a forma mais lenta de emulação.
  • Combinação, “emulação combinadaou “combo ” : O emulador é composto de hardware e software. O software normalmente faz o papel principal da emulação, enquanto o hardware fornece partes chaves do processo. Oferece grande flexibilidade em termos de projeto.

A classificação mais atual, e mais completa, define que os emuladores podem ser divididos em quatro tipos básicos:

  • Totalmente baseada em hardware : A solução independe de software para ser utilizada. Um exemplo de aplicação seria um processador emulando uma arquitetura mais antiga para garantir a execução de softwares legados, como os atuais processadores de 64 bits da AMD, que rodam aplicações 32 bits por meio da emulação do processador.
  • Parcialmente baseada em hardware : O hardware é projetado para su- portar a emulação, mas precisa de uma aplicação em software para que seus recursos sejam utilizados. O hardware da IBM para mainframes é um exemplo, pois foi desenvolvido para suportar a virtualização, porém ne- cessita de um sistema operacional que utilize esses recursos disponíveis.
  • Parcialmente baseada em software : A emulação é obtida pelo software que utiliza alguns recursos do hardware para prover a emulação. Alguns emuladores na plataforma Macintosh utilizam-se de recursos de algumas placas de vídeo (3dFX Voodoo2, por exemplo) diretamente, mesmo que a plataforma não suporte o periférico adequadamente ou o próprio periférico não disponibilize nativamente os recursos para o sistema operacional.
  • Totalmente baseada em software : O emulador não precisa de nenhum hardware para prover a emulação, ou seja, o software provê todos os recur- sos para isso. Esse tipo de emulador é o mais popular pela adaptabilidade (o código-fonte de um emulador pode ser aproveitado para emular várias plataformas parecidas) e portabilidade. Emuladores de plataformas Atari e Amiga são alguns exemplos.

Capítulo 1• Máquinas virtuais^21

Os emuladores podem ser classificados ainda de acordo com a natureza do uso:

  • Emulação do processador.
  • Emulação de um sistema operacional.
  • Emulação de uma plataforma de (hardware) específico.
  • Consoles de videogames.

1.5 Tipos de máquinas virtuais

Existem basicamente duas abordagens para a construção de sistemas de má- quinas 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 sis- tema operacional real subjacente, denominado sistema anfitrião (host system).

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.

  1. O sistema convidado (guest system) acessa diretamente o hardware. Essa forma de acesso se dá pela implementação de modificações no núcleo do sistema convidado e no monitor. Essa otimização ocorre, por exemplo, no subsistema de gerência de memória do ambiente Xen.

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.

  1. O sistema convidado (guest system) acessa diretamente o sistema anfitrião (host system). Essa otimização é implementada pelo monitor, oferecendo partes da API do sistema anfitrião ao sistema convidado. Um exemplo dessa otimização ocorre no sistema de arquivos no VMware: em vez de reconstruir integralmente o sistema de arquivos sobre um dispositivo vir- tual provido pelo monitor, o sistema convidado faz uso da implementação de sistema de arquivos nativa existente no sistema anfitrião.

(^24) Máquinas Virtuais e Emuladores

  1. O sistema convidado (guest system) acessa diretamente o hardware. Essa otimização é implementada parcialmente pelo monitor e parcialmente pelo sistema anfitrião, pelo uso de um device driver específico. Um exemplo típico dessa otimização é o acesso direto a dispositivos físicos como leitor de CDs, hardware gráfico e interface de rede provida pelo sistema VMware aos sistemas operacionais convidados.
  2. O monitor acessa diretamente o hardware. Neste caso, um device driver específico é instalado no sistema anfitrião, oferecendo ao monitor uma interface de baixo nível para acesso ao hardware subjacente. Essa aborda- gem é usada pelos sistemas VMware e UML.

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

  • User level library interface (biblioteca de interface para usuário) : Vários sistemas e aplicações são escritos utilizando-se um conjunto de APIs fornecidos pelo sistema (aplicações sob o sistema Windows são os exemplos mais populares), exportados para o nível do usuário por meio de bibliotecas. A “virtualização” nesse nível é obtida com a abstração do topo do sistema operacional para que as aplicações possam executar em outra plataforma. O Wine é um exemplo desse tipo de arquitetura.

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:

  1. Agrupamento de bits : Quando um programa é compilado (com o gcc, por exemplo) e transformado em um arquivo executável utilizando a linkedição, ele guarda uma série de características comuns que identificam como a memória, os registradores e as funções do sistema operacional são manipulados. Um emulador ou uma máquina virtual pode usar o conhe- cimento sobre o formato do executável e, pelo uso de técnicas heurísticas, recuperar os conjuntos de bits do executável e reordená-los.
  2. Desmontagem (disassembling) : Os bits são desmontados e transforma- dos em um conjunto de instruções e operadores ordenados em pares.
  3. Geração intermediária do código : As instruções são transformadas para uma representação de máquina independente.
  4. Decompilação : A representação gerada é transformada em uma linguagem de alto nível (como o código na linguagem C).
  5. Compilação : O código gerado é novamente compilado para a nova pla- taforma.
  6. Montagem (assembling) : Os códigos-objeto (gerados pela compilação) são novamente montados (linkeditados), preparando a criação de um “novo” executável.
  7. Armazenagem dos bits : Os bits são agrupados de forma a gerar o novo executável. ë Nota: O termo dynamic translation (tradução dinâmica) também é utilizado para se referir à compilação just-in-time (JIT). Essa técnica é utilizada para aumentar a performance de aplicativos usando a conversão de bytecodes compilados previamente (como o Java) para uma linguagem que a máquina entenda.

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:

  • Isolamento : Essa propriedade garante que um software em execução em uma máquina virtual não acesse nem modifique outro software em execução no monitor ou em outra máquina virtual, ou seja, faz com que o software funcione na máquina virtual e em outras máquinas virtuais e máquinas reais sem que um software interfira na execução do outro. Essa propriedade é utilizada para que erros de um software ou hackers possam ser contidos dentro da máquina virtual sem afetar as outras partes do sistema. Além do isolamento dos dados, a camada de virtualização possibilita a redução do desempenho de um sistema convidado de modo que os recursos consumidos por uma máquina virtual não prejudiquem necessariamente o desempenho de outras máquinas virtuais (gerência dos recursos).
  • Inspeção : O monitor tem acesso e controle sobre todas as informações do estado da máquina virtual, como estado da CPU, conteúdo de memória, eventos etc.
  • Interposição : O monitor pode intercalar ou acrescentar instruções em certas operações de uma máquina virtual, como, por exemplo, quando da execução de instruções privilegiadas por parte da máquina virtual.
  • Eficiência : Instruções inofensivas podem ser executadas diretamente no hardware, pois não irão afetar outras máquinas virtuais ou aplicações.
  • Gerenciabilidade : Como cada máquina virtual é uma entidade indepen- dente das demais, a administração das diversas instâncias é simplificada e centralizada.
  • Compatibilidade do software : A máquina virtual fornece uma abstração compatível, de modo que todo o software escrito para ela funcione. Por exemplo, em uma máquina virtual com um sistema operacional de alto nível funcionarão os programas escritos na linguagem de alto nível. A abstração da máquina virtual freqüentemente pode mascarar diferenças nas camadas do hardware e do software abaixo da máquina virtual. Um exemplo disso é escrever uma vez o software em Java e executá-lo em qualquer outra máquina virtual Java.