Escolar Documentos
Profissional Documentos
Cultura Documentos
Grupo 03/MC722
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
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.
Grupo03 / MC722
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
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.
Grupo03 / MC722
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.
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 ;
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.
FORMATO -
Grupo03 / MC722
fconst_2 dload, iload
fload_3, aload_2
faload, laload
<t>STORE
dstore, istore
astore_0, fstore_1
Swap iadd, lsub, fmul, drem ineg, fneg ior, lshl, ixor, lushr, iand i2s, l2d, d2f
Opcode Opcode Opcode Opcode Opcode | branchbyte1 | branchbyte2 Opcode | branchbyte1 | branchbyte2 Opcode |
IF_<cond>
Valor >
> endereo
Grupo03 / MC722
(somente jsr)
<get ou put>STATIC
> valor (get) valor > (put) Objectref > valor (get) Objectref, valor > (put) Objectref, arg1, arg2 > Objectref > objectref
<get ou put>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
Opcode
Objectref >
monitorenter, monitorexit
NEW
indexbyte1 | indexbyte2
> objectref
New
INSTANCEOF
Opcode | indexbyte1 | indexbyte2 breakpoint impdep1 impdep2 Objectref > valor Instanceof
RESERVADOS
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
Grupo03 / MC722
<index> a posio do opcode dentro do vetor de instrues do bytecode. <opcode> o cdigo da instruo
10
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
Grupo03 / MC722
12
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.
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
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.
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
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