Anda di halaman 1dari 42

Sistemas Operacionais: Conceitos e Mecanismos IX - Virtualizao

Prof. Carlos Alberto Maziero DAInf UTFPR http://dainf.ct.utfpr.edu.br/maziero 2 de junho de 2013

Este texto est licenciado sob a Licena Attribution-NonCommercial-ShareAlike 3.0 Unported da Creative Commons (CC). Em resumo, voc deve creditar a obra da forma especicada pelo autor ou licenciante (mas no de maneira que sugira que estes concedem qualquer aval a voc ou ao seu uso da obra). Voc no pode usar esta obra para ns comerciais. Se voc alterar, transformar ou criar com base nesta obra, voc poder distribuir a obra resultante apenas sob a mesma licena, ou sob uma licena similar presente. Para ver uma cpia desta licena, visite http://creativecommons.org/licenses/by-nc-sa/3.0/. Este texto foi produzido usando exclusivamente software livre: Sistema Operacional GNU/Linux (distriA buies Fedora e Ubuntu), compilador de texto L TEX 2 , gerenciador de referncias BibTeX, editor grco Inkscape, criadores de grcos GNUPlot e GraphViz e processador PS/PDF GhostScript, entre outros.

c Carlos Maziero

: SUMRIO

Sumrio
1 Conceitos bsicos 1.1 Um breve histrico . . . . . . . . 1.2 Interfaces de sistema . . . . . . . 1.3 Compatibilidade entre interfaces 1.4 Virtualizao de interfaces . . . . 1.5 Virtualizao versus abstrao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 4 5 7 8 10 11 13 15 17 18 20 23 26 26 26 27 28 30 31 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 34 35 36 37 38 39 39

A construo de mquinas virtuais 2.1 Denio formal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Suporte de hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Formas de virtualizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tipos de mquinas virtuais 3.1 Mquinas virtuais de processo . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Mquinas virtuais de sistema operacional . . . . . . . . . . . . . . . . . . 3.3 Mquinas virtuais de sistema . . . . . . . . . . . . . . . . . . . . . . . . . Tcnicas de virtualizao 4.1 Emulao completa . . . . . . . . . . 4.2 Virtualizao da interface de sistema 4.3 Traduo dinmica . . . . . . . . . . 4.4 Paravirtualizao . . . . . . . . . . . 4.5 Aspectos de desempenho . . . . . . Aplicaes da virtualizao Ambientes de mquinas virtuais 6.1 VMware . . . . . . . . . . . 6.2 FreeBSD Jails . . . . . . . . . 6.3 Xen . . . . . . . . . . . . . . 6.4 User-Mode Linux . . . . . . 6.5 QEMU . . . . . . . . . . . . 6.6 Valgrind . . . . . . . . . . . 6.7 JVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5 6

c Carlos Maziero

: Conceitos bsicos

Resumo As tecnologias de virtualizao do ambiente de execuo de aplicaes ou de plataformas de hardware tm sido objeto da ateno crescente de pesquisadores, fabricantes de hardware/software, administradores de sistemas e usurios avanados. Os recentes avanos nessa rea permitem usar mquinas virtuais com os mais diversos objetivos, como a segurana, a compatibilidade de aplicaes legadas ou a consolidao de servidores. Este captulo apresenta os principais conceitos, arquiteturas e implementaes de ambientes virtuais de execuo, como mquinas virtuais, emuladores e contineres.

Conceitos bsicos

As tecnologias de virtualizao do ambiente de execuo de aplicaes ou de plataformas de hardware tm sido objeto da ateno crescente de pesquisadores, fabricantes de hardware/software, administradores de sistemas e usurios avanados. A virtualizao de recursos um conceito relativamente antigo, mas os recentes avanos nessa rea permitem usar mquinas virtuais com os mais diversos objetivos, como a segurana, a compatibilidade de aplicaes legadas ou a consolidao de servidores. Este captulo apresenta os principais conceitos, arquiteturas e tcnicas usadas para a implementao de ambientes virtuais de execuo.

1.1

Um breve histrico

O conceito de mquina virtual no recente. Os primeiros passos na construo de ambientes de mquinas virtuais comearam na dcada de 1960, quando a IBM desenvolveu o sistema operacional experimental M44/44X. A partir dele, a IBM desenvolveu vrios sistemas comerciais suportando virtualizao, entre os quais o famoso OS/370 [Goldberg, 1973, Goldberg and Mager, 1979]. A tendncia dominante nos sistemas naquela poca era fornecer a cada usurio um ambiente mono-usurio completo, com seu prprio sistema operacional e aplicaes, completamente independente e desvinculado dos ambientes dos demais usurios. Na dcada de 1970, os pesquisadores Popek & Goldberg formalizaram vrios conceitos associados s mquinas virtuais, e deniram as condies necessrias para que uma plataforma de hardware suporte de forma eciente a virtualizao [Popek and Goldberg, 1974]; essas condies so discutidas em detalhe na Seo 2.1. Nessa mesma poca surgem as primeiras experincias concretas de utilizao de mquinas virtuais para a execuo de aplicaes, com o ambiente UCSD p-System, no qual programas Pascal so compilados para execuo sobre um hardware abstrato denominado P-Machine. Na dcada de 1980, com a popularizao de plataformas de hardware baratas como o PC, a virtualizao perdeu importncia. Anal, era mais barato, simples e verstil fornecer um computador completo a cada usurio, que investir em sistemas de grande porte, caros e complexos. Alm disso, o hardware do PC tinha desempenho modesto e no provia suporte adequado virtualizao, o que inibiu o uso de ambientes virtuais nessas plataformas. 3

c Carlos Maziero

: Interfaces de sistema

Com o aumento de desempenho e funcionalidades do hardware PC e o surgimento da linguagem Java, no incio dos anos 90, o interesse pelas tecnologias de virtualizao voltou tona. Apesar da plataforma PC Intel ainda no oferecer um suporte adequado virtualizao, solues engenhosas como as adotadas pela empresa VMWare permitiram a virtualizao nessa plataforma, embora com desempenho relativamente modesto. Atualmente, as solues de virtualizao de linguagens e de plataformas vm despertando grande interesse do mercado. Vrias linguagens so compiladas para mquinas virtuais portveis e os processadores mais recentes trazem um suporte nativo virtualizao.

1.2

Interfaces de sistema

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 entrada/sada. Os sistemas de computadores so projetados com basicamente trs componentes: hardware, sistema operacional e aplicaes. O papel do hardware executar as operaes solicitadas pelas aplicaes atravs do sistema operacional. O sistema operacional recebe as solicitaes das operaes (por meio das chamadas de sistema) e controla o acesso ao hardware principalmente nos casos em que os componentes so compartilhados, como o sistema de memria e os dispositivos de entrada/sada. Os sistemas de computao convencionais so caracterizados por nveis de abstrao crescentes e interfaces bem denidas entre eles. As abstraes oferecidas pelo sistema s aplicaes so construdas de forma incremental, em nveis separados por interfaces bem denidas e relativamente padronizadas. Cada interface encapsula as abstraes dos nveis inferiores, permitindo assim o desenvolvimento independente dos vrios nveis, o que simplica a construo e evoluo dos sistemas. As interfaces existentes entre os componentes de um sistema de computao tpico so: Conjunto de instrues (ISA Instruction Set Architecture): a interface bsica entre o hardware e o software, sendo constituda pelas instrues em cdigo de mquina aceitas pelo processador e todas as operaes de acesso aos recursos do hardware (acesso fsico memria, s portas de entrada/sada, ao relgio do sistema, etc.). Essa interface dividida em duas partes: Instrues de usurio (User ISA): compreende as instrues do processador e demais itens de hardware acessveis aos programas do usurio, que executam com o processador operando em modo no-privilegiado; Instrues de sistema (System ISA): compreende as instrues do processador e demais itens de hardware, unicamente acessveis ao ncleo do sistema operacional, que executa em modo privilegiado; Chamadas de sistema (syscalls): o conjunto de operaes oferecidas pelo ncleo do sistema operacional aos processos dos usurios. Essas chamadas permitem 4

c Carlos Maziero

: Compatibilidade entre interfaces

um acesso controlado das aplicaes aos dispositivos perifricos, memria e s instrues privilegiadas do processador. Chamadas de bibliotecas (libcalls): bibliotecas oferecem um grande nmero de funes para simplicar a construo de programas; alm disso, muitas chamadas de biblioteca encapsulam chamadas do sistema operacional, para tornar seu uso mais simples. Cada biblioteca possui uma interface prpria, denominada Interface de Programao de Aplicaes (API Application Programming Interface). Exemplos tpicos de bibliotecas so a LibC do UNIX (que oferece funes como fopen e printf), a GTK+ (Gimp ToolKit, que permite a construo de interfaces grcas) e a SDL (Simple DirectMedia Layer, para a manipulao de udio e vdeo). A Figura 1 apresenta essa viso conceitual da arquitetura de um sistema computacional, com seus vrios componentes e as respectivas interfaces entre eles.
aplicaes de usurio bibliotecas ncleo do SO hardware
chamadas de biblioteca chamadas de sistema system ISA user ISA

Figura 1: Componentes e interfaces de um sistema computacional.

1.3

Compatibilidade entre interfaces

Para que programas e bibliotecas possam executar sobre uma determinada plataforma, necessrio que tenham sido compilados para ela, respeitando o conjunto de instrues do processador em modo usurio (User ISA) e o conjunto de chamadas de sistema oferecido pelo sistema operacional. A viso conjunta dessas duas interfaces (User ISA + syscalls) denominada Interface Binria de Aplicao (ABI Application Binary Interface). Da mesma forma, um sistema operacional s poder executar sobre uma plataforma de hardware se tiver sido construdo e compilado de forma a respeitar sua interface ISA (User/System ISA). A Figura 2 representa essas duas interfaces. Nos sistemas computacionais de mercado atuais, as interfaces de baixo nvel ISA e ABI so normalmente xas, ou pouco exveis. Geralmente no possvel criar novas instrues de processador ou novas chamadas de sistema operacional, ou mesmo mudar sua semntica para atender s necessidades especcas de uma determinada aplicao. Mesmo se isso fosse possvel, teria de ser feito com cautela, para no comprometer o funcionamento de outras aplicaes. 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 5

c Carlos Maziero

: Compatibilidade entre interfaces

aplicaes de usurio bibliotecas ABI ncleo do SO ISA hardware

aplicaes de usurio bibliotecas ncleo do SO hardware

Figura 2: Interfaces de sistema ISA e ABI [Smith and Nair, 2004]. tempos diferentes). Por isso, esses trabalhos independentes geraram, ao longo dos anos, vrias plataformas computacionais diferentes e incompatveis entre si. Observa-se ento que, embora a denio de interfaces seja til, por facilitar o desenvolvimento independente dos vrios componentes do sistema, torna pouco exveis as interaes entre eles: um sistema operacional s funciona sobre o hardware (ISA) para o qual foi construdo, uma biblioteca s funciona sobre a ABI para a qual foi projetada e uma aplicao tem de obedecer a ABIs/APIs pr-denidas. A Figura 3, extrada de [Smith and Nair, 2004], ilustra esses problemas de compatibilidade entre interfaces.
Aplics Solaris Solaris Sparc Aplics Windows Windows x86 Aplics Linux Linux x86

Aplics Windows Windows

Aplics Windows

Problemas!
Linux

Sparc

x86

Figura 3: Problemas de compatibilidade entre interfaces [Smith and Nair, 2004]. A baixa exibilidade na interao entre as interfaces dos componentes de um sistema computacional traz vrios problemas [Smith and Nair, 2004]: Baixa portabilidade: a mobilidade de cdigo e sua interoperabilidade so requisitos importantes dos sistemas atuais, que apresentam grande conectividade de rede e diversidade de plataformas. A rigidez das interfaces de sistema atuais diculta sua construo, por acoplar excessivamente as aplicaes aos sistemas operacionais e aos componentes do hardware. Barreiras de inovao: a presena de interfaces rgidas diculta a construo de novas formas de interao entre as aplicaes e os dispositivos de hardware (e com 6

c Carlos Maziero

: Virtualizao de interfaces

os usurios, por consequncia). Alm disso, as interfaces apresentam uma grande inrcia evoluo, por conta da necessidade de suporte s aplicaes j existentes. Otimizaes inter-componentes: aplicaes, bibliotecas, sistemas operacionais e hardware so desenvolvidos por grupos distintos, geralmente com pouca interao entre eles. A presena de interfaces rgidas a respeitar entre os componentes leva cada grupo a trabalhar de forma isolada, o que diminui a possibilidade de otimizaes que envolvam mais de um componente. Essas diculdades levaram investigao de outras formas de relacionamento entre os componentes de um sistema computacional. Uma das abordagens mais promissoras nesse sentido o uso da virtualizao, que ser apresentada na prxima seo.

