Vous êtes sur la page 1sur 66

Mécanisme de base d’exécution des

programmes

Maza Sofiane.
www.computer-science-dz.wix.com/bbami
Architecture et technologie des
ordinateurs
Structure matérielle d’une machine de
Von Neumann
Processeur
Processeur
Processeur
 CO, RI, RDO (RD ou R M : registre de memoire) : registre de données,
RAD(RA) :registre d’adresse.
 Registre de processeur :
 CO (conteur ordinaire)
 Registre instruction (RI) : (instruction : champ code opération et entre 0 et 3
champs opérande).
 Accumulateur (ACC) : au niveau d’UAL. Contient un des opérandes avant
l’exécution et le résultat après.
 Registres généraux : les registres d’index, de base…etc.
 Registre d’état :[PSW = Program StatusWord ] : appelé aussi register
condition, il contient différents bits appelés drapeaux [falgs] indiquant l’état d’une
condition particulière dans le CPU. Plusieurs bits indicateur qui défini l’état de CPU
(mode d’exécution, masque d’interruption, dépassement de capacité dans l’ACC)
 Registre pointeur de pile [SP = Stack Pointer] : utilisé pour simuler une pile dans
la mémoire centrale.
Les deux cycles de processeur

Le cycle d’exécution du processeur est divisé en deux niveau : cycle de recherche (Fetch) + cycle
d’exécution (Execute) = cycle indivisible l’arrêt ne peut se faire qu’à la fin de la phase
Execute.
Les deux cycles de processeur
Mémoire
les unités d’E/S

Différents Modes d’E/S


1.Entrée/ Sortie Directe (programmée)
2.E/S par Accès Direct à la Mémoire (DMA).
3.Les entrées-sorties par processeur spécialisé (Canal
d’E/S).
DMA ; Direct Memory Access
DMA ; Direct Memory Access
Mode de fonctionnement du processeur
 le mode maître, le processeur a accès à toutes les ressources de la
machine.
 le mode esclave, certaines instructions lui sont interdites. Pour cela, le
fonctionnement du décodeur-séquenceur du processeur est légèrement
modifié, par introduction d'une phase de contrôle intermédiaire:
-lecture mémoire à l'adresse indiquée par le compteur ordinal, et rangement
du résultat dans le registre instruction.
-si le processeur est en mode esclave, vérification que l’instruction est
autorisée.
-décodage de cette instruction pour en exécuter les différentes phases.
-s'il y a une demande d'interruption, alors la prendre en compte.
-L’indicateur du mode de fonctionnement maître/esclave fait partie du mot
d’état programme PSW
 - Mode utilisateur (ou esclave) : réservé aux programmes
usagers qui ont des droits d’actions limités. Certaines
opérations sont interdites dans ce mode (manipulation directes
des E/S, masquage d’IT, accès à une zone système, modification
de priorité d’un process, modification directe de l’heure,
manipulation de l’horloge, …).
 - Mode superviseur (maître, noyau ou privilégié) : réservé au
noyau du système d’exploitation, c.à.d. le propriétaire du
programme en cours d’exécution est le SE. Il a tous les droits
d’actions sur les objets du SIQ (modifier les variables systèmes,
faire les E/S, actionner le CPU, l’heure système, …)
Interruption

 Point de vue matérielle : Une interruption est un signal


physique (électronique) émis par un périphérique au CPU
pour lui signaler l’occurrence d’un évènement.
 - Point de vue logicielle : Une interruption est un
évènement extérieur provoquant la suspension temporaire
(la préemption) du process actif (lui retirer le CPU) au profit
d’un programme spécial appelé programme (routine ou handler)
d’interruption chargé de l’évènement arrivé. Ou un appelle à
un service de système d’exploitation (appel système)
Interruption
les interruptions externes ou matérielles
Interruption
Les interruptions internes ou logicielles

 a- les déroutements :
 b- les Appels au superviseur (SVC):
 a- les déroutements : c’est une exception levée suite à une
