Você está na página 1de 15

Arquitetura de Mquina Virtual

Grupo 03/MC722

ARQUITETURA DE MQUINAS VIRTUAIS


MC722 GRUPO 03

Carlos Eduardo Rodrigues de Almeida Fernando Ferrari de Ges Marcelo Bianchini

015638 016981 005113

ndice
1. Introduo .........................................................................................................2 2. O que uma Mquina Virtual ...........................................................................2 3. Mquina Virtual (JVM) ......................................................................................5 3.1 Formato padro de classes class File Format..........................................6 3.2 Conjunto de Instrues ...............................................................................7 3.3 Pilha de Dados e rea de Memria...........................................................10 3.4 Compilao e Loading...............................................................................10 4. Outras mquinas virtuais ................................................................................12 5. Tcnicas JIT (just in time) ...............................................................................14 6. Concluso .......................................................................................................15 7. Bibliografia ......................................................................................................15

Arquitetura de Mquina Virtual

Grupo03 / MC722

1. Introduo
A grandeza da informtica tem proporcionado cada vez mais opes de plataformas para computadores. Cada uma destas plataformas apresenta caractersticas prprias e peculiaridades de funcionamento que impossibilitam migrar arquivos executveis de uma plataforma para outra. Assim, dado o cdigo fonte de um programa escrito em qualquer linguagem de programao, necessrio compil-lo para a particular plataforma em que se quer trabalhar para que se obtenha um executvel condizente com esse particular computador. Logo, esta necessidade de gerar arquivos executveis para cada plataforma trouxe a idia de se criar uma ferramenta capaz de separar o desenvolvimento do programa com a sua execuo em determinado computador. A soluo para essa idia a Mquina Virtual e atravs deste documento, pretende-se apresentar o funcionamento e as diferenas entre as principais mquinas virtuais existentes no mercado atual.

2. O que uma Mquina Virtual


Um computador uma mquina constituda de dois componentes principais dispostos hierarquicamente conforme expresso na figura 1. A camada inferior o centro da parte fsica do computador e corresponde CPU (Unidade Central de Processamento). A CPU responsvel por realizar todas as operaes que um programa deseja executar. Sua principal caracterstica sua arquitetura, isto , a especificao e implementao de um conjunto de instrues que sero suportadas por tal componente. Assim, um arquivo executvel para uma certa CPU precisa representar o cdigo fonte que o originou atravs de instrues codificadas para ter o funcionamento desejado. A codificao das instrues tambm faz parte do projeto da arquitetura da CPU e determina o que cada sequncia de bits representa.

Arquitetura de Mquina Virtual

Grupo03 / MC722

Figure 1: Mquina Real

A camada superior o Sistema Operacional. Sistema Operacional o software responsvel pelo gerenciamento de memria, pelo acesso aos perifricos existentes e pela administrao de todos os processos a serem executados em um computador, sendo a ponte entre um programa e a CPU. Assim como a CPU, o Sistema Operacional qualifica o computador e obriga todos os programas a seguirem suas especificaes para serem executados. Com isso, tem-se a Mquina Real de um computador. A partir deste escopo, a Mquina Virtual parte da idia de acrescentar mais uma camada acima das duas anteriores de modo que torne os programas a serem executados independentes da plataforma existente. Assim, ao invs de um cdigo fonte ser compilado separadamente para cada plataforma desejada, agora ele deve ser compilado somente uma vez para a Mquina Virtual e esta deve tratar a comunicao com as camadas inferiores, fazendo o programa ser executado, possibilitando a portabilidade de programas entre diferentes plataformas sem a necessidade de nova compilao. Logo, para implementar uma Mquina Virtual preciso criar uma infraestrutura que simule uma mquina real independente da plataforma usada. Mas

Arquitetura de Mquina Virtual

Grupo03 / MC722

