Avançar para a área de conteúdo

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

A primeira vez que acessar o developerWorks, um perfil será criado para você. Informações do seu perfil (tais como: nome, país / região, e empresa) estarão disponíveis ao público, que poderá acompanhar qualquer conteúdo que você publicar. Seu perfil no developerWorks pode ser atualizado a qualquer momento.

Todas as informações enviadas são seguras.

  • Fechar [x]

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

Todas as informações enviadas são seguras.

  • Fechar [x]

Emulação de Plataforma com Bochs

M. Tim Jones, Independent author, .
author photo - M. Tim Jones
M. Tim Jones é arquiteto de firmware integrado e autor de Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming (atualmente em sua segunda edição), AI Application Programming (em sua segunda edição) e BSD Sockets Programming from a Multilanguage Perspective. Seu conhecimento em engenharia varia do desenvolvimento de kernels para naves espaciais geossincrônicas até a arquitetura de sistemas embarcados e o desenvolvimento de protocolos de rede. Tim é arquiteto senior da Emulex Corp. em Longmont, Colorado.

Resumo:  O Bochs, como o QEMU, é um emulador portátil que fornece um ambiente de virtualização para a execução de um sistema operacional usando uma plataforma emulada no contexto de outro sistema operacional. O Bochs não é um hypervisor — é um emulador compatível com PC, útil para software legado. Aprenda sobre a emulação de plataforma usando o Bochs e a sua abordagem à emulação de hardware.

Data:  20/Jul/2011
Nível:  Intermediário Também disponível em :   Inglês
Atividade:  2339 visualizações
Comentários:  


Entre em contato com o Tim

Tim é um dos nossos autores mais populares e prolíficos. Navegue por todos os artigos do Tim no developerWorks. Confira o perfil dele e entre em contato com ele e com outros autores e leitores no My developerWorks.

O Bochs é um emulador de PC x86 e um depurador licenciado sob o GNU Public License (GPL) menor. A plataforma fornece a emulação de uma plataforma de PC inteira, incluindo um processador ou mais e vários periféricos de PC, como discos rígidos, monitor, unidades de CD-ROM e outros periféricos comuns. É possível usar o Bochs para executar sistemas operacionais voltados para plataformas de PC. Também é um aplicativo ideal para o desenvolvimento de sistemas operacionais (porque é possível isolar travamentos do sistema operacional em desenvolvimento dentro do guest, além dos recursos de depuração que o Bochs fornece). O Bochs faz isso por meio da emulação, mas o desempenho fica prejudicado.

Vamos usar um desvio rápido e entender a diferença entre a emulação e os métodos de virtualização mais comuns disponíveis atualmente.

Origem do Bochs

Embora o Bochs tenha começado como um produto comercial (desenvolvido por Kevin Lawton), ele foi adquirido no início de 2000 pela Mandrakesoft (atualmente conhecida como Mandriva) e agora é lançado sob o GPL menor.

Emulação de plataforma

O Bochs é um emulador de plataforma, ou seja, na verdade ele não é virtualização no sentido moderno, e sim uma simulação. Na virtualização, o hypervisor e as máquinas virtuais (VMs) são executados no hardware "limpo" (no qual o hypervisor cria o ambiente para compartilhar o hardware entre as VMs, normalmente por meio de instruções de hardware). Esse processo é comumente conhecido como execução direta, porque as instruções são executadas diretamente pelo processador do host. Esse tipo de virtualização usa o suporte dos processadores atuais (como a Intel Virtualization Technology para x86 [VT-x] ou a virtualização AMD [AMD-V]). A emulação normalmente fornece uma camada entre a VM, o hardware subjacente e o sistema operacional para criar a ilusão do ambiente de plataforma desejado, como mostra a Figura 1.


Figura 1. Virtualização x emulação

A emulação, normalmente, também interpreta as instruções da VM guest (semelhante à virtualização, na qual a arquitetura de conjunto de instruções dos guests deve ser igual à do host). Isso gera uma vantagem interessante para a emulação, na qual a plataforma da VM guest pode ser totalmente diferente da plataforma do host (por exemplo: pode-se executar um guest x86 em um IBM® PowerPC® de destino).

