Virtualização

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
Disambig grey.svg Nota: Para outros significados, veja Virtualização (desambiguação).

Em computação, virtualização é a simulação de uma plataforma de hardware, sistema operacional, dispositivo de armazenamento ou recursos de rede.

Cada vez mais empresas estão buscando formas de reduzir os custos e complexidade com o ambiente de TI. A virtualização se tornou um componente chave para o desenvolvimento de uma estratégia eficiente na busca destes objetivos. Dentre os desafios enfrentados nos datacenters podemos destacar:

  • datacenters atingiram a capacidade máxima;
  • servidores subutilizados;
  • gerenciamento e Segurança complexa dos servidores;
  • problemas de compatibilidade de aplicações.

O que é virtualização?[editar | editar código-fonte]

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.[1] [2]

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 workstation e 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 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.

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 é 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]

Em soma aos métodos de virtualização portável descritas acima, as máquinas virtuais são usualmente utilizadas como modelo de execução para linguagens individuais de script. Esta tabela descreve as implementações de máquinas virtuais, ambos da categoria de máquinas virtuais portáveis e máquinas virtuais de linguagens de script.

Máquina virtual Linguagens Comentários Interpretador Compilação Just in Time Linguagem implementação Linhas de códio fonte
Adobe Flash Player (aka Tamarin) ActionScript, SWF (formato ficheiro) interactive web authoring tool. bytecode is named "ActionScript Byte Code (.abc)" Sim Sim C++ 135k (initially released)
BEAM Erlang, Reia, Lisp Flavoured Erlang, Elixir There exists a native-code compiler, HiPE. Sim Não C 247k
Clipper p-code Clipper, Harbour plankton, HVM Sim Não C
Dis (Inferno) Limbo Dis Virtual Machine Specification Sim Sim C 15k + 2850 per JIT arch + 500 per host OS
DotGNU/Portable.NET Linguagens de programação CLI incluindo: C# Clone of Common Language Runtime Não Sim C, C#
Forth Forth Funções estão simplificadas, normalmente contêm assemblador, compilador, interpretadores de nível-textos e nível-binarios, algumas vezes com editor, debugador e sistema operativo.sometimes editor, debugger and OS. Compilation speeds are >20 SKLOC/S and behave much like JIT. Sim Não Forth, Forth Assembler 2.8K to 5.6K; advanced, professional implementations are smaller.
Icon Icon
JVM Java, Jython, Groovy, JRuby, C, C++, Clojure, Scala e e outros Reference implementation by Sun; OpenJDK: code under GPL; IcedTea: code and tools under GPL Sim Sim JDK, OpenJDK & IcedTea com JIT regular: Java, C, ASM; IcedTea com o "Zero" JIT: Java, C JVM contêm cerca de 6500k linhas; TCK é 80k de testes e têm cerca de 1000k linhas
LLVM C, C++, Objective-C, Ada, and Fortran MSIL, C and C++ output are supported. ActionScript Byte Code output is supported by Adobe Alchemy. bytecode is named "LLVM Bytecode (.bc)". assembly is named "LLVM Assembly Language (*.ll)". Sim Sim C++ 811k[3]
MMIX MMIXAL
Mono CLI languages including: C#, VB.NET, IronPython, IronRuby, e outros clone do Common Language Runtime. Sim Sim C#, C 2332k
Oz Oz, Alice
NekoVM currently Neko and haXe Sim x86 only C 46k
O-code machine BCPL
UCSD p-System Pascal UCSD Pascal, muito utilizado no final da década de 1970 incluindo o Apple II
Parrot Perl (6 & 5), PASM, PBC, BASIC, bc, C, ECMAScript, Lisp, m4, Tcl, WMLScript, XML, e outros Sim Sim C, Perl 111k C, 240k Perl
Perl virtual machine Perl op-code tree walker Sim Não C, Perl 175k C, 9k Perl
CPython Python

Referências

  1. «Virtualization in education» (PDF) (em ingles). IBM. Outubro 2007. Consultado em 6 de Julho de 2010. 
  2. «Microsoft, VMware, Citrix Battle for Hypervisor Cloud | Virtualization» (em ingles). ITBusinessEdge.com. Consultado em 2010-12-10. 
  3. A infraestrutura compilador LLVM, Ohloh, 2011 Nov 30

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

!

Bibliografia

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


Portal A Wikipédia possui o portal:


Ícone de esboço Este artigo sobre Informática é um esboço. Você pode ajudar a Wikipédia expandindo-o.