para que esse uso em multi-plataforma seja satisfeito necessrio delimitar cuidadosamente o funcionamento da Mquina Virtual, protegendo o hardware de operaes perigosas como acesso a regies protegidas de memria. Por isso, primeiramente necessrio especificar um conjunto de instrues que determinem como os programas a serem executados devem chegar Mquina Virtual. Este conjunto de instrues determinado e codificado da mesma maneira que se faz para uma CPU. J em consequncia desse conjunto de instrues, surge a necessidade de implementar compiladores que gerem cdigos com essas instrues a partir dos cdigos fonte do programa, porm, estes compiladores fogem das fronteiras exigidas para uma Mquina Virtual e prendem-se s linguagens de programao que usufruiro desta Mquina Virtual, o que indica que a Mquina Virtual no est associada a uma ou outra linguagem de programao. Ento, compilando um programa destinado a uma Mquina Virtual, obtem-se um arquivo com sequncia de instrues suportadas pela Mquina Virtual. Este arquivo chamado de bytecode. Este bytecode, por sua vez, tratado pela Mquina Virtual como se fosse um arquivo executvel, usando reas de memria do mesmo modo que ocorre em uma execuo. No entanto, ao invs da execuo, a Mquina Virtual transforma as suas instrues em instrues suportadas pela arquitetura da mquina real. neste momento que a Mquina Virtual trata as peculiaridades da plataforma em que se est trabalhando e por isso que existe uma mquina virtual para cada plataforma. A transformao dos bytecodes em instrues reais feita de modo interpretado, isto , da mesma maneira que ocorre com linguagens interpretadas. Os bytecodes so lidos sequencialmente e, isoladamente, associados a uma instruo real. Por fim, tendo o verdadeiro arquivo executvel, o programa passa para o Sistema Operacional em que ocorre o processo normal de uma mquina real.

Arquitetura de Mquina Virtual

Grupo03 / MC722

A figura a seguir resume o caminho de execuo com a Mquia Virtual:

Figure 2: Mquina Virtual

Nos ltimos anos o conceito de Mquina Virtual tem ganhado novos mercados, com isso, uma alternativa muito mais interessante de sua implementao em hardware, na forma de microchips como o UltraJAVA. Em particular, uma tendncia que est em evidncia o uso de Mquina Virtual em celulares e em PDAs, permitindo o reuso de aplicativos de PCs, como ocorre com os jogos feitos em Java, e que esto sendo portados para celulares.

3. Mquina Virtual (JVM)


Na atualidade o mercado dominado principalmente por duas grandes Mquinas Virtuais, a JVM e a .NET. Mas a Java Virtual Machine (JVM) tem tido mais destaque em consequncia no grande leque de opes em que pode ser aplicada desde aplicativos simples at jogos para celulares ou em pginas

Arquitetura de Mquina Virtual

Grupo03 / MC722

web (sendo plug-in de browsers). Por isso, esta seo detalhar as caractersticas da JVM e, na prxima seo, ser feito um comparativo da JVM com a .NET. Antes de descrever os pontos da JVM, preciso definir quais so os pontos que qualificam a arquitetura de uma Mquina Virtual. Alm do conjunto de instrues, que j foi brevemente introduzido na seo 2, as Mquinas Virtuais tambm apresentam outras semelhanas com as mquinas reais, determinando suas arquiteturas, como: Formato padro de classes; Conjunto de registradores (para uso interno das mquinas virtuais); Pilha e rea de memria; Pilha de objetos coletados por um garbage-collector ;

A seguir descreveremos cada um destes pontos.

3.1 Formato padro de classes class File Format


Conforme j mencionado, os programas precisam ser compilados para um especificado padro antes de ser entregue Mquina Virtual. Desta maneira, no caso da JVM, a compilao de um programa gera um conjunto de arquivos no formato padro class. Este formato representa os bytecodes destinados JVM para cada classe ou interface que se deseja usar no programa. Cada bytecode composto por bytes sendo que as instrues podem ocupar um ou mais bytes e pode assumir dois significados: Pode indicar componentes da classe ou interface especificada pelo arquivo, como definio de constantes e/ou declarao de atributos e mtodos; Pode indicar as instrues da Mquina Virtual que implementa os mtodos e procedimentos do arquivo. Como sempre ocorre em formatos de arquivo, as primeiras informaes contidas nestes arquivos representam um cabealho que especifica detalhes dos dados seguintes. Neste cabealho, h informaes como indicao da

Arquitetura de Mquina Virtual

Grupo03 / MC722

verso do formato class a ser usado, definio se a classe abstrata, pblica ou privada e o nmero de mtodos, entr outros. Alm disso, o formato class apresenta bytecodes reservados que representam o comeo e o fim da descrio de certos dados, como a implementao de um mtodo ou procedimento. So dentro do escopo determinado por esses bytecodes especiais que se encontram os bytecodes de instrues. Ao receber um arquivo, antes de tentar interpret-lo, a Mquina Virtual sempre verifica se este arquivo realmente do formato class e se todas as suas informaes condizem com algo especificado no padro. Em mais detalhes, os passos de verificao de segurana da JVM so: Verifica parametrizao dos mtodos; Verifica se no h converso ilegal de dados; Verifica se o acesso a objetos est corretamente declarado. Os erros causados durante algum dos passos desta verificao so chamados de runtime errors.

3.2 Conjunto de Instrues