Outra vantagem interessante da emulação é o controle total do ambiente, o que facilita a pausa de toda a máquina para inspecionar o seu estado e também para introduzir qualquer tipo de falha na emulação para testar a árvore de erro de um sistema operacional. Essa funcionalidade prejudica o desempenho, mas é um benefício verdadeiro para esse tipo de ambiente. Além disso, o emulador realmente isola o guest do host. Dessa forma, os emuladores podem fornecer uma transparência total em relação ao ambiente.

Outras formas de emulação

A emulação é uma técnica bastante conhecida para imitar o comportamento de um sistema. A emulação é usada em várias áreas, como a emulação de um hardware que está sendo projetado ou desenvolvido ou até mesmo um hardware que não existe mais (para executar sistemas operacionais históricos). Outro uso bastante conhecido desse tipo de recurso é a emulação de console, usada para "ressuscitar" vídeo games cuja tecnologia de processador não exista mais.

Desempenho da emulação

Há casos em que se pode usar a emulação em arquiteturas de desempenho. Um dos exemplos é a tecnologia de metamorfose de código criada pela Transmeta. O processador da Transmeta tinha uma arquitetura superescalar do tipo very long instruction word (VLIW) que podia emular sequências de código de x86. O processador fazia isso por meio da emulação ou da compilação dinâmica de sequências de código (semelhante aos recursos do QEMU). A Transmeta abriu as portas em 1995 e encerrou suas atividades no final de 2007.

Outros exemplos envolvem a tecnologia Java, interpretada a partir dos bytecodes de Java para a arquitetura subjacente do host. A tecnologia Java implementa a compilação just-in-time (JIT) para contornar algumas ineficiências, semelhante à Transmeta e a várias outras soluções de emulação (inclusive o QEMU, outra solução de emulação de plataforma semelhante ao Bochs). No entanto, o Bochs também obtém uma emulação eficiente (até 100 milhões de instruções por segundo [MIPS] em um processador moderno) e é portátil. O Bochs foi totalmente desenvolvido na linguagem C++ para a execução de instruções interpretadas do x86 e emulação de plataforma.


Implementação do Bochs

Agora iremos explorar o funcionamento do Bochs para entender como ele obtém um desempenho útil em uma implementação C++ pura. Este artigo aborda dois aspectos da emulação: a CPU (emulação instruction set architecture [ISA]) e os dispositivos.

Emulação da CPU

O método de emulação do Bochs é exclusivo. Embora outras soluções ofereçam execução direta ou compilação JIT, o Bochs implementa a emulação pura da ISA da CPU (inclusive o suporte para a emulação de CPU de x86 e x86-64 com até oito CPUs em uma configuração simétrica de multiprocessamento). O Bochs fornece a emulação de uma CPU real, chegando a emular o fluxo de busca/decodificação/execução da CPU.

No estágio do fluxo, o Bochs executa verificações de permissão e em seguida busca o opcode. No estágio de decodificação, o Bochs decodifica a instrução do x86 que foi buscada em uma representação interna. Também mantém um cache de instrução para melhorar o desempenho armazenando as "micro-operações" do sistema x86 original (que podem ser buscadas mais tarde sem a sobrecarga da decodificação). Finalmente, no estágio de execução, o Bochs realiza várias operações relacionadas à execução da instrução específica (incluindo o cálculo de endereços efetivos para os operandos, realizando em seguida uma chamada indireta ao método específico de execução da instrução). Quando a instrução tiver sido executada, será possível atualizar os registros e sinalizadores afetados (conforme for conveniente). Neste ponto, o Bochs fornece uma otimização chamada atualização ociosa de sinalizadores para calcular os sinalizadores aritméticos somente quando são necessários (em vez de atualizar a cada etapa).

