IN 103 - Cours 7
1 Piles
Une pile est une structure de donn´ees permettant de stocker des ´el´ements d’un mˆeme type.
Une pile d’entiers permettra de stocker des entiers, une pile de struct blah t permettra de
stocker des struct blah t .
Une pile est une structure dernier entr´e-premier sorti .
push : on empile (rajoute) une information sur le sommet de la pile.
pop : on d´epile (retire) l’information se trouvant au sommet de la pile.
pop (stack)
elem1
elem2
elem3
elem4
elem1
elem3
elem4
elem2
elem1
elem2
elem4
elem3
1)
2)
push (stack, elem4)
pop (stack)
En C on repr´esente l’espace de stockage d’une pile par un tableau.
Pour savoir o`u empiler et d’o`u d´epiler, on m´emorise un pointeur de pile indique la prochaine
place libre dans le tableau.
Le pointeur de pile n’est pas un pointeur C : c’est un entier positif repr´esentant un indice
dans le tableau de la pile.
En C, une pile de taille fixe (64) contenant des ´el´ements de type un type est repr´esenee
par une structure :
#de fin e MAX SIZE 64
struct stack {
unsigned i n t sp ; /Poin t e u r de p i l e . /
un ty pe d at a [ MAX SIZE ] ; /Zone de s t o c k a g e d e l a p i l e . /
};
Initialement, une pile est vide (ne contient pas d’´el´ements) : le pointeur de pile est `a 0.
Essayer de d´epiler dans une pile vide (pointeur de pile == 0) provoque une erreur.
Essayer d’empiler dans une pile pleine (pointeur de pile == MAX SIZE) provoque une erreur.
push (stack, 5)
sp
42
5
???
2
???
sp
data[MAX_SIZE − 1]
42
???
???
1
???
data[2]
data[1]
data[0]
sp
push (stack, 5) :
V´erifier que sp < M AX SIZ E
5 mis `a l’indice sp 1
Incr´ementer sp :sp sp +1 2
1
5
sp
sp
data[MAX_SIZE − 1]
data[2]
data[1]
data[0]
sp
pop (stack)
42
5
???
2
???
42
???
1
???
?5?
pop (stack)
V´erifier que sp >0
D´ecr´ementer sp :sp sp11
Retourner la valeur `a l’indice sp
(sommet de la pile)
On peut implanter une pile de taille non fixe en allouant dynamiquement (avec malloc) le
tableau et en le r´e-allouant (nouvelle allocation, recopie, lib´eration de l’ancien tableau) lorsque
la pile est pleine.
2 Du code source `a l’ex´ecution
Code source = description statique.
Ex´ecutable = comportement dynamique.
Le langage dans lequel est ´ecrit le source poss`ede une s´emantique dynamique.
Processus du code source `a l’ex´ecution :
1. D´ecoupe du source en mots et v´erification de bonne orthographe : analyse lexicale.
2. Assemblage des mots en phrases et v´erification de bonne grammaire : analyse syn-
taxique.
3. Analyses s´emantiques et v´erification du sens correct des phrases.
4. Production de code assembleur et optimisation.
5. Production de code binaire : assemblage.
6. Regroupement final de tous les composants : ´edition de lien.
7. Chargement en m´emoire puis ex´ecution.
3 Ex´ecution (mono-tˆache et simplifi´ee)
Un CPU poss`ede quelques zones de stockage internes rapides : les registres.
Un CPU ne comprend que des instructions ´el´ementaires : d´eplacement de donn´ees, arithm´etique,
logique,saut, (+ quelques autres).
Cycle infini du CPU : r´ecup´erer l’instruction courante, la d´ecoder, l’ex´ecuter, passer `a l’instruc-
tion suivante.
Adresse de l’instruction courante : dans un registre d´edi´e PC .
Pour effectuer des saut conditionnels, il est n´ecessaire de m´emoriser le statut des conditions
test´ees : un registre d´edi´e SR avec 1 bit par condition (r´esultat nul, positif, n´egatif, d´ebordement
. . . ).
Pour les appels de fonctions et les variables locales, il faut une pile d’ex´ecution. Adresse du
pointeur de pile : dans un registre d´edi´e SP .
Charger un code en m´emoire c’est recalculer les adresses figurant dans ses instructions en fonc-
tion de l`a o`u il a ´et´e log´e.
Lancer un code charg´e en m´emoire lui attribuer une zone de pile (initialiser SP), effacer les bits
de conditions (SR) et mettre le PC `a l’adresse de ebut de ce code.
C’est un des oles du syst`eme d’exploitation (OS) de charger et lancer l’ex´ecution.
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !