Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a...

21
Ambiente de Execução - Rotinas • Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. • Instrução de desvio (call) e de retorno (return) • Possível passagem de argumentos (valores ou endereços) e retorno de resultado.

Transcript of Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a...

Page 1: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Ambiente de Execução - Rotinas

• Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções.

• Instrução de desvio (call) e de retorno (return)

• Possível passagem de argumentos (valores ou endereços) e retorno de resultado.

Page 2: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Rotinas

• Vamos estudar: protocolos de passagem de argumentos e retorno de resultados.

• Argumentos

• Implementação de rotinas recursivas.

Page 3: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Protocolo de chamada de rotinas

• Em uma máquina baseada em registradores:– Parâmetros passados em registradores R1, R2,

etc.– Resultado em R0

• Em uma máquina de pilha:– Argumentos são passados no topo da pilha– Resultado no topo da pilha, depois de

removidos os argumentos.

Page 4: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Mecanismos de passagem de parâmetros

• Constant parameter ou value parameter ou call-by-value

• Variable parameter ou reference parameter ou call-by-reference

Page 5: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Call-by-Value

• os parâmetros são avaliados e seus valores passados ao procedimento chamado.

• Exemplos: C, Pascal.

Page 6: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Call-by-Value - implementação

– o procedimento que faz a chamada avalia os argumentos e coloca seus valores no topo da pilha.

– Um novo frame é empilhado sobre os argumentos, e carregado com dados de ligação (endereço de retorno, link dinâmico e link estático).

– A instrução de retorno desempilha o frame e coloca o resultado no topo da pilha.

Page 7: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Call-by-Value - exemplo

program reference(input,output);var a,b : integer;procedure swap (x,y:integer);var temp : integer;begin temp := x; x := y; y := temp;end;begin a := 1; b :=2; swap(a,b); writeln(a,‘ ’, b)end

Page 8: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Call-by-Value - implementação

– operações nos argumentos não afetam os valores no frame (registro de ativação) do caller.

– única maneira de afetar o caller é através de variáveis não-locais, ou através de ponteiros passados explicitamente como valores.

Page 9: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Call-by-Value – exemplo em C

swap (x,y);int *x, *y;{ int temp; temp = *x; *x = *y; *y = temp;}main (){ int a = 1,b = 2; swap (&a, &b); printf(“%d %d\n”,a,b)}

Page 10: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Call-by-Reference

• parâmetros são passados por referência, i.e. o caller passa para o processo chamado um ponteiro para o endereço do parâmetro real.

• uma referência ao parâmetro formal no procedimento chamado torna-se, na realidade, uma referência indireta através do ponteiro.

Page 11: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Call-by-reference - exemplo

program reference(input,output);var a,b : integer;procedure swap (var x,y:integer);var temp : integer;begin temp := x; x := y; y := temp;end;begin a := 1; b :=2; swap(a,b); writeln(a,‘ ’, b)end

Page 12: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Call-by-reference – exemplo 2

program reference(input,output);var i : integer; var a : array [1..10] of integer;procedure swap (var x,y:integer);var temp : integer;begin temp := x; x := y; y := temp;end;begin i := 5; swap(i,a[i]); end

Page 13: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Facilidades para alocação dinâmica de espaço

• Alocação explícita ou implícita

• Desalocação explícita ou implícita

• Exemplo: em Pascal, new e dispose, em C malloc/free.

Page 14: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Alocação e desalocação explícita - Exemplo

type link = ^cell;cell = record info : integer; next : link end;

var head : link;procedure insert(i : integer);

var p : link;begin new(p); p^info := i; p^next := head; head :=pend;

beginhead := nil; insert(1); insert(2); insert(3);writeln(head^.info); writeln(head^.next^.info);writeln(head^.next^.next^.info)

end.

Page 15: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Lixo

beginhead := nil; insert(1); insert(2); insert(3);head^.next := nil;writeln(head^.info)

end.• Linguagens funcionais e Java: coleta de lixo

automática (garbage collection).• C, Pascal: responsabilidade do programador.

Page 16: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Referências perdidas

beginhead := nil; insert(1); insert(2); insert(3);dispose(head^.next);writeln(head^.info)

end.• head^.next ainda existe, mas aponta para uma

área que foi liberada.

Page 17: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Alocação explícita de blocos de tamanho fixo

• cada bloco aponta para o próximo bloco livre• existe um ponteiro chamado available que

aponta para o primeiro bloco.• alocação e desalocação ocorre através da

inserção ou remoção de um bloco na lista.

Page 18: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Alocação explícita de blocos de tamanho variável

• fragmentação ocorre após várias alocações e desalocações.

• uso de método first fit.• vários algoritmos são possíveis para manter o

controle de espaço disponível.

Page 19: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Desalocação implícita

• Exige cooperação entre o programa do usuário e o sistema de execução da linguagem, para saber quando um bloco não está mais sendo usado.

• cooperação ocorre através do uso de um formato fixo para os blocos alocados:

tamanho do bloco (opc.)

contador de referências (opc.)

marca (opc.)

ponteiros para blocos

informação do usuário

Page 20: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Desalocação implícita

• É necessário saber da existência de todos os ponteiros armazenados: na pilha e na própria heap.

Page 21: Ambiente de Execução - Rotinas Rotinas/subrotinas são o conceito equivalente a chamadas a procedimentos e funções. Instrução de desvio (call) e de retorno.

Técnicas para Desalocação implícita

• Contagem de referências: mantém a contagem de blocos que apontam para o bloco corrente; se o contador chega a zero o bloco é desalocado.Exemplo: p := q;Útil se não existem ciclos.

• Mark and scan: suspende temporariamente execução e percorre os ponteiros para determinar quais blocos estão sendo usados.implementação: 2-espaços, compactação, etc.