CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

28
CES-41 CES-41 COMPILADORES COMPILADORES Capítulo VIII Capítulo VIII Ambientes de Ambientes de Execução Execução

Transcript of CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

Page 1: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

CES-41 CES-41 COMPILADORESCOMPILADORES

Capítulo VIIICapítulo VIII

Ambientes de Ambientes de ExecuçãoExecução

Page 2: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

Capítulo VIII – Ambientes Capítulo VIII – Ambientes de Execuçãode Execução

8.1 – Organização da memória durante 8.1 – Organização da memória durante a execuçãoa execução

8.2 – Ambientes de execução estáticos8.2 – Ambientes de execução estáticos

8.3 – Ambientes baseados em pilhas8.3 – Ambientes baseados em pilhas

Page 3: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

8.1 – Organização da 8.1 – Organização da Memória Durante a Memória Durante a

ExecuçãoExecução Um Um compiladorcompilador deve deve organizar o espaçoorganizar o espaço a a

ser ocupado por um programaser ocupado por um programa

Esse espaço deve conter:Esse espaço deve conter:

Instruções executáveis em linguagem de Instruções executáveis em linguagem de máquina – área de códigomáquina – área de código

Armazenamento de informações em Armazenamento de informações em processamento (variáveis, constantes) – processamento (variáveis, constantes) – área de dadosárea de dados

Page 4: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

Durante a Durante a execuçãoexecução de um programa: de um programa:

Instruções de máquinaInstruções de máquina da área de código da área de código são são executadasexecutadas

Posições de memóriaPosições de memória da área de dados são da área de dados são consultadasconsultadas e e alteradasalteradas pelas instruções pelas instruções

SubprogramasSubprogramas são são ativadosativados e e desativadosdesativados

As As instruçõesinstruções surgem da tradução do surgem da tradução do código código intermediáriointermediário, com consultas à , com consultas à tabela de tabela de símbolossímbolos

Page 5: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

Visualização da Visualização da área de códigoárea de código::

A área de código é estabelecida A área de código é estabelecida antes da antes da execuçãoexecução

Código do subprograma 1

Código do subprograma 2

.

.

.Código do

subprograma n

Ponto de entrada do subprograma 1

Ponto de entrada do subprograma 2

Ponto de entrada do subprograma n

Page 6: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

A A organização da área de dadosorganização da área de dados depende da depende da semântica da linguagemsemântica da linguagem

Perguntas sobre essa semântica:Perguntas sobre essa semântica:

O que deve acontecer com as O que deve acontecer com as variáveis locaisvariáveis locais e e seus valores, quando seu subprograma seus valores, quando seu subprograma “sai do “sai do ar”ar”??

Num subprograma, pode-se referenciar Num subprograma, pode-se referenciar variáveis não-locaisvariáveis não-locais??

Quais os modos de Quais os modos de passagem de parâmetrospassagem de parâmetros??

Os subprogramas podem ser Os subprogramas podem ser recursivosrecursivos??

Pode haver Pode haver alocação dinâmicaalocação dinâmica de memória? de memória?

Page 7: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

A A organização da área de dadosorganização da área de dados depende da depende da semântica da linguagemsemântica da linguagem

Perguntas sobre essa semântica:Perguntas sobre essa semântica:

A A desalocação de memóriadesalocação de memória deve ser deve ser explicitada?explicitada?

SubprogramasSubprogramas podem ser podem ser parâmetrosparâmetros??

SubprogramasSubprogramas podem ser podem ser retornadosretornados como como resultados?resultados?

Com relação às Com relação às variáveisvariáveis de um subprograma, a de um subprograma, a alocação de memória alocação de memória pode ser:pode ser:

Estática ou DinâmicaEstática ou Dinâmica

Page 8: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

Alocação estática: Alocação estática: a posição de memória de cada a posição de memória de cada variável é conhecida variável é conhecida antes da execuçãoantes da execução

Não há necessidade de gerenciamento em tempo Não há necessidade de gerenciamento em tempo de execuçãode execução

ChamadasChamadas de subprogramas são mais de subprogramas são mais rápidasrápidas

O local e o número de bytes de cada variável O local e o número de bytes de cada variável (escalar ou estruturada) é (escalar ou estruturada) é fixofixo

Subprogramas Subprogramas recursivosrecursivos são muito são muito limitadoslimitados: : Cada Cada variávelvariável local não pode ocupar mais de local não pode ocupar mais de

uma uma posiçãoposição na memória na memória

Estruturas de dados Estruturas de dados nãonão podem ser criadas podem ser criadas dinamicamentedinamicamente

Page 9: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

Alocação dinâmica: Alocação dinâmica: as as variáveis locais variáveis locais de um de um subprograma ficam alocadas na memória somente subprograma ficam alocadas na memória somente enquanto ele estiver enquanto ele estiver em execuçãoem execução

Memória para Memória para variáveis indexadasvariáveis indexadas pode ser pode ser alocada numa quantidade conforme a alocada numa quantidade conforme a necessidadenecessidade

RecursividadeRecursividade pode ser usada de modo bem menos pode ser usada de modo bem menos restritorestrito

