Arquiteturas Maquinas Virtuais

1.Introdução

As máquinas virtuais são uma inovação que permitem o uso quase que completamente do poder da CPU. Com os atuais processadores, normalmente o computador acaba sendo subutilizado já que nem sempre uma aplicação demanda de todo poder da CPU. Através das máquinas virtuais é possível aumentar a gama de aplicativos em um determinado ambiente além de economia de espaço, já que em vez de várias CPU´s teremos apenas uma com várias tarefas ocorrendo nela.
1


2

A maquina virtual cria uma “camada” para compatibilizar diferentes plataformas. Esta camada é chamada de Virtualização (softwares que podem ser utilizados para fazer os recursos parecerem diferentes do que realmente são).

3


Algumas definições podem ser usadas quando se fala de “maquinas virtuais”:

  1. “Uma duplicata eficiente e isolada de uma máquina real”
  2. A IBM define uma máquina virtual como uma cópia totalmente protegida e isolada de um sistema físico.
  3. Na década de 60, uma abstração de software que enxerga um sistema físico (máquina real).

4


Quando falamos de maquinas virtuais, também podemos estar correlacionando emuladores que é:

  1. - O oposto de uma maquina real,
  2. - Implementa todas as instruções realizadas pela máquina real em um ambiente abstrato de software.
  3. - “Engana”, fazendo com que todas as operações da máquina real sejam implementadas em um software.
  4. - Interpreta um código desenvolvido para outra plataforma.

A funcionalidade e o nível de abstração de uma máquina virtual, encontra-se em uma posição intermediária entre uma máquina real e um emulador, na forma em que os recursos de hardware e de controle são abstraídos e usados pelas aplicações.

Um exemplo é a linguagem de programação Java, que você pode, por exemplo, criar um aplicativo que rode tanto no Linux quanto no Windows. Mas a linguagem Java não se limita a esses sistemas operacionais. É possível desenvolver aplicações para uma infinidade de plataformas. Para isso, basta que elas tenham uma Java Virtual Machine (JVM) ou, em português, Máquina Virtual Java.

O sistema de virtualização também é utilizado nos processadores (hardware), principalmente da Intel, que no ano de 2005 lançou dois processadores com esse suporte (VT – Virtualization Technology). Esta tecnologia permite que um processador funcione como se fosse vários processadores trabalhando em paralelo de modo a permitir que vários sistemas operacionais sejam executados ao mesmo tempo em uma mesma máquina.


2.Maquina Virtual:
É um ambiente criado por um monitor de máquina virtual (VMM - Virtual Machine Monitor).

2.1 - VMM - Virtual Machine Monitor:

  1. - Sistema operacional para sistemas operacionais;
  2. - Também conhecida como hypervisor;
  3. - O monitor pode criar uma ou mais máquinas virtuais sobre uma única máquina real.

2.2 - VMM e Emulador

  1. - Um emulador fornece uma camada de abstração completa entre o sistema em execução e o hardware;
  2. - Um monitor fornece uma interface (através da multiplexação do hardware) que é idêntica ao hardware subjacente e controla uma ou mais máquinas virtuais;
  3. - Um emulador também fornece uma abstração do hardware idêntico ao que está em uso, mas também pode simular outros diferentes do atual;

3. Tipos de Maquinas Virtuais

Tipo I
– o monitor é implementado entre o hardware e os sistemas convidados (guest system).

5

Tipo II
– o monitor é implementado como um processo de um sistema operacional real subjacente, denominado sistema anfitrião (host system)

6

4. Virtualização:

- É a interposição do software (máquina virtual) em várias camadas do sistema.
- É uma forma de dividir os recursos de um computador em múltiplos ambientes de execução.

4.1 - Alguns tipos de virtualização:

4.1.1 - Virtualização do hardware:
# - Exporta o sistema físico como uma abstração do hardware;
# - Qualquer software escrito para a arquitetura (x86, por exemplo) irá funcionar.

7

4.1.2 - Virtualização do sistema operacional:
# - Exporta um sistema operacional como abstração de um sistema específico;
# - A máquina virtual roda aplicações – ou um conjunto de aplicações – de um sistema operacional específico.

8

