A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Organização do Ambiente de Execução (Runtime System)

Apresentações semelhantes


Apresentação em tema: "Organização do Ambiente de Execução (Runtime System)"— Transcrição da apresentação:

1 Organização do Ambiente de Execução (Runtime System)
Tipos e valores variáveis expressões procedimentos funções parâmetros Linguagem de Programação Geração de código gap semântico bits bytes words registradores pilhas endereços Sub-rotinas Arquitetura Física

2 Organização do Ambiente de Execução (Runtime System)
Representação de dados Avaliação de expressões Alocação de memória Rotinas Objetos e métodos

3 Interesse Prático Todo programador deve ter uma idéia básica dos aspectos de eficiência de várias construções da linguagem. Exemplo: escolha de estruturas de dados

4 Organização do Ambiente de Execução (Runtime System)
Representação de dados Avaliação de expressões Alocação de memória Rotinas Objetos e métodos HOJE !!!

5 Representação de Dados
Linguagem: Booleanos, Inteiros, Caracteres, Registros, Arrays etc. Arquitetura Física: Bits, bytes, words, double words. Gap semântico;

6 Princípios Básicos Não confusão: Unicidade:
Valores diferentes (de um tipo) devem ter representações diferentes; Evita problemas em operações de comparação; Números Reais … (confusão é inevitável ) Unicidade: Cada valor deve ter a mesma representação. Desejável, porém não essencial; Representação de inteiros …

7 Questões Pragmáticas Representação em tamanho constante
Todos os valores de um tipo tem mesmo tamanho; Compilador pode planejar alocação de espaço; Representação direta ou indireta Direta: Pascal, C, etc. Tipos primitivos em JAVA®; Indireta (apontadores): Linguagens Funcionais (Haskell, ML, …); Objetos em linguagens OO (Java®); Essencial para tipos cujos valores variam de tamanho;

8 Rep. Direta vs. Rep. Indireta
x Representação direta de x x Representação indireta de x y Representação indireta de y, com mesmo tipo de x, mas requisitando maior espaço

9 Representação de tipos primitivos
Booleanos 1 byte ou word; Caracteres Tabelas de caracteres; ISO-Latin1 (28), UNICODE (216), etc. Inteiros Em geral, representado por 1 word; -maxint, …, -1, 0, 1, …, +maxint; Maxint = 2w-1 – 1, onde w = size[[Integer]]; Java: w = 32;

10 Representação de tipos primitivos
Exemplo: Intel Pentium 1 word = 32 bits; Armazenamento organizado em 8-bit (byte), 16-bit (half-word), 64-bit (double-word); Type Representação Size Booleano e 1 byte Caractere ASCII Inteiros twos-complement 1 half-word ou word

11 Representação de Registros
type Data = record y:Integer, m: Integer, d: Integer end; type Details = record female: Boolean, dob: Date, status: Char end; var today: Date; var her: Details;

12 Representação de Registros
Representação direta; Simples justaposição dos campos; her.female True today.y 1 2000 her.dob.y 1978 today.m her.dob her.dob.m 5 today.d her.dob.d 5 ‘u’ her.status

13 Representação de união disjunta
Representação matemática: T = T1 + … + Tn Tag (identifica o Ti) e parte variante (Ti); Valor do tag determina o tipo da parte variante; Operações: teste do tag e projeção da parte variante; Exemplos: Registros variantes em Pascal e Ada; Uniões em Algol-68; Tipos Algébricos em Haskell e ML (funcionais); Tamanho da parte variante varia …  Como manter requisito de tamanho constante ? Aloque o máximo de bytes necessários; 

14 Representação de união disjunta
type Shape = (point, circle, box); Figure = record case s: Shape of point: () circle: (r: Integer) box: (h,w: Integer) end; var fig:Figure

15 Representação de União Disjunta
fig.s point fig.s circle fig.s box fig.r 5 fig.h 3 fig.w 4

16 Representação de Arrays
Arrays estáticos Limites conhecidos em tempo de compilação; Justaposição dos valores; var grade: array [-2..3] of Char gnp: array [ ] of Integer grade[-2] ‘A’ ‘B’ ‘C’ ‘N’ ‘F’ ‘G’ gnp[2000] 15100 15200 15000 14200 13500 grade[-1] gnp[2001] grade[0] gnp[2002] grade[1] gnp[2003] grade[2] gnp[2004] grade[3]

17 Representação de Arrays
Arrays dinâmicos Limites conhecidos em tempo de execução; Representação indireta: Manipulador (descritor de array): limites + ponteiro; Exemplo em Ada: type String is array (Integer range <>) of Character d: String (1 .. k) s: String (m .. n - 1)

18 Representação de Arrays Dinâmicos (Ada)
‘u’ ‘S’ origem 1 7 d[1] d limite inferior d[2] limite superior d[3] d[4] k = 7 m = 0 n = 4 d[5] d[6] d[7] origem 4 ‘J’ ‘e’ ‘f’ s[0] s limite inferior s[1] limite superior s[2] s[3]

19 Representação de Tipos Recursivos
type IntList = ^IntNode; type IntNode = record head: Integer; tail: IntList; end; var primes: IntList; data IntList = Nil | Cons Int IntList primes :: IntList primes = Cons 2 (Cons 3 (Cons 5 (Cons 7 Nil)))

20 Representação de Tipos Recursivos
primes 2 manipulador 3 5 7

21 Avaliação de Expressões (Máquina de Registradores)
(a * b) + (1 – (c * 2)) LOAD R1 a MULT R1 b LOAD R2 #1 LOAD R3 c MULT R3 #2 SUB R2 R3 ADD R1 R2

22 Avaliação de Expressões (Máquina de Pilha)
(a * b) + (1 – (c * 2)) LOAD a LOAD b MULT LOADL 1 LOAD c LOADL 2 MULT SUB ADD


Carregar ppt "Organização do Ambiente de Execução (Runtime System)"

Apresentações semelhantes


Anúncios Google