anomalie (une erreur) générée par l’exécution de l’instruction
courante. Il peut être provoqué par :
- une erreur arithmétique : division par zéro, débordement, …
- référence d’une adresse mémoire hors inexistante (limites de la
mémoire disponible).
- une violation de la protection mémoire.
- une instruction illégale
- tentative d’exécution d’une instruction privilégiée en mode
esclave.
- les défauts de page, débordement de pile, …
A la suite d’un déroutement, l’utilisateur sera averti de l’erreur
commise et le processus actif est arrêté immédiatement.
 b- les Appels au superviseur (SVC): Un appel au superviseur
(SVC : SuperVisor Call) est une instruction qui a pour fonction
de provoquer le changement d’état du processeur. Un appel au
superviseur provoque l’exécution d’un programme spécifié avec
un changement du mot d’état du processeur et sauvegarde de
l’état au moment de l’appel.
 Cette instruction est principalement utilisée pour réaliser l’appel,
à partir d’un programme utilisateur exécuté en mode asservi, par
exemple des fonctions d’accès aux fichiers (ouvrir, lire ,
fermer…etc). ces appels offrent des services de système
d’exploitation.
Fonctionnement d’interruption
SE:
1. Sauvegarde d’un contexte
minimal de programme P.
2. Recherche cause.
3. Passage en mode maître pour
traiter l’interruption (IT).
4. Il faut trouver le programme qui
traite IT (routine
d’interruption) au niveau de
vecteur d’interruption

Routine d’interruption
Traitement d’interruption
Le vecteur d’interruption
SE:
1. Sauvegarde d’un contexte
minimal de programme P.
2. Recherche cause.
3. Passage en mode maître pour
traiter l’interruption (IT).
4. Il faut trouver le programme qui
traite IT (routine
d’interruption) au niveau de
vecteur d’interruption

Routine d’interruption
+ N° d’IT
CPU

MC Registre d’index vers le vecteur


d’interruption au niveau de mémoire
Vecteur
@ routine
d’interruption
d’interruption
Niveaux d’interruptions
Masquage - Démasquage et Armement-
Désarmement des interruptions
 Masquage des interruptions
Une interruption masquée ne peut pas interrompre le processeur
 Désarmement des interruptions
Une interruption désarmée ne peut interrompre le processeur,
c'est comme si la cause de l'interruption était supprimée
(perdue).
cheminement d’un programme dans un
système

Pgme Exécution
source1 Traducteur Pgme
obj1
Pgme Pgme Pgme Chargeur
(Compilateur Éditeur de liens
source2 obj2 exécutab
et /ou ……
le Chargement
… Assembleur) dans la MC
… Pgme
Pgme obj n
source n

Sous-pgmes de
bibliothèques
Traducteur d’un langage

Traducteurs

Compilateurs / assembleur Interpréteurs


-Ex. C, Pascal, … • Ex. Html, .bat du Dos, les
scripts, …

Le cas de Java et C#
Traducteur d’un langage

Programme source
Langages évolués ou assembleur
Prog.c ou prog.asm ..

Compilateur/assembleur

Langage binaire
programme objet
prog.o, prog.obj ..

Peut on avoir le même compilateur pour un programme écrit en C et en


pascal?
Compilation

Compilation
Compilateur
Programme source

Assembleur

Code binaire objet


Compilation

Programme assembleur ; somme de deux entiers Code objet


de 16 bits Module objet
1
2 SEGMENT 2 0000 000C
3 A DW 12 3 0000 000C 07D5
4 B DW 2005 4 0002 07D5
5 Res DW ?

5 0004 ? ? ? ?
6 data ENDS 6 0006 B8 0000
7 code SEGMENT 7 0000 8E D8
8 ASSUME DS:data, CS:code 8
9 0000 B8 0000s A1 0000
9 debut: MOV AX, data
10 MOV DS, AX; 100003 8E D8 03 06 0002
11 ; Le programme 11
A3 0004
120005 A1 0000r
12 MOV AX, A
130008 03 06 0002r B4 4C
13 ADD AX, B
14000C A3 0004r CD 21
14 MOV res, AX ;
15000F B4 4C
15 MOV AH, 4CH
160011 CD 21
16 INT 21H
170013
17 code ENDS
18
18 END debut ;
La notion de lien :
la communication entre les différents modules d'un programme peut se faire par :
• Partage de variable globale,
• Appel de procédure,