1.4

Virtualizao de interfaces

Conforme visto, as interfaces padronizadas entre os componentes do sistema de computao permitem o desenvolvimento independente dos mesmos, mas tambm so fonte de problemas de interoperabilidade, devido sua pouca exibilidade. Por isso, no possvel executar diretamente em um processador Intel/AMD uma aplicao compilada para um processador ARM: as instrues em linguagem de mquina do programa no sero compreendidas pelo processador Intel. Da mesma forma, no possvel executar diretamente em Linux uma aplicao escrita para um sistema Windows, pois as chamadas de sistema emitidas pelo programa Windows no sero compreendidas pelo sistema operacional Linux subjacente. Todavia, possvel contornar esses problemas de compatibilidade atravs de uma camada de virtualizao construda em software. Usando os servios oferecidos por uma determinada interface de sistema, possvel construir uma camada de software que oferea aos demais componentes uma outra interface. Essa camada de software permitir o acoplamento entre interfaces distintas, de forma que um programa desenvolvido para a plataforma A possa executar sobre uma plataforma distinta B. Usando os servios oferecidos por uma determinada interface de sistema, a camada de virtualizao constri outra interface de mesmo nvel, de acordo com as necessidades dos componentes de sistema que faro uso dela. A nova interface de sistema, vista atravs dessa camada de virtualizao, denominada mquina virtual. A camada de virtualizao em si denominada hipervisor ou monitor de mquina virtual. A Figura 4, extrada de [Smith and Nair, 2004], apresenta um exemplo de mquina virtual, onde um hipervisor permite executar um sistema operacional Windows e suas aplicaes sobre uma plataforma de hardware Sparc, distinta daquela para a qual esse sistema operacional foi projetado (Intel/AMD). Um ambiente de mquina virtual consiste de trs partes bsicas, que podem ser observadas na Figura 4: O sistema real, nativo ou hospedeiro (host system), que contm os recursos reais de hardware e software do sistema;

c Carlos Maziero

: Virtualizao versus abstrao

sistema convidado

Aplics Windows Windows


camada de virtualizao

Aplics Windows Windows

monitor sistema hospedeiro

Sparc

x86

Mquina Virtual

Figura 4: Uma mquina virtual [Smith and Nair, 2004]. o sistema virtual, tambm denominado sistema convidado (guest system), que executa sobre o sistema virtualizado; em alguns casos, vrios sistemas virtuais podem coexistir, executando simultaneamente sobre o mesmo sistema real; a camada de virtualizao, chamada hipervisor ou monitor (VMM Virtual Machine Monitor), que constri as interfaces virtuais a partir da interface real. importante ressaltar a diferena entre os termos virtualizao e emulao. A emulao na verdade uma forma de virtualizao: quando um hipervisor virtualiza integralmente uma interface de hardware ou de sistema operacional, geralmente chamado de emulador. Por exemplo, a mquina virtual Java, que constri um ambiente completo para a execuo de bytecodes a partir de um processador real que no executa bytecodes, pode ser considerada um emulador. A virtualizao abre uma srie de possibilidades interessantes para a composio de um sistema de computao, como por exemplo (Figura 5): Emulao de hardware: um sistema operacional convidado e suas aplicaes, desenvolvidas para uma plataforma de hardware A, so executadas sobre uma plataforma de hardware distinta B. Emulao de sistema operacional: aplicaes construdas para um sistema operacional X so executadas sobre outro sistema operacional Y. Otimizao dinmica: as instrues de mquina das aplicaes so traduzidas durante a execuo em outras instrues mais ecientes para a mesma plataforma. Replicao de hardware: so criadas vrias instncias virtuais de um mesmo hardware real, cada uma executando seu prprio sistema operacional convidado e suas respectivas aplicaes.

1.5

Virtualizao versus abstrao

Embora a virtualizao possa ser vista como um tipo de abstrao, existe uma clara diferena entre os termos abstrao e virtualizao, no contexto de sistemas operacionais [Smith and Nair, 2004]. Um dos principais objetivos dos sistemas operacionais oferecer uma viso de alto nvel dos recursos de hardware, que seja mais 8

c Carlos Maziero

: Virtualizao versus abstrao

Aplicaes SO hipervisor Sparc 1 hardware emulao de hardware

Aplicaes hipervisor

Aplicaes

Aplics OS 1

Aplics OS 2

SO SO hardware 2 emulao do SO hardware 2 otimizao dinmica hv hipervisor hardware 2 replicao de hardware

Figura 5: Possibilidades de virtualizao [Smith and Nair, 2004]. simples de usar e menos dependente das tecnologias subjacentes. Essa viso abstrata dos recursos construda de forma incremental, em nveis de abstrao crescentes. Exemplos tpicos dessa estruturao em nveis de abstrao so os subsistemas de rede e de disco em um sistema operacional convencional. No sub-sistema de arquivos, cada nvel de abstrao trata de um problema: interao com o dispositivo fsico de armazenamento, escalonamento de acessos ao dispositivo, gerncia de buers e caches, alocao de arquivos, diretrios, controle de acesso, etc. A Figura 6 apresenta os nveis de abstrao de um subsistema de gerncia de disco tpico.
aplicao
open write close read abstrao de arquivo

API do sist. arquivos Sist. arquivos lgico Alocao de arquivos Sist. arquivos bsico Controle de E/S
diretrios, permisses estratgias de alocao de arquivos buering, caching, escalonamento de disco Operaes de E/S tratamento de interrupes dispositivos fsicos e controladores

Figura 6: Nveis de abstrao em um sub-sistema de disco. Por outro lado, a virtualizao consiste em criar novas interfaces a partir das interfaces existentes. Na virtualizao, os detalhes de baixo nvel da plataforma real no so necessariamente ocultos, como ocorre na abstrao de recursos. A Figura 7 ilustra essa diferena: atravs da virtualizao, um processador Sparc pode ser visto pelo sistema convidado como um processador Intel. Da mesma forma, um disco real no padro SATA pode ser visto como vrios discos menores independentes, com a mesma interface (SATA) ou outra interface (IDE). A Figura 8 ilustra outro exemplo dessa diferena no contexto do armazenamento em disco. A abstrao prov s aplicaes o conceito de arquivo, sobre o qual estas podem executar operaes simples como read ou write, por exemplo. J a virtualizao fornece 9

c Carlos Maziero

: A construo de mquinas virtuais

i386

dispositivos virtuais

disco'

disco''

camada de virtualizao

camada de virtualizao

sparc

dispositivos reais

disco real

Figura 7: Virtualizao de recursos do hardware. para a camada superior apenas um disco virtual, construdo a partir de um arquivo do sistema operacional real subjacente. Esse disco virtual ter de ser particionado e formatado para seu uso, da mesma forma que um disco real.
aplicaes

SO convid

SO convid

arquivos discos virtuais Sist Operacional Hipervisor

disco

disco real

Figura 8: Abstrao versus virtualizao de um disco rgido.

A construo de mquinas virtuais

Conforme apresentado, a virtualizao consiste em reescrever uma ou mais interfaces do sistema computacional, para oferecer novas interfaces e assim permitir a execuo de sistemas operacionais ou aplicaes incompatveis com as interfaces originais. A construo de mquinas virtuais bem mais complexa que possa parecer primeira vista. Caso os conjuntos de instrues (ISA) do sistema real e do sistema virtual sejam diferentes, necessrio usar as instrues da mquina real para simular as instrues da mquina virtual. Alm disso, necessrio mapear os recursos de hardware virtuais 10

c Carlos Maziero

: Denio formal

(perifricos oferecidos ao sistema convidado) sobre os recursos existentes na mquina real (os perifricos reais). Por m, pode ser necessrio mapear as chamadas de sistema emitidas pelas aplicaes do sistema convidado em chamadas equivalentes no sistema real, quando os sistemas operacionais virtual e real forem distintos. Esta seo aborda inicialmente o conceito formal de virtualizao, para em seguida discutir as principais tcnicas usadas na construo de mquinas virtuais.

2.1

Denio formal

Em 1974, os pesquisadores americanos Gerald Popek (UCLA) e Robert Goldberg (Harvard) deniram uma mquina virtual da seguinte forma [Popek and Goldberg, 1974]: Uma mquina virtual vista como uma duplicata eciente e isolada de uma mquina real. Essa abstrao construda por um monitor de mquina virtual (VMM Virtual Machine Monitor). O hipervisor ou monitor de mquina virtual descrito por Popek/Goldberg corresponde camada de virtualizao apresentada na Seo 1.4. Para funcionar de forma correta e eciente, o hipervisor deve atender a alguns requisitos bsicos: ele deve prover um ambiente de execuo aos programas essencialmente idntico ao da mquina real, do ponto de vista lgico. Programas executando sobre uma mquina virtual devem apresentar, no pior caso, leves degradaes de desempenho. Alm disso, o hipervisor deve ter controle completo sobre os recursos do sistema real (o sistema hospedeiro). A partir desses requisitos, foram estabelecidas as seguintes propriedades a serem satisfeitas por um hipervisor ideal: Equivalncia : um hipervisor prov um ambiente de execuo quase idntico ao da mquina real original. Todo programa executando em uma mquina virtual deve se comportar da mesma forma que o faria em uma mquina real; excees podem resultar somente de diferenas nos recursos disponveis (memria, disco, etc.), dependncias de temporizao e a existncia dos dispositivos de entrada/sada necessrios aplicao. Controle de recursos : o hipervisor deve possuir o controle completo dos recursos da mquina real: nenhum programa executando na mquina virtual deve possuir acesso a recursos que no tenham sido explicitamente alocados a ele pelo hipervisor, que deve intermediar todos os acessos. Alm disso, a qualquer instante o hipervisor pode retirar recursos previamente alocados mquina virtual. Ecincia : grande parte das instrues do processador virtual (o processador provido pelo hipervisor) deve ser executada diretamente pelo processador da mquina real, sem interveno do hipervisor. As instrues da mquina virtual que no puderem ser executadas pelo processador real devem ser interpretadas pelo hipervisor e traduzidas em aes equivalentes no processador real. Instrues simples, que no afetem outras mquinas virtuais ou aplicaes, podem ser executadas diretamente no processador real. 11

c Carlos Maziero

: Denio formal

Alm dessas trs propriedades bsicas, as propriedades derivadas a seguir so frequentemente associadas a hipervisores [Popek and Goldberg, 1974, Rosenblum, 2004]: Isolamento: aplicaes dentro de uma mquina virtual no podem interagir diretamente (a) com outras mquinas virtuais, (b) com o hipervisor, ou (c) com o sistema real hospedeiro. Todas as interaes entre entidades dentro de uma mquina virtual e o mundo exterior devem ser mediadas pelo hipervisor. Recursividade: alguns sistemas de mquinas virtuais exibem tambm esta propriedade: deve ser possvel executar um hipervisor dentro de uma mquina virtual, produzindo um novo nvel de mquinas virtuais. Neste caso, a mquina real normalmente denominada mquina de nvel 0. Inspeo: o hipervisor tem acesso e controle sobre todas as informaes do estado interno da mquina virtual, como registradores do processador, contedo de memria, eventos etc. Essas propriedades bsicas caracterizam um hipervisor ideal, que nem sempre pode ser construdo sobre as plataformas de hardware existentes. A possibilidade de construo de um hipervisor em uma determinada plataforma denida atravs do seguinte teorema, enunciado e provado por Popek e Goldberg em [Popek and Goldberg, 1974]: Para qualquer computador convencional de terceira gerao, um hipervisor pode ser construdo se o conjunto de instrues sensveis daquele computador for um sub-conjunto de seu conjunto de instrues privilegiadas. Para compreender melhor as implicaes desse teorema, necessrio denir claramente os seguintes conceitos: Computador convencional de terceira gerao: qualquer sistema de computao convencional seguindo a arquitetura de Von Neumann, que suporte memria virtual e dois modos de operao do processador: modo usurio e modo privilegiado. Instrues sensveis: so aquelas que podem consultar ou alterar o status do processador, ou seja, os registradores que armazenam o status atual da execuo na mquina real; Instrues privilegiadas: so acessveis somente por meio de cdigos executando em nvel privilegiado (cdigo de ncleo). Caso um cdigo no-privilegiado tente executar uma instruo privilegiada, uma exceo (interrupo) deve ser gerada, ativando uma rotina de tratamento previamente especicada pelo ncleo do sistema real. De acordo com esse teorema, toda instruo sensvel deve ser tambm privilegiada. Assim, quando uma instruo sensvel for executada por um programa no-privilegiado (um ncleo convidado ou uma aplicao convidada), provocar a ocorrncia de uma interrupo. Essa interrupo pode ser usada para ativar uma rotina de interpretao 12