Um Um subprogramasubprograma pode ter várias pode ter várias ativações ativações simultâneassimultâneas

É necessário incluir no código objeto instruções É necessário incluir no código objeto instruções para para gerenciamento de memóriagerenciamento de memória em tempo de em tempo de execuçãoexecução

ChamadasChamadas de subprogramas são mais de subprogramas são mais demoradasdemoradas

Page 10: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

Registro de ativação:Registro de ativação:

Bloco de memória na área de dados, contendo Bloco de memória na área de dados, contendo informações necessárias à informações necessárias à ativaçãoativação de um de um subprogramasubprogramaVisualização dos campos do registro de ativação de um subprograma:

Valor retornado

ParâmetrosLigação de controle

Ligação de acessoStatus da máquina

Variáveis locais

Temporárias

Page 11: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

Registro de ativação:Registro de ativação:

Valor retornado

ParâmetrosLigação de controle

Ligação de acessoStatus da máquina

Variáveis locais

Temporárias

Valor retornado: a ser retirado pela ativação que chamou o subprograma

Parâmetros: recebem os argumentos da ativação que chamou o subprograma

Ligação de controle: aponta para o registro de ativação de quem chamou o subprograma

Ligação de acesso: referências a variáveis não-locais alocadas em outros registros de ativação

Page 12: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

Registro de ativação:Registro de ativação:

Valor retornado

ParâmetrosLigação de controle

Ligação de acessoStatus da máquina

Variáveis locais

Temporárias

Variáveis locais: seu layout é planejado pelos dados da TabSimb

Temporárias: valores intermediários de cálculo de expressões

Status da máquina: valores de registradores (PC, SP, etc.) antes da chamada do subprograma

Page 13: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

Registro de ativação:Registro de ativação:

Valor retornado

ParâmetrosLigação de controle

Ligação de acessoStatus da máquina

Variáveis locais

Temporárias

Nem todas as linguagens e compiladores usam todos esses campos:

Fortran não usa ligação de acesso

Parâmetros e valores retornados muitas vezes usam registradores, para maior eficiência

Page 14: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

8.2 – Ambientes de 8.2 – Ambientes de Execução EstáticosExecução Estáticos

É o tipo mais É o tipo mais simplessimples de ambiente de ambiente

Não há necessidadeNão há necessidade de código para de código para gerenciamento de memória durante a execuçãogerenciamento de memória durante a execução

Cada Cada subprogramasubprograma tem um tem um únicoúnico registro de registro de ativação, alocado ativação, alocado antes da execuçãoantes da execução

As variáveis de todos os subprogramas As variáveis de todos os subprogramas permanecempermanecem alocadasalocadas durante toda a durante toda a execução do programa execução do programa

Os valores das variáveis locais se mantêm Os valores das variáveis locais se mantêm entre entre duas chamadasduas chamadas do subprograma do subprograma

Page 15: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

Visualização de toda a área do programa:Visualização de toda a área do programa:

Código do programa principalCódigo do subprograma

1...

Código do subprograma n

Área de dados globais

Registro de ativação do programa principal

.

.

.

Registro de ativação do subprograma n

Registro de ativação do subprograma 1

Área de código

Área de dados

Page 16: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

8.3 – Ambientes Baseados 8.3 – Ambientes Baseados em Pilhasem Pilhas

Adotados para permitir Adotados para permitir recursividaderecursividade de de modo mais amplo modo mais amplo

Um mesmo subprograma pode ter Um mesmo subprograma pode ter vários vários registros de ativaçãoregistros de ativação

Variáveis locais recebem Variáveis locais recebem novas posiçõesnovas posições a a cada alocaçãocada alocação

Registros de ativaçãoRegistros de ativação são guardados numa são guardados numa pilhapilha

Page 17: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

Subdivisão típica do espaço de memória Subdivisão típica do espaço de memória reservado para a execução de um programa:reservado para a execução de um programa:

Área de código

Área de dados globais e/ou estáticos

Espaço livre

Heap

Pilha de registros de ativação

A área de código tem tamanho fixo, determinada antes da execução

A área de dados globais e/ou estáticos também é fixa e estabelecida antes da execução

Page 18: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

Subdivisão típica do espaço de memória Subdivisão típica do espaço de memória reservado para a execução de um programa:reservado para a execução de um programa:

Área de código

Área de dados globais e/ou estáticos

Espaço livre

Heap

Pilha de registros de ativação

Quando um subprograma é chamado, seu registro de ativação é empilhado

Ao se retornar dele, tal registro é desempilhado

A alocação dinâmica de variáveis é feita na área heap

A pilha e a heap têm tamanhos variáveis durante a execução

Page 19: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

Subdivisão típica do espaço de memória Subdivisão típica do espaço de memória reservado para a execução de um programa:reservado para a execução de um programa:

Área de código

Área de dados globais e/ou estáticos

Espaço livre

Heap

Pilha de registros de ativação

Quando um subprograma é chamado, seu registro de ativação é empilhado

A execução do subprograma que chama é interrompida

No registro empilhado são incluídos os valores do program counter e de outros registradores

