Virtualização para sistemas embarcados

Instruções e razões dos hypervisores de dispositivos pequenos

As notícias técnicas da atualidade estão cheias de histórias de virtualização de servidor e desktop, mas há outra tecnologia de virtualização que está crescendo rapidamente: a virtualização embarcada. O domínio embarcado tem várias aplicações úteis para a virtualização, como aparelhos móveis de telefone, kernels de segurança e sistemas operacionais concorrentes embarcados. Este artigo explora a área da virtualização embarcada e explica por que ela está vindo para um sistema embarcado perto de você.

M. Tim Jones, Platform Architect, Intel

author photo - M. Tim JonesM. 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 geossíncronas até a arquitetura de sistemas embarcados e o desenvolvimento de protocolos de rede. Tim trabalha na Intel e reside em Longmont, Colorado.



24/Jun/2011

Os mercados e oportunidades que a virtualização cria estão em expansão e as variações da virtualização também estão se expandindo. Embora a virtualização tenha começado nos mainframes, ela foi fundamental nos servidores. Detectou-se que a utilização do servidor era tão reduzida para um grande número de cargas de trabalho que a virtualização permitia que várias instâncias de servidor fossem hospedadas em um único servidor, reduzindo o custo, o gerenciamento e a questão dos imóveis. Em seguida, a virtualização entrou no espaço do consumidor na forma de hypervisores do tipo 2 (ou hospedados), permitindo a operação concorrente de vários sistemas operacionais em um único desktop. Os desktops virtualizados foram a inovação que veio a seguir, permitindo que o servidor hospedasse vários clientes em uma rede usando terminais mínimos de cliente (thin clients). Entretanto, atualmente, a virtualização está entrando em um novo espaço de alto volume: dispositivos embarcados.

Na verdade, essa evolução não é surpreendente, já que os benefícios que a virtualização oferece continuam crescendo. A virtualização começou e evoluiu em mainframes grandes da IBM, mas a tendência seguiu a evolução da computação em servidores, desktops e agora em dispositivos embarcados. Na década de 1990, a virtualização cresceu fora da área dos mainframes e, com o suporte de microprocessador nativo para virtualização, passou por um renascimento (veja a Figura 1).

Figura 1. Breve linha do tempo dos hypervisores de tipo 1
Breve linha do tempo dos hypervisores de tipo 1

Este artigo explora algumas dessas aplicações para demonstrar como a virtualização está expandindo o seu alcance e encontrando novas aplicações. Ele explora também as áreas em que o software livre está mostrando o caminho.

O que é a virtualização embarcada?

Virtualização embarcada designa um hypervisor de tipo 1 implementado em um sistema embarcado. Entretanto, essa afirmação é um pouco contraditória. Uma das definições de sistema embarcado é um sistema de computador projetado para realizar um número pequeno de funções dedicadas. Entretanto, a inclusão de um hypervisor em um sistema embarcado aumenta a flexibilidade e acrescenta recursos de alto nível, transformando um dispositivo embarcado em um novo tipo de sistema.

Abstrações chave para microkernels

Em 1995, Jochen Liedtke definiu três abstrações chave que devem ser fornecidas em um microkernel: espaços de endereço (para isolamento), encadeamentos (para concorrência) e comunicação interprocessos (para a comunicação entre os encadeamentos de espaços de endereço separados).

Um hypervisor é um tipo especial de sistema operacional que (no caso dos hypervisores tipo 1) executa diretamente no hardware vazio. O hypervisor cria uma abstração da plataforma de hardware subjacente para que possa ser usada por uma ou mais virtual machines (VM), sem que as VMs saibam que compartilham a plataforma. Nesse contexto, a VM é simplesmente um contêiner para o sistema operacional e seus aplicativos. Uma vantagem interessante desse ambiente é que a VM é isolada de outras VMs que executam no hypervisor, o que permite o uso de vários sistemas operacionais ou o suporte para sistemas operacionais semelhantes com configurações diferentes. Esse isolamento também fornece certas vantagens, que explicarei em breve.

Além disso, os hypervisores embarcados são um híbrido de plataforma de virtualização e microkernel (veja a Figura 2). Esse status permite que suportem VMs (sistema operacional + aplicativos) e aplicativos individuais.

Figura 2. Sistemas operacionais em metal vazio e hypervisores
Sistemas operacionais em metal vazio e hypervisores

Embora os dispositivos embarcados normalmente estejam associados a graves restrições de recursos, os dispositivos de hoje vão de processadores eficientes com funcionalidade de nível de servidor (como o suporte de hardware para virtualização) a sistemas com consumo de energia otimizado, com menos capacidade de computação e recursos. Essa variedade cria um ambiente para os hypervisores embarcados mais exigente que o ambiente dos mainframes e servidores.


