Comparação entre aplicações de virtualização de máquinas

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Merge-arrow 2.svg
Este artigo ou secção deverá ser fundido com Virtualização.
Editor, considere adicionar mês e ano na marcação. Isso pode ser feito automaticamente, com {{Fusão com|....|{{subst:DATA}}}}.

Se discorda, discuta sobre esta fusão aqui.
Translation Latin Alphabet.svg
Este artigo ou secção está a ser traduzido (desde setembro de 2012). Ajude e colabore com a tradução.
Ambox important.svg
Foram assinalados vários aspectos a serem melhorados nesta página ou secção:
  • Texto necessita de revisão, devido a inconsistências e/ou dados de confiabilidade duvidosa.

Este artigo lista aplicações de software de máquina virtual que tipicamente são utilizados para deixar aplicações de bytecode serem portáveis e executarem em muitas plataformas de diferentes arquiteturas e sistemas operativos de computadores. A aplicação é usualmente executada em computadores utilizando um interpretador ou compilador just-in-time. Estes consistem na maioria de implementações de virtualização, cada cobrindo um requisito de funcionalidade vestígio.

Comparação de máquinas virtuais[editar | editar código-fonte]

Os tipos de virtualização são:

Para-virtualização- usa kernel especial (XEN kernel). O guest kernel roda no host junto com as bibliotecas e dispositivos. É útil para load-balancing e segurança.

Assistido por hardware- utiliza as capacidades do hardware para conseguir virtualização total, principalmente do processador. isola completamente o sistema operativo de qualquer operação com hardware.

Virtualização total- proporciona um ambiente de completa simulação do host, o ual exige que todos os detalhes da interacção hardware/software sejam recriados, tais como operações de input/output, interrupto e acessos à memória.

Esta tabela resume os elementos que conferem eficiência a cada tipo de software de virtualização, e não enumerar as capacidades presentes na sua implementação.

Máquina Virtual Modelo máquina Gestão de memória Segurança software Interpretador JIT Pre-compilação Bibliotecas compartilhadas Modelo Common Language Object Tipagem dinâmica
CLR stack automatic or manual Sim Não Sim Sim Sim Sim Sim
Dis (Inferno) register automatic Sim Sim Sim Sim Sim Não Não
DotGNU Portable.NET stack automatic or manual Não Não Sim Sim Sim Sim Não
JVM stack automatic Sim Sim Sim Sim Sim Sim Sim[1]
JikesRVM stack automatic Não Não Sim Não ? Não Não
LLVM register manual Não Sim Sim Sim Sim Sim Não
Mono (projeto) stack automatic or manual Sim Sim Sim Sim Sim Sim Sim
Parrot register automatic Não Sim Não[2] Sim Sim Sim Sim
Dalvik register automatic Sim Sim Sim ? ? Não Não
libJIT stack manual Não Não Sim Não Não ? Não
Squeak stack automatic Não Sim Sim source to bytecode Sim Não Sim

As instruções de virtualização são processadas em variáveis locais utilizando um modelo principal modelo de computação, usualmente cada stack machine, register machine, ou random access machine são chamadas de máquina memória. A utilização destas três técnicas é motivado por técnicas de otimização de máquinas virtuais e máquinas físicas, como a facilidade utilização do interpretador, compilação e verificação para a segurança.

O gerenciamento de memória nestes sistemas portáveis de virtualização inicia-se num nível superior de abstracção que num caso típico de máquina física. Alguns programas de virtualização como o popular JVM, gerem os endereços de memória numa determinada maneira, que requerem gerenciamento automática segura da memória permitindo à maquina virtual manter registos de referências indicativas, e não permitir que o código fonte possa construir novas referências indicativas na memória. Outros tipos de software de virtualização como os LLVM, são mais parecidos como uma computador tradicional, permitindo o uso e manipulação de indicadores de memória. A CIL oferece uma solução híbrida entre as soluções apresentadas, oferecendo os dois tipos de controle da memória (como o JVM, que permite gestão de memória automática), e também um modo 'inseguro' que permite manipulação de indicadores num modo que pode violar os constrangimento dos tipo e suas permissões.

