CSI 3525, Implémentation des sous-programmes, page 1 Implémentation des sous-programmes L’environnement dans les langages structurés en bloc La structure.

Slides:



Advertisements
Présentations similaires
GEF 243B Programmation informatique appliquée
Advertisements

Premier programme en C :
La boucle for : init7.c et init71.c
Algorithmes et structures de données 9ème cours Patrick Reuter maître de conférences
GEF 243B Programmation informatique appliquée
III- Les fonctions 1- Activité 02
Gestion de FICHIERS.
La pile un élément essentiel
C.
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
Système d’exploitation : Assembleur
Système d’exploitation : Assembleur
Firebug Dévermineur Debugger.
Système d’Exploitation
Principes de programmation (suite)
Points importants de la semaine Les fonctions. La portée. La passage par copie. Les tableaux.
Sous-programmes Concepts généraux Passage de paramètres Fonctions
Structures de données linéaires
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
CSI3525: Concepts des Langages de Programmation Notes # 12: Implementation des Sous-Programmes ( Lire Chapitre 9 )
Cours 8 5. Appels de fonctions Le matériel Concepts de pile
Points importants de la semaine Le paramétrage. La portée. Le passage par copie. Le passage par référence.
LES SOUS-PROGRAMMES USTL Licence S.T.A. S3 A.P.I.2.
Système d’exploitation : Assembleur
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Présentation Structures de Données et TDA
Sixième cours Les chaînes de caractères et le passage de paramètres par référence Passage de paramètres par référence String.h.
Points importants de la semaine Le préprocesseur. La conversion de types. Les fonctions.
Points importants de la semaine Les sous-programmes. Les paramètres.
Points importants de la semaine Les constantes de compilation. Les fonctions.
CSI3525: Concepts des Langages de Programmation Notes # 7: Noms, Liaisons, Verification de Type et Portee ( Lire Chapitre 4 )
Environnements d'exécution
IFT 6800 Atelier en Technologies d’information
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Chapitre 9 Les sous-programmes.
1-1 Chapitre 5: Les variables Introduction Les noms Les variables Les attributions (bindings) Portée et durée de vie L'environnement de référence Les noms.
Méthode et Outils pour la Programmation
Procédures et fonctions
Plan cours La notion de pointeur et d’adresse mémoire.
Python Fonction et procédure
Animateur : Med HAIJOUBI
2.1 - Historique Chapitre 2 : Introduction au langage C++
JavaScript Nécessaire Web.
Cours Architecture des Systèmes Informatiques
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
Procédures et fonctions Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Créer des packages.
Un survol du language C.
Tables de compilation pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Tutorat en bio-informatique
Programmation Système et Réseau
Introduction au langage C Fonctions et Procédures
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
ISBN Chapitre 10 L'implémentation des sous- programmes.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Conception de Programmes - IUT de Paris - 1ère année Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions «
Patricia Renault UPMC 2005/2006
Patricia Renault UPMC 2005/2006
1 Cours 6 Définitions de nouvelles procédures Transmissions de données/résultats Déclarations globales/locales Visibilités Interface/implementation.
8PRO107 Éléments de programmation Les adresses et les pointeurs.
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
Architecture et technologie des ordinateurs II
CHAPITRE 10 Les sous-programmes 1. Sous-programme Suite d’instructions appelée de manière répétitive Par un programme Par plusieurs programmes distincts.
3ième Classe (Mardi, 23 Septembre) CSI2572. O jourd'8: E Allocation de mémoire E Déallocation de mémoire E Tableaux (n dimensions) E Arithmetique des.
Organisation de la mémoire pour le langage minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Philippe Gandy – 10 novembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Informatique 2A Langage C 2 è séance. Objectifs de la séance 2 Début de la modularité avec les fonctions Création d’une première bibliothèque.
Transcription de la présentation:

CSI 3525, Implémentation des sous-programmes, page 1 Implémentation des sous-programmes L’environnement dans les langages structurés en bloc La structure de la pile d’activation Chaîne statique Les fonctions et la pile

CSI 3525, Implémentation des sous-programmes, page 2 L’environnement des langages structurés en blocs Les sous-programmes sont strictement imbriqués : l’appelant attend que l’appelé ait terminé. call B A call C B call D CD

CSI 3525, Implémentation des sous-programmes, page 3 L’activation d’un sous-programme est représentée par un enregistrement d’activation sur la pile d’activation. L’enregistrement d’activation de l’appelé est placé sur le dessus de la pile, directement au dessus de celui de l’appelant. Les enregistrements d’activation sont de différentes tailles. La taille est habituellement déterminée à la compilation, à moins que les tableaux semi-dynamiques soient supportés par le langage. Toutefois, chaque enregistrement d’activation contient les mêmes genres d’informations sur l’appelant et l’appelé.