c Carlos Maziero

: Suporte de hardware

dentro do hipervisor, que ir simular o efeito da instruo sensvel (ou seja, interpretla), de acordo com o contexto onde sua execuo foi solicitada (mquina virtual ou hipervisor). Obviamente, quanto maior o nmero de instrues sensveis, maior o volume de interpretao de cdigo a realizar, e menor o desempenho da mquina virtual. No caso de processadores que no atendam as restries de Popek/Goldberg, podem existir instrues sensveis que executem sem gerar interrupes, o que impede o hipervisor de intercept-las e interpret-las. Uma soluo possvel para esse problema a traduo dinmica das instrues sensveis presentes nos programas de usurio: ao carregar um programa na memria, o hipervisor analisa seu cdigo e substitui essas instrues sensveis por chamadas a rotinas que as interpretam dentro do hipervisor. Isso implica em um tempo maior para o lanamento de programas, mas torna possvel a virtualizao. Outra tcnica possvel para resolver o problema a para-virtualizao, que se baseia em reescrever parte do sistema convidado para no usar essas instrues sensveis. Ambas as tcnicas so discutidas a seguir.

2.2

Suporte de hardware

Na poca em que Popek e Goldberg deniram seu principal teorema, o hardware dos mainframes IBM suportava parcialmente as condies impostas pelo mesmo. Esses sistemas dispunham de uma funcionalidade chamada execuo direta, que permitia a uma mquina virtual acessar nativamente o hardware para execuo de instrues. Esse mecanismo permitia que aqueles sistemas obtivessem, com a utilizao de mquinas virtuais, desempenho similar ao de sistemas convencionais equivalentes [Goldberg, 1973, Popek and Goldberg, 1974, Goldberg and Mager, 1979]. O suporte de hardware necessrio para a construo de hipervisores ecientes est presente em sistemas de grande porte, como os mainframes, mas apenas parcial nos micro-processadores de mercado. Por exemplo, a famlia de processadores Intel Pentium IV (e anteriores) possui 17 instrues sensveis que podem ser executadas em modo usurio sem gerar excees, o que viola o teorema de Goldberg (Seo 2.1) e diculta a criao de mquinas virtuais em sistemas que usam esses processadores [Robin and Irvine, 2000]. Alguns exemplos dessas instrues problemticas so: SGDT/SLDT: permitem ler o registrador que indica a posio e tamanho das tabelas de segmentos global/local do processo ativo. SMSW: permite ler o registrador de controle 0, que contm informaes de status interno do processador. PUSHF/POPF: empilha/desempilha o valor do registrador EFLAGS, que tambm contm informaes de status interno do processador. Para controlar o acesso aos recursos do sistema e s instrues privilegiadas, os processadores atuais usam a noo de anis de proteo herdada do sistema MULTICS [Corbat and Vyssotsky, 1965]. Os anis denem nveis de privilgio: um cdigo executando no nvel 0 (anel central) tem acesso completo ao hardware, enquanto um 13

c Carlos Maziero

: Suporte de hardware

cdigo executando em um nvel i > 0 (anis externos) tem menos privilgio. Quanto mais externo o anel onde um cdigo executa, menor o seu nvel de privilgio. Os processadores Intel/AMD atuais suportam 4 anis ou nveis de proteo, mas a quase totalidade dos sistemas operacionais de mercado somente usa os dois anis extremos: o anel 0 para o ncleo do sistema e o anel 3 para as as aplicaes dos usurios. As tcnicas de virtualizao para as plataformas Intel/AMD se baseiam na reduo de privilgios do sistema operacional convidado: o hipervisor e o sistema operacional hospedeiro executam no nvel 0, o sistema operacional convidado executa no nvel 1 ou 2 e as aplicaes do sistema convidado executam no nvel 3. Essas formas de estruturao de sistema so denominadas modelo 0/1/3 e modelo 0/2/3, respectivamente (Figura 9). Todavia, para que a estratgia de reduo de privilgio possa funcionar, algumas instrues do sistema operacional convidado devem ser reescritas dinamicamente, em tempo de carga do sistema convidado na memria, pois ele foi construdo para executar no nvel 0.
sistema no-virtualizado 3 2 1 0 aplicaes
no usado

virtualizao com modelo 0/1/3 3 2 1 0 aplicaes


no usado

virtualizao com modelo 0/2/3 3 aplicaes 2 ncleo convidado 1 0


no usado

no usado

ncleo convidado hipervisor

ncleo do SO

hipervisor

Figura 9: Uso dos nveis de proteo em processadores Intel/AMD convencionais. Por volta de 2005, os principais fabricantes de micro-processadores (Intel e AMD) incorporaram um suporte bsico virtualizao em seus processadores, atravs das tecnologias IVT (Intel Virtualization Technology) e AMD-V (AMD Virtualization), que so conceitualmente equivalentes [Uhlig et al., 2005]. A idia central de ambas as tecnologias consiste em denir dois modos possveis de operao do processador: os modos root e non-root. O modo root equivale ao funcionamento de um processador convencional, e se destina execuo de um hipervisor. Por outro lado, o modo non-root se destina execuo de mquinas virtuais. Ambos os modos suportam os quatro nveis de privilgio, o que permite executar os sistemas convidados sem a necessidade de reescrita dinmica de seu cdigo. So tambm denidos dois procedimentos de transio entre modos: VM entry (transio root non-root) e VM exit (transio non-root root). Quando operando dentro de uma mquina virtual (ou seja, em modo non-root), as instrues sensveis e as interrupes podem provocar a transio VM exit, devolvendo o processador ao hipervisor em modo root. As instrues e interrupes que provocam a transio VM exit so congurveis pelo prprio hipervisor. Para gerenciar o estado do processador (contedo dos registradores), denida uma Estrutura de Controle de Mquina Virtual (VMCS - Virtual-Machine Control Structure). Essa estrutura de dados contm duas reas: uma para os sistemas convidados e outra para 14

c Carlos Maziero

: Formas de virtualizao

o hipervisor. Na transio VM entry, o estado do processador lido a partir da rea de sistemas convidados da VMCS. J uma transio VM exit faz com que o estado do processador seja salvo na rea de sistemas convidados e o estado anterior do hipervisor, previamente salvo na VMCS, seja restaurado. A Figura 10 traz uma viso geral da arquitetura Intel IVT.

rea VMCS
l e salva o estado do processador

3 3

aplicaes

3 2 1 0

no usado

VM entry

no usado

no usado

VM exit

aplicaes 2 no usado 3 aplicaes 2 no usado 1 no usado 2 no usado 1 no usado 0 ncleo convidado 1 no usado 0 ncleo convidado 0 ncleo convidado
modo non-root

hipervisor
modo root

Figura 10: Viso geral da arquitetura Intel IVT. Alm da Intel e AMD, outros fabricantes de hardware tm se preocupado com o suporte virtualizao. Em 2005, a Sun Microsystems incorporou suporte nativo virtualizao em seus processadores UltraSPARC [Yen, 2007]. Em 2007, a IBM props uma especicao de interface de hardware denominada IBM Power ISA 2.04 [IBM, 2007], que respeita os requisitos necessrios virtualizao do processador e da gesto de memria. Conforme apresentado, a virtualizao do processador pode obtida por reescrita dinmica do cdigo executvel ou atravs do suporte nativo em hardware, usando tecnologias como IVT e AMD-V. Por outro lado, a virtualizao da memria envolve outros desaos, que exigem modicaes signicativas dos mecanismos de gesto de memria virtual estudados na Seo ??. Por exemplo, importante prever o compartilhamento de pginas de cdigo entre mquinas virtuais, para reduzir a quantidade total de memria fsica necessria a cada mquina virtual. Outros desaos similares surgem na virtualizao dos dispositivos de armazenamento e de entrada/sada, alguns deles sendo analisados em [Rosenblum and Garnkel, 2005].

2.3

Formas de virtualizao

A virtualizao implica na reescrita de interfaces de sistema, para permitir a interao entre componentes de sistema construdos para plataformas distintas. Como existem 15

c Carlos Maziero

: Formas de virtualizao

vrias interfaces entre os componentes, tambm h vrias possibilidades de uso da virtualizao em um sistema. De acordo com as interfaces em que so aplicadas, as formas mais usuais de virtualizao so [Rosenblum, 2004, Nanda and Chiueh, 2005]: Virtualizao do hardware : toda a interface ISA, que permite o acesso ao hardware, virtualizada. Isto inclui o conjunto de instrues do processador e as interfaces de acesso aos dispositivos de entrada/sada. A virtualizao de hardware (ou virtualizao completa) permite executar um sistema operacional e/ou aplicaes em uma plataforma totalmente diversa daquela para a qual estes foram desenvolvidos. Esta a forma de virtualizao mais poderosa e exvel, mas tambm a de menor desempenho, uma vez que o hipervisor tem de traduzir toda as instrues geradas no sistema convidado em instrues do processador real. A mquina virtual Java (JVM, Seo 6.7) um bom exemplo de virtualizao do hardware. Mquinas virtuais implementando esta forma de virtualizao so geralmente denominados emuladores de hardware. Virtualizao da interface de sistema : virtualiza-se a System ISA, que corresponde ao conjunto de instrues sensveis do processador. Esta forma de virtualizao bem mais eciente que a anterior, pois o hipervisor apenas emula as instrues sensveis do processador virtual, executadas em modo privilegiado pelo sistema operacional convidado. As instrues no-sensveis podem ser executadas diretamente pelo processador real, sem perda de desempenho. Todavia, apenas sistemas convidados desenvolvidos para o mesmo processador podem ser executados usando esta abordagem. Esta a abordagem clssica de virtualizao, presente nos sistemas de grande porte (mainframes) e usada nos ambientes de mquinas virtuais VMWare, VirtualPC e Xen. Virtualizao de dispositivos de entrada/sada : virtualizam-se as dispositivos fsicos que permitem ao sistema interagir com o mundo exterior. Esta tcnica implica na construo de dispositivos fsicos virtuais, como discos, interfaces de rede e terminais de interao com o usurio, usando os dispositivos fsicos subjacentes. A maioria dos ambientes de mquinas virtuais usa a virtualizao de dispositivos para oferecer discos rgidos e interfaces de rede virtuais aos sistemas convidados. Virtualizao do sistema operacional : virtualiza-se o conjunto de recursos lgicos oferecidos pelo sistema operacional, como rvores de diretrios, descritores de arquivos, semforos, canais de IPC e nomes de usurios e grupos. Nesta abordagem, cada mquina virtual pode ser vista como uma instncia distinta do mesmo sistema operacional subjacente. Esta a abordagem comumente conhecida como servidores virtuais, da qual so bons exemplos os ambientes FreeBSD Jails, Linux VServers e Solaris Zones. Virtualizao de chamadas de sistema : permite oferecer o conjunto de chamadas de sistema de uma sistema operacional A usando as chamadas de sistema de um sistema operacional B, permitindo assim a execuo de aplicaes desenvolvidas para um sistema operacional sobre outro sistema. Todavia, como as chamadas de sistema so normalmente invocadas atravs de funes de bibliotecas, a 16

c Carlos Maziero

: Tipos de mquinas virtuais

virtualizao de chamadas de sistema pode ser vista como um caso especial de virtualizao de bibliotecas. Virtualizao de chamadas de biblioteca : tem objetivos similares ao da virtualizao de chamadas de sistema, permitindo executar aplicaes em diferentes sistemas operacionais e/ou com bibliotecas diversas daquelas para as quais foram construdas. O sistema Wine, que permite executar aplicaes Windows sobre sistemas UNIX, usa essencialmente esta abordagem. Na prtica, essas vrias formas de virtualizao podem ser usadas para a resoluo de problemas especcos em diversas reas de um sistema de computao. Por exemplo, vrios sistemas operacionais oferecem facilidades de virtualizao de dispositivos fsicos, como por exemplo: interfaces de rede virtuais que permitem associar mais de um endereo de rede ao computador, discos rgidos virtuais criados em reas livres da memria RAM (os chamados RAM disks); rvores de diretrios virtuais criadas para connar processos crticos para a segurana do sistema (atravs da chamada de sistem chroot), emulao de operaes 3D em uma placa grca que no as suporta, etc.

Tipos de mquinas virtuais