LIENS

Lien A Satisfaire (LAS) Lien Utilisable (LU)

Module B

Module A LU proc(int x) : integer


.. Begin
….
X := proc(a) LAS …
End;
Liens utilisables et à satisfaire

Déclaration des objets  Liens utilisables


M1 M2

Liens Variable
Procédure

Utilisation des objets déclarés Deux liens à satisfaire


Module objet translatable:
-Des références symboliques (liens utilisable et à satisfaire).
-Informations translatables.
- les adresses sont relatives en générale par rapport à 0

Module objet absolu:

- Les adresses des objets sont réels de la MC


- Ces adresses sont fixes ne change pas au chargement.
L'opération de translation consiste à ajouter à chacun des

emplacements qui contiennent une adresse, la valeur de

l'adresse réelle d'implantation finale du segment (ou section).


Éditeur de lien et chargeur

Édition de lien:
Par la compilation séparée de chaque module source, les références externes LAS ne peuvent
pas être résolues.

M1

Modules
M2 programme Biblio
thèque

M3
Éditeur de lien
// exp.c
#include <stdio.h>
void main(void)
{

compilateur
extern carre( float e)
exp.obj ou exp.o
float k = 10;
k = carre(k);
printf("%f", k);
}
Bibliothèque Exp.exe ou
« stdio » Exp

Éditeur de liens
// carre.c
compilateur

float carre(float);
carré.obj ou
float carre( float e) carre.o
{
return( e*e) ;
}
Éditeur de lien
Ces deux passes peuvent être détaillés par:

1- Construire la table de tous les modules objets contenant les champs :


nom_module , sa taille et son adresse de départ.

2- Construire la table des liens utilisables (LU) par module en affectant à chacun son
adresse locale dans le module

3- Construire la table des liens à satisfaire (LAS) par module en affectant à chacun la
valeur INDEF

4- Construire le programme final en plaçant les modules l’un après l’autre tout en
modifiant l’adresse de départ de chacun par rapport au début du programme.
@ départ_ Mi = @chargement + @départ_Mi-1 + taille Mi-1

5- Modifier les @ des liens LAS

6- Translater toutes les adresses translatables dans tous les modules

7- Résoudre toutes les références LAS


Module Objet A

Éditeur de lien
000
J 150
Résultat de liaison
000 …..
A

150 J 150
lw $a1, X 150
300 lw $a2, X
400 jal B Le but est
300
Module Objet B
400 jal B Problème de
X =000 ….. B références
produire un module X =401 ….. externes
300 lw $a1, 04 relatif
@ de base= 0000 700 Lw $a1, 04
500 Jal C
Adresse fixe
600
900 jal C non translatable

Module Objet C 1000 C

lw $ra,4($sp) lw $ra, 4($sp)


000
Problème de
translation
100 1100 d'adresses
200 …. 1200 ….

500 J 100
1500 J 100
Éditeur de lien
Translation de tous les adresse dans le
module résultant de l’édition de liens
La compilation génère des modules objets relatifs et en indiquant à l'éditeur
de liens l'ensemble des adresses qu'il peut translater.
Ex. lw $a1, a ; a étant une variable ( donc une adresse translattable)
lw $ra, 4($sp)
L’adresse 4($sp) est translatable?
$sp est une valeur d’une adresse qui ne doit pas être translatée
• l’Lors de l'édition de liens, la translation s'effectue en ajoutant à chaque
adresse translatable relative l'@ début du module

@translatée = @translatable relative + l'@ début du module


