máquina virtual -Virtual machine

Na computação, uma máquina virtual ( VM ) é a virtualização / emulação de um sistema de computador . As máquinas virtuais são baseadas em arquiteturas de computador e fornecem funcionalidade de um computador físico. Suas implementações podem envolver hardware especializado, software ou uma combinação. As máquinas virtuais diferem e são organizadas por sua função, mostrada aqui:

Alguns emuladores de máquinas virtuais, como QEMU e emuladores de console de videogame , são projetados para também emular (ou "virtualmente imitar") diferentes arquiteturas de sistema, permitindo assim a execução de aplicativos de software e sistemas operacionais escritos para outra CPU ou arquitetura. A virtualização no nível do sistema operacional permite que os recursos de um computador sejam particionados por meio do kernel . Os termos não são universalmente intercambiáveis.

Definições

Máquinas virtuais do sistema

Uma "máquina virtual" foi originalmente definida por Popek e Goldberg como "uma duplicata eficiente e isolada de uma máquina de computador real". O uso atual inclui máquinas virtuais que não têm correspondência direta com nenhum hardware real. O hardware físico do "mundo real" que executa a VM geralmente é chamado de 'host', e a máquina virtual emulada nessa máquina é geralmente chamada de 'convidado'. Um host pode emular vários convidados, cada um dos quais pode emular diferentes sistemas operacionais e plataformas de hardware.

O desejo de executar vários sistemas operacionais foi o motivo inicial para as máquinas virtuais, de modo a permitir o compartilhamento de tempo entre vários sistemas operacionais de tarefa única. Em alguns aspectos, uma máquina virtual de sistema pode ser considerada uma generalização do conceito de memória virtual que a precedeu historicamente. O CP/CMS da IBM , os primeiros sistemas a permitir a virtualização total , implementou o compartilhamento de tempo fornecendo a cada usuário um sistema operacional de usuário único, o Conversational Monitor System (CMS). Ao contrário da memória virtual, uma máquina virtual do sistema autorizou o usuário a escrever instruções privilegiadas em seu código. Essa abordagem tinha algumas vantagens, como adicionar dispositivos de entrada/saída não permitidos pelo sistema padrão.

À medida que a tecnologia evolui a memória virtual para fins de virtualização, novos sistemas de superalocação de memória podem ser aplicados para gerenciar o compartilhamento de memória entre várias máquinas virtuais em um sistema operacional de computador. Pode ser possível compartilhar páginas de memória que possuem conteúdo idêntico entre várias máquinas virtuais que rodam na mesma máquina física, o que pode resultar em mapeá-las para a mesma página física por uma técnica denominada fusão de mesma página do kernel (KSM). Isso é especialmente útil para páginas somente leitura, como as que contêm segmentos de código, que é o caso de várias máquinas virtuais executando o mesmo software ou similar, bibliotecas de software, servidores Web, componentes de middleware, etc. Os sistemas operacionais convidados não precisam para ser compatível com o hardware do host, tornando possível executar diferentes sistemas operacionais no mesmo computador (por exemplo, Windows , Linux ou versões anteriores de um sistema operacional) para oferecer suporte a softwares futuros.

O uso de máquinas virtuais para dar suporte a sistemas operacionais convidados separados é popular em relação a sistemas embarcados . Um uso típico seria executar um sistema operacional em tempo real simultaneamente com um sistema operacional complexo preferido, como Linux ou Windows. Outro uso seria para software novo e não comprovado ainda em estágio de desenvolvimento, portanto, executado dentro de uma caixa de areia . As máquinas virtuais têm outras vantagens para o desenvolvimento do sistema operacional e podem incluir acesso de depuração aprimorado e reinicializações mais rápidas.

Várias VMs que executam seu próprio sistema operacional convidado são frequentemente usadas para consolidação de servidor.

Processar máquinas virtuais

Uma VM de processo, às vezes chamada de máquina virtual de aplicativo ou Managed Runtime Environment (MRE), é executada como um aplicativo normal dentro de um sistema operacional host e oferece suporte a um único processo. Ele é criado quando esse processo é iniciado e destruído quando ele sai. Seu objetivo é fornecer um ambiente de programação independente de plataforma que abstrai detalhes do hardware ou sistema operacional subjacente e permite que um programa seja executado da mesma maneira em qualquer plataforma.

Uma VM de processo fornece uma abstração de alto nível – a de uma linguagem de programação de alto nível (em comparação com a abstração ISA de baixo nível da VM do sistema). As VMs de processo são implementadas usando um interpretador ; desempenho comparável a linguagens de programação compiladas pode ser alcançado pelo uso de compilação just-in-time .