Atributos da virtualização embarcada

Ao contrário dos hypervisores tradicionais, os hypervisores embarcados implementam um tipo diferente de abstração, com limitações diferentes das de outras plataformas. Esta seção explora algumas limitações e recursos fornecidos no espaço embarcado.

Eficiência

Todos os hypervisores buscam eficiência, mas os hypervisores embarcados precisam lidar com limitações adicionais fora dos ambientes tradicionais de virtualização. Fora do compartilhamento de processador, a memória tende a ser um dos principais limitadores do desempenho em ambientes embarcados. Por isso, os hypervisores embarcados devem ser pequenos e extremamente eficientes quanto ao uso da memória.

Segurança

Ser pequeno tem as suas vantagens. Quanto menor o tamanho do código de um aplicativo, mais fácil é validar e provar que ele não tem erros. De fato, alguns fornecedores de hypervisores embarcados verificaram formalmente os seus hypervisores e garantiram que não têm erros. Quanto menor o hypervisor, mais segura e confiável a plataforma pode ser. Isso acontece porque o hypervisor normalmente é a única parte do sistema que executa em um modo privilegiado, que atua como trusted computing base (TCB) e leva a uma plataforma mais segura.

Comunicação

Os hypervisores embarcados são desenvolvidos para compartilhar uma plataforma de hardware com vários guests e aplicativos, mas, frequentemente, também estendem os métodos de comunicação para permitir a interação. Esse canal de comunicação é eficiente e seguro, permitindo a coexistência de aplicativos privilegiados e não privilegiados.

Isolamento

A capacidade de isolar os guests e aplicativos uns dos outros está relacionada à segurança. Além de fornecer contenção para segurança e confiabilidade, fornece benefícios em termos de agregação de licenças. O uso do mecanismo de comunicação do hypervisor embarcado permite a coexistência de softwares patenteados e softwares livres em ambientes isolados. À medida que os dispositivos embarcados se tornam mais abertos, o desejo de misturar software patenteado com software de terceiros e software livre é um requisito chave.

Recursos em tempo real

Finalmente, o hypervisor deve suportar a programação com recursos em tempo real. No caso dos aparelhos de telefone, o hypervisor pode compartilhar a plataforma com recursos centrais de comunicação e aplicativos de terceiros. A programação com características de tempo real permite que as funções críticas coexistam com aplicativos que operam com base no melhor esforço.


Exemplos de hypervisores embarcados

Diversos hypervisores surgiram para trabalhar com aplicativos na área embarcada — não só da comunidade de software livre, mas também das versões patenteadas. A VMware apresentou a Mobile Virtualization Platform para trabalhar com um modelo de uso cada vez mais comum: smartphones para uso comercial e pessoal. Empregando um hypervisor embarcado em um smartphone, um único dispositivo pode servir para o uso corporativo seguro e para uso pessoal, ao colocar os dois modelos de uso em contêineres separados (VMs).

Vamos analisar algumas soluções (inclusive o software livre) que tratam desse e de outros usos.

PikeOS

O PikeOS é uma arquitetura interessante, visto que implementa primeiramente o que se chama de kernel de separação. Como um hypervisor, um kernel de separação (ou particionamento) isola de forma segura os ambientes para guests de nível superior. O PikeOS é usado no segmento de mercado da aviônica para aplicações críticas para a segurança. A introdução de um hypervisor embarcado permite o uso de aplicativos legados mais antigos (dentro de uma VM) e de aplicativos mais novos na mesma plataforma (veja a Figura 3).

Figura 3. Virtualização embarcada do PikeOS
Virtualização embarcada do PikeOS

No espaço do kernel, o PikeOS implementa um conjunto de pacotes de arquitetura e suporte à plataforma existentes para o ambiente de hardware específico (x86, PowerPC, SuperH e outros) além do microkernel de separação, que fornece a plataforma de virtualização. O PikeOS suporta não somente os sistemas operacionais guest (com os aplicativos associados), mas também interfaces de programação de aplicativos mais simples e run time environments (RTEs) para uma área de problema específica (como a interface ativa do PikeOS ou Java em tempo real™).

A camada de software de sistema do PikeOS aloca recursos (em termos de tempo e espaço) para os guests. O sistema se baseia na paravirtualização, para que os sistemas operacionais guest estejam cientes de que são virtualizados.

Embora seja usado frequentemente no segmento de mercado de aviônica, é possível que o PikeOS logo esteja no seu veículo por meio da Automotive Open System Architecture (AUTOSAR). Saiba mais em Recursos.