CSI 3525, Implémentation des sous-programmes, page 4 Information sur l’appelant Un pointeur vers l’enregistrement de l’appelant (le prochain enregistrement sur la pile, mais qui est nécessaire pour traiter la taille variable des enregistrements ); ceci permet l’accès à toute la chaîne des appelant précédant, jusqu’au programme principale. L’adresse de retours (Ce que l’appelant va faire après l’exécution du sous-programme). Si c’est une fonction, l’adresse ou la valeur de retours doit être placée.

CSI 3525, Implémentation des sous-programmes, page 5 Information sur l’appelé Information sur la porté — un pointeur vers l’enregistrement d’activation record du bloc englobant (pas nécessairement le même bloc que l’appelant). Les variables locales et constantes. Les paramètres formels (des copies, ou des pointeurs seulement). Mémoire temporaire (pour évaluer les expressions).

CSI 3525, Implémentation des sous-programmes, page 6 Suffisamment de mémoire doit être allouée pour représenter le bloc de l’appelé. Cette mémoire est allouée pour les appels aux procédures comme des segments de la pile. Enregistrement d’activation libre bas de la pile dessus de la pile Le compilateur génère un prologue, puis la traduction du corps du sous-programme puis finalement un épilogue.

CSI 3525, Implémentation des sous-programmes, page 7 Prologue: entrer dans un sous-programme Obtenir un segment de la mémoire libre de la pile — un bloc d’activation — et déplacer le pointeur du « top » de la pile vers le haut. Placer dans le nouveau bloc d’activation les données sur l’appelant et l’appelé.

CSI 3525, Implémentation des sous-programmes, page 8 Épilogue: sortir d’un sous-programme Retourner une valeur (si le sous- programme est une fonction). Enlever le bloc de sur la pile, et mettre à jours le « top » de la pile. Continuer l’exécution avec l’adresse de retours (continuer les instructions dans le corps de l’appelant).

CSI 3525, Implémentation des sous-programmes, page 9 Mémoire d’exécution (« run-time ») La mémoire d’exécution est séparée en trois parties. 1.Région du code: programme principale, sous- programmes. 2.Région des données: la pile d’exécution. Toutes les variables sont représentées—les variables globales sont locales dans l’enregistrement d’activation du programme principale).

CSI 3525, Implémentation des sous-programmes, page 10 Mémoire d’exécution -- suite. 3.Information de contrôle: Pointeur sur l’instruction courante: IP indique la prochaine instruction à être exécuté. Pointeur sur l’environnement courant: EP montre l’enregistrement d’activation du bloc courrant, et donne accès aux données locales et non-locales.

CSI 3525, Implémentation des sous-programmes, page 11 Dans les exemples suivant, on suppose un modèle simple: le pointeur vers l’enregistrement d’activation de l’appelant, le pointeur vers le bloc englobant, l’adresse de retours, les données locales (si il y en a), les paramètres réels (si il y en a). Les adresses de retours seront symboliques— voir les boites sur la page suivante.

CSI 3525, Implémentation des sous-programmes, page 12 La structure d’une pile d’activation program M( input,output); var A, B: integer; procedure P( C: integer; var D: integer); begin {P} {P1} C := C + 2; {P2} D := D + 3; {P3} write('P:',A,B,C, D); {P4} end; procedure Q( var C:integer); var B: integer; procedure R( C: integer); begin {R} {R1} C := 29; {R2} P(B, C); {R3} write('R:',A, B, C); {R4} end; {suite} begin {Q} {Q1} B := 23; {Q2} R(A); {Q3} P(B, C); {Q4} write('Q:', A, B, C); {Q5} end; begin {M} {M1} A := 6; {M2} B := 17; {M3} P(B, A); {M4} write('M:', A, B); {M5} Q(A); {M6} write('M:', A, B); {M7} end.

CSI 3525, Implémentation des sous-programmes, page 13 (lien dynamique) (lien statique) (adresse de retours) A’ 9 B’ 17 F1 M6 C’’  A’ B’’ 23 F2 Q3 C’’’ 29 F3 F1 R3 D’’’’  C’’’ C’’’’ 23 La pile, après P dans R dans Q dans M appelé: IP = P1, EP = F4 F1 F2 F3 F4 M Q R P Bloc d’activation Sous-programme lien dynamique Lien statique

CSI 3525, Implémentation des sous-programmes, page 14 Autre exemple program Main; var A, B: integer; procedure P; begin {P} {L1P} A := A + 1; {L2P} B := B + 1; {L3P} end; procedure Q; var B: integer; procedure R; var A: integer; begin {R} {L1R} A := 16; {L2R} P; {L3R} write(A, B); {L4R} end; {continued} begin {Q} {L1Q} B := 11; {L2Q} R; {L3Q} P; {L4Q} write(A, B); {L5Q} end; begin {Main} {L1m} A := 1; {L2m} B := 6; {L3m} P; {L4m} write(A, B); {L5m} Q; {L6m} write(A, B); {L7m} end.

