Como construir um compilador utilizando ferramentas Java p. 1/2 Como construir um compilador utilizando ferramentas Java Aula extra A Máquina Virtual Java Prof. Márcio Delamaro delamaro@icmc.usp.br
Como construir um compilador utilizando ferramentas Java p. 2/2 Processo de Compilação Normal Myfile1.c Myfile1.obj Myfile2.c Myfile2.obj Myfile.exe Myfile3.c Myfile3.obj Myfile4.c Myfile4.obj ~ ~ Compilacao, linkedicao,
Como construir um compilador utilizando ferramentas Java p. 3/2 Processo de Execução Normal c:> myfile FFFF:FFFF Myfile.exe S.O. (Load) 0 1 0 1 0 1 0 1 0 1 0 1 Myfile 0 1 0 1 0 1 0 1 S.O. 0000:0000
Como construir um compilador utilizando ferramentas Java p. 4/2 Processo de Compilação Java Myfile1.java Myfile1.class Classe Myfile1 Myfile2.java Myfile2.class Classe Myfile2 Myfile3.java Myfile3.class Classe Myfile3 Myfile4.java Myfile4.class Class Myfile4 Compilacao, ~
Como construir um compilador utilizando ferramentas Java p. 5/2 Processo de Execução Java c:> java Myfile1 FFFF:FFFF java.exe S.O. (Load) JVM S.O. 0000:0000
Como construir um compilador utilizando ferramentas Java p. 5/2 Processo de Execução Java c:> java Myfile1 FFFF:FFFF Myfile1.class java.exe JVM Load S.O. (Load) JVM S.O. 0000:0000
Como construir um compilador utilizando ferramentas Java p. 5/2 Processo de Execução Java c:> java Myfile1 FFFF:FFFF Myfile2.class Myfile1.class java.exe JVM Load S.O. (Load) JVM S.O. 0000:0000
Como construir um compilador utilizando ferramentas Java p. 5/2 Processo de Execução Java c:> java Myfile1 Myfile4.class FFFF:FFFF Myfile3.class Myfile2.class Myfile1.class java.exe JVM Load S.O. (Load) JVM S.O. 0000:0000
Código nativo X bytecode Programa C é transformado em código nativo que é executado diretamente pelo hardware MOV AX,[SI] ADD AX, 23 MOV SI, 0FDC MOV [SI], AX Programa JVM também possui operações parecidas com as de máquina mas estas são executadas pela JVM ILOAD_3 ICONST_23 IADD ISTORE_4 Como construir um compilador utilizando ferramentas Java p. 6/2
Como construir um compilador utilizando ferramentas Java p. 7/2 O que temos numa classe Descrição completa do que foi definido dentro da classe Variáveis Métodos Superclasses Interfaces Classes referenciadas
Como construir um compilador utilizando ferramentas Java p. 8/2 classvista http://home.earthlink.net/~gregstp/classvista.html
Como construir um compilador utilizando ferramentas Java p. 9/2 jclasslib http://www.ejtechnologies.com/products/jclasslib/overview.html
Como construir um compilador utilizando ferramentas Java p. 10/2 A JVM Veremos a seguir qual é a estrutura da JVM, quais os tipos de dados que suporta, como opera.
Como construir um compilador utilizando ferramentas Java p. 11/2 Tipos de dados A JVM reconhece diferentes tipos de dados
Como construir um compilador utilizando ferramentas Java p. 11/2 Tipos de dados A JVM reconhece diferentes tipos de dados Valores armazenados numa variável tem um tipo próprio e só pode ser utilizado em operações compatíveis
Como construir um compilador utilizando ferramentas Java p. 11/2 Tipos de dados A JVM reconhece diferentes tipos de dados Valores armazenados numa variável tem um tipo próprio e só pode ser utilizado em operações compatíveis Tipos primitivos: byte, short, int, long, char, float, double, returnaddress, (boolean)
Como construir um compilador utilizando ferramentas Java p. 11/2 Tipos de dados A JVM reconhece diferentes tipos de dados Valores armazenados numa variável tem um tipo próprio e só pode ser utilizado em operações compatíveis Tipos primitivos: byte, short, int, long, char, float, double, returnaddress, (boolean) Tipos referenciados: objetos e arrays
Como construir um compilador utilizando ferramentas Java p. 12/2 Área de Código A JVM possui uma área com as informações sobre as classes carregadas JVM Prog. Counter Cod. MyClass1 x, y main execute MyClass2 valor compare
Como construir um compilador utilizando ferramentas Java p. 13/2 Pilha Pilha mantém informação sobre métodos sendo executados JVM Prog. Counter Cod. Pilha FRAME 1 MyClass1.main
Como construir um compilador utilizando ferramentas Java p. 13/2 Pilha Pilha mantém informação sobre métodos sendo executados JVM Prog. Counter Cod. Pilha FRAME 2 MyClass1.execute FRAME 1 MyClass1.main
Como construir um compilador utilizando ferramentas Java p. 13/2 Pilha Pilha mantém informação sobre métodos sendo executados JVM Prog. Counter Cod. Pilha FRAME 3 MyClass2.compare FRAME 2 MyClass1.execute FRAME 1 MyClass1.main
Como construir um compilador utilizando ferramentas Java p. 14/2 Frame JVM Prog. Counter Cod. Locais Pilha Pilha n FRAME 2 MyClass1.execute FRAME 1 3 2 1 0 MyClass1.main
Como construir um compilador utilizando ferramentas Java p. 15/2 Frame: locais Cada variável local ocupa 1 (ou 2) posições do vetor de variáveis locais Os valores passados como argumentos ocupam as primeiras posições deste vetor public int soma(int x, int y) { int k; } k = x + y; return k;... u = t.soma(10,20);
Como construir um compilador utilizando ferramentas Java p. 16/2 Frame: locais main u = t.soma(10,20); t u
Como construir um compilador utilizando ferramentas Java p. 16/2 Frame: locais k y (20) x (10) u = t.soma(10,20); main this t u
Como construir um compilador utilizando ferramentas Java p. 17/2 Frame: pilha A pilha é utilizada para fazer qualquer tipo de operação
Como construir um compilador utilizando ferramentas Java p. 17/2 Frame: pilha A pilha é utilizada para fazer qualquer tipo de operação Instruções para colocar valor no topo da pilha
Como construir um compilador utilizando ferramentas Java p. 17/2 Frame: pilha A pilha é utilizada para fazer qualquer tipo de operação Instruções para colocar valor no topo da pilha Instruções para operar sobre os elementos no topo da pilha
Como construir um compilador utilizando ferramentas Java p. 17/2 Frame: pilha A pilha é utilizada para fazer qualquer tipo de operação Instruções para colocar valor no topo da pilha Instruções para operar sobre os elementos no topo da pilha Instruções para armazenar valores que estão no topo da pilha
Como construir um compilador utilizando ferramentas Java p. 18/2 Frame: pilha k = x + y; ILOAD_1 soma 0 20 10 this main 20 t u 10 t
Como construir um compilador utilizando ferramentas Java p. 18/2 Frame: pilha k = x + y; ILOAD_1 ILOAD_2 soma 0 20 10 this 10
Como construir um compilador utilizando ferramentas Java p. 18/2 Frame: pilha k = x + y; ILOAD_1 ILOAD_2 soma 0 20 IADD 20 10 this 10
Como construir um compilador utilizando ferramentas Java p. 18/2 Frame: pilha k = x + y; ILOAD_1 ILOAD_2 IADD ISTORE_3 soma 0 20 10 this 30
Como construir um compilador utilizando ferramentas Java p. 18/2 Frame: pilha k = x + y; return k; ILOAD_1 ILOAD_2 IADD ISTORE_3 soma 30 20 10 this ILOAD_3
Como construir um compilador utilizando ferramentas Java p. 18/2 Frame: pilha k = x + y; ILOAD_1 ILOAD_2 IADD soma 30 20 10 return k; this 30 ISTORE_3 main ILOAD_3 IRETURN t u 20 10 t
Como construir um compilador utilizando ferramentas Java p. 18/2 Frame: pilha k = x + y; return k; ILOAD_1 ILOAD_2 IADD ISTORE_3 main ILOAD_3 IRETURN t u 30
Como construir um compilador utilizando ferramentas Java p. 19/2 Heap JVM Prog. Counter Heap Cod. Pilha Obj Obj Obj Obj Obj Obj
Como construir um compilador utilizando ferramentas Java p. 20/2 Heap: alocação Existem instruções para alocar espaço par os objetos new MyClass2 HEAP 30 20 10 this 30
Como construir um compilador utilizando ferramentas Java p. 21/2 Concorrência na JVM Como é que se pode ter concorrência em Java? Troca de mensagens... JVM1 Prog. Counter Cod. JVM2 msg Prog. Counter Cod. Heap Pilha Heap Pilha msg Múltiplas threads
Como construir um compilador utilizando ferramentas Java p. 22/2 Múltiplas threads JVM Cod. Prog. Counter Heap Pilha
Como construir um compilador utilizando ferramentas Java p. 22/2 Múltiplas threads JVM Cod. Prog. Counter Thread 1 Prog. Counter Thread 2 Heap Pilha Pilha
Como construir um compilador utilizando ferramentas Java p. 23/2 Múltiplas threads Codigo PC Pilha PC Pilha HEAP
Como construir um compilador utilizando ferramentas Java p. 24/2 Jasmin: Assembler JVM.class public MyClass1.super java/lang/object.field x Lpackage2/MyClass2;.field y Lpackage2/MyClass2;.method public <init>()v.limit stack 1.limit locals 1 Label1: aload_0 invokespecial java/lang/object/<init>()v return.end method
Como construir um compilador utilizando ferramentas Java p. 25/2 Para visualizar prog.x prog.x.classea.jas ClassA.class Jasmin X++ prog.x.classeb.jas ClassB.class Jasmin
Como construir um compilador utilizando ferramentas Java p. 25/2 Para visualizar prog.x prog.x.classea.jas ClassA.class Jasmin X++ prog.x.classeb.jas ClassB.class Jasmin
Como construir um compilador utilizando ferramentas Java p. 26/2 Referências Jasmin: http://jasmin.sourceforge.net/ JVM e Jasmin: Jon Meyer, Troy Downing, Java Virtual Machine, O Reilly Tim Lindholm, Frank Yellin, The Java Virtual Machine Specification, The Java Series, Addison Wesley http://java.sun.com/docs/books/vmspec/