FUNZIONI: IL MODELLO A RUN-TIME 1) creazione di una nuova attivazione (istanza) del servitore 2) allocazione di memoria per i parametri e per le variabili.

Slides:



Advertisements
Presentazioni simili
Puntatori Linguaggio C.
Advertisements

IL MODELLO CLIENTE / SERVITORE. Servitore: un qualunque ente computazionale capace di nascondere la propria organizzazione interna presentando ai clienti.
Puntatori in C e C++.
Procedure In assembler.
Procedure e funzioni A. Ferrari.
Strutture dati lineari
Il Sistema Operativo.
Massa Laura Mela Enrica
1 Semantica Operazionale di un frammento di Java: lo stato.
Semantica Operazionale di un frammento di Java: lo stato
1 Strutture dati nel supporto a run time. 2 Entità presenti quando un programma va in esecuzione §programmi dutente (compilati) §routines del supporto.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Fondamenti di Informatica CDL in Ingegneria Gestionale (B)- A.A CDL in Ingegneria Gestionale (B)- A.A Programmazione Ricorsiva.
Fondamenti di Informatica I CDL in Ingegneria Elettronica - A.A CDL in Ingegneria Elettronica - A.A Strutture dati dinamiche.
Chiamate a Procedure. Per lesecuzione di una procedura, un programma deve eseguire i seguenti sei passi: mettere i parametri in un posto dove la procedura.
UD 3: “Le Liste” UD 4: “Pile e Code” UD 5: “Alberi e grafi”
Gestione della memoria
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Università degli Studi di Roma La Sapienza Architettura degli elaboratori II Funzioni.
Allocazione dinamica della memoria
Laboratorio di Linguaggi lezione VIII Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
1 Corso di Informatica (Programmazione) Lezione 12 (19 novembre 2008) Programmazione in Java: i metodi statici.
CALCOLATORI ELETTRONICI Gestione delle subroutine.
Gestione delle subroutine
Approfondimento delle classi
nome: sequenza di caratteri usata per denotare un oggetto
memoria gestita staticamente:
Sistemi Operativi GESTIONE DELLA MEMORIA CENTRALE.
La Programmazione Ricorsiva
Le funzioni.
Le funzioni a tempo di esecuzione
FUNZIONI: IL MODELLO APPLICATIVO 1) Valutazione, nellenvironment corrente, del simbolo che denota il nome della funzione; 2) Valutazione, nellenvironment.
DEFINIZIONE DI NUOVE FUNZIONI & STRATEGIE DI COMPOSIZIONE La capacità di definire nuove funzioni permette: di definire nuove operazioni di introdurre variabili.
FUNZIONI... Una funzione permette di dare un nome a una espressione rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) { return.
Ereditarietà e Polimorfismo
Unità Didattica 3 Linguaggio C
Laboratorio di Linguaggi lezione VII: variabili Globali e Locali Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali.
Lo sviluppo top down Le funzioni
Passaggio di parametri per indirizzo
2000 Prentice Hall, Inc. All rights reserved. Attivazione di funzioni La chiamata/attivazione di funzione viene indicata citando il nome della funzione.
Complessità di un algoritmo
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 3 Aprile 2015.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Allievi Elettrici - AA Le funzioni ricorsive in C
Algoritmi e Strutture Dati Strutture Dati Elementari.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
ALLOCAZIONE STATICA: LIMITI Per quanto sappiamo finora, in C le variabili sono sempre dichiarate staticamente –la loro esistenza deve essere prevista e.
Il linguaggio C Puntatori e dintorni.
Metodologie di Programmazione Esercizi sulla semantica di Java.
1 Strutture dati. 2 Astrazione Non vogliamo sapere l’organizzazione fisica dei dati  indirizzi e celle di memoria Ci interessa solo la loro organizzazione.
1 Semantica Operazionale di un frammento di Java: lo stato estensione (con piccole varianti) di quella in Barbuti, Mancarella, Turini, Elementi di Semantica.
Esercizio 14 – chiamata di una procedura Il codice deve: Passare due parametri alla procedura ‘salva’ Questa procedura deve salvare i due parametri nel.
La dichiarazione di una funzione è costituita dalla sola interfaccia, senza corpo (sostituito da un ; ) ::= ( ) ; DICHIARAZIONI DI FUNZIONE.
Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni.
1 Semantica Operazionale di un frammento di Java: intro estensione (con piccole varianti) di quella di FP | v |
1 1. Introduzione alla gestione della memoria 2. Swapping 3. Memoria virtuale 4. Implementazione 5. Algoritmi di sostituzione Gestione della Memoria.
Esercizi.
1 Laboratorio di Programmazione di Sistema - C Susanna Pelagatti Ricevimento: Me ,
FUNZIONI... Una funzione permette di  dare un nome a una espressione  rendendola parametrica float f(){ return * sin(0.75); } float f1(int x) {
Convenzioni chiamate a procedure Riassunto Pratico.
1 Espressioni 4 dato che non abbiamo previsto inizializzazioni per le variabili (statiche e di istanza) all’interno delle classi, le espressioni possono.
1 System Call ancora Vediamo passo passo come funziona una SC.
Corso di Laurea in Informatica Architettura degli elaboratori a.a Programmazione Assembly: procedure (1) Supporto hardware alle procedure Passaggio.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Funzioni e Procedure Marco D. Santambrogio – Ver. aggiornata al 4 Aprile 2016.
10. Programmazione Ricorsiva Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Introduzione alle Classi e agli Oggetti in Java 1.
13. Strutture dati dinamiche Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
1 MODULO STRUTTURE DATI FONDAMENTALI: Strutture dinamiche classe 4° INDUSTRIALE INFORMATICA Focus on.
Transcript della presentazione:

FUNZIONI: IL MODELLO A RUN-TIME 1) creazione di una nuova attivazione (istanza) del servitore 2) allocazione di memoria per i parametri e per le variabili locali 3) passaggio dei parametri 4) trasferimento del controllo 5) esecuzione del codice della funzione