O conjunto de instrues da JVM caracterizado por ter tamanho varivel - mas sendo sempre mltiplos de 8 bits, conforme j foi citado na seo 3.1, ter sempre o primeiro byte referindo-se ao opcode da instruo e sempre interagir com a pilha de dados, lendo e/ou escrevendo na pilha. J que a JVM no tem registradores. A Tabela 1 mostra as principais categorias de instruo, seguida de sua descrio, seu formato (cad termo indica um byte), interao com a pilha e exemplos de mnemnicos da categoria.

CATEGORIA NOP NULL <t>CONST_<n>

DESCRIO Push NULL Push constante n

FORMATO -

PILHA > > NULL > cte

MNEMNICOS Nop aconst_null iconst_1,

Arquitetura de Mquina Virtual


do tipo t <t>LOAD Load e Push varivel do tipo t Load e Push a n<t>LOAD_<n> sima varivel do tipo t <t>ALOAD Load e Push de array do tipo t Pop e Store na varivel do tipo t Pop e Store na n<t>STORE_<n> sima varivel do tipo t <t>ASTORE POP<n> <t>IPUSH Pop e Store no array de tipo t Pop 1 ou 2 bytes Push byte ou short Duplicata n vezes DUP<n>_<x> topo da pilha e Push x posies abaixo do topo SWAP Troca o topo da pilha Faz operao aritmtica do tipo t Nega dado tipo t Faz operao lgica do tipo t Converte tipos Faz Branch se cond der 0 Faz branch a IF_ICMP_<cond> partir de 2 topos da pilha JSR OU GOTO<w> Jump byte ou Opcode Opcode Opcode Opcode Opcode | byte (|byte2) Opcode Valor > Opcode Opcode | index Opcode > valor Opcode | index > valor

Grupo03 / MC722
fconst_2 dload, iload

fload_3, aload_2

Arrayref, index > valor Valor >

faload, laload

<t>STORE

dstore, istore

astore_0, fstore_1

Arrayref, index, valor > Valor > > valor

fastore, lastore pop, pop2 bipush, sipush

N_valores > N_valores, N_valores

dup, dup2, dup_x1

A, B > B, A A, B > RESULTADO A > A A, B > RESULTDO A>B

Swap iadd, lsub, fmul, drem ineg, fneg ior, lshl, ixor, lushr, iand i2s, l2d, d2f

<t>op_aritmtica <t>NEG <t><u>op_lgica <t>2<t>

Opcode Opcode Opcode Opcode Opcode | branchbyte1 | branchbyte2 Opcode | branchbyte1 | branchbyte2 Opcode |

IF_<cond>

Valor >

ifeq, ifne, igt

Valor1, valor2 >

if_icmpeq, if_icmplt jsr, goto

> endereo

Arquitetura de Mquina Virtual


word branchbyte1 | branchbyte2 <t>RETURN Retorna tipo t do mtodo Get da classe ou Put na classe static field Opcode Opcode | indexbyte1 | indexbyte2 Opcode | indexbyte1 | indexbyte2 Opcode | indexbyte1 | indexbyte2 Opcode Valor >

Grupo03 / MC722
(somente jsr)

return, ireturn, areturn putstatic, getstatic

<get ou put>STATIC

> valor (get) valor > (put) Objectref > valor (get) Objectref, valor > (put) Objectref, arg1, arg2 > Objectref > objectref

<get ou put>FIELD

Get de objeto ou Put em objeto field

Putfield, getfield

Invoca mtodo INVOKE<mtodo> virtual, static, especial ATHROW Joga execeo ou erro Entra ou Sai do MONITOR<evento> monitor para objeto Faz Branch se IF<no>NULL houver ou no NULL

invokespecial, invokestatic, invokevirtual athrow

Opcode

Objectref >

monitorenter, monitorexit

Opcode | branchbyte1 | branchbyte2 Opcode | Valor > ifnull, ifnonnull

NEW

Cria novo objeto

indexbyte1 | indexbyte2

> objectref

New

INSTANCEOF

Verifica se objeto de certo tipo

Opcode | indexbyte1 | indexbyte2 breakpoint impdep1 impdep2 Objectref > valor Instanceof

RESERVADOS

Opcodes de uso interna da JVM

t = tipo de dado (integer i, float f, double d, short s, long l, reference a) w = word n = 0, 1, 2, 3 op. Aritmticas = add, sub, mul, rem (resto) op. Lgicas = shl, ushl, shr, ushr, and, or, xor Tabela 1: Conjunto de Instrues da JVM

Arquitetura de Mquina Virtual

Grupo03 / MC722

3.3 Pilha de Dados e rea de Memria