Fora do fluxo de busca/decodificação/execução, o Bochs também gerencia eventos externos, como interrupções de dispositivos e outros recursos necessários, como troca de bytes e outras verificações privilegiadas. Além da CPU genérica de x86, o Bochs implementa vários recursos de CPU, como o processador Intel Pentium com tecnologia MMX; Streaming Single Instruction, Multiple Data Extensions 2 (SSE2) e instruções 3DNow! da AMD .

O cache de instrução interno do Bochs fornece uma alternativa à compilação JIT tradicional. Embora a compilação JIT ofereça algumas vantagens para acelerar a execução, essa aceleração exige muita memória.

Emulação de dispositivos

O Bochs proporciona uma emulação da plataforma de PC, com a emulação do dispositivo baseada no tipo de dispositivo. Por exemplo: o teclado é um dispositivo físico compartilhado entre o host e o guest, mas o disco é compartilhado por meio de uma emulação, na qual o disco do guest é um arquivo no sistema de arquivos do disco do host.

O Bochs apresenta uma lista útil de hardwares emulados, uma placa Ethernet NE2000, placa de vídeo Cirrus Logic (PCI ou ISA), conjunto de chips Intel 440FX PCI, BIOS, hub de raiz USB, placa de som Sound Blaster e controladores de disco e disquete. Como a CPU, esses dispositivos também são emulados, e isso pode introduzir uma sobrecarga considerável no caminho. Por exemplo: quando um driver se comunica com o hardware, ele manipula registros para solicitar alguma operação desejada do dispositivo. Em uma plataforma emulada, os registros e a memória que representam o dispositivo são emulados. Quando o driver do sistema operacional do guest vasculha os registros do hardware e a memória, há um software subjacente para emular o dispositivo (veja a Figura 2). Além dessa interface emulada, a emulação de dispositivo deve, em seguida, executar a operação desejada, que implica uma emulação do dispositivo e, talvez, a comunicação com um dispositivo físico na plataforma do host (como a placa da interface de rede física [NIC] ou o disco físico).


Figura 2. Virtualização de dispositivos por meio da emulação


Usando o Bochs

O Bochs e seus utilitários são muito simples de usar para emular vários sistemas operacionais guest. Esse exemplo demonstra a emulação do sistema operacional Plan 9 from Bell Labs.

Instalando o Bochs

Primeiro, é necessário instalar o Bochs se ele ainda não estiver disponível no seu sistema. No meu sistema Ubuntu, eu uso o gerenciador de pacotes apt para instalar os pacotes necessários:

$ sudo apt-get install bochs
$ sudo apt-get install bochs-x

Esse comando instala o emulador de PC Bochs IA-32/64 e o emulador X-11 para o Bochs.

Prepare a instalação do Plan 9

Para emular o Plan 9 no Bochs, o seu ambiente virtualizado precisa de mais duas coisas: um CD-ROM contendo a imagem de instalação do Plan 9 e um disco rígido virtual (VHD) como o destino da instalação.

Primeiro, obtenha a imagem do Plan 9 no site do Bell Labs, conforme o indicado na linha de comando a seguir:

$ wget http://plan9.bell-labs.com/plan9/download/plan9.iso.bz2
$ bunzip2 plan9.iso.bz2

A imagem do plan9 é um arquivo no formato ISO que pode ser interpretado por meio do formato ISO 9660 (como emulação de uma unidade de CD-ROM, que você verá em breve).

A próxima etapa é criar o seu VHD. Lembre-se de que ele será um arquivo no sistema operacional do host. O Bochs fornece um utilitário especial para criar esse arquivo chamado bximage. O utilitário bximage é interativo e permite especificar várias opções de criação e gerenciamento de arquivos. A Listagem 1 fornece a sessão para criar o VHD. Depois de chamar bximage, você especifica que deseja criar uma imagem de disco rígido (em vez de uma imagem de disquete). O Bochs pode suportar vários tipos de imagem, mas para obter bom desempenho, solicite flat porque não haverá necessidades de crescimento dinâmico no tempo de execução. A instalação do sistema operacional Plan 9 requer bastante espaço — portanto, especifique um disco de 700 MB seguido pelo nome do arquivo de disco rígido (c.img).


Listagem 1. Criando a listagem do VHD para o Bochs usando bximage
	