Também são incluídas as variáveis locais do programa chamado

Page 20: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

Subdivisão típica do espaço de memória Subdivisão típica do espaço de memória reservado para a execução de um programa:reservado para a execução de um programa:

Área de código

Área de dados globais e/ou estáticos

Espaço livre

Heap

Pilha de registros de ativação

Ao se retornar de um subprograma, seu registro de ativação é desempilhado:

•A execução da ativação do subprograma que o chamou é retomada

•Os valores do program counter e de registradores relevantes são restabelecidos

•A variáveis locais do subprograma chamado são desalocadas

Page 21: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

Exemplo:Exemplo: seja o programa a seguir para o seja o programa a seguir para o QuickSortQuickSort

int A[8];int A[8];

void ReadVetor ( ) {void ReadVetor ( ) {

int i; for (i = 0; i <= 7; i++) scanf (“%d”, &A[i]);}int i; for (i = 0; i <= 7; i++) scanf (“%d”, &A[i]);}

int Partition (int inic, int fim) { - - - - - }int Partition (int inic, int fim) { - - - - - }

void QuickSort (int inic, int fim) {void QuickSort (int inic, int fim) {

int k;int k;

if (inic < fim) {if (inic < fim) {

k = Partition (inic, fim);k = Partition (inic, fim);

QuickSort (inic, k-1); QuickSort (k, fim);QuickSort (inic, k-1); QuickSort (k, fim);

}}

}}

void main () {ReadVetor (); QuickSort (0, 7);}void main () {ReadVetor (); QuickSort (0, 7);}

Page 22: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

Árvore de ativação para certa entrada de Árvore de ativação para certa entrada de dados:dados:

main

Read Q(0,7)

Q(0,2) Q(3,7)P(0,7)

Q(0,1) Q(2,2)P(0,2) Q(3,4)

Q(5,7)P(3,7)

Q(0,0)

Q(1,1)

P(0,1)

Q(3,3)

Q(4,4)

P(3,4)

Q(5,6)

Q(7,7)

P(5,7)

Q(5,5)

Q(6,6)

P(5,6)

As ativações vivas são as que ficam na pilha da área de dados

Exemplo: ativações na pilha, no início da ativação de Q(2,2)

Page 23: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

main

Read Q(0,7)

Q(0,2)P(0,7)

Q(0,1) Q(2,2)P(0,2)

Q(0,0)

Q(1,1)

P(0,1)

As linhas tracejadas são ativações já completadas, que já pertenceram à pilha da área de dados

Exemplo: ativações na pilha, no início da ativação de Q(2,2)

Page 24: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

A tradução das quádruplas dos operadoresA tradução das quádruplas dos operadores

CALLCALL, , OPENMODOPENMOD, , RETURNRETURN

deve conter código para gerenciar a pilha de deve conter código para gerenciar a pilha de registros de ativação e para construir cada um registros de ativação e para construir cada um desses registrosdesses registros

Valor retornado

ParâmetrosLigação de controle

Ligação de acessoStatus da máquina

Variáveis locais

Temporárias

Page 25: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

CALL:CALL:

Deposita os argumentos nos parâmetrosDeposita os argumentos nos parâmetros Guarda o valor do Guarda o valor do program-counterprogram-counter Faz as ligações de controleFaz as ligações de controle

Valor retornado

ParâmetrosLigação de controle

Ligação de acessoStatus da máquina

Variáveis locais

Temporárias

Page 26: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

OPENMOD:OPENMOD:

Aloca as variáveis locaisAloca as variáveis locais Guarda valores de registradores importantesGuarda valores de registradores importantes Faz as ligações de acessoFaz as ligações de acesso Aloca variáveis temporáriasAloca variáveis temporárias

Valor retornado

ParâmetrosLigação de controle

Ligação de acessoStatus da máquina

Variáveis locais

Temporárias

Page 27: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

RETURN:RETURN:

Coloca o valor a ser retornado em sua posiçãoColoca o valor a ser retornado em sua posição Restabelece os valores anteriores do Restabelece os valores anteriores do program-program-

countercounter e de outros registradores e de outros registradores Desempilha o registro de ativação e, com ele, Desempilha o registro de ativação e, com ele,

as variáveis locaisas variáveis locaisValor retornado

ParâmetrosLigação de controle

Ligação de acessoStatus da máquina

Variáveis locais

Temporárias

Page 28: CES-41 COMPILADORES Capítulo VIII Ambientes de Execução.

A A complexidadecomplexidade de um ambiente de execução de um ambiente de execução baseado em pilha baseado em pilha crescecresce para linguagens com para linguagens com

AninhamentosAninhamentos de subprogramas e/ou de de subprogramas e/ou de blocosblocos

Para essas linguagens, o acesso a Para essas linguagens, o acesso a variáveis variáveis não-locaisnão-locais requer uma procura nos requer uma procura nos vários vários registros de ativaçãoregistros de ativação presentes na pilha presentes na pilha

Sem aninhamentosSem aninhamentos, as variáveis não-locais , as variáveis não-locais são as do são as do escopo globalescopo global