OKL4

Em 2006, a Open Kernel Labs (OK Labs) foi fundada para o desenvolvimento de microkernels e hypervisores para sistemas embarcados. O trabalho da Lab em cada uma dessas áreas deu origem ao termo microvisor, que representa um microkernel com recursos de virtualização. A OK Labs é, de longe, a empresa mais bem-sucedida na área de virtualização embarcada, implementando o seu microvisor de software livre OKL4 em mais de um bilhão de dispositivos, como o telefone celular Evoke QA4, o primeiro telefone a suportar a virtualização e a operação de dois sistemas operacionais concorrentes (inclusive o Linux®).

O OKL4 se baseia na família L4 de microkernels (desenvolvida por Jochen Liedtke). O L4 foi inspirado no Mach (o microkernel da Universidade Carnegie Mellon desenvolvido como substituto drop-in para o kernel UNIX® tradicional). Originalmente, o L4 foi projetado inteiramente em x86 Assembly para realizar uma solução ótima. Em seguida, foi desenvolvido em C++ e existe dentro de uma família de microkernels (do L4Ka::Hazelnut, projetado para a Arquitetura® Intel, 32 bits e arquiteturas baseadas em ARM, até o L4Ka::Pistachio, projetado para ser independente de plataformas e lançado sob a licença Berkeley Software Distribution).

O microvisor OKL4 implementa partições conhecidas como células seguras para particionar VMs na arquitetura. O microvisor OKL4 ocupa o espaço privilegiado do kernel e todas as VMs, aplicativos nativos e drivers são transferidos para partições isoladas separadas com um mecanismo eficiente de interprocess communication (IPC), para permitir que as células se comuniquem e cooperem (veja a Figura 4). Além do IPC tradicional entre as VMs, já que os drivers de dispositivo de hardware são transferidos para fora do microvisor (como acontece normalmente com os microkernels), o IPC é importante: é uma entrada/saída comum de caminhos. Além disso, já que os aplicativos individuais e drivers podem ser integrados à plataforma sem um sistema operacional, o modelo de componente do OKL4 é leve.

Figura 4. O microvisor OKL4
O microvisor OKL4

O microvisor implementa o microkernel central com recursos de virtualização, que incluem gerenciamento de recursos e programação com recursos em tempo real e baixo custo de desempenho. O OKL4 implementa paravirtualização, o que significa que os sistemas operacionais devem ser instrumentados para executar no microvisor. A OK Labs fornecer suporte para vários sistemas operacionais paravirtualizados, como o OK:Linux, OK:Android e OK:Symbian.

NOVA

Em 2010, surgiu o microhypervisor NOVA. Como as arquiteturas de microkernel anteriores, o NOVA implementa um microkernel leve com camadas separadas para o código não privilegiado. O NOVA usa os recursos de virtualização das plataformas de hardware mais recentes para melhorar o desempenho de um sistema baseado em componentes.

O NOVA consiste em um microhypervisor e um ambiente no nível do usuário para as principais funções do sistema. Esses elementos principais (mostrados na Figura 5) consistem em um gerenciador de partição raiz (que gerencia as alocações de recursos, fora do microkernel propriamente dito), drivers para os dispositivos de hardware subjacente e VM monitors (VMMs) para cada guest, para gerenciar o mapeamento de memória (entre o guest e o host), bem como emulação de instruções sensíveis. O NOVA implementa virtualização total, portanto, certas instruções (como o CPUID x86) devem ser emuladas adequadamente para cada guest com base em sua configuração. O VMM também implementa a emulação dos dispositivos disponibilizados a cada guest. Como o NOVA implementa virtualização completa, há suporte para os sistemas operacionais do guest sem modificação.

Figura 5. arquitetura do microhypervisor NOVA
arquitetura do microhypervisor NOVA

O microhypervisor propriamente dito implementa o scheduler, gerenciamento de memória, interface de comunicação para transmissão de mensagens e outros recursos centrais, como domínios de proteção (para o isolamento espacial) e contextos de programação (para o isolamento temporal).

O NOVA é considerado um microkernel de terceira geração. Seus antecessores englobam o Mach e o Chorus (microkernels da primeira geração), bem como o L4 (microkernel da segunda geração).

Codezero

O Codezero Embedded Hypervisor é um novo microkernel que segue a arquitetura do L4, mas que foi escrito do zero para se beneficiar das pesquisas mais recentes sobre design de microkernel. Ele segue os princípios fundamentais dos microkernels porque implementa espaços de endereço, gerenciamento de encadeamentos e IPC somente no microkernel privilegiado, juntamente com os recursos de virtualização.