$ bximage
========================================================================
                                bximage
                  Disk Image Creation Tool for Bochs
        $Id: bximage.c,v 1.34 2009/04/14 09:45:22 sshwarts Exp $
========================================================================

Do you want to create a floppy disk image or a hard disk image?
Please type hd or fd. [hd] 

What kind of image should I create?
Please type flat, sparse or growing. [flat] 

Enter the hard disk size in megabytes, between 1 and 129023
[10] 400

I will create a 'flat' hard disk image with
  cyl=1422
  heads=16
  sectors per track=63
  total sectors=1433376
  total size=699.89 megabytes

What should I name the image?
[c.img] 

Writing: [] Done.

I wrote 314302464 bytes to c.img.

The following line should appear in your bochsrc:
  ata0-master: type=disk, path="c.img", mode=flat, cylinders=1422, heads=16, spt=63
$ ls -la c.img
-rw-r--r-- 1 mtj mtj 733888512 2010-12-19 14:30 c.img
$ 

Instale o Plan 9

Com a imagem do CD-ROM e a imagem do disco rígido à mão, a próxima etapa é criar o arquivo de configuração do Bochs. Esse arquivo define como a emulação do Bochs deve ser realizada e especifica onde encontrar aspectos importantes do ambiente (arquivo ISO, imagem do disco rígido, etc.). O arquivo de configuração bochsrc é mostrado na Listagem 2. Esse arquivo define uma plataforma x86 com 128 MB de RAM, um mouse, monitor padrão Extended Graphics Array, um disco rígido (definido como ata0-master, criado por meio do bximage), um CD-ROM (definido como ata1-master, apontado para o arquivo plan9.iso, que foi transferido por download), um arquivo de log para a saída do Bochs (bochsout.txt) e o dispositivo de inicialização padrão do CD-ROM.


Listagem 2. O arquivo de configuração bochsrc
	
# bochsrc
#
megs: 128
#
mouse: enabled=1
#
ata0-master: type=disk, path="c.img", mode=flat, cylinders=609, heads=16, spt=63
ata1-master: type=cdrom, path=./plan9.iso, status=inserted
#
log: bochsout.txt
#
boot: cdrom

O Bochs fornece uma grande quantidade de opções que podem ser expressas por meio do arquivo de configuração. Essas opções podem definir quais dispositivos estão disponíveis na plataforma ou os tipos de opções que são expressos (por exemplo: configurações individuais de CPU, como SSE ou a extensão Advanced Encryption Standard).

Para iniciar a instalação do Plan 9 para o Bochs, inicie o Bochs com a opção -q (para ignorar o menu inicial) no mesmo diretório da imagem de disco, da imagem ISO e do arquivo bochsrc:

$ bochs -q

Esse comando cria uma nova janela que representa a plataforma emulada, mostrada na Figura 3. Como vemos na figura, o emulador reconheceu o disco e o CD-ROM e fez o boot do CD para começar a instalação do sistema operacional Plan 9.


Figura 3. Iniciando o Bochs (instalação do sistema operacional Plan 9)

Conforme a instalação continua, o Plan 9 passa por uma série de etapas de configuração e instalação. A Figura 4 mostra a configuração do disco (para particionamento).


Figura 4. Instalando o sistema operacional Plan 9

O sistema de janelas usado nesses exemplos é o rio do Plan 9. O rio era um sistema de janelas interessante com alguns atributos exclusivos. Por exemplo: as janelas no rio eram o seu próprio namespace e exportavam uma interface de sistema de arquivos para os aplicativos que executam no sistema operacional (permitindo que tal sistema execute dentro de uma janela do rio). O rio veio antes do X Window System para UNIX e forneceu uma base técnica para os sistemas de janelas que o seguiram.

Quando a longa instalação termina, a máquina de emulação é interrompida e o arquivo bochsrc é atualizado para fazer o boot a partir do disco (boot: disk). Observe que, na parte superior da janela (veja a Figura 5), está o controle do Bochs que mostra os elementos ativos (CD-ROM, mouse) e um conjunto de controles à direita (para reconfigurar, suspender ou desligar a máquina emulada).