Alm de resolver problemas em reas especcas do sistema operacional, as vrias formas de virtualizao disponveis podem ser combinadas para a construo de mquinas virtuais. Uma mquina virtual um ambiente de suporte execuo de software, construdo usando uma ou mais formas de virtualizao. Conforme as caractersticas do ambiente virtual proporcionado, as mquinas virtuais podem ser classicadas em trs categorias, representadas na Figura 11: Mquinas virtuais de processo (Process Virtual Machines): tambm chamadas de mquinas virtuais de aplicao, so ambientes construdos para prover suporte de execuo a apenas um processo ou aplicao convidada especca. A mquina virtual Java e o ambiente de depurao Valgrind so exemplos deste tipo de ambiente. Mquinas virtuais de sistema operacional (Operating System Virtual Machines): so construdas para suportar espaos de usurio distintos sobre um mesmo sistema operacional. Embora compartilhem o mesmo ncleo, cada ambiente virtual possui seus prprios recursos lgicos, como espao de armazenamento, mecanismos de IPC e interfaces de rede distintas. Os sistemas Solaris Zones e FreeBSD Jails implementam este conceito. Mquinas virtuais de sistema (System Virtual Machines): so ambientes de mquinas virtuais construdos para emular uma plataforma de hardware completa, com processador e perifricos. Este tipo de mquina virtual suporta sistemas operacionais convidados com aplicaes convidadas executando sobre eles. Como exemplos desta categoria de mquinas virtuais temos os ambientes VMware e VirtualBox.

17

c Carlos Maziero

: Mquinas virtuais de processo

Espao de usurio Aplics Solaris Aplic Java JVM ncleo Solaris hardware Sparc VM de processo

Espao de usurio Aplics Linux

Espao de usurio Aplics Linux Aplics Windows

Aplics Linux ncleo Linux ncleo Windows ncleo Linux hardware x86 VM de sistema operacional hipervisor hardware x86 VM de sistema (hardware)

Figura 11: Mquinas virtuais de processo, de sistema operacional e de hardware. Por outro lado, os ambientes de mquinas virtuais tambm podem ser classicados de acordo com o nvel de similaridade entre as interfaces de hardware do sistema convidado e do sistema real (ISA - Instruction Set Architecture, Seo 1.2): Interfaces equivalentes: a interface virtual oferecida ao ambiente convidado reproduz a interface de hardware do sistema real, permitindo a execuo de aplicaes construdas para o sistema real. Como a maioria das instrues do sistema convidado pode ser executada diretamente pelo processador (com exceo das instrues sensveis), o desempenho obtido pelas aplicaes convidadas pode ser prximo do desempenho de execuo no sistema real. Ambientes como VMWare so exemplos deste tipo de ambiente. Interfaces distintas: a interface virtual no tem nenhuma relao com a interface de hardware do sistema real, ou seja, implementa um conjunto de instrues distinto, que deve ser totalmente traduzido pelo hipervisor. Conforme visto na Seo 2.1, a interpretao de instrues impe um custo de execuo signicativo ao sistema convidado. A mquina virtual Java e o ambiente QEmu so exemplos dessa abordagem.

3.1

Mquinas virtuais de processo

Uma mquina virtual de processo ou de aplicao (Process Virtual Machine) suporta a execuo de um processo ou aplicao individual. Ela criada sob demanda, no momento do lanamento da aplicao convidada, e destruda quando a aplicao naliza sua execuo. O conjunto hipervisor + aplicao normalmente visto como um nico processo dentro do sistema operacional subjacente (ou um pequeno conjunto de processos), submetido s mesmas condies e restries que os demais processos nativos. Os hipervisores que implementam mquinas virtuais de processo normalmente permitem a interao entre a aplicao convidada e as demais aplicaes do sistema, atravs dos mecanismos usuais de comunicao e coordenao entre processos, como mensagens, pipes e semforos. Alm disso, tambm permitem o acesso normal ao sistema de arquivos e outros recursos locais do sistema. Estas caractersticas violam a 18

c Carlos Maziero

: Mquinas virtuais de processo

propriedade de isolamento descrita na Seo 2.1, mas so necessrias para que a aplicao convidada se comporte como uma aplicao normal aos olhos do usurio. Ao criar a mquina virtual para uma aplicao, o hipervisor pode implementar a mesma interface de hardware (ISA, Seo 1.2) da mquina real subjacente, ou implementar uma interface distinta. Quando a interface da mquina real preservada, boa parte das instrues do processo convidado podem ser executadas diretamente, com exceo das instrues sensveis, que devem ser interpretadas pelo hipervisor. Os exemplos mais comuns de mquinas virtuais de aplicao que preservam a interface ISA real so os sistemas operacionais multi-tarefas, os tradutores dinmicos e alguns depuradores de memria: Sistemas operacionais multi-tarefas: os sistemas operacionais que suportam vrios processos simultneos, estudados no Captulo ??, tambm podem ser vistos como ambientes de mquinas virtuais. Em um sistema multi-tarefas, cada processo recebe um processador virtual (simulado atravs das fatias de tempo do processador real e das trocas de contexto), uma memria virtual (atravs do espao de endereos mapeado para aquele processo) e recursos fsicos (acessveis atravs de chamadas de sistema). Este ambiente de virtualizao to antigo e to presente em nosso cotidiano que costumamos ignor-lo como tal. No entanto, ele simplica muito a tarefa dos programadores, que no precisam se preocupar com a gesto do compartilhamento desses recursos entre os processos. Tradutores dinmicos : um tradutor dinmico consiste em um hipervisor que analisa e otimiza um cdigo executvel, para tornar sua execuo mais rpida e eciente. A otimizao no muda o conjunto de instrues da mquina real usado pelo cdigo, apenas reorganiza as instrues de forma a acelerar sua execuo. Por ser dinmica, a otimizao do cdigo feita durante a carga do processo na memria ou durante a execuo de suas instrues, de forma transparente. O artigo [Duesterwald, 2005] apresenta uma descrio detalhada desse tipo de abordagem. Depuradores de memria : alguns sistemas de depurao de erros de acesso memria, como o sistema Valgrind [Seward and Nethercote, 2005], executam o processo sob depurao em uma mquina virtual. Todas as instrues do programa que manipulam acessos memria so executadas de forma controlada, a m de encontrar possveis erros. Ao depurar um programa, o sistema Valgrind inicialmente traduz seu cdigo binrio em um conjunto de instrues interno, manipula esse cdigo para inserir operaes de vericao de acessos memria e traduz o cdigo modicado de volta ao conjunto de instrues da mquina real, para em seguida execut-lo e vericar os acessos memria realizados. Contudo, as mquinas virtuais de processo mais populares atualmente so aquelas em que a interface binria de aplicao (ABI, Seo 1.2) requerida pela aplicao diferente daquela oferecida pela mquina real. Como a ABI composta pelas chamadas do sistema operacional e as instrues de mquina disponveis aplicao (user ISA), as diferenas podem ocorrer em ambos esses componentes. Nos dois casos, o hipervisor ter de fazer tradues dinmicas (durante a execuo) das aes requeridas pela 19

c Carlos Maziero

: Mquinas virtuais de sistema operacional

aplicao em suas equivalentes na mquina real. Como visto, um hipervisor com essa funo denominado tradutor dinmico. Caso as diferenas de interface entre aplicao e mquina real se restrinjam s chamadas do sistema operacional, o hipervisor precisa apenas mapear as chamadas de sistema e de bibliotecas usadas pela aplicao sobre as chamadas equivalentes oferecidas pelo sistema operacional da mquina real. Essa a abordagem usada, por exemplo, pelo ambiente Wine, que permite executar aplicaes Windows em plataformas Unix. As chamadas de sistema Windows emitidas pela aplicao em execuo so interceptadas e transformadas em chamadas Unix, de forma dinmica e transparente (Figura 12).
Aplicao Windows
Chamadas de sistema Windows

Wine
Chamadas de sistema UNIX

Linux
Instrues Intel

PC Intel

Figura 12: Funcionamento do emulador Wine. Entretanto, muitas vezes a interface ISA utilizada pela aplicao no corresponde a nenhum hardware existente, mas a uma mquina abstrata. Um exemplo tpico dessa situao ocorre na linguagem Java: um programa escrito em Java, ao ser compilado, gera um cdigo binrio especco para uma mquina abstrata denominada mquina virtual Java (JVM Java Virtual Machine). A linguagem de mquina executada pela mquina virtual Java denominada bytecode Java, e no corresponde a instrues de um processador real. A mquina virtual deve ento interpretar todas as operaes do bytecode, utilizando as instrues da mquina real subjacente para execut-las. Vrias linguagens empregam a mesma abordagem (embora usando um bytecode prprio), como Perl, Python e Smalltalk. Em termos de desempenho, um programa compilado para um processador abstrato executa mais lentamente que seu equivalente compilado para um processador real, devido ao custo de interpretao do bytecode. Todavia, essa abordagem oferece melhor desempenho que linguagens puramente interpretadas. Alm disso, tcnicas de otimizao como a compilao Just-in-Time (JIT), na qual blocos de instrues repetidos frequentemente so traduzidos e mantidos em cache pelo hipervisor, permitem obter ganhos de desempenho signicativos.

3.2

Mquinas virtuais de sistema operacional

Em muitas situaes, a principal ou mesmo nica motivao para o uso de mquinas virtuais a propriedade de isolamento (Seo 2.1). Esta propriedade tem uma grande 20

c Carlos Maziero

: Mquinas virtuais de sistema operacional

importncia no contexto da segurana de sistemas, por permitir isolar entre si subsistemas independentes que executam sobre o mesmo hardware. Por exemplo, a estratgia organizacional conhecida como consolidao de servidores advoga o uso de mquinas virtuais para abrigar os diversos servidores (de nomes, de arquivos, de e-mail, de Web) de um determinado domnio. Dessa forma, pode-se fazer um uso mais eciente do hardware disponvel, preservando o isolamento entre os servios. Todavia, o impacto da virtualizao de uma plataforma de hardware ou sistema operacional sobre o desempenho do sistema nal pode ser elevado. As principais fontes desse impacto so a virtualizao dos recursos (perifricos) da mquina real e a necessidade de traduo binria dinmica das instrues do processador real. Uma forma simples e eciente de implementar o isolamento entre aplicaes ou sub-sistemas em um sistema operacional consiste na virtualizao do espao de usurio (userspace). Nesta abordagem, denominada mquinas virtuais de sistema operacional ou servidores virtuais, o espao de usurio do sistema operacional dividido em reas isoladas denominadas domnios ou zonas virtuais. A cada domnio virtual alocada uma parcela dos recursos do sistema operacional, como memria, tempo de processador e espao em disco. Alm disso, alguns recursos do sistema real podem ser virtualizados, como o caso frequente das interfaces de rede: cada domnio tem sua prpria interface virtual e, portanto, seu prprio endereo de rede. Em vrias implementaes, cada domnio virtual dene seu prprio espao de nomes: assim, possvel encontrar um usurio pedro no domnio d3 e outro usurio pedro no domnio d7 , sem conitos. Essa noo de espaos de nomes distintos pode se estender aos demais recursos do sistema: identicadores de processos, semforos, rvores de diretrios, etc. Os processos presentes em um determinado domnio virtual podem interagir entre si, criar novos processos e usar os recursos presentes naquele domnio, respeitando as regras de controle de acesso associadas a esses recursos. Todavia, processos presentes em um domnio no podem ver ou interagir com processos que estiverem em outro domnio, no podem mudar de domnio, criar processos em outros domnios, nem consultar ou usar recursos de outros domnios. Dessa forma, para um determinado domnio, os demais domnios so mquinas distintas, acessveis somente atravs de seus endereos de rede. Para ns de gerncia, normalmente denido um domnio d0 , chamado de domnio inicial, privilegiado ou de gerncia, cujos processos tm visibilidade e acesso aos recursos dos demais domnios. Somente processos no domnio d0 podem migrar para outros domnios; uma vez realizada uma migrao, no h possibilidade de retornar ao domnio anterior. O ncleo do sistema operacional o mesmo para todos os domnios virtuais, e sua interface (conjunto de chamadas de sistema) preservada. Normalmente apenas uma nova chamada de sistema necessria, para que um processo no domnio inicial d0 possa solicitar sua migrao para um outro domnio di . A Figura 13 mostra a estrutura tpica de um ambiente de mquinas virtuais de sistema operacional. Nela, pode-se observar que um processo pode migrar de d0 para d1 , mas que os processos em d1 no podem migrar para outros domnios. A comunicao entre processos connados em domnios distintos (d2 e d3 ) tambm proibida. H vrias implementaes disponveis de mecanismos para a criao de domnios virtuais. A tcnica mais antiga implementada pela chamada de sistema chroot, 21

