Comparação entre aplicações de virtualização de máquinas
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.
Índice |
Comparação de máquinas virtuais [editar]
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 | Sim1 |
| 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ão2 | 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]
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]
Dados foram fundidos e migrados para: http://pt.wikipedia.org/wiki/Virtualiza%C3%A7%C3%A3o
Ligações externas [editar]
Dados foram fundidos e migrados para: http://pt.wikipedia.org/wiki/Virtualiza%C3%A7%C3%A3o