ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf ·...

25
Sistemas de Computação Procedimentos

Transcript of ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf ·...

Page 1: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

ProcedimentosProcedimentos

Page 2: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Chamada de Procedimentos

• Utilização de procedimentos:– Facilitar entendimento do programa– Reutilização de código

• Passos necessários para execução de um procedimento:

– Os parâmetros a serem acessados pelo procedimento são disponibilizados

– Controle é transferido para o procedimento– Recursos de memória são garantidos ao procedimento– A tarefa desejada é realizada pelo procedimento– Resultado do procedimento é disponibilizado– Controle é retornado para o ponto de origem

Page 3: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Chamada de Procedimentos

• Registradores utilizados na implementação de procedimentos em MIPS:

– $a0-$a3: quatro registradores para argumentos para o procedimento

– $v0-$v1: dois registradores para retorno dos valores do procedimento

– $ra: endereço de retorno ao final do procedimento

• Instrução para desviar para início de procedimento:

– jal endereço-do-procedimento

Page 4: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Chamada de Procedimentos

• Um registrador denominado PC (Program Counter) armazena o endereço da instrução corrente

• Registrador $ra armazena valor do PC somado ao número de bytes da instrução de desvio para o procedimento

Endereço Instrução

100 call X(a,b,c,d)

104 instr Y

X instr K

instr L

PC = 100

$ra = 104

Page 5: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Chamada de Procedimentos

• Programa que chama o procedimento:– Coloca os parâmetros em $a0-$a3– Executa a instrução jal X

• Procedimento chamado:– Efetua o processamento necessário– Armazena os resultados em $v0-$v1– Retorna o controle através da execução da instrução jr $ra

Page 6: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Chamada de Procedimentos

• Procedimento pode precisar de mais registradores

• Registradores utilizados pelos procedimentos necessitam ser restaurados na volta

• Utilização de uma pilha em memória que contém os dados que não podem ser armazenados no registradores disponíveis

• Operação de push para colocar dado e pop para remover

• Registrador para armazenar o topo da pilha $sp (stack pointer)

Page 7: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Chamada de Procedimentos

Segmento do programa em C Segmento do Programa em

MIPS int ex1 (int g, int h, int j, int i) { int f: f= (g + h) – (i + j); return f; }

ex1: subi $sp,$sp,12 sw $t1,8($sp) sw $t0, 4($sp) sw $s0,0($sp) add $t0,$a0,$a1 add $t1,$a2,$a3 sub $s0,$t0,$t1 add $v0,$s0,$zero lw $s0, 0($sp) lw $t0,4($sp) lw $t1,8($sp) addi $sp,$sp,12 jr $ra

Page 8: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Chamada de Procedimentos

$sp

$sp

$sp

a. b. c.Memória baixa

Conteúdo de $t1

Conteúdo de $t0

Memória alta

Conteúdo de $s0

Page 9: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Procedimentos aninhados

• Procedimentos que chamam outros procedimentos

• Exemplo:– Programa principal:

addi $a0, $zero, 3 # coloca 3 em $a0

jal A

– Procedimento A:addi $a0, $zero, 7 # coloca 7 em $a0, mas não uso valor em $a0

jal B # perdeu endereço de retorno ($ra) ao programa principal

– Solução: Salvar registradores na pilha

Page 10: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Procedimentos aninhados

• Procedimento fatorial em Cint fact (int n)