Este tipo de VM tornou-se popular com a linguagem de programação Java , que é implementada usando a máquina virtual Java . Outros exemplos incluem a máquina virtual Parrot e o .NET Framework , que é executado em uma VM chamada Common Language Runtime . Todos eles podem servir como uma camada de abstração para qualquer linguagem de computador.

Um caso especial de VMs de processo são sistemas que abstraem os mecanismos de comunicação de um cluster de computadores (potencialmente heterogêneo) . Essa VM não consiste em um único processo, mas em um processo por máquina física no cluster. Eles são projetados para facilitar a tarefa de programar aplicativos simultâneos, permitindo que o programador se concentre nos algoritmos, e não nos mecanismos de comunicação fornecidos pela interconexão e pelo sistema operacional. Eles não escondem o fato de que a comunicação ocorre e, como tal, não tentam apresentar o cluster como uma única máquina.

Ao contrário de outras VMs de processo, esses sistemas não fornecem uma linguagem de programação específica, mas são incorporados a uma linguagem existente; normalmente, esse sistema fornece ligações para várias linguagens (por exemplo, C e Fortran ). Exemplos são Parallel Virtual Machine (PVM) e Message Passing Interface (MPI). Eles não são estritamente máquinas virtuais porque os aplicativos executados no topo ainda têm acesso a todos os serviços do sistema operacional e, portanto, não estão confinados ao modelo do sistema.

História

As máquinas virtuais de sistema e as máquinas virtuais de processo datam da década de 1960 e continuam sendo áreas de desenvolvimento ativo.

As máquinas virtuais do sistema cresceram a partir do compartilhamento de tempo , conforme implementado notavelmente no Sistema de Compartilhamento de Tempo Compatível (CTSS). O compartilhamento de tempo permitia que vários usuários usassem um computador simultaneamente : cada programa parecia ter acesso total à máquina, mas apenas um programa era executado por vez, com o sistema alternando entre os programas em fatias de tempo, salvando e restaurando o estado a cada vez. Isso evoluiu para máquinas virtuais, principalmente por meio dos sistemas de pesquisa da IBM: o M44/44X , que usava virtualização parcial , e o CP-40 e SIMMON , que usavam virtualização completa e foram os primeiros exemplos de hipervisores . A primeira arquitetura de máquina virtual amplamente disponível foi a CP-67 /CMS (consulte a História do CP/CMS para obter detalhes). Uma distinção importante era entre o uso de várias máquinas virtuais em um sistema host para compartilhamento de tempo, como no M44/44X e CP-40, e o uso de uma máquina virtual em um sistema host para prototipagem, como no SIMMON. Os emuladores , com emulação de hardware de sistemas anteriores para compatibilidade, datam do IBM System/360 em 1963, enquanto a emulação de software (então chamada de "simulação") é anterior a ele.

As máquinas virtuais de processo surgiram originalmente como plataformas abstratas para uma linguagem intermediária usada como representação intermediária de um programa por um compilador ; os primeiros exemplos datam de cerca de 1966. Um exemplo do início de 1966 foi a máquina O-code , uma máquina virtual que executa O-code (código objeto) emitido pelo front-end do compilador BCPL . Essa abstração permitiu que o compilador fosse facilmente portado para uma nova arquitetura implementando um novo back-end que pegou o código O existente e o compilou em código de máquina para a máquina física subjacente. A linguagem de Euler usou um design semelhante, com a linguagem intermediária denominada P (portátil). Isso foi popularizado por volta de 1970 por Pascal , notavelmente no sistema Pascal-P (1973) e no compilador Pascal-S (1975), no qual foi denominado p-code e a máquina resultante como uma máquina de p-code . Isso tem sido influente e as máquinas virtuais, nesse sentido, geralmente são chamadas de máquinas de p-code. Além de ser uma linguagem intermediária, o p-code Pascal também era executado diretamente por um interpretador implementando a máquina virtual, notadamente em UCSD Pascal (1978); isso influenciou os intérpretes posteriores, principalmente a máquina virtual Java (JVM). Outro exemplo inicial foi SNOBOL4 (1967), que foi escrito na SNOBOL Implementation Language (SIL), uma linguagem de montagem para uma máquina virtual, que foi então direcionada para máquinas físicas transpilando para seu montador nativo por meio de um macro assembler . Desde então, as macros caíram em desuso, portanto, essa abordagem tem sido menos influente. As máquinas virtuais de processo foram uma abordagem popular para a implementação dos primeiros softwares de microcomputadores, incluindo Tiny BASIC e jogos de aventura, desde implementações pontuais como o Pyramid 2000 até um mecanismo de propósito geral como o z-machine da Infocom , que Graham Nelson argumenta ser "possivelmente a máquina virtual mais portátil já criada".