4.1.3 - Virtualização de linguagens de programação:
# - Cria uma aplicação no topo do sistema operacional;
# - São desenvolvidas para computadores fictícios projetados para uma finalidade específica;
# - A camada exporta uma abstração para a execução de programas escritos para esta virtualização.

9
10

5. JVM (Java Machine Virtual – Maquina Virtual Java)

5.1 - O que é:
Os aplicativos feitos em Java estão presentes em uma infinidade de dispositivos, desde relógios até mainframes. Tudo isso graças a Máquina Virtual Java (JVM), que é um mecanismo que permite executar código em Java em qualquer plataforma e que pode ser entendida como "uma máquina imaginária implementada via software ou hardware que executa instruções vindas de bytecodes".

5.2 - Como funciona:
Quando você faz um programa em Java e o compila, se tudo estiver certo, o compilador gerará bytecodes desse programa. Bytecode é uma espécie de codificação que traduz tudo o que foi escrito no programa para um formato que a JVM entenda e seja capaz de executar. Assim, se você fizer um programa em Java no Linux, ele será capaz de rodar no Windows ou em qualquer outro sistema operacional que tenha JVM. Isso ocorre porque não existe bytecodes diferentes, isto é, os bytecodes dos programas em Java compilados no Windows são constituídos da mesma forma que bytecodes gerados se a compilação fosse feita em Mac OS, por exemplo. De certo que, podem haver algumas diferenças, que dependem da implementação da JVM e claro, do compilador.
Quando um código em Java é compilado, um arquivo com a extensão .class é gerado. Esse tipo de arquivo é o bytecode. Assim, quando o programa Infowester.java for compilado, um arquivo chamado Infowester.class deverá ser executado.

11

5.3 - Por que ela é uma máquina virtual?

O nome de qualquer arquivo fonte em Java, tem o sufixo .java, assim como acontece com a linguagem C, onde seus códigos fontes estão armazenados em um arquivo fonte com sufixo .c. Suponha por exemplo que tenhamos um aplicativo feito em Java e todo o código fonte, esteja em um arquivo x.java, e iremos rodar este aplicativo no sistema operacional Linux.
Primeiro iremos compilar nosso código fonte fazendo:

$javac x.java

Será criado então um arquivo executável Java, x.class, o qual contem uma linguagem de máquina, chamada byte code, para rodar em uma “máquina Java”, mas não temos esta máquina.

Por outro lado, temos um programa que emula a operação desta máquina, isto então explica o por que esta máquina é virtual.
Nosso programa então é rodado digitando:

$java x

Note que Java, somente roda uma máquina virtual. Por exemplo, análogo a função printf()na linguagem C, é a função System.out.println() do Java. A função printf() chama a função write() do Sistema Operacional (caso estejamos rodando nossa máquina virtual sobre a plataforma Unix). Porém isto não acontece no caso do Java, o que realmente acontece é que no Java a função System.out.println() faz uma chamada para a JVM a qual por sua fez faz uma chamada a função write() do Sistema Operacional.

No mercado existem chips Java, o que chamaríamos da verdadeira máquina Java, porém não é muito difundida, em conjunto tem sim compiladores da linguagem Java, onde o papel da máquina virtual se torna obsoleta, porém a grande maioria dos aplicativos em Java é feito via emulador (JVM).

6. A arquitetura da maquina virtual Java:

A JVM é basicamente uma máquina baseada em pilha, com 32 bits de tamanho de palavra, usando complemento de dois. O termo máquina baseada em pilha, denota que quase todos os operandos estão em uma pilha e eles estão implícitos para a instrução. Por exemplo:
Instrução processador Intel
addl %eax,%ebx

Instrução para a JVM

Iadd

No caso do Intel, o programador tem que escolher quais as duas coisas ele quer somar e explicitar eles, ao passo que na JVM o programador não tem escolha, os operandos deverão ser os dois elementos do topo da pilha.
Antes de continuarmos é vital discutirmos o funcionamento e o papel da pilha. Diferente das linguagens C/C++/assembly, onde existe uma pilha para cada processo, na JVM teremos uma pilha para cada chamada de método.
Por outro lado, existe uma coisa análoga entre a pilha da JVM e a pilha das linguagens C/C++/assembly, nestas linguagens, toda chamada de função usa uma pilha em comum e todos os dados para uma dada chamada de função e seus argumentos, retorna valores e variáveis locais em para aquela chamada de função, o que é chamado de quadro pilha ou stack frame. Na JVM temos uma stack frame para cada chamada de método, cada stack frame no Java consiste da pilha do operando, uma seção para argumentos e variáveis locais.

