Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parLiliane Bourbon Modifié depuis plus de 9 années
1
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
2
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
3
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é.
4
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.
5
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).
6
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.
7
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é.
8
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).
9
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).
10
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.
11
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.
12
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.
13
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
14
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.
15
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
16
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
17
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
18
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
19
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
20
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
21
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
22
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
23
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
24
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
25
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
26
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.
27
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
28
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
29
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
30
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
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.