Organização do Ambiente de Execução (Runtime system)
-
Upload
vincent-browning -
Category
Documents
-
view
11 -
download
0
description
Transcript of Organização do Ambiente de Execução (Runtime system)
![Page 1: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/1.jpg)
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
![Page 2: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/2.jpg)
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
![Page 3: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/3.jpg)
Representação de Dados
• Booleanos, Inteiros, Caracteres, Registros, Arrays etc.
• Bits, bytes, words, double words.
• Gap semântico.
![Page 4: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/4.jpg)
Princípios Básicos
• Não confusão: valores diferentes de um tipo devem ter representações diferentes.
• Unicidade: cada valor (de um determinado tipo) deveria ter a mesma representação.
![Page 5: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/5.jpg)
Questões Pragmáticas
• Representação em tamanho constante• Representação direta ou indireta
![Page 6: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/6.jpg)
Representação de tipos primitivos
• Booleanos
• Caracteres
• Inteiros
![Page 7: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/7.jpg)
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;
![Page 8: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/8.jpg)
Representação de união disjunta
• Tag e parte variante
• Valor do tag determina o tipo da parte variante
• Representação matemática: T = T1 + … + Tn
• Operações: teste do tag e projeção da parte variante
![Page 9: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/9.jpg)
Representação de união disjunta
• Exemplos: registros variantes em Pascal e Ada, datatypes em Haskell e ML
• type Number = record case acc: Boolean of true: (i: Integer); false: (r: Real) end;
![Page 10: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/10.jpg)
Representação de Arrays
• Arrays estáticos
• Arrays dinâmicos
![Page 11: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/11.jpg)
Representação de tipos recursivos
type IntList = ^IntNode;
type IntNode = record head: Integer; tail: IntList; end;
var primes: IntList;
![Page 12: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/12.jpg)
Avaliação de expressões
• (a * b) + (1 – (c * 2))
• LOAD R1 aMULT R1 bLOAD R2 #1LOAD R3 cMULT R3 #2SUB R2 R3ADD R1 R2
![Page 13: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/13.jpg)
Avaliação de expressões
• (a * b) + (1 – (c * 2))• LOAD a
LOAD bMULTLOADL 1LOAD cLOADL 2MULTSUBADD
![Page 14: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/14.jpg)
Avaliação de expressões
• (0 < n) /\ odd(n)
• LOADL 0LOAD nLTLOAD nCALL oddAND
![Page 15: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/15.jpg)
Organização do Armazenamento
• Estática
• Dinâmica (pilha e heap)
![Page 16: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/16.jpg)
Alocação estática
• endereços são conhecidos em tempo de compilação, possibilitando acesso mais eficiente.
• Valores “persistem” entre chamadas diferentes a procedimentos (se usada para procedimentos).
![Page 17: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/17.jpg)
Alocação estática - limitações
• tamanho dos objetos tem que ser conhecido em tempo de compilação.
• Procedimentos recursivos não são permitidos.
• Estruturas de dados não podem ser criadas dinâmicamente.
![Page 18: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/18.jpg)
Organização do Armazenamento - pilha
• Uso da pilha para armazenar variáveis locais
• A pilha também para armazenar o estado do programa quando da chamada de procedimentos: valores de registradores, contador do programa etc.
![Page 19: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/19.jpg)
Registros de Ativação ou frame
• empilhado no início da execução de um procedimento e desempilhado ao final.
![Page 20: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/20.jpg)
Alocação na pilha
• baseada em uma pilha de controle, com registros de ativação sendo empilhados e desempilhados.
• Armazenamento de variáveis locais na pilha (no registro de ativação da chamada).
• Valores locais são removidos (perdidos) ao final da ativação (tempo de vida)
![Page 21: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/21.jpg)
Alocação na Pilha
– Tempo de vida aninhado (variáveis locais)
– Frames: um frame para cada procedimento ativo
– Registradores: StackBase, LocalBase, StackTop
– Link data: return address e dynamic link
![Page 22: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/22.jpg)
Alocação na heap
• necessária quando valores de nomes locais devem ser mantidos após o fim da ativação, ou
• se uma ativação deve sobreviver ao procedimento chamador.
• Gerenciamento da heap pode ser feito de várias maneiras (automático ou controlado pelo programador).
![Page 23: Organização do Ambiente de Execução (Runtime system)](https://reader036.fdocumentos.com/reader036/viewer/2022070402/568137e3550346895d9f8e18/html5/thumbnails/23.jpg)
Pilha x Heap
• Como o tamanho desses estruturas cresce e diminui dinamicamente, normalmente elas são estruturadas de forma a uma crescer em direção à outra.