c Carlos Maziero
domain 0 (admin)

: Mquinas virtuais de sistema operacional

domain 1

domain 2

domain 3

host OS kernel hardware


Figura 13: Mquinas virtuais de sistema operacional. disponvel na maioria dos sistemas UNIX. Essa chamada de sistema atua exclusivamente sobre o acesso de um processo ao sistema de arquivos: o processo que a executa tem seu acesso ao sistema de arquivos restrito a uma sub-rvore da hierarquia de diretrios, ou seja, ele ca connado a essa sub-rvore. Os lhos desse processo herdam a mesma viso do sistema de arquivos, que no pode ser revertida. Por exemplo, um processo que executa a chamada chroot ("/var/spool/postfix") passa a ver somente a hierarquia de diretrios a partir do diretrio /var/spool/postfix, que passa a ser seu diretrio raiz. A Figura 14 ilustra essa operao.
/ /

bin etc lib usr var

bin etc lib usr var

bin src spool

bin src spool

postx

etc

lib

var

etc

lib

var

Figura 14: A chamada de sistema chroot ("/var/spool/postfix"). A chamada de sistema chroot muito utilizada para isolar processos que oferecem servios rede, como servidores DNS e de e-mail. Se um processo servidor tiver alguma vulnerabilidade e for subvertido por um atacante, este s ter acesso ao conjunto de diretrios visveis aos processos do servidor, mantendo fora de alcance o restante da rvore de diretrios do sistema. O sistema operacional FreeBSD oferece uma implementao de domnios virtuais mais elaborada, conhecida como Jails [McKusick and Neville-Neil, 2005] (aqui traduzidas 22

c Carlos Maziero

: Mquinas virtuais de sistema

como celas). Um processo que executa a chamada de sistema jail cria uma nova cela e colocado dentro dela, de onde no pode mais sair, nem seus lhos. Os processos dentro de uma cela esto submetidos s seguintes restries: a viso do sistema operacional se restringe aos processos e recursos associados quela cela; os demais processos, arquivos e outros recursos do sistema noassociados cela no so visveis; somente so permitidas interaes (comunicao e coordenao) entre processos dentro da mesma cela; de forma similar chamada chroot, cada cela recebe uma rvore de diretrios prpria; operaes de montagem/desmontagem de sistemas de arquivos so proibidas; cada cela tem um endereo de rede associado, que o nico utilizvel pelos processos da cela; a congurao de rede (endereo, parmetros de interface, tabela de roteamento) no pode ser modicada; no podem ser feitas alteraes no ncleo do sistema, como reconguraes ou incluses/excluses de mdulos. Essas restries so impostas a todos os processos dentro de uma cela, mesmo aqueles pertencentes ao administrador (usurio root). Assim, uma cela constitui uma unidade de isolamento bastante robusta, que pode ser usada para connar servios de rede e aplicaes ou usurios considerados perigosos. Existem implementaes de estruturas similares s celas do FreeBSD em outros sistemas operacionais. Por exemplo, o sistema operacional Solaris implementa o conceito de zonas [Price and Tucker, 2004], que oferecem uma capacidade de isolamento similar celas, alm de prover um mecanismo de controle da distribuio dos recursos entre as diferentes zonas existentes. Outras implementaes podem ser encontradas para o sistema Linux, como os ambientes Virtuozzo/OpenVZ e Vservers/FreeVPS.

3.3

Mquinas virtuais de sistema

Uma mquina virtual de sistema (ou de hardware) prov uma interface de hardware completa para um ou mais sistemas operacionais convidados, com suas respectivas aplicaes, que executam de forma isolada e independente. Cada sistema operacional convidado tem a iluso de executar sozinho sobre uma plataforma de hardware exclusiva. O hipervisor de sistema fornece aos sistemas operacionais convidados uma interface de sistema ISA virtual, que pode ser idntica ao hardware real, ou distinta. Alm disso, ele virtualiza o acesso aos recursos, para que cada sistema operacional convidado tenha um conjunto de recursos virtuais prprio, construdo a partir dos recursos fsicos existentes na mquina real. Assim, cada mquina virtual ter sua prpria interface de rede, seu prprio disco, sua prpria memria RAM, etc. Em um ambiente virtual, os sistemas operacionais convidados so fortemente isolados uns dos outros, e normalmente s podem interagir atravs dos mecanismos 23

c Carlos Maziero

: Mquinas virtuais de sistema

de rede, como se estivessem em computadores separados. Todavia, alguns sistemas de mquinas virtuais permitem o compartilhamento controlado de certos recursos. Por exemplo, os sistemas VMware Workstation e VirtualBox permitem a denio de diretrios compartilhados no sistema de arquivos real, que podem ser acessados pelas mquinas virtuais. As mquinas virtuais de sistema constituem a primeira abordagem usada para a construo de hipervisores, desenvolvida na dcada de 1960 e formalizada por Popek e Goldberg (conforme apresentado na Seo 2.1). Naquela poca, a tendncia de desenvolvimento de sistemas computacionais buscava fornecer a cada usurio uma mquina virtual com seus recursos virtuais prprios, sobre a qual o usurio executava um sistema operacional mono-tarefa e suas aplicaes. Assim, o compartilhamento de recursos no era responsabilidade do sistema operacional convidado, mas do hipervisor subjacente. No entanto, ao longo dos anos 70, como o desenvolvimento de sistemas operacionais multi-tarefas ecientes e robustos como MULTICS e UNIX, as mquinas virtuais de sistema perderam gradativamente seu interesse. Somente no nal dos anos 90, com o aumento do poder de processamento dos micro-processadores e o surgimento de novas possibilidades de aplicao, as mquinas virtuais de sistema foram redescobertas. Existem basicamente duas arquiteturas de hipervisores de sistema, apresentados na Figura 15: Hipervisores nativos (ou de tipo I): nesta categoria, o hipervisor executa diretamente sobre o hardware do computador real, sem um sistema operacional subjacente. A funo do hipervisor virtualizar os recursos do hardware (memria, discos, interfaces de rede, etc.) de forma que cada mquina virtual veja um conjunto de recursos prprio e independente. Assim, cada mquina virtual se comporta como um computador completo que pode executar o seu prprio sistema operacional. Esta a forma mais antiga de virtualizao, encontrada nos sistemas computacionais de grande porte dos anos 1960-70. Alguns exemplos de sistemas que empregam esta abordagem so o IBM OS/370, o VMware ESX Server e o ambiente Xen. Hipervisores convidados (ou de tipo II): nesta categoria, o hipervisor executa como um processo normal sobre um sistema operacional nativo subjacente. O hipervisor utiliza os recursos oferecidos pelo sistema operacional nativo para oferecer recursos virtuais ao sistema operacional convidado que executa sobre ele. Normalmente, um hipervisor convidado suporta apenas uma mquina virtual com uma instncia de sistema operacional convidado. Caso mais mquinas sejam necessrias, mais hipervisores devem ser lanados, como processos separados. Exemplos de sistemas que adotam esta estrutura incluem o VMware Workstation, o QEMU e o VirtualBox. Pode-se armar que os hipervisores convidados so mais exveis que os hipervisores nativos, pois podem ser facilmente instalados/removidos em mquinas com sistemas operacionais previamente instalados, e podem ser facilmente lanados sob demanda. Por outro lado, hipervisores convidados tm desempenho pior que hipervisores nativos, pois tm de usar os recursos oferecidos pelo sistema operacional subjacente, enquanto 24

c Carlos Maziero

: Mquinas virtuais de sistema

aplics

aplics

aplics

aplics

OS 1

OS 2 hipervisor hardware host OS

guest OS hipervisor

hardware hipervisor convidado

hipervisor nativo

Figura 15: Arquiteturas de mquinas virtuais de sistema. um hipervisor nativo pode acessar diretamente o hardware real. Tcnicas para atenuar este problema so discutidas na Seo 4.5.

25

c Carlos Maziero

: Tcnicas de virtualizao

Tcnicas de virtualizao

A construo de hipervisores implica na denio de algumas estratgias para a virtualizao. As estratgias mais utilizadas atualmente so a emulao completa do hardware, a virtualizao da interface de sistema, a traduo dinmica de cdigo e a para-virtualizao. Alm disso, algumas tcnicas complementares so usadas para melhorar o desempenho dos sistemas de mquinas virtuais. Essas tcnicas so discutidas nesta seo.

4.1

Emulao completa

Nesta abordagem, toda a interface do hardware virtualizada, incluindo todas as instrues do processador, a memria e os dispositivos perifricos. Isso permite oferecer ao sistema operacional convidado uma interface de hardware distinta daquela fornecida pela mquina real subjacente, caso seja necessrio. O custo de virtualizao pode ser muito elevado, pois cada instruo executada pelo sistema convidado tem de ser analisada e traduzida em uma ou mais instrues equivalentes no computador real. No entanto, esta abordagem permite executar sistemas operacionais em outras plataformas, distintas daquela para a qual foram projetados, sem nenhuma modicao. Exemplos tpicos de emulao completa abordagem so os sistemas de mquinas virtuais QEMU, que oferece um processador Intel Pentium II ao sistema convidado, o MS VirtualPC for MAC, que permite executar o sistema Windows sobre uma plataforma de hardware PowerPC, e o sistema Hercules, que emula um computador IBM System/390 sobre um PC convencional de plataforma Intel. Um caso especial de emulao completa consiste nos hipervisores embutidos no hardware (codesigned hypervisors). Um hipervisor embutido visto como parte integrante do hardware e implementa a interface de sistema (ISA) vista pelos sistemas operacionais e aplicaes daquela plataforma. Entretanto, o conjunto de instrues do processador real somente est acessvel ao hipervisor, que reside em uma rea de memria separada da memria principal e usa tcnicas de traduo dinmica (vide Seo 4.3) para tratar as instrues executadas pelos sistemas convidados. Um exemplo tpico desse tipo de sistema o processador Transmeta Crusoe/Eceon, que aceita instrues no padro Intel 32 bits e internamente as converte em um conjunto de instrues VLIW (Very Large Instruction Word). Como o hipervisor desse processador pode ser reprogramado para criar novas instrues ou modicar as instrues existentes, ele acabou sendo denominado Code Morphing Software (Figura 16).

4.2

Virtualizao da interface de sistema

Nesta abordagem, a interface ISA de usurio mantida, apenas as instrues privilegiadas e os dispositivos (discos, interfaces de rede, etc.) so virtualizados. Dessa forma, o sistema operacional convidado e as aplicaes convidadas vem o processador real. Como a quantidade de instrues a virtualizar reduzida, o desempenho do sistema convidado pode car prximo daquele obtido se ele estivesse executando diretamente sobre o hardware real. 26

c Carlos Maziero

: Traduo dinmica

Aplicaes

SO convidado rea de memria separada hipervisor tradutor hardware cache

ISA de alto nvel

ISA de baixo nvel

Figura 16: Hipervisor embutido no hardware. Cabe lembrar que a virtualizao da interface de sistema s pode ser aplicada diretamente caso o hardware subjacente atenda os requisitos de Goldberg e Popek (cf. Seo 2.1). No caso de processadores que no atendam esses requisitos, podem existir instrues sensveis que executem sem gerar interrupes, impedindo o hipervisor de intercept-las. Nesse caso, ser necessrio o emprego de tcnicas complementares, como a traduo dinmica das instrues sensveis. Obviamente, quanto maior o nmero de instrues sensveis, maior o volume de interpretao de cdigo a realizar, e menor o desempenho da mquina virtual. Os processadores mais recentes das famlias Intel e AMD discutidos na Seo 2.2 atendem os requisitos de Goldberg/Popek, e por isso suportam esta tcnica de virtualizao. Exemplos de sistemas que implementam esta tcnica incluem os ambientes VMware Workstation, VirtualBox, MS VirtualPC e KVM.

4.3

Traduo dinmica

Uma tcnica frequentemente utilizada na construo de mquinas virtuais a traduo dinmica (dynamic translation) ou recompilao dinmica (dynamic recompilation) de partes do cdigo binrio do sistemas convidado e suas aplicaes. Nesta tcnica, o hipervisor analisa, reorganiza e traduz as sequncias de instrues emitidas pelo sistema convidado em novas sequncias de instrues, medida em que a execuo do sistema convidado avana. A traduo binria dinmica pode ter vrios objetivos: (a) adaptar as instrues geradas pelo sistema convidado interface ISA do sistema real, caso no sejam idnticas; (b) detectar e tratar instrues sensveis no-privilegiadas (que no geram interrupes ao serem invocadas pelo sistema convidado); ou (c) analisar, reorganizar e otimizar as sequncias de instrues geradas pelo sistema convidado, de forma a melhorar o desempenho de sua execuo. Neste ltimo caso, os blocos de instrues muito frequentes podem ter suas tradues mantidas em cache, para melhorar ainda mais o desempenho. A traduo dinmica usada em vrios tipos de hipervisores. Uma aplicao tpica a construo da mquina virtual Java, onde recebe o nome de JIT Just-in-Time Bytecode Compiler. Outro uso corrente a construo de hipervisores para plataformas sem 27