Como mostra a Figura 6, o Codezero implementa uma camada de abstração típica sobre a plataforma de hardware. A camada de abstração implementa encadeamento, IPC, gerenciamento de espaços de endereço, mapeamento de espaços de endereço, segurança, gerenciamento de recuperação em caso de erros e energia. O scheduler do Codezero inclui preempção do kernel para encadeamentos do guest e do microkernel (além de fatias de tempo para preempção).

A virtualização no Codezero é implementada por meio de contêineres. Cada contêiner é um ambiente de execução isolado com o seu próprio conjunto de recursos (memória, encadeamentos, etc.). A partição também atua em conjunto com as políticas de segurança e gerenciamento de recursos do Codezero, que definem os recursos de cada contêiner.

Figura 6. Arquitetura do hypervisor embarcado do Codezero
Arquitetura do hypervisor embarcado do Codezero

O Codezero se beneficia de avanços recentes nos designs de microkernel. Para obter eficiência, o Codezero implementa três formas de IPC (todas baseadas no modelo rendezvous). O Codezero implementa IPC curto (entre os encadeamentos de espaço do usuário), IPC completo (256 bytes) e IPC estendido (2048 bytes). O IPC de buffers grandes é realizado por meio de mapeamentos de páginas compartilhadas. O Codezero também foi projetado especificamente para sistemas embarcados e suporta processadores multicore e designs baseados em ARM.


Aplicativos de hypervisores embarcados

O número de aplicações de hypervisores embarcados está aumentando. Atualmente, uma das aplicações mais comuns acontece em telefones celulares, nos quais aplicativos confiáveis e seguros (gerenciamento da banda de base) compartilham a plataforma com aplicativos não confiáveis e de terceiros. O isolamento que o hypervisor fornece é um atributo chave para seu sucesso nessa área. O mercado de tablets, em rápido crescimento, também encontrará usos para essa tecnologia à medida que os sistemas operacionais e aplicativos evoluem.

Entretanto, o número de aplicações está aumentando fora dos telefones e tablets. Aplicações profundamente embarcadas nas áreas automotiva e aviônica também estão encontrando uso para os aspectos de isolamento e confiabilidade dos hypervisores. Os sistemas com foco na segurança, capacidade de sobrevivência ou alta configurabilidade estão encontrando aplicações para a tecnologia.


O futuro da virtualização embarcada

Como você viu nos diversos exemplos de hypervisor embarcado, os microkernels tendem a ser um padrão de design comum em sua arquitetura e implementação. A abordagem tende a ser leve e eficiente, o que fornece um benefício para o desempenho, além de menos código e melhor segurança e confiabilidade (tendo como base o TCB). Os hypervisores continuam sendo um assunto interessante de pesquisa e seguem encontrando novas aplicações. Deve ser muito interessante observar que rumo a virtualização e os sistemas embarcados tomarão no futuro.

Recursos

Aprender

Obter produtos e tecnologias

  • O PikeOS é um exemplo interessante de hypervisor embarcado (e kernel de separação). O PikeOS é usado amplamente em sistemas de aviônica e está entrando em sistemas automotivos (por meio da AUTOSAR).
  • A OK Labs desenvolveu o OKL4 Microvisor completamente como um hypervisor embarcado. O OKL4 se baseia no microkernel L4 e é amplamente usado no segmento de mercado de telefonia celular. Pode-se fazer o download do microvisor OKL4 e do microkernel na página wiki da OK Labs .
  • O microhypervisor NOVA foi desenvolvido na Universidade Técnica de Dresden e representa um microkernel da terceira geração. Saiba mais sobre o NOVA na sua página de pesquisa ou neste texto recente: "NOVA: A Microhypervisor-Based Secure Virtualization Architecture." Também em Dresden, você encontra informações sobre a família L4 de microkernels.
  • Obtenha o código de origem do Codezero, outro hypervisor embarcado em metal vazio (e sistema operacional) voltado para processadores embarcados.
  • Avalie produtos IBM da maneira que for melhor para você: faça download da versão de teste de um produto, avalie um produto on-line, use-o em um ambiente de nuvem ou passe algumas horas na SOA Sandbox aprendendo a implementar a Arquitetura Orientada a Serviços de modo eficiente.

Discutir

  • Participe da comunidade do My developerWorks . Entre em contato com outros usuários do developerWorks, enquanto explora os blogs, fóruns, grupos e wikis orientados ao desenvolvedor.

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

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

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

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

Elija su nombre para mostrar



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.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

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

 


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


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Linux
ArticleID=658021
ArticleTitle=Virtualização para sistemas embarcados
publish-date=06242011