Ambiente de Execução - Rotinas

Slides:



Advertisements
Apresentações semelhantes
Estrutura de Dados Pilha by Aquiles Burlamaqui. Definição Uma pilha é uma das várias estruturas de dados que admitem remoção de elementos e inserção de.
Advertisements

Parte 1: Organização de Computadores
Parte 1: Organização de Computadores
Programação II Estruturas de Dados
Aula 4 – Sumário Linguagem assembly do MAC-1 A pilha
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
Coleta de resíduos. Sumário Resíduos Coleta de resíduos Contador de referências Marcação e varredura Parada e cópia Marcação e compactação Gerenciamento.
Variáveis Dinâmicas Caixas de Nós
Alocação Dinâmica de Memória
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Estruturas de Dados e Algoritmos
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Construção de Compiladores
Arquitetura de Computadores
Algoritmos e Estruturas de Dados II
Aula 4 Nomes, Vinculações, Tipos e Escopos
1 Aula 7 ImplementandoSubprogramas Universidade do Vale do Rio dos Sinos
Robson Godoi / Sandra Siebra
Listas Encadeadas.
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
Variáveis, Tipos de Dados e Constantes
LISTAS DUPLAMENTE ENCADEADAS
Sub-programas. Mecanismo de composição de programas Sub-programa está para peça de LEGO assim como um programa está para a construção.
Definição de Tipos Estruturas e Ponteiros
Aula 11 LISTAS LIGADAS.
Estruturas de Dados com Jogos
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
Alocação Dinâmica de Memória
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estruturas de Dados com Jogos
PROGRAMAÇÃO ESTRUTURADA (MODULARIZAÇÃO/SUBPROGRAMAÇÃO)
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Organização do Ambiente de Execução (Runtime System)
Verificação de Tipos e Escopos
Nomes, Variáveis e Vinculações
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.
Listas, Filas e Pilhas Katia Guimarães.
Aula 3 Listas, pilhas, filas.
Compilação de Linguagens OO Marco Simões (macs3) André Santos (alms)
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
Sistemas Operacionais
Universidade do Vale do Rio dos Sinos - São Leopoldo -
Capítulo VIII Ambientes de Execução
Aula P.02 – BCC202 Revisão sobre Ponteiros Túlio Toffolo
1 Alocação Dinâmica Quando se declara arrays o tamanho deve ser fixo e definido primeiramente –Alocação estática Pode-se alocar dinamicamente o espaço.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Regras de escopo Escopo: trecho de codificação no qual o identificador possui significado Escopo de função: identificador válido dentro do trecho de uma.
VARIÁVEIS COMPOSTAS HOMOGÊNEAS UNIDIMENSIONAIS (VETORES)
Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Conversão de Tipos Exemplo: x + i, onde x é do tipo real e i é do tipo integer. A especificação da linguagem deve indicar se a linguagem suporta este tipo.
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Recursividade Bruno Silva.
Professor Ulisses Vasconcelos
Estruturas de Dados + Algoritmos = Programas
Procedimentos Registro de Ativação e Variáveis Locais 11 1.
Recursividade Profs. De Prog2 e Lab2.
Organização do Armazenamento EstáticaEstática –Variáveis globais; –Fortran; Dinâmica (pilha e heap)Dinâmica (pilha e heap) –Variáveis locais; –Sem aninhamento:
Ponteiros em C Prof. Kariston Pereira
Estruturas de Dados Murilo Salgado Razoli.
Estrutura de Dados Revisão Professor Luiz José Hoffmann Filho
Linguagens de Programação Pedro Lopes MÓDULO 4- Subprogramas (Procedimentos e Funções) 2010/2011.
Ponteiros. Programação II Professora: Mai-Ly vanessa horário: ter 9h-11h; sex 11h-13h Aula 1.
COMPILADORES 07 Prof. Marcos.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Pilha dinâmica Prof.° Jean Daniel Henri Merlin Andreazza
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
SUB-ROTINAS EM PASCAL PROGRAMAÇÃO MODULARIZADA 252.
Transcrição da apresentação:

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.

Rotinas Vamos estudar: protocolos de passagem de argumentos e retorno de resultados. Argumentos Implementação de rotinas recursivas.

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.

Mecanismos de passagem de parâmetros Constant parameter ou value parameter ou call-by-value Variable parameter ou reference parameter ou call-by-reference

Call-by-Value os parâmetros são avaliados e seus valores passados ao procedimento chamado. Exemplos: C, Pascal.

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.

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; a := 1; b :=2; swap(a,b); writeln(a,‘ ’, b) end

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.

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)

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.

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; a := 1; b :=2; swap(a,b); writeln(a,‘ ’, b) end

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; i := 5; swap(i,a[i]); end

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.

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 :=p end; begin head := nil; insert(1); insert(2); insert(3); writeln(head^.info); writeln(head^.next^.info); writeln(head^.next^.next^.info) end.

Lixo begin head := 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.

Referências perdidas begin head := 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.

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.

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.

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

Desalocação implícita É necessário saber da existência de todos os ponteiros armazenados: na pilha e na própria heap.

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.