Avanços significativos ocorreram na implementação de Smalltalk -80, particularmente a implementação de Deutsch/Schiffmann, que impulsionou a compilação just-in-time (JIT) como uma abordagem de implementação que usa máquina virtual de processo. Mais tarde notáveis ​​Smalltalk VMs foram VisualWorks , Squeak Virtual Machine e Strongtalk . Uma linguagem relacionada que produziu muita inovação em máquinas virtuais foi a linguagem de programação Self , que foi pioneira na otimização adaptativa e na coleta de lixo geracional . Essas técnicas tiveram sucesso comercial em 1999 na máquina virtual HotSpot Java. Outras inovações incluem ter uma máquina virtual baseada em registro, para melhor corresponder ao hardware subjacente, em vez de uma máquina virtual baseada em pilha, que é uma correspondência mais próxima da linguagem de programação; em 1995, o pioneiro foi a máquina virtual Dis para a linguagem Limbo . O OpenJ9 é uma alternativa para o HotSpot JVM no OpenJDK e é um projeto Eclipse de código aberto que reivindica melhor inicialização e menor consumo de recursos em comparação com o HotSpot.

virtualização completa

Diagrama lógico de virtualização completa

Na virtualização completa, a máquina virtual simula hardware suficiente para permitir que um sistema operacional "convidado" não modificado (projetado para o mesmo conjunto de instruções ) seja executado isoladamente. Essa abordagem foi pioneira em 1966 com o IBM CP-40 e CP-67 , predecessores da família VM .

Exemplos fora do campo de mainframe incluem Parallels Workstation , Parallels Desktop for Mac , VirtualBox , Virtual Iron , Oracle VM , Virtual PC , Virtual Server , Hyper-V , VMware Fusion , VMware Workstation , VMware Server (descontinuado, anteriormente chamado GSX Server), VMware Tecnologia ESXi , QEMU , Adeos , Mac-on-Linux, Win4BSD, Win4Lin Pro e Egenera vBlade.

Virtualização assistida por hardware

Na virtualização assistida por hardware, o hardware fornece suporte arquitetônico que facilita a construção de um monitor de máquina virtual e permite que os sistemas operacionais convidados sejam executados isoladamente. A virtualização assistida por hardware foi introduzida pela primeira vez no IBM System/370 em 1972, para uso com o VM/370 , o primeiro sistema operacional de máquina virtual oferecido pela IBM como um produto oficial.

Em 2005 e 2006, a Intel e a AMD forneceram hardware adicional para dar suporte à virtualização. A Sun Microsystems (agora Oracle Corporation ) adicionou recursos semelhantes em seus processadores UltraSPARC T-Series em 2005. Exemplos de plataformas de virtualização adaptadas a esse hardware incluem KVM , VMware Workstation , VMware Fusion , Hyper-V , Windows Virtual PC , Xen , Parallels Desktop para Mac , Oracle VM Server para SPARC , VirtualBox e Parallels Workstation .

Em 2006, descobriu-se que o suporte de hardware x86 de primeira geração de 32 e 64 bits raramente oferecia vantagens de desempenho em relação à virtualização de software.

Virtualização no nível do sistema operacional

Na virtualização no nível do sistema operacional, um servidor físico é virtualizado no nível do sistema operacional, permitindo que vários servidores virtualizados isolados e seguros sejam executados em um único servidor físico. Os ambientes do sistema operacional "convidado" compartilham a mesma instância em execução do sistema operacional que o sistema host. Assim, o mesmo kernel do sistema operacional também é usado para implementar os ambientes "convidados", e os aplicativos executados em um determinado ambiente "convidado" o visualizam como um sistema autônomo. A implementação pioneira foi o FreeBSD jails ; outros exemplos incluem Docker , Solaris Containers , OpenVZ , Linux-VServer , LXC , AIX Workload Partitions , Parallels Virtuozzo Containers e iCore Virtual Accounts .

Veja também

Referências

Leitura adicional

  • James E. Smith, Ravi Nair, Virtual Machines: Versatile Platforms For Systems And Processes , Morgan Kaufmann, maio de 2005, ISBN  1-55860-910-5 , 656 páginas (abrange máquinas virtuais de processo e sistema)
  • Craig, Iain D. Máquinas Virtuais . Springer , 2006, ISBN  1-85233-969-1 , 269 páginas (abrange apenas máquinas virtuais de processo)

links externos