c Carlos Maziero

: Paravirtualizao

suporte adequado virtualizao, como os processadores Intel/AMD 32 bits. Neste caso, o cdigo convidado a ser executado analisado em busca de instrues sensveis, que so substitudas por chamadas a rotinas apropriadas dentro do supervisor. No contexto de virtualizao, a traduo dinmica composta basicamente dos seguintes passos [Ung and Cifuentes, 2006]: 1. Desmontagem (disassembling): o uxo de bytes do cdigo convidado em execuo decomposto em blocos de instrues. Cada bloco normalmente composto de uma sequncia de instrues de tamanho varivel, terminando com uma instruo de controle de uxo de execuo; 2. Gerao de cdigo intermedirio: cada bloco de instrues tem sua semntica descrita atravs de uma representao independente de mquina; 3. Otimizao: a descrio em alto nvel do bloco de instrues analisada para aplicar eventuais otimizaes; como este processo realizado durante a execuo, normalmente somente otimizaes com baixo custo computacional so aplicveis; 4. Codicao: o bloco de instrues otimizado traduzido para instrues da mquina fsica, que podem ser diferentes das instrues do cdigo original; 5. Caching: blocos de instrues com execuo muito frequente tm sua traduo armazenada em cache, para evitar ter de traduzi-los e otimiz-los novamente; 6. Execuo: o bloco de instrues traduzido nalmente executado nativamente pelo processador da mquina real. Esse processo pode ser simplicado caso as instrues de mquina do cdigo convidado sejam as mesmas do processador real subjacente, o que torna desnecessrio traduzir os blocos de instrues em uma representao independente de mquina.

4.4

Paravirtualizao

A Seo 2.2 mostrou que as arquiteturas de alguns processadores, como o Intel x86, podem ser difceis de virtualizar, porque algumas instrues sensveis no podem ser interceptadas pelo hipervisor. Essas instrues sensveis devem ser ento detectadas e interpretadas pelo hipervisor, em tempo de carga do cdigo na memria. Alm das instrues sensveis em si, outros aspectos da interface software/hardware trazem diculdades ao desenvolvimento de mquinas virtuais de sistema ecientes. Uma dessas reas o mecanismo de entrega e tratamento de interrupes pelo processador, baseado na noo de um vetor de interrupes, que contm uma funo registrada para cada tipo de interrupo a tratar. Outra rea da interface software/hardware que pode trazer diculdades a gerncia de memria, pois o TLB (Translation Lookaside Buer, Seo ??) dos processadores x86 gerenciado diretamente pelo hardware, sem possibilidade de interveno direta do hipervisor no caso de uma falta de pgina. Em meados dos anos 2000, alguns pesquisadores investigaram a possibilidade de modicar a interface entre o hipervisor e os sistemas operacionais convidados, 28

c Carlos Maziero

: Paravirtualizao

oferecendo a estes um hardware virtual que similar, mas no idntico ao hardware real. Essa abordagem, denominada paravirtualizao, permite um melhor acoplamento entre os sistemas convidados e o hipervisor, o que leva a um desempenho signicativamente melhor das mquinas virtuais. As modicaes na interface de sistema do hardware virtual (system ISA) exigem uma adaptao dos sistemas operacionais convidados, para que estes possam executar sobre a plataforma virtual. Em particular, o hipervisor dene uma API denominada chamadas de hipervisor (hypercalls), que cada sistema convidado deve usar para acessar a interface de sistema do hardware virtual. Todavia, a interface de usurio (user ISA) do hardware preservada, permitindo que as aplicaes convidadas executem sem necessidade de modicaes. A Figura 17 ilustra esse conceito.

aplicaes
Sistema operacional standard

aplicaes
Sistema operacional modicado

hypercalls hipervisor hardware hipervisor hardware hardware

virtualizao clssica

paravirtualizao

Figura 17: Paravirtualizao. Os primeiros ambientes a adotar a paravirtualizao foram o Denali [Whitaker et al., 2002] e o Xen [Barham et al., 2003]. O Denali um ambiente experimental de paravirtualizao construdo na Universidade de Washington, que pode suportar dezenas de milhares de mquinas virtuais sobre um computador x86 convencional. O projeto Denali no se preocupa em suportar sistemas operacionais comerciais, sendo voltado execuo macia de minsculas mquinas virtuais para servios de rede. J o ambiente de mquinas virtuais Xen (vide Seo 6.3) permite executar sistemas operacionais convencionais como Linux e Windows, modicados para executar sobre um hipervisor. Embora exija que o sistema convidado seja adaptado ao hipervisor, o que diminui sua portabilidade, a paravirtualizao permite que o sistema convidado acesse alguns recursos do hardware diretamente, sem a intermediao ativa do hipervisor. Nesses casos, o acesso ao hardware apenas monitorado pelo hipervisor, que informa ao sistema convidado seus limites, como as reas de memria e de disco disponveis. O acesso aos demais dispositivos, como mouse e teclado, tambm direto: o hipervisor apenas gerencia os conitos, no caso de mltiplos sistemas convidados em execuo simultnea. Apesar de exigir modicaes nos sistemas operacionais convidados, a paravirtualizao tem tido sucesso, por conta do desempenho obtido nos sistemas virtualizados, alm de simplicar a interface de baixo nvel dos sistemas convidados.

29

c Carlos Maziero

: Aspectos de desempenho

4.5

Aspectos de desempenho

De acordo com os princpios de Goldberg e Popek, o hipervisor deve permitir que a mquina virtual execute diretamente sobre o hardware sempre que possvel, para no prejudicar o desempenho dos sistemas convidados. O hipervisor deve retomar o controle do processador somente quando a mquina virtual tentar executar operaes que possam afetar o correto funcionamento do sistema, o conjunto de operaes de outras mquinas virtuais ou do prprio hardware. O hipervisor deve ento simular com segurana a operao solicitada e devolver o controle mquina virtual. Na prtica, os hipervisores nativos e convidados raramente so usados em sua forma conceitual. 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 entrada/sada, as principais otimizaes utilizadas em sistemas de produo dizem respeito a essas operaes. Quatro formas de otimizao so usuais: Em hipervisores nativos (Figura 18): 1. O sistema convidado (guest system) acessa diretamente o hardware. Essa forma de acesso implementada por modicaes no ncleo do sistema convidado e no hipervisor. Essa otimizao implementada, por exemplo, no subsistema de gerncia de memria do ambiente Xen [Barham et al., 2003]. Em hipervisores convidados (Figura 18): 1. O sistema convidado (guest system) acessa diretamente o sistema nativo (host system). Essa otimizao implementada pelo hipervisor, oferecendo partes da API do sistema nativo ao sistema convidado. Um exemplo dessa otimizao a implementao do sistema de arquivos no VMware [VMware, 2000]: em vez de reconstruir integralmente o sistema de arquivos sobre um dispositivo virtual provido pelo hipervisor, o sistema convidado faz uso da implementao de sistema de arquivos existente no sistema nativo. 2. O sistema convidado (guest system) acessa diretamente o hardware. Essa otimizao implementada parcialmente pelo hipervisor e parcialmente pelo sistema nativo, pelo uso de um device driver especco. Um exemplo tpico dessa otimizao o acesso direto a dispositivos fsicos como leitor de CDs, hardware grco e interface de rede provida pelo sistema VMware aos sistemas operacionais convidados [VMware, 2000]. 3. O hipervisor acessa diretamente o hardware. Neste caso, um device driver especco instalado no sistema nativo, oferecendo ao hipervisor uma interface de baixo nvel para acesso ao hardware subjacente. Essa abordagem, ilustrada na Figura 19, usada pelo sistema VMware [VMware, 2000].

30

c Carlos Maziero

: Aplicaes da virtualizao

aplics

aplics

aplics

aplics

OS 1

OS 2
1

guest OS monitor

monitor hardware

host OS
2

hardware

monitor nativo (tipo I)

monitor convidado (tipo II)

Figura 18: Otimizaes em sistemas de mquinas virtuais.


VM nativa VM convidada VM hbrida

arquivos no SO convidado

arquivos no SO convidado

arquivos no SO convidado

SO convidado

SO convidado

SO convidado

disco virtual

disco virtual

disco virtual

Hipervisor

Hipervisor

Hipervisor

arquivo no SO hospedeiro driver SO hospedeiro SO hospedeiro

disco real

disco real

disco real

Figura 19: Desempenho de hipervisores nativos e convidados.

Aplicaes da virtualizao

Por permitir o acoplamento entre componentes de sistema com interfaces distintas, a virtualizao tem um grande nmero de aplicaes possveis. As principais delas sero brevemente discutidas nesta seo. O campo de aplicao mais conhecido da virtualizao a portabilidade de aplicaes binrias. Este uso de mquinas virtuais comeou na dcada de 1970, com o compilador UCSD Pascal. Esse compilador traduzia o cdigo-fonte Pascal em um cdigo binrio P-Code, para uma mquina virtual chamada P-Machine. A execuo do cdigo binrio cava ento a cargo de uma implementao da P-Machine sobre a mquina-alvo. 31

c Carlos Maziero

: Aplicaes da virtualizao

Para executar a aplicao em outra plataforma, bastava portar a implementao da P-Machine. Esse esquema foi posteriormente adotado pelas linguagens Java, C#, Perl e Python, entre outras, nas quais o cdigo fonte compilado em um cdigo binrio (bytecode) para uma mquina virtual especca. Assim, uma aplicao Java compilada em bytecode pode executar em qualquer plataforma onde uma implementao da mquina virtual Java (JVM - Java Virtual Machine) esteja disponvel. O compartilhamento de hardware outro uso frequente da virtualizao, por tornar possvel executar simultaneamente vrios sistemas operacionais, ou vrias instncias do mesmo sistema operacional, sobre a mesma plataforma de hardware. Uma rea de aplicao dessa possibilidade a chamada consolidao de servidores, que consiste em agrupar vrios servidores de rede (web, e-mail, proxy, banco de dados, etc.) sobre o mesmo computador: ao invs de instalar vrios computadores sicamente isolados para abrigar cada um dos servios, pode ser instalado um nico computador, com maior capacidade, para suportar vrias mquinas virtuais, cada uma abrigando um sistema operacional convidado e seu respectivo servio de rede. Essa abordagem visa aproveitar melhor o hardware existente: como a distribuio dos recursos entre os sistemas convidados pode ser ajustada dinamicamente, pode-se alocar mais recursos aos servios com maior demanda em um dado instante. Alm dessas aplicaes, diversas outras possibilidades de aplicao de ambientes de mquinas virtuais podem ser encontradas, entre as quais: Suporte a aplicaes legadas : pode-se preservar ambientes virtuais para a execuo de aplicaes legadas, sem a necessidade de manter computadores reservados para isso. Experimentao com redes e sistemas distribudos : possvel construir uma rede de mquinas virtuais, comunicando por protocolos de rede como o TCP/IP, sobre um nico computador hospedeiro. Isto torna possvel o desenvolvimento e implantao de servios de rede e de sistemas distribudos sem a necessidade de uma rede real, o que especialmente interessante dos pontos de vista didtico e experimental. Ensino : em disciplinas de rede e de sistema, um aluno deve ter a possibilidade de modicar as conguraes da mquina para poder realizar seus experimentos. Essa possibilidade uma verdadeira dor de cabea para os administradores de laboratrios de ensino. Todavia, um aluno pode lanar uma mquina virtual e ter controle completo sobre ela, mesmo no tendo acesso s conguraes da mquina real subjacente. Segurana : a propriedade de isolamento provida pelo hipervisor torna esta abordagem til para isolar domnios, usurios e/ou aplicaes no-conveis. As mquinas virtuais de sistema operacional (Seo 3.2) foram criadas justamente com o objetivo de isolar sub-sistemas particularmente crticos, como servidores Web, DNS e de e-mail. Pode-se tambm usar mquinas virtuais como plataforma de execuo de programas suspeitos, para inspecionar seu funcionamento e seus efeitos sobre o sistema operacional convidado. 32

c Carlos Maziero