IL MODELLO A RUN-TIME: L’ENVIRONMENT La definizione di una funzione introduce un nuovo binding nell’environment in cui la funzione è definita (C: global environment) Al momento dell’invocazione, si crea un nuovo environment –una struttura dati che contiene i binding dei parametri e degli identificatori definiti localmente alla funzione –record di attivazione (frame)

IL MODELLO A RUN-TIME: ORGANIZZAZIONE DELLA MEMORIA Area codice Area dati –area dati globali –heap –stack

IL MODELLO A RUN-TIME: ORGANIZZAZIONE DELLA MEMORIA Area codice Area dati –area dati globali –heap –stack Contiene le variabili libere (non definite dentro a una funzione)

IL MODELLO A RUN-TIME: ORGANIZZAZIONE DELLA MEMORIA Area codice Area dati –area dati globali –heap –stack Contiene i record di attivazione (frame) delle funzioni

IL MODELLO A RUN-TIME: ORGANIZZAZIONE DELLA MEMORIA Area codice Area dati –area dati globali –heap –stack Area destinata alle variabili dinamiche

RECORD DI ATTIVAZIONE È il “mondo della funzione”: contiene tutto ciò che ne caratterizza l’esistenza  i parametri ricevuti  le variabili locali  l’indirizzo di ritorno che indica il punto a cui tornare (nel codice del cliente) al termine della funzione  un collegamento al record di attivazione del cliente

RECORD DI ATTIVAZIONE È il “mondo della funzione”: contiene tutto ciò che ne caratterizza l’esistenza  i parametri ricevuti  le variabili locali  l’indirizzo di ritorno che indica il punto a cui tornare (nel codice del cliente) al termine della funzione  un collegamento al record di attivazione del cliente Necessario per permettere al cliente di di riprendere la sua esecuzione dall'istruzione successiva alla chiamata della funzione