CSI 3525, Implémentation des sous-programmes, page 15 (dynamic link) (static link) (return address) A 1 B 6 situation dans Main juste avant l’appel à P: IP = L3m, EP = F1 F1 Main

CSI 3525, Implémentation des sous-programmes, page 16 (dynamic link) (static link) (return address) A 1 B 6 F1 L4m F1 F2 Main P situation après P dans Main appelé: IP = L1P, EP = F2

CSI 3525, Implémentation des sous-programmes, page 17 (dynamic link) (static link) (return address) A 2 B 7 situation après P dans Main terminé: IP = L4m, EP = F1 F1 Main

CSI 3525, Implémentation des sous-programmes, page 18 (dynamic link) (static link) (return address) A 2 B 7 F1 L6m B F1 F2 Main Q situation après Q dans Main appelé: IP = L1Q, EP = F2

CSI 3525, Implémentation des sous-programmes, page 19 6) (dynamic link) (static link) (return address) A 2 B 7 F1 L6m B 11 F2 L3Q A F1 F2 F3 Main Q R situation après R dans Q dans Main appelé: IP = L1R, EP = F3

CSI 3525, Implémentation des sous-programmes, page 20 (dynamic link) (static link) (return address) A 2 B 7 F1 L6m B 11 F2 L3Q A 16 F3 F1 L3R F1 F2 F3 F4 Main Q R P situation après P dans R dans Q dans Main appelé: IP = L1P, EP = F4

CSI 3525, Implémentation des sous-programmes, page 21 (dynamic link) (static link) (return address) A 3 B 8 F1 L6m B 11 F2 L3Q A 16 F1 F2 F3 Main Q R situation après P dans R dans Q dans Main terminé: IP = L4R, EP = F3

CSI 3525, Implémentation des sous-programmes, page 22 (dynamic link) (static link) (return address) A 3 B 8 F1 L6m B 11 F1 F2 Main Q situation après P dans Q dans Main terminé: IP = L3Q, EP = F2

CSI 3525, Implémentation des sous-programmes, page 23 (10) (dynamic link) (static link) (return address) A 3 B 8 F1 L6m B 11 F2 F1 L4Q F1 F2 F3 Main Q P situation après P dans Q dans Main appelé: IP = L1P, EP = F3

CSI 3525, Implémentation des sous-programmes, page 24 (dynamic link) (static link) (return address) A 4 B 9 F1 L6m B 11 F1 F2 Main Q situation après P dans Q dans Main terminé: IP = L4Q, EP = F2

CSI 3525, Implémentation des sous-programmes, page 25 (dynamic link) (static link) (return address) A 4 B 9 situation après Q dans Main terminé: IP = L6m, EP = F1 F1 Main

CSI 3525, Implémentation des sous-programmes, page 26 Chaînes statiques On n’accède pas aux variables représentées sur la pile par leur nom. Dans un langage à porté statique, une variable doit, cependant, être trouvée en remontant la chaîne d’imbrication. Une adresse de la variable V sur la pile est composée de deux nombres qui nous disent: de combien d’enregistrements d’activation doit-on remonter la chaîne pour retrouver l’enregistrement R contenant V, à quelle adresse V se trouve t-elle du début de R.

CSI 3525, Implémentation des sous-programmes, page 27 Dans la situation où Q dans Main a été appelé : Main.Q.B(0, 3) Main.A(1, 3) Main.Binvisible (dynamic link) (static link) (return address) A 2 B 7 F1 L6m B F1 F2 Main Q

CSI 3525, Implémentation des sous-programmes, page 28 Dans la situation où P dans R dans Q dans Main a été appelé : Main.Q.R.Ainvisible Main.Q.Binvisible Main.A(1, 3) Main.B(1, 4) (dynamic link) (static link) (return address) A 2 B 7 F1 L6m B 11 F2 L3Q A 16 F3 F1 L3R F1 F2 F3 F4 Main Q R P

CSI 3525, Implémentation des sous-programmes, page 29 Les fonctions et la pile program Main; var A: integer; function G(N: integer): integer; begin if N <= 1 then G := 1 else G := G(N-1) * N end; begin A := G(3); write(A) end. La description des adresses des fragments du programme doit être plus élaborée… L1Gif N <= 1 then L2Gvalue := 1 L3Ggoto L7G L4GG(N-1) L5G  temp L6Gvalue := temp * N L7G L1MG(3) L2M  temp L3MA := temp L4Mwrite(A) L5M

CSI 3525, Implémentation des sous-programmes, page 30 (2) (dynamic link) (static link) (return address) A ? F1F1 F1F1 L2M N 3 value ? F2F2 F1F1 L5G value ? F3F3 F1F1 L5G N 1 value 1 G dans G dans G dans Main retourne avec 1: IP = L3G, EP = F 4 F1F1 F2 F3 F4 Main G G G N 2