dans le module
Éditeur de lien
Module Objet A Module Objet B Module Objet C
000 J 150 X =000 ….. 000 lw $a0, ($sp)
100
150 lw $a0, X 300 Lw a1, 04 200 ….

300 jal B 500 jal C 499 J 100


399 599

Liens Module A Liens Module B


Liens Module C
lien nature @ lien nature @
Lien Nature @
X LAS ?? X LU 00
C LU 00
B LAS ?? B LU 00
C LAS ??

Table des Modules


Module Taille @début
A 400 000
B 600 000
C 500 000
Module Objet A

Éditeur de lien Résultat de liaison Résultat de liaison


000 J 150 000 J 150
000 J 150 A

150 lw $a1, X 150 lw $ra, X = 401


150 lw $a1, X

300 300 Jal B=401


300
400 Jal B
400 Jal B
Module Objet B B
X =000 ….. X =401 …..
X =000 …..
Liaison 701 Lw $a2, 04
300 lw $a2, 04 Translation
300 lw $a2, 04
des adresses
500 jal C 901 Jal C =1002
500 Jal C
1001
600
600
000 lw $ra, 4($sp) 1002 lw $ra, 4($sp)
C
Module Objet C 1102
100
000 lw $ra, 4($sp) 1202 ….
200 ….
100
200 …. 1502 J 100 = 1102
500 Jmp 100

500 J 100
Module Objet A Module Objet B Module Objet C
000 J 150 X =000 ….. 000 lw $a0, ($sp)
100
150 lw $a0, X 300 Lw a1, 04 200 ….

300 jal B 500 jal C 500 J 100


400 600

Liens Module A Liens Module B


Liens Module C
lien nature @ lien nature @
Lien Nature @
X LAS 401 X LU 401
C LU 1001
B LAS 401 B LU 401
C LAS 1001

Table des Modules


Module Taille @début
A 400 000
B 600 401
C 500 1001
Éditeur de lien
Liaison des bibliothèques
Une bibliothèque est une collection de liens utilisables ( variables globales, constantes
globales, modules précompilés , …) réalisant chacun une fonction bien déterminée.

Exemples :
- langage C : *.h en utilisant les « headers » #include stdlib.h
- langage Pascal : *.lib; en utilisant uses crt;
- Java : les package : import javax.swing.jpanel
Éditeur de lien
Édition de lien statique

Exp.obj
Exp.o
Module .exe
Ou sans extension dans LINUX
carré.obj
Carre.o entete

Bibliothèque Code de EXP


Éditeur de liens

Stdio
Code de Carré
….

Code de Printf Code de printf

….
Éditeur de lien
Édition de lien statique

Avantages ??
- Puisque les codes des procédures sont dans l'exécutable ceci facilite le transport
du programme exécutable.

Inconvénients??

- Le code d'une procédure peut exister en plusieurs copies dans la MC, selon le
nombre des programmes faisant appel à cette procédure.
- La taille de l'exécutable est grande.
Éditeur de lien
Édition de lien dynamique
L'éditeur de lien retarde la résolution des appels aux procédures d'une bibliothèque à l'étape
de chargement.
Nom de la bibliothèque

Module @début
M1 @1
M2 @2
…. ….
Mn @n

Code M1
Code M2
….
Code Mn
Éditeur de lien
Édition de lien dynamique

Avantages ??
- Plusieurs exécutables peuvent utiliser la même bibliothèque, cela permet de gagner de l'espace
mémoire.
- On peu remplacer une bibliothèque par une version plus récente (plus performante, plus fiable par
exemple) sans avoir besoin de recompiler le programme qui va utiliser cette bibliothèque.

Inconvénient ??

-Il arrive qu'une nouvelle bibliothèque ne soit plus compatible avec la version antérieure. (Si on
installe une nouvelle bibliothèque les exécutables utilisaient l'ancienne version ne fonctionnent plus.)
Chargeur
Pour exécuter un pgme il faut charger son exécutable, généralement à partir de la
Mémoire secondaire, en Mémoire centrale. Cette opération est confiée à un module
spécial du SE appelé le chrageur.