: Aplicaes da virtualizao

Desenvolvimento de software de baixo nvel : o uso de mquinas virtuais para o desenvolvimento de software de baixo nvel, como partes do ncleo do sistema operacional, mdulos e protocolos de rede, tem vrios benefcios com o uso de mquinas virtuais. Por exemplo, o desenvolvimento e os testes podem ser feitos sobre a mesma plataforma. Outra vantagem visvel o menor tempo necessrio para instalar e lanar um ncleo em uma mquina virtual, quando comparado a uma mquina real. Por m, a execuo em uma mquina virtual pode ser melhor acompanhada e depurada que a execuo equivalente em uma mquina real. Tolerncia a faltas : muitos hipervisores oferecem suporte ao checkpointing, ou seja, possibilidade de salvar o estado interno de uma mquina virtual e de poder restaur-lo posteriormente. Com checkpoints peridicos, torna-se possvel retornar a execuo de uma mquina virtual a um estado salvo anteriormente, em caso de falhas ou incidentes de segurana. Recentemente, a virtualizao vem desempenhando um papel importante na gerncia de sistemas computacionais corporativos, graas facilidade de migrao de mquinas virtuais implementada pelos hipervisores modernos. Na migrao, uma mquina virtual e seu sistema convidado so transferidos de um hipervisor para outro, executando em equipamentos distintos, sem ter de reinici-los. A mquina virtual tem seu estado preservado e prossegue sua execuo no hipervisor de destino assim que a migrao concluda. De acordo com [Clark et al., 2005], as tcnicas mais frequentes para implementar a migrao de mquinas virtuais so: stop-and-copy: consiste em suspender a mquina virtual, transferir o contedo de sua memria para o hipervisor de destino e retomar a execuo em seguida. uma abordagem simples, mas implica em parar completamente os servios oferecidos pelo sistema convidado enquanto durar a migrao (que pode demorar algumas dezenas de segundos); demand-migration: a mquina virtual suspensa apenas durante a cpia das estruturas de memria do ncleo do sistema operacional convidado para o hipervisor de destino, o que dura alguns milissegundos. Em seguida, a execuo da mquina virtual retomada e o restante das pginas de memria da mquina virtual transferido sob demanda, atravs dos mecanismos de tratamento de faltas de pgina. Nesta abordagem a interrupo do servio tem durao mnima, mas a migrao completa pode demorar muito tempo. pre-copy: consiste basicamente em copiar para o hipervisor de destino todas as pginas de memria da mquina virtual enquanto esta executa; a seguir, a mquina virtual suspensa e as pginas modicadas depois da cpia inicial so novamente copiadas no destino; uma vez terminada a cpia dessas pginas, a mquina pode retomar sua execuo no destino. Esta abordagem, usada no hipervisor Xen [Barham et al., 2003], a que oferece o melhor compromisso entre o tempo de suspenso do servio e a durao total da migrao.

33

c Carlos Maziero

: Ambientes de mquinas virtuais

Ambientes de mquinas virtuais

Esta seo apresenta alguns exemplos de sistemas de mquinas virtuais de uso corrente. Sero apresentados os sistemas VMWare, FreeBSD Jails, Xen, User-Mode Linux, QEMU, Valgrind e JVM. Entre eles h mquinas virtuais de aplicao e de sistema, com virtualizao total ou paravirtualizao, alm de abordagens hibridas. Eles foram escolhidos por estarem entre os mais representativos de suas respectivas classes.

6.1

VMware

Atualmente, o VMware a mquina virtual para a plataforma x86 de uso mais difundido, provendo uma implementao completa da interface x86 ao sistema convidado. Embora essa interface seja extremamente genrica para o sistema convidado, acaba conduzindo a um hipervisor mais complexo. Como podem existir vrios sistemas operacionais em execuo sobre mesmo hardware, o hipervisor tem que emular certas instrues para representar corretamente um processador virtual em cada mquina virtual, fazendo uso intensivo dos mecanismos de traduo dinmica [VMware, 2000, Newman et al., 2005]. Atualmente, a VMware produz vrios produtos com hipervisores nativos e convidados: Hipervisor convidado: VMware Workstation: primeira verso comercial da mquina virtual, lanada em 1999, para ambientes desktop; VMware Fusion: verso experimental para o sistema operacional Mac OS com processadores Intel; VMware Player: verso gratuita do VMware Workstation, com as mesmas funcionalidades mas limitado a executar mquinas virtuais criadas previamente com verses comerciais; VMWare Server: conta com vrios recursos do VMware Workstation, mas voltado para pequenas e mdias empresas; Hipervisor nativo: VMware ESX Server: para servidores de grande porte, possui um ncleo proprietrio chamado vmkernel e Utiliza o Red Hat Linux para prover outros servios, tais como a gerncia de usurios. O VMware Workstation utiliza as estratgias de virtualizao total e traduo dinmica (Seo 4). O VMware ESX Server implementa ainda a paravirtualizao. Por razes de desempenho, o hipervisor do VMware utiliza uma abordagem hbrida (Seo 4.5) para implementar a interface do hipervisor com as mquinas virtuais [Sugerman et al., 2001]. O controle de exceo e o gerenciamento de memria so realizados por acesso direto ao hardware, mas o controle de entrada/sada usa o sistema hospedeiro. Para garantir que

34

c Carlos Maziero

: FreeBSD Jails

no ocorra nenhuma coliso de memria entre o sistema convidado e o real, o hipervisor VMware aloca uma parte da memria para uso exclusivo de cada sistema convidado. Para controlar o sistema convidado, o VMware Workstation intercepta todas as interrupes do sistema convidado. Sempre que uma exceo causada no convidado, examinada primeiro pelo hipervisor. As interrupes de entrada/sada so remetidas para o sistema hospedeiro, para que sejam processadas corretamente. As excees geradas pelas aplicaes no sistema convidado (como as chamadas de sistema, por exemplo) so remetidas para o sistema convidado.

6.2

FreeBSD Jails

O sistema operacional FreeBSD oferece um mecanismo de connamento de processos denominado Jails, criado para aumentar a segurana de servios de rede. Esse mecanismo consiste em criar domnios de execuo distintos (denominados jails ou celas), conforme descrito na Seo 3.2. Cada cela contm um subconjunto de processos e recursos (arquivos, conexes de rede) que pode ser gerenciado de forma autnoma, como se fosse um sistema separado [McKusick and Neville-Neil, 2005]. Cada domnio criado a partir de um diretrio previamente preparado no sistema de arquivos. Um processo que executa a chamada de sistema jail cria uma nova cela e colocado dentro dela, de onde no pode mais sair, nem seus lhos. Alm disso, os processos em um domnio no podem: Recongurar o ncleo (atravs da chamada sysctl, por exemplo); Carregar/retirar mdulos do ncleo; Mudar conguraes de rede (interfaces e rotas); Montar/desmontar sistemas de arquivos; Criar novos devices; Realizar modicaes de conguraes do ncleo em tempo de execuo; Acessar recursos que no pertenam ao seu prprio domnio. Essas restries se aplicam mesmo a processos que estejam executando com privilgios de administrador (root). Pode-se considerar que o sistema FreeBSD Jails virtualiza somente partes do sistema hospedeiro, como a rvore de diretrios (cada domnio tem sua prpria viso do sistema de arquivos), espaos de nomes (cada domnio mantm seus prprios identicadores de usurios, processos e recursos de IPC) e interfaces de rede (cada domnio tem sua interface virtual, com endereo de rede prprio). Os demais recursos (como as instrues de mquina e chamadas de sistema) so preservadas, ou melhor, podem ser usadas diretamente. Essa virtualizao parcial demanda um custo computacional muito baixo, mas exige que todos os sistemas convidados executem sobre o mesmo ncleo.

35

c Carlos Maziero

: Xen

6.3

Xen

O ambiente Xen um hipervisor nativo para a plataforma x86 que implementa a paravirtualizao. Ele permite executar sistemas operacionais como Linux e Windows especialmente modicados para executar sobre o hipervisor [Barham et al., 2003]. Verses mais recentes do sistema Xen utilizam o suporte de virtualizao disponvel nos processadores atuais, o que torna possvel a execuo de sistemas operacionais convidados sem modicaes, embora com um desempenho ligeiramente menor que no caso de sistemas paravirtualizados. De acordo com seus desenvolvedores, o custo e impacto das alteraes nos sistemas convidados so baixos e a diminuio do custo da virtualizao compensa essas alteraes: a degradao mdia de desempenho observada em sistemas virtualizados sobre a plataforma Xen no excede 5%). As principais modicaes impostas pelo ambiente Xen a um sistema operacional convidado so: O mecanismo de entrega de interrupes passa a usar um servio de eventos oferecido pelo hipervisor; o ncleo convidado deve registrar um vetor de tratadores de excees junto ao hipervisor; as operaes de entrada/sada de dispositivos so feitas atravs de uma interface simplicada, independente de dispositivo, que usa buers circulares de tipo produtor/consumidor; o ncleo convidado pode consultar diretamente as tabelas de segmentos e pginas da memria usada por ele e por suas aplicaes, mas as modicaes nas tabelas devem ser solicitadas ao hipervisor; o ncleo convidado deve executar em um nvel de privilgio inferior ao do hipervisor; o ncleo convidado deve implementar uma funo de tratamento das chamadas de sistema de suas aplicaes, para evitar que elas tenham de passar pelo hipervisor antes de chegar ao ncleo convidado. Como o hipervisor deve acessar os dispositivos de hardware, ele deve dispor dos drivers adequados. J os ncleos convidados no precisam de drivers especcos, pois eles acessam dispositivos virtuais atravs de uma interface simplicada. Para evitar o desenvolvimento de drivers especcos para o hipervisor, o ambiente Xen usa uma abordagem alternativa: a primeira mquina virtual (chamada VM0 ) pode acessar o hardware diretamente e prov os drivers necessrios ao hipervisor. As demais mquinas virtuais (VMi , i > 0) acessam o hardware virtual atravs do hipervisor, que usa os drivers da mquina VM0 conforme necessrio. Essa abordagem, apresentada na Figura 20, simplica muito a evoluo do hipervisor, por permitir utilizar os drivers desenvolvidos para o sistema Linux. O hipervisor Xen pode ser considerado uma tecnologia madura, sendo muito utilizado em sistemas de produo. O seu cdigo-fonte est liberado sob a licena GNU General Public Licence (GPL). Atualmente, o ambiente Xen suporta os sistemas Windows, Linux e NetBSD. Vrias distribuies Linux j possuem suporte nativo ao Xen. 36

c Carlos Maziero
VM 0 (gerncia) aplics de gerncia VM 1 aplicaes convidadas VM n

: User-Mode Linux

aplicaes convidadas

Linux convidado SO convidado driver nativo driver back-end driver front-end

... SO convidado driver front-end

Hipervisor Xen hardware x86

Figura 20: O hipervisor Xen.

6.4

User-Mode Linux

O User-Mode Linux foi proposto por Je Dike em 2000, como uma alternativa de uso de mquinas virtuais no ambiente Linux [Dike, 2000]. O ncleo do Linux foi portado de forma a poder executar sobre si mesmo, como um processo do prprio Linux. O resultado um user space separado e isolado na forma de uma mquina virtual, que utiliza dispositivos de hardware virtualizados a partir dos servios providos pelo sistema hospedeiro. Essa mquina virtual capaz de executar todos os servios e aplicaes disponveis para o sistema hospedeiro. Alm disso, o custo de processamento e de memria das mquinas virtuais User-Mode Linux geralmente menor que aquele imposto por outros hipervisores mais complexos. O User-Mode Linux hipervisor convidado, ou seja, executa na forma de um processo no sistema hospedeiro. Os processos em execuo na mquina virtual no tm acesso direto aos recursos do sistema hospedeiro. A maior diculdade na implementao do User-Mode Linux foi encontrar formas de virtualizar as funcionalidades do hardware para as chamadas de sistema do Linux, sobretudo a distino entre o modo privilegiado do ncleo e o modo no-privilegiado de usurio. Um cdigo somente pode estar em modo privilegiado se convel o suciente para ter pleno acesso ao hardware, como o prprio ncleo do sistema operacional. O User-Mode Linux deve possuir uma distino de privilgios equivalente para permitir que o seu ncleo tenha acesso s chamadas de sistema do sistema hospedeiro quando os seus prprios processos solicitarem este acesso, ao mesmo tempo em que impede os mesmos de acessar diretamente os recursos reais subjacentes. No hipervisor, a distino de privilgios foi implementada com o mecanismo de interceptao de chamadas do prprio Linux, fornecido pela chamada de sistema ptrace1 . Usando a chamada ptrace, o hipervisor recebe o controle de todas as chamadas de sistema de entrada/sada geradas pelas mquinas virtuais. Todos os sinais gerados ou
Chamada de sistema que permite observar e controlar a execuo de outros processos; o comando strace do Linux permite ter uma noo de como a chamada de sistema ptrace funciona.
1