Segurança do programa refere-se habilidade do software portável da virtualização executar código enquanto subscreve determinado conjunto de capacidades. Por exemplo, uma máquina virtual pode somente deixar aceder a um conjunto de instruções ou dados. Os mesmos controles sobre indicadores que tornam a gestão automática da memória possível e segurança do programa, asseguram que um fragmento de código só têm acesso a um determinado conjunto de elementos da memória e não pode subverter a própria máquina virtual. Outros mecanismos de segurança são aplicados no seguimento de técnicas de verificação do código, verificação de pilhas, e outros processos.

Um Interpretador permite aos programas compostos de instruções de virtualização serem preparados e executados imediatamente sem sofrerem um atraso potencialmente caro de compilação em código de máquina. Qualquer sistema de virtualização que pode ser executado pode ser interpretado, por isso a designação da coluna aqui, refere-se a a questão da implementação inclui provisões para uma interpretação eficiente. (para usos comuns).

Compilador just-in-time ou JIT, refere-se ao método de compilação do código nativo diferindo para o último momento possível, de preferência mesmo antes ou durante a execução do programa. A dificuldade do JIT têm haver mais com a implementação que arquitetura da máquina de virtualização, mesmo assim, novas teorias e implementações começaram a ter em conta a eficiência. A tecnicas mais simples de JIT, simplesmente executam a compilação para um fragmento-código de maneira similar a um compilador tradicional. As técnicas mais utilizadas, têm em conta o tipo de código especializado aos parâmetros que só são conhecidos na altura da execução. (ver en:Adaptive optimization).

Pre-compilação refere-se a uma técnica mais clássica de utilização de um compilador offline para gerar o código nativo que não se altera durante a execução. Pelas razões que uma compilação agressiva e otimização podem demorar tempo, um programa pré-compilado pode iniciar a execução mais rápido que outro que dependo somente da técnica JIT. As implementações JVM reduziram esta diferença do custo de carregamento do programa, inicialmente utilizando interpretação, até que alguns fragmentos de código nativo possam ser gerados através do JIT.

Biblioteca compartilhada é uma técnica para reutilizar os segmentos de código nativo entre vários programas que estão em execução. Nos sistemas operativos modernos, isso geralmente significa que a memória virtual partilha páginas de memória que contem bibliotecas partilhadas de diferentes processos que estão protegidos de outros processos através da proteção de memória. É interessante que técnicas agressivas de JIT como a optimização adaptativa, usualmente produz fragmentos de código não ré-utilizável ou compartilhar com outros processos ou mesmo novas execução do programa, requerendo um compromisso entre eficiência do código pré-compilado e código partilhável e as vantagens do código especializado e adaptativo. Por exemplo, algumas provisões no desenho e estrutura do CIL estão presentes para permitir a partilha eficiente das bibliotecas, possivelmente com o custo de código JIT mais especializado. A implementação JVM no Mac OS X utiliza o Java Shared Archive (apple docs) para dar algum beneficio da técnica de compartilha de biblioteca.

Lista de implementações de máquinas virtuais[editar | editar código-fonte]

Dados foram fundidos e migrados para: http://pt.wikipedia.org/wiki/Virtualiza%C3%A7%C3%A3o

Referências

Dados foram fundidos e migrados para: http://pt.wikipedia.org/wiki/Virtualiza%C3%A7%C3%A3o

Bibliografia

Dados foram fundidos e migrados para: http://pt.wikipedia.org/wiki/Virtualiza%C3%A7%C3%A3o

Ver também[editar | editar código-fonte]

Dados foram fundidos e migrados para: http://pt.wikipedia.org/wiki/Virtualiza%C3%A7%C3%A3o

Ligações externas[editar | editar código-fonte]

Dados foram fundidos e migrados para: http://pt.wikipedia.org/wiki/Virtualiza%C3%A7%C3%A3o