Ao iniciar a interpretao de um programa, a Mquina Virtual cria um thread correspondendo ao main do programa, um heap para armazenar as variveis e os objetos alocados ao longo da execuo, e uma Method Area que armazena as estruturas particulares de cada classe usada. A partir disso, medida que novos mtodos so chamados, novos threads so criados. Todos os threads apresentam uma pilha prpria e um registrador PC prprio tambm, o que permite a execuo em paralelo de vrios threads. Cada registrador PC indica o endereo da instruo executada naquele instante. Para garantir espao disponvel para todos os threads, o heap apresenta um sistema automtico de gerenciamento de armazenamento, o garbage collector. Este sistema semelhante ao existente em sistemas operacionais e desaloca memria do heap para os threads do momento, j que o heap compartilhado entre todos os threads.

3.4 Compilao e Loading


Como dito acima, o cdigo escrito em JAVA tem de ser transformado em um bytecode para que seja interpretado, mais tarde, por uma JVM. Antes de se tornar bytecode o cdigo escrito em JAVA convertido para um assembly prprio da mquina virtual e depois transformado em bytecode. Esse assembly tem o seguinte formato de instruo:

<index> <opcode> [<operand1> [<operand2>...]] [<comment>]

<index> a posio do opcode dentro do vetor de instrues do bytecode. <opcode> o cdigo da instruo

10

Arquitetura de Mquina Virtual

Grupo03 / MC722

<operandN> so os operandos da instruo que sempre esto na pilha da thread do mtodo. <comment> um possvel comentrio no cdigo

A mquina virtual distingue o tipo dos operandos usando diferentes bytecodes para operaes sobre eles. As instrues que operam inteiros so diferentes das instrues que operam floats, por exemplo. Assim uma pequena mudana no cdigo JAVA gera uma grande mudana no assembly que ir ser traduzido para bytecode.

Para deixar o cdigo mais eficiente e compacto, o compilador usa operadores implcitos. Existem instrues especiais que servem para colocar determinados nmeros muitos usados na pilha, sem a necessidade de usar esse nmero como imediato. Por exemplo, a instruo iconst_<i>, com i variando de -1 at 5, coloca o inteiro i na pilha sem precisar ler a pilha de operandos para saber que nmero colocar na pilha de execuo. Isso deixa o cdigo mais rpido, pois evita acessos a memria alm de economizar espao na pilha.

Depois de transformado em bytecode, o cdigo carregado, ligado e inicializado dinamicamente pela JVM. A mquina virtual comea a ser executada a partir de alguma chamada a um mtodo main de alguma classe especfica. Isso faz com que essa classe especfica seja carregada, ligada a outros tipos que ela usa e inicializada. Como a mquina virtual no tem o binrio da classe que foi chamada, ela tem de utilizar um "class loader" para localizar esse binrio. Depois de localizado, o binrio tem de ser ligado aos tipos que utiliza para que a classe possa ser inicializada. Durante a ligao que so feitas as verificaes citadas anteriormente, como verificao de tipos e sintaxe. Aps a ligao, se a classe chamada tiver uma super classe associada a ela, todo o processo repetido para essa super classe seja inicializada antes da classe chamada. Aps todos estes passos, se nenhum erro ocorrer, o mtodo main da classe chamada invocado e o programa comea a ser executado.

11

Arquitetura de Mquina Virtual

Grupo03 / MC722

4. Outras mquinas virtuais


Existem outras mquinas virtuais no mercado, todas elas vm acompanhadas de diversas ferramentas, como por exemplo, classes que resolvem grande parte dos problemas do dia-a-dia de qualquer programador. O prprio JAVA tem um conjunto de ferramentas que contm milhares de classes com tais solues. Outro conjunto de ferramentas que tambm chamado de framework o .NET da Microsoft. O .NET Framework trata-se de um conjunto de classes e interfaces que auxiliam o programador na hora de construir suas aplicaes, alm de uma mquina virtual chamada de CLR (Common Language Runtime) que uma implementao do padro CLI (Common Language Infrastructure). Devido ao escopo desse documento iremos nos concentrar nas especificaes da CLR, pois ela que trata da carga, inicializao e execuo das aplicaes escritas dentro do padro .NET. Como especificado na CLI a CLR contm mdulos que provm suporte as mais variadas linguagens de programao. Esses mdulos so descritos a seguir: The Common Type System (CTS) Trata-se do sistema que d suporte aos mais diversos tipos e operaes oferecidos pelas mais diversas linguagens de programao. Metadata O CLR usa metadados para descrever e identificar os padres suportados pelo CTS. Esses dados so armazenados de uma maneira independente da linguagem de programao que esteja sendo usada. Assim esses dados provm uma interface entre as ferramentas que esto sendo usadas para programa e a mquina virtual que realmente ir executar o cdigo da aplicao. The Common Language Specification o padro que as linguagens devem seguir para que sejam suportadas pelo CLI, ou seja, as linguagens suportadas pelo CLR devem seguir o padro CLS, algumas delas so Visual Basic .NET e o C#.