37

c Carlos Maziero

: QEMU

enviados s mquinas virtuais tambm so interceptados. A chamada ptrace tambm utilizada para manipular o contexto do sistema convidado. O User-Mode Linux utiliza o sistema hospedeiro para operaes de entrada/sada. Como a mquina virtual um processo no sistema hospedeiro, a troca de contexto entre duas instncias de mquinas virtuais rpida, assim como a troca entre dois processos do sistema hospedeiro. Entretanto, modicaes no sistema convidado foram necessrias para a otimizao da troca de contexto. A virtualizao das chamadas de sistema implementada pelo uso de uma thread de rastreamento que intercepta e redireciona todas as chamadas de sistema para o ncleo virtual. Este identica a chamada de sistema e os seus argumentos, cancela a chamada e modica estas informaes no hospedeiro, onde o processo troca de contexto e executa a chamada na pilha do ncleo. O User-Mode Linux est disponvel na verso 2.6 do ncleo Linux, ou seja, ele foi assimilado rvore ocial de desenvolvimento do ncleo, portanto melhorias na sua arquitetura devero surgir no futuro, ampliando seu uso em diversos contextos de aplicao.

6.5

QEMU

O QEMU um hipervisor com virtualizao completa [Bellard, 2005]. No requer alteraes ou otimizaes no sistema hospedeiro, pois utiliza intensivamente a traduo dinmica (Seo 4) como tcnica para prover a virtualizao. um dos poucos hipervisores recursivos, ou seja, possvel chamar o QEMU a partir do prprio QEMU. O hipervisor QEMU oferece dois modos de operao: Emulao total do sistema: emula um sistema completo, incluindo processador (normalmente um Intel Pentium II) e vrios perifricos. Neste modo o emulador pode ser utilizado para executar diferentes sistemas operacionais; Emulao no modo de usurio: disponvel apenas para o sistema Linux. Neste modo o emulador pode executar processos Linux compilados em diferentes plataformas (por exemplo, um programa compilado para um processador x86 pode ser executado em um processador PowerPC e vice-versa). Durante a emulao de um sistema completo, o QEMU implementa uma MMU (Memory Management Unit) totalmente em software, para garantir o mximo de portabilidade. Quando em modo usurio, o QEMU simula uma MMU simplicada atravs da chamada de sistema mmap (que permite mapear um arquivo em uma regio da memria) do sistema hospedeiro. Por meio de um mdulo instalado no ncleo do sistema hospedeiro, denominado KQEMU ou QEMU Accelerator, o hipervisor QEMU consegue obter um desempenho similar ao de outras mquinas virtuais como VMWare e User-Mode Linux. Com este mdulo, o QEMU passa a executar as chamadas de sistema emitidas pelos processos convidados diretamente sobre o sistema hospedeiro, ao invs de interpretar cada uma. O KQEMU permite associar os dispositivos de entrada/sada e o endereamento de memria do sistema convidado aos do sistema hospedeiro. Processos em execuo sobre o ncleo convidado passam a executar diretamente no modo usurio do sistema 38

c Carlos Maziero

: Valgrind

hospedeiro. O modo ncleo do sistema convidado utilizado apenas para virtualizar o processador e os perifricos. O VirtualBox [VirtualBox, 2008] um ambiente de mquinas virtuais construdo sobre o hipervisor QEMU. Ele similar ao VMware Workstation em muitos aspectos. Atualmente, pode tirar proveito do suporte virtualizao disponvel nos processadores Intel e AMD. Originalmente desenvolvido pela empresa Innotek, o VirtualBox foi adquirido pela Sun Microsystems e liberado para uso pblico sob a licena GPLv2.

6.6

Valgrind

O Valgrind [Nethercote and Seward, 2007] uma ferramenta de depurao de uso da memria RAM e problemas correlatos. Ele permite investigar fugas de memria (memory leaks), acessos a endereos invlidos, padres de uso dos caches e outras operaes envolvendo o uso da memria RAM. O Valgrind foi desenvolvido para plataforma x86 Linux, mas existem verses experimentais para outras plataformas. Tecnicamente, o Valgrind um hipervisor de aplicao que virtualiza o processador atravs de tcnicas de traduo dinmica. Ao iniciar a anlise de um programa, o Valgrind traduz o cdigo executvel do mesmo para um formato interno independente de plataforma denominado IR (Intermediate Representation). Aps a converso, o cdigo em IR instrumentado, atravs da insero de instrues para registrar e vericar as operaes de alocao, acesso e liberao de memria. A seguir, o programa IR devidamente instrumentado traduzido no formato binrio a ser executado sobre o processador virtual. O cdigo nal pode ser at 50 vezes mais lento que o cdigo original, mas essa perda de desempenho normalmente no muito relevante durante a anlise ou depurao de um programa.

6.7

JVM

comum a implementao do suporte de execuo de uma linguagem de programao usando uma mquina virtual. Um bom exemplo dessa abordagem ocorre na linguagem Java. Tendo sido originalmente concebida para o desenvolvimento de pequenos aplicativos e programas de controle de aparelhos eletroeletrnicos, a linguagem Java mostrou-se ideal para ser usada na Internet. O que o torna to atraente o fato de programas escritos em Java poderem ser executados em praticamente qualquer plataforma. A virtualizao o fator responsvel pela independncia dos programas Java do hardware e dos sistemas operacionais: um programa escrito em Java, ao ser compilado, gera um cdigo binrio especco para uma mquina abstrata denominada mquina virtual Java (JVM - Java Virtual Machine). A linguagem de mquina executada pela mquina virtual Java denominada bytecode Java, e no corresponde a instrues de nenhum processador real. A mquina virtual deve ento interpretar todas as operaes do bytecode, utilizando as instrues da mquina real subjacente para execut-las. A vantagem mais signicativa da abordagem adotada por Java a portabilidade do cdigo executvel: para que uma aplicao Java possa executar sobre uma determinada plataforma, basta que a mquina virtual Java esteja disponvel ali (na forma de um suporte de execuo denominado JRE - Java Runtime Environment). Assim, a portabilidade 39

c Carlos Maziero

: REFERNCIAS

dos programas Java depende unicamente da portabilidade da prpria mquina virtual Java. O suporte de execuo Java pode estar associado a um navegador Web, o que permite que cdigo Java seja associado a pginas Web, na forma de pequenas aplicaes denominadas applets, que so trazidas junto com os demais componentes de pgina Web e executam localmente no navegador. A Figura 21 mostra os principais componentes da plataforma Java.
.java Cdigo fonte Java
compilao

aplicao em bytecode JVM


carga

aplicao em bytecode JVM

Windows x86

.jar
distribuio

carga distribuio

Solaris Sparc

bytecode

Figura 21: Mquina virtual Java. importante ressaltar que a adoo de uma mquina virtual como suporte de execuo no exclusividade de Java, nem foi inventada por seus criadores. As primeiras experincias de execuo de aplicaes sobre mquinas abstratas remontam aos anos 1970, com a linguagem UCSD Pascal. Hoje, muitas linguagens adotam estratgias similares, como Java, C#, Python, Perl, Lua e Ruby. Em C#, o cdigo-fonte compilado em um formato intermedirio denominado CIL (Common Intermediate Language), que executa sobre uma mquina virtual CLR (Common Language Runtime). CIL e CLR fazem parte da infraestrutura .NET da Microsoft.

Referncias
[Barham et al., 2003] Barham, P., Dragovic, B., Fraser, K., Hand, S., Harris, T., Ho, A., Neugebauer, R., Pratt, I., and Wareld, A. (2003). Xen and the art of virtualization. In ACM Symposium on Operating Systems Principles, pages 164177. [Bellard, 2005] Bellard, F. (2005). QEMU, a fast and portable dynamic translator. In USENIX Annual Technical Conference. [Clark et al., 2005] Clark, C., Fraser, K., Hand, S., Hansen, J., Jul, E., Limpach, C., Pratt, I., and Wareld, A. (2005). Live migration of virtual machines. In Symposium on Networked Systems Design and Implementation. [Corbat and Vyssotsky, 1965] Corbat, F. J. and Vyssotsky, V. A. (1965). Introduction and overview of the Multics system. In AFIPS Conference Proceedings, pages 185196. [Dike, 2000] Dike, J. (2000). A user-mode port of the Linux kernel. In Proceedings of the 4th Annual Linux Showcase & Conference.

40

c Carlos Maziero

: REFERNCIAS

[Duesterwald, 2005] Duesterwald, E. (2005). Design and engineering of a dynamic binary optimizer. Proceedings of the IEEE, 93(2):436448. [Goldberg, 1973] Goldberg, R. (1973). Architecture of virtual machines. In AFIPS National Computer Conference. [Goldberg and Mager, 1979] Goldberg, R. and Mager, P. (1979). Virtual machine technology: A bridge from large mainframes to networks of small computers. IEEE Proceedings Compcon Fall 79, pages 210213. [IBM, 2007] IBM (2007). Power Instruction Set Architecture Version 2.04. IBM Corporation. [McKusick and Neville-Neil, 2005] McKusick, M. and Neville-Neil, G. (2005). The Design and Implementation of the FreeBSD Operating System. Pearson Education. [Nanda and Chiueh, 2005] Nanda, S. and Chiueh, T. (2005). A survey on virtualization technologies. Technical report, University of New York at Stony Brook. [Nethercote and Seward, 2007] Nethercote, N. and Seward, J. (2007). Valgrind: A framework for heavyweight dynamic binary instrumentation. In ACM Conference on Programming Language Design and Implementation, San Diego - California - USA. [Newman et al., 2005] Newman, M., Wiberg, C.-M., and Braswell, B. (2005). Server Consolidation with VMware ESX Server. IBM RedBooks. http://www.redbooks.ibm.com. [Popek and Goldberg, 1974] Popek, G. and Goldberg, R. (1974). Formal requirements for virtualizable third generation architectures. Communications of the ACM, 17(7):412 421. [Price and Tucker, 2004] Price, D. and Tucker, A. (2004). Solaris zones: Operating system support for consolidating commercial workloads. In 18th USENIX conference on System administration, pages 241254. [Robin and Irvine, 2000] Robin, J. and Irvine, C. (2000). Analysis of the Intel Pentiums ability to support a secure virtual machine monitor. In 9th USENIX Security Symposium. [Rosenblum, 2004] Rosenblum, M. (2004). The reincarnation of virtual machines. Queue Focus - ACM Press, pages 3440. [Rosenblum and Garnkel, 2005] Rosenblum, M. and Garnkel, T. (2005). Virtual machine monitors: Current technology and future trends. IEEE Computer. [Seward and Nethercote, 2005] Seward, J. and Nethercote, N. (2005). Using Valgrind to detect undened value errors with bit-precision. In USENIX Annual Technical Conference. [Smith and Nair, 2004] Smith, J. and Nair, R. (2004). Virtual Machines: Architectures, Implementations and Applications. Morgan Kaufmann.

41

c Carlos Maziero

: REFERNCIAS

[Sugerman et al., 2001] Sugerman, J., Venkitachalam, G., and Lim, B. H. (2001). Virtualizing I/O devices on VMware workstations hosted virtual machine monitor. In USENIX Annual Technical Conference, pages 114. [Uhlig et al., 2005] Uhlig, R., Neiger, G., Rodgers, D., Santoni, A., Martins, F., Anderson, A., Bennett, S., Kgi, A., Leung, F., and Smith, L. (2005). Intel virtualization technology. IEEE Computer. [Ung and Cifuentes, 2006] Ung, D. and Cifuentes, C. (2006). Dynamic re-engineering of binary code with run-time feedbacks. Science of Computer Programming, 60(2):189204. [VirtualBox, 2008] VirtualBox, I. (2008). The VirtualBox http://www.virtualbox.org/wiki/VirtualBox_architecture. architecture.

[VMware, 2000] VMware (2000). VMware technical white paper. Technical report, VMware, Palo Alto, CA - USA. [Whitaker et al., 2002] Whitaker, A., Shaw, M., and Gribble, S. (2002). Denali: A scalable isolation kernel. In ACM SIGOPS European Workshop. [Yen, 2007] Yen, C.-H. (2007). Solaris operating system - hardware virtualization product architecture. Technical Report 820-3703-10, Sun Microsystems.

42

Anda mungkin juga menyukai