Virtualização, basicamente, é a técnica de separar aplicação e sistema operacional dos componentes físicos. Por exemplo, uma máquina virtual possui aplicação e sistema operacional como um servidor físico, mas estes não estão vinculados ao software e pode ser disponibilizado onde for mais conveniente. Uma aplicação deve ser executada em um sistema operacional em um determinado software. Com virtualização de aplicação ou apresentação, estas aplicações podem rodar em um servidor ou ambiente centralizado e ser deportada para outros sistemas operacionais e hardwares.[2][3]
Soluções de virtualização[editar | editar código-fonte]
Abaixo, as formas mais comuns de virtualização:
virtualização de servidor: técnica de execução de um ou mais servidores virtuais sobre
um servidor físico; permite maior densidade de utilização de recursos (hardware, espaço e etc.), enquanto permite que isolamento e segurança sejam mantidos; virtualização de aplicação: a virtualização de aplicação permite executar aplicações em um ambiente virtualizado no desktop do usuário, isolando a aplicação do sistema operacional; isso é possível através do encapsulamento da aplicação no ambiente virtual — quando a solução completa de virtualização de aplicações é implantada, é possível distribuir aplicações de um servidor central; virtualização de desktop: consiste na execução de múltiplos sistemas operacionais em uma única estação de trabalho, permitindo que uma aplicação de linha de negócio seja executada em um sistema operacional não compatível; virtualização de apresentação: a virtualização de apresentação permite executar e manter o armazenamento das aplicações em servidores centralizados, enquanto provê uma interface familiar para o usuário em sua estação; virtualização de dados: é uma abordagem para unificar dados de várias fontes em uma única camada para que aplicativos, ferramentas de relatórios e usuários finais possam acessar os dados sem precisar de detalhes sobre a origem original, a localização e as estruturas de dados;[4] virtualização de perfil: com a virtualização de perfil, os usuários podem ter os documentos e perfil separados de uma máquina específica, o que permite a fácil movimentação do usuário para novas estações em caso de roubo ou quebra de equipamento. A virtualização de perfil também permite ter uma experiência de desktop única quando utilizando outras tecnologias de virtualização, como VDI (virtual desktop infrastructure). Um dos componentes críticos para a implantação de um projeto de virtualização, independente da tecnologia utilizada, são as ferramentas de gerenciamento. As ferramentas que gerenciam o ambiente virtual devem gerenciar tanto o ambiente físico como o virtual, assim como sistema operacional e aplicações. 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 é motivada 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 abstração que num caso típico de máquina física. Alguns programas de virtualização, como a popular JVM, gerem os endereços de memória numa determinada maneira, que requerem um seguro gerenciamento automático 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 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 técnicas 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 reutilizá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 benefício da técnica de compartilha de biblioteca.