RECORD DI ATTIVAZIONE È il “mondo della funzione”: contiene tutto ciò che ne caratterizza l’esistenza  i parametri ricevuti  le variabili locali  l’indirizzo di ritorno che indica il punto a cui tornare (nel codice del cliente) al termine della funzione  un collegamento al record di attivazione del cliente Necessario per permettere al cliente di tornare al suo mondo

RECORD DI ATTIVAZIONE

Parametri passati dal cliente Variabili locali definite localmente alla funzione Collegamento al record di attivazione del cliente Indirizzo di ritorno

RECORD DI ATTIVAZIONE Rappresenta il “mondo della funzione”: nasce e muore con essa è creato al momento della invocazione di una funzione permane per tutto il tempo in cui la funzione è in esecuzione è distrutto (deallocato) al termine della esecuzione della funzione stessa.

RECORD DI ATTIVAZIONE Ad ogni chiamata di funzione viene creato un nuovo record, specifico per quella chiamata di quella funzione La dimensione del record di attivazione –varia da una funzione all’altra –per una data funzione, è fissa e calcolabile a priori

RECORD DI ATTIVAZIONE Funzioni che chiamano altre funzioni danno luogo a una sequenza di record di attivazione  allocati secondo l’ordine delle chiamate  deallocati in ordine inverso La sequenza dei link dinamici costituisce la cosiddetta catena dinamica, che rappresenta la storia delle attivazioni (“chi ha chiamato chi”)

RECORD DI ATTIVAZIONE Per catturare la semantica delle chiamate annidate (una funzione che chiama un’altra funzione che...), l’area di memoria in cui vengono allocati i record di attivazione deve essere gestita come una pila STACK Una struttura dati gestita con politica LIFO (Last In, First Out - l’ultimo a entrare è il primo a uscire)

RECORD DI ATTIVAZIONE Il valore di ritorno calcolato dalla funzione può essere restituito al cliente in due modi: inserendo un apposito “slot” nel record di attivazione –il cliente deve copiarsi il risultato da qualche parte prima che il record venga distrutto tramite un registro della CPU –soluzione più semplice ed efficiente, privilegiata ovunque possibile.

ESEMPIO DI CHIAMATE ANNIDATE Programma: int R(int A) { return A+1; } int Q(int x) { return R(x); } int P(void) { int a=10; return Q(a); } main() { int x = P(); } Sequenza chiamate: S.O.  main  P()  Q()  R()

ESEMPIO DI CHIAMATE ANNIDATE Sequenza chiamate: S.O.  main  P()  Q()  R() sequenza attivazioni

ESEMPIO: FATTORIALE int fattoriale(int n) { return (n>1) ? n*fattoriale(n-1) : 1; } main(){ int x = 2; int y = fattoriale(x); }

ESEMPIO: FATTORIALE Situazione all’inizio dell’esecuzione del main()

ESEMPIO: FATTORIALE Il main() chiama fattoriale(2)

ESEMPIO: FATTORIALE fattoriale(2) chiama fattoriale(1) fattoriale(1) calcola il valore 1

ESEMPIO: FATTORIALE fattoriale(1) termina e restituisce 1. Il controllo torna a fattoriale(2).

ESEMPIO: FATTORIALE fattoriale(2) termina e restituisce 2. Il controllo torna a main().

UNA PICCOLA VARIANTE int fact(int n) { return (n>0) ? n*fact(n-1) : 1; } main(){ int y = fact(3); }

SEQUENZA CHIAMATE PER FATTORIALE(3) fact(3) n 3 n*fact(n-1); 2 fact(2) n*fact(n-1); 1 fact(1) n*fact(n-1); n n 0 fact(0)  1 1 n RA DL

FATTORIALE TAIL-RICORSIVO int fact1( int n, int v, int k ){ return (n==k) ? v : fact1(n,v*(k+1),k+1); } main(){ int y = fact1(3,1,0); }

fact1(3,1,0) Evoluzione fact(3,1,0)  fact(3,1*1,1) fact(3,1,1)  fact(3,1*2,2) fact(3,2,2)  fact(3,2*3,3) fact(3,6,3)  6 SL | RTA | DL