12

Arquitetura de Mquina Virtual

Grupo03 / MC722

The Virtual Execution System a mquina virtual em si, o VES o responsvel por carregar e executar os programas desenvolvidos para CLR.

Devido ao escopo do trabalho iremos nos concentrar dentro do funcionamento do VES, fazendo comparaes com a JVM que j foi descrita at o momento. Uma representao grfica do funcionamento de aplicaes .NET pode ser visto na figura 3.

Figura 3 Estrutura de execuo de aplicaes .NET

Da mesma maneira que no JAVA, o cdigo escrito em .NET traduzido para uma linguagem intermediria que se trata de um conjunto de instrues que so conhecidas pelo VES. Esse conjunto de instrues denominado Common Intermediate Language (CIL). A CLR tenta esconder os detalhes da chamada e execuo dos mtodos do cdigo CIL, assim ela pode chamar os mtodos quando eles forem ser executados na melhor maneira possvel, dependendo do momento da chamada. A CLR gerencia mltiplas threads de controle de mtodos, vrios heaps e um espao compartilhado de memria. Essas threads controlam os mtodos que esto sendo chamados e executados, a partir do atual estado dos mtodos, essas threads de controle organizam os parmetros e dados dos mtodos a serem chamados e executados. Assim dependendo do estado da memria e da execuo da aplicao, os parmetros e dados relativos a uma aplicao podero ser tratados de maneiras distintas e o cdigo executvel gerado pelo VES pode ser diferente. Tambm da mesma maneira que na JVM, existe dentro da CLR um coletor que se encarrega de limpar toda a memria que no est sendo mais

13

Arquitetura de Mquina Virtual

Grupo03 / MC722

usada pelo sistema. Assim o programador no precisa se preocupar com a alocao e liberao de memria. Apenas em casos de aplicaes que consomem muita memria em pouco tempo, existem funes especficas dentro do CLR que obrigam determinada poro de memria a ser liberada pra ser usada imediatamente. Portanto a principal diferena entre o JAVA e o .NET a maior liberdade do .NET em relao s linguagens que so suportadas, j que a CLR parte de uma especificao mais genrica, apesar da JVM tambm suportar teoricamente outras linguagens diferentes do JAVA em si, porm essa funcionalidade no implementada. Por outro lado, a JVM tem mais tempo de estrada e, portanto vrios problemas j foram resolvidos fazendo com que o seu desempenho dentro de algumas reas seja bem superior do que o do CLR.

5. Tcnicas JIT (just in time)


Apesar da grande vantagem de ter portabilidade entre diversas plataformas, a Mquina Virtual apresenta uma desvatagem muito incmoda, o seu processo de interpretao no to rpido quanto uma compilao tradicional. Para tentar solucionar este problema, criou-se a tcnica JIT (Just In Time). A tcnica JIT consite no uso de um novo compilador para converter os bytecodes em instrues da mquina nativa, ao invs de usar a Mquina Virtual. A grande vantagem desta tcnica que ela consegue acelerar

consideravelmente a execuo dos programas. Em contrapartida, a tcnica JIT tem apresentado duas srias desvantagens: Restaura o problema de necessitar um compilador prprio para cada

plataforma; Necessita um uso muito maior de memrioa para a execuo, j que esses

compiladores geram arquivosde bytecodes compilados trs vezes maior que o original.

14

Arquitetura de Mquina Virtual

Grupo03 / MC722

6. Concluso
As mquinas virtuais tm suas vantagens e apresentam funcionalidades que suprem as necessidades de muitas pessoas, ainda mais com o crescimento do mercado de sistemas embarcados, onde a arquitetura muda entre os mais diversos aparelhos, porm as aplicaes so as mesmas fazendo das mquinas virtuais grandes aliadas dos programadores e desenvolvedores de software uma vez que elas geram uma gigantesca economia de tempo e custos. Neste sentido o futuro desses sistemas e das mquinas virtuais longo e suas aplicaes tendem a crescer e se multiplicar com o passar do tempo.

7. Bibliografia
The JavaTM Virtual Machine Specification, Second Edition; .NET Manual Page http://msdn.microsoft.com/netframework/programming/clr/default.aspx Especificao da CLI http://www.ecma-international.org/publications/standards/Ecma-335.htm

15