7. O que é a Tecnologia de Virtualização da Intel

A tecnologia de virtualização não é uma idéia nova. Existem alguns programas no mercado que permitem virtualização e muito provavelmente o VMware é o mais famoso deles. Com esta técnica, um único processador pode funcionar como se fosse vários processadores trabalhando em paralelo, permitindo ao micro rodar vários sistemas operacionais ao mesmo tempo.

Você pode confundir virtualização com multitarefa ou com HyperThreading. Na multitarefa, existe um único sistema operacional e vários programas trabalhando em paralelo. Já na virtualização você pode ter vários sistemas operacionais trabalhando em paralelo, cada um com vários programas em execução. Cada sistema operacional roda em um “processador virtual” ou “máquina virtual”. Já a tecnologia HyperThreading simula dois processadores lógicos em um único processador físico e distribui as tarefas entre eles usando o conceito SMP (multiprocessamento simétrico). Na tecnologia HyperThreading os processadores lógicos não podem ser usados separadamente.

12
13

Claro que se um processador tem suporte a ambas tecnologias, HyperThreading e Virtualização, cada processador virtual aparecerá para o sistema operacional como se fossem dois processadores disponíveis no micro para multiprocessamento simétrico.
A tecnologia de Virtualização usa a mesma idéia do modo Virtual 8086 (V86), que está disponível desde os processadores 386. Com o modo V86 você pode criar várias máquinas virtuais 8086 para rodar programas baseados no DOS em paralelo. Com a tecnologia VT você pode criar várias máquinas virtuais “completas” para rodar sistemas operacionais em paralelo.
Mas se existem programas como o VMware que habilitam a virtualização, porque implementar esta tecnologia dentro do processador? A vantagem é que o processador com tecnologia de virtualização possui algumas novas instruções para controlar a virtualização. Com essas instruções, o controle do software (chamado VMM, Virtual Machine Monitor) pode ser mais simples, o que resulta em um maior desempenho se comparado a soluções baseadas apenas em software.

14

8. Inflexibilidade x Flexibilidade (uso de Maquinas Virtuais):

15


16

9. Vantagens e Utilizações

Como dito antes, uma das principais vantagens de uma MV é poder utilizar quase que totalmente a CPU. Imagine uma empresa que precisa de um servidor de dados, de e-mail e banco de dados. É completamente possível que apenas uma máquina possa fazer o papel destes três servidores(obviamente a máquina deverá ter capacidade para tal), onde haveriam 3 máquinas, bastará apenas uma. E como para o S.O principal são apenas arquivos dentro dele, em caso de falha total da máquina principal, bastaria copiar estes arquivos e levar para outra máquina, e tudo voltaria a funcionar normalmente!
A única real desvantagem talvez esteja justamente no ponto no qual é a sua vantagem, utilização do poder de processamento da CPU. A CPU estará assim constantemente em uso o que poderá causar um stress no equipamento, sendo necessário um maior cuidado com o ambiente de uso desta CPU. Já que uma falha nessa tiraria do ar três servidores instantaneamente, apesar da facilidade e rapidez de “subir” novamente através da cópia da MV. E também demanda um espaço gigantesco para poder manter todos os servidores em funcionamento pleno de suas atividades. Com o preço de Hardware em queda, não soa tão absurdo uma CPU com diversos HD´s para diversos servidores rodados em máquinas virtuais.

10. Referências Bibliograficas

http://www.forumpcs.com.br/

http://www.inf.ufg.br/~marcosroriz/intro.html

http://www.infowester.com/jvm.php

http://www.mlaureano.org/?s=maquinas+virtuais&submit=Go

Textos extraidos do "datasheet da Intel": “A tecnologia de Virtualização da Intel" -
http://www.clubedohardware.com.br/artigos/1144

http://www.vmware.com/

www.java.com/pt_BR/

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License