MC

P1
P1
Chargeur
L’exécutable généré par l’éditeur de lien est relatif : les adresses sont générées par rapport
au début du programme : 0000 ?

MC

?
000C
07D5
2500
????
A1 0000 P1
03 06 0002
A3 0004
B4 4C
CD 21
Chargeur
Compile and Go Compilateur

Compile and Go Programme


Programme
chargé en
source
mémoire

Avantage:

compilation et chargement rapide des programmes.

Inconvénient:

Le module objet ne peut pas profiter de toute l'espace mémoire, une partie de la
mémoire est occupée par le compilateur/assembleur et le programme.

Il est nécessaire de retraduire (recompiler) le programme source à chaque exécution.


Chargeur
Chargeur absolue MC

libre

0400 000C
0402 07D5
000C 0404 ? ? ? ?
07D5 0406 2E: A1 0400
????
040A 2E: 03 06 0402
A1 0400
040F 2E: A3 0404
03 06 0402
0413 B4 4C
A3 0404
0415 CD 21
B4 4C
CD 21
libre
Chargeur
Chargeur de réimplantation (relogeable)

Programme Traducteur Module objet


source translatable Programme
Chargeur
chargé en
mémoire
Programm Traducteur Module objet
e source translatable
Adresse de
chargement

Avantage:
Un module translatable peut être chargé à n'import quel espace mémoire libre 
multiprogrammation.
Inconvénients:
Temps consommé par le chargeur pour trouver un espace libre.
A chaque déplacement de module, il faut re-translater les adresses.
Chargeur
Chargeur de réimplantation (relogeable)

- L’éditeur de lien génère un programme translatable relatif.

- Le chargeur cherche un espace libre suffisant pour le programme

- Le pgme sera chargé à partir de l’adresse début de cet espace, soit adr

- Toutes les @ translatables seront translatées par rapport à adr.


Chargeur
Chargeur de réimplantation (relogeable)
Segment de données MC
@
A 0000 000C
2000 000C
B 0002 07D5
2002 07D5
res 0004
2004
Segment Code
… ….
0000 B8 0000
FA00 B8 2000
0003 8E D8
FA03 8E D8
0005 A1 0000
@ D’implantation FA05 A1 2000
0008 03 06 0002
FA08 03 06 2002
000F A3 0004
FA0C A3 2004
000C B4 4C
Des @ Relatives FA0F B4 4C
00011 CD 21
FA011 CD 21

Module Objet translatable


Chargeur
Translation à l'exécution
MC
-Le chargeur cherche un espace libre suffisant
libre
-Il charge le programme exécutable translatable tel
0400 000C
qu’il est, sans le translater, dans la MC.
0402 07D5

Base 0404 07B1


- Mettre l’adresse début dans le registre Base
0400 0406 2E: A1 0000

- Avant l'exécution d'une instruction contenant une + 040A 2E: 03 06 0002


040F 2E: A3 0004
@ translatable, cette dernière est d’abords translatée 0413 B4 4C
CO
en lui ajoutant le contenu du reg Base puis exécutée. 0415 CD 21

libre
Chargeur
Translation à l'exécution

Avantages :

Permettre un déplacement facile des programmes dans la MC.

Pas de re-translation en déplaçant le module dans la MC.

Inconvénient

La translation condamne la rapidité de l’exécution.


Conclusion
En général trois étapes sont nécessaires avant l’exécution d’un programme : la compilation, l’édition
de liens et le chargement.

La compilation convertit un programme source en un module objet binaire en se débarrassant des


représentations logiques des identificateurs.

L’édition de liens s’intéresse à la résolution des références externes et la liaison des différents modules
pour construire un seul : programme exécutable. Cette édition de lien peut être statique ou
dynamique.

Un programme est exécuté par un processeur seulement s’il est chargé en MC. Le chargement est
accompli par un chargeur de type compile and go, absolu, relogeable.

L’éditeur de liens et le chargeur sont deux programmes de service système.