{

if (n<1) return (1);

else return (n*fact(n-1));

{

• Procedimento fatorial em MIPSfact: sub $sp, $sp, 8

sw $ra, 4($sp)sw $a0, 0($sp)slt $t0, $ao, 1beq $t0, $zero, L1add $v0, $zero, 1add $sp, $sp, 8jr $ra

L1: sub $a0, $a0, 1jal factlw $a0, 0($sp)lw $ra, 4($sp)add $sp, $sp, 8mul $v0, $a0, $v0jr $ra

Page 11: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Chamada de Procedimentos

• Variáveis locais são armazenadas na pilha: registro de ativação

b.

$sp

$sp

$sp

c.

$fp

$fp

a.

End. de retorno

Reg. de arg .salvos

Arrays e estruturas locais

Reg. de arg .salvos

Memória alta

Memória baixa

Page 12: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Programa em linguagem

de montagem

Processo de Compilação e Execução

Programa em CCompilador

Montador

Módulo em linguagem de

máquina Ligador

ExecutávelCarregador

Bibliotecas

Memória

Page 13: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Interpretador

• Realiza tradução, ligação e execução comando a comando do programa fonte

• Não gera nenhum produto intermediário (código objeto, código executável)

Page 14: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Interpretação versus Compilação

• Programas interpretados necessitam de mais memória que programas executáveis

• Programas interpretados são mais lentos

• Interpretação facilita identificação de erros no programa fonte, tanto na etapa de conversão como na execução (inconsistência de tipos, etc)

• Ideal: desenvolver em interpretadores e depois disponibilizar um executável

Page 15: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Montador

• Um montador traduz um arquivo contendo comandos da linguagem de montagem em um outro arquivo contendo instruções e dados em formato binário

Arquivo-fonte

Arquivo-fonte

Montador

Montador

Arquivo-objeto

Arquivo-objeto

Ligador Arquivo-executável

Page 16: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Montador

• Montador em dois passos (lê o arquivo fonte duas vezes) :

– Primeiro passo: descobre endereço dos labels– Segundo passo: traduz cada comando da linguagem de montagem

para uma instrução de máquina, associando seqüências numéricas a códigos de operação, a indicadores de registradores e a labels

• Montador armazena o nome do label e seu endereço na tabela de símbolos

Page 17: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Montador

• Montador em um passo (lê o arquivo fonte uma vez):

– Em uma única leitura, uma representação binária é construída– Quando aparece um label não definido, gravam-se o label e a

instrução em um tabela– Quando label é definido, tabela é consultada para saber as

instruções que se referenciam a ele – Montador volta para trás para completar instruções– Toda representação binária tem que estar em memória

Page 18: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Montador

• Montadores produzem arquivos-objeto:– cabeçalho: descreve o tamanho e posição das outras partes do

arquivo– segmento de texto: contém o código em linguagem de máquina– segmento de dados: contém representação binária dos dados do

arquivo-fonte– informações sobre relocação: identificam as instruções que

dependem de endereços absolutos e que devem ser relocados– tabela de símbolos: associa endereços a labels externos e

referências não resolvidas– informações para análise de erros: informações para depuradores

Page 19: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Ligadores e Carregadores

• Código objeto não é suficiente para ser executado

• Tarefas a serem executadas– Resolução de referências simbólicas (ligação)– Ajuste de endereços (relocação)– Alocação de espaço em memória (alocação)– Colocação das instruções e dados fisicamente na memória (carga)

• Código Objeto– Absoluto: os endereços constantes do código são endereços reais

de memória– Relocável: os endereços são relativos ao início do programa,

transformando-se em endereços reais apenas na execução mais flexível e mais utilizado!

Page 20: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Ligador

• Rotinas comuns são agrupadas em bibliotecas• Ligador resolve as referências externas

– Agrega o código objeto das bibliotecas a serem utilizadas, criando um único módulo de carga

– Substitui chamadas a procedimentos por seus endereços

• Relocação União dos espaços de endereçamento de cada módulo objeto

• Gera código executável (ou módulo de carga)• DLL (Dynamic Link Library)

– Os procedimentos só são ligados em tempo de execução Ligador Dinâmico

Page 21: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Alocação de memória no MIPS

Dados estáticos

Dados dinâmicos

Reservado

Texto

Memória alta

Memória baixa

$sp 7fff fffc Stack

0

pc 0040 0000

$gp 1000 8000

1000 0000

Page 22: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Código objeto

CabeçalhoNome Procedimento ATamanho do texto 100hexa

Tamanho dos dados 20hexa

Código Endereço Instrução0 lw $a0, 0($gp)4 jal 0… …

Dados 0 (X)… …

Relocação Endereço Tipo de Instr. Dependência0 lw X4 jal B

Tabela desímbolos

Label Endereço

X ---B ---

Page 23: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Código objeto

cabeçalhoNome Procedimento BTamanho do texto 200hex

Tamanho dos dados 30hex

Código Endereço Instrução0 sw $a1, 0($gp)4 jal 0--- ---

Dados 0 (Y)--- ---

Relocação Endereço0 sw4 jal 0

Tabela de símbolos Label EndereçoY ---A ---

Page 24: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Código executável

cabeçalhoTamanho do texto 300hex

Tamanho dos dados 50hex

Código Endereço Instrução0040 0000hex lw $a0, 8000hex($gp)0040 0004hex jal 40 0100hex

--- ---0040 0100hex sw $a1, 8020hex($gp)0040 0104hex jal 40 0000hex

--- ---Dados Endereço

1000 0000hex (X)--- ---1000 0020hex (Y)--- ---

Page 25: ProcedimentosProcedimentos - Início - Instituto de ...simone/scminter/contaulas/8_PROC.pdf · Compilador Montador M ó dulo em ... a indicadores de registradores e a labels • Montador

Sistemas de Computação

Carregador

• O carregador carrega o módulo executável na memória e executa as seguintes funções:

– Lê cabeçalho do arquivo executável para determinar tamanho dos segmentos de código e dados

– Cria espaço para armazenar código e dados– Copia instruções e dados para a memória– Copia os parâmetros para a pilha do programa principal– Inicializa registradores e apontador da pilha para primeiro

endereço livre– Desvia para rotina de inicialização que copia os parâmetros nos

registradores de argumento e chama rotina principal. Quando a rotina principal retorna, chama rotina do sistema