Figura 5. O Plan 9 executando no contexto do Bochs


Executando outros sistemas operacionais

Uma das vantagens da emulação é a capacidade de executar facilmente outros sistemas operacionais de forma rápida e simples. Você encontra uma lista de imagens de disco no site do Bochs (consulte Recursos) para experimentar outros sistemas operacionais, como o FreeDOS, DLX Linux (imagem do Linux de 10 MB), OpenBSD, GNU/Hurd e KNOPPIX. A Figura 6 mostra o kernel FreeDOS fazendo o kernel no Bochs.


Figura 6. Executando o FreeDOS no Bochs

O FreeDOS é um projeto que foi criado depois que a Microsoft anunciou que não produziria mais o MS-DOS. É usado por várias empresas sob o GPL.


Outras plataformas de emulação

Embora o Bochs seja um aplicativo útil para emulação de plataformas, outras soluções fornecem recursos semelhantes. O QEMU é um dos mais conhecidos, já que fornece não só emulação de plataforma compatível com PC, mas também várias outras arquiteturas de processador (ARM, PowerPC e outras).

São outras plataformas especializadas: o SPIM (um simulador de processador MIPS) e o projeto de simulação da história dos computadores, que fornece emulação de plataforma de vários sistemas importantes em termos históricos (Altair, VAX 11/780, IBM 1130 e outros).


Indo além

O Bochs é um ótimo emulador de plataforma para executar sistemas operacionais antigos, mas também é uma plataforma ideal para desenvolver sistemas operacionais. O Bochs fornece uma emulação de plataforma eficiente e recursos de depuração que não são fornecidos facilmente no hardware bruto (inclusive um depurador gráfico com todos os recursos). Nada supera o hardware real para o teste de software, mas o Bochs pode fornecer um ambiente de desenvolvimento útil que é móvel entre vários hosts x86 e não x86.


Recursos

Aprender

Obter produtos e tecnologias

  • Avalie os produtos IBM da maneira que for melhor para você: faça download da versão de teste de um produto, avalie um produto online, use-o em um ambiente de nuvem ou passe algumas horas na SOA Sandbox aprendendo a implementar Arquitetura Orientada a Serviços de modo eficiente.

Discutir

  • Participe da comunidade My developerWorks. Entre em contato com outros usuários do developerWorks e explore os blogs, fóruns, grupos e wikis voltados para desenvolvedores.

Sobre o autor

author photo - M. Tim Jones

M. Tim Jones é arquiteto de firmware integrado e autor de Artificial Intelligence: A Systems Approach, GNU/Linux Application Programming (atualmente em sua segunda edição), AI Application Programming (em sua segunda edição) e BSD Sockets Programming from a Multilanguage Perspective. Seu conhecimento em engenharia varia do desenvolvimento de kernels para naves espaciais geossincrônicas até a arquitetura de sistemas embarcados e o desenvolvimento de protocolos de rede. Tim é arquiteto senior da Emulex Corp. em Longmont, Colorado.

Ajuda para Relatar Abuso

Relatar abuso

Obrigado. Esta entrada foi sinalizada para atenção do moderador.


Ajuda para Relatar Abuso

Relatar abuso

Falha no envio do Relatório de abuso. Tente novamente mais tarde.


developerWorks: Registre-se


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Na primeira vez que você efetua sign in no developerWorks, um perfil é criado para você. Informações selecionadas do seu perfil developerWorks são exibidas ao público, mas você pode editá-las a qualquer momento. Seu primeiro nome, sobrenome (a menos que escolha ocultá-los), e seu nome de exibição acompanharão o conteúdo que postar.

Selecione seu nome de exibição

Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

(Deve possuir de 3 a 31 caracteres.)


Ao clicar em Enviar, você concorda com os termos de uso do developerWorks.

 


Classificar este artigo

Comentários

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Linux
ArticleID=657568
ArticleTitle=Emulação de Plataforma com Bochs
publish-date=07202011
author1-email=mtj@mtjones.com
author1-email-cc=