II. Mécanismes de base d’exécution
des programmes
II.1. Structure matérielle d'une machine
de Von Neumann
Cette architecture est appelée ainsi en référence au mathématicien
John Von Neumann qui a élaboré la première description d’un ordinateur dont le
programme est stocké dans sa mémoire. L’architecture dite architecture de Von
Neumann est un modèle pour un ordinateur qui utilise une structure de stockage
unique pour conserver à la fois les instructions et les données demandées ou
produites par le calcul. De telles machines sont aussi connues sous le nom
d’ordinateur à programme enregistré. La séparation entre le stockage et le
processeur est implicite dans ce modèle.
Figure
3.
Schématisation de l'architecture de Von Neumann.
L’architecture de Von Neumann décompose l’ordinateur en 4 parties
distinctes :
1.
L’unité arithmétique et logique (UAL) ou unité de traitement : son
rôle est d’effectuer les opérations de base ;
2.
L’unité de contrôle, chargée du « séquençage » des opérations ;
3.
la mémoire qui contient à la fois les données et le programme qui
indiquera à l’unité de contrôle quels sont les calculs à faire sur ces données.
La mémoire se divise entre mémoire volatile (programmes et données en cours de
fonctionnement) et mémoire permanente (programmes et données de base de la
machine) ;
4.
les dispositifs d’entrée-sortie, qui permettent de communiquer
avec le monde extérieur.
II.2. Cheminement d'un programme dans
un système
Le passage d’un programme de la forme externe à la forme interne
se fait en plusieurs étapes. Un programme est généralement écrit dans un
langage évolué (Pascal, C, VB, Java, etc.). Pour faire exécuter un programme
par une machine, on passe généralement
par les étapes suivantes:
Figure
4.
Cheminement d’un programme dans un système
II.2.1. Editeur de texte (Text
Editor)
C’est un logiciel interactif qui permet de saisir du texte à
partir d’un clavier, et de l’enregistrer dans un fichier.
Exemple : Bloc-Notes, vi, vim, emacs, …etc.
II.2.2. Compilateur (Compiler)
Un compilateur est un programme qui traduit des programmes écrits
dans des langages évolués (Pascal, C, Ada, Java, …etc.) en programmes binaires ou en langage machine,
appelés aussi objets.
Le langage machine est un
ensemble de codes binaires directement décodables et exécutables par la
machine.
II.2.3. Editeur de liens (Linker)
Un programme source peut être constitué :
1.
des instructions,
2.
des données localement définies,
3.
des données externes, et
4.
des procédures ou sous-programmes externes (bibliothèques de
fonctions).
Avant d’exécuter le programme objet, il est nécessaire de
rassembler les parties non locales et les procédures externes avec le
programme.
L’éditeur de liens est donc un logiciel permettant de combiner
plusieurs programmes objets en un seul programme.
Figure 5. Principe d’édition de liens
Pour pouvoir développer de gros programmes, on structure ceux-ci
en modules que l’on traduit indépendamment. Ainsi, un programme peut être
constitué de plusieurs fichiers dont l’un est le programme principal. Ce
dernier fait appel aux sous-programmes,
ce qui donne lieu à des références extérieures.
Lors de la compilation, le compilateur ne peut pas remplacer les
références extérieures par les adresses correspondantes puisqu’il ne les
connaît pas. Le programme objet généré contient donc le code machine des
instructions et la liste des références extérieures, ainsi que la liste des
adresses potentiellement référençables depuis l’extérieur du module. Après la
compilation, chaque sous-programme commence à l’adresse logique 0.
L’éditeur de liens ordonne les sous-programmes et le programme
appelant, modifie les adresses de chacun d’eux et produit un programme final
dont l’origine est à l’adresse 0.
II.2.4. Le chargeur (Loader)
Après l’édition de liens, le programme exécutable doit se trouver
en mémoire centrale pour être exécuté. Le chargeur est un programme qui
installe ou charge un exécutable en mémoire centrale à partir d’une adresse
déterminée par le système d’exploitation.
Figure
6.
Chargement d'un programme exécutable.
II.3. Concepts de processus et
multiprogrammation
II.3.1. Définition
Un processus (Process en anglais) est un programme en
cours d’exécution. Tout processus possède des caractéristiques propres
(Ex. un numéro d’identification), des ressources qu’il utilise (comme des
fichiers ouverts) et se trouve à tout moment dans un état (en exécution ou en
attente …).
Un processus est constitué d’ :
−
Un code exécutable du programme en exécution.
−
Un contexte qui est une image décrivant l’environnement du
processus.
II.3.2. Contexte d’un processus
Le contexte d’un processus est l’ensemble des données qui
permettent de reprendre l’exécution d’un processus qui a été interrompu. Il est
formé des contenus de :
−
compteur ordinal (CO),
−
Mot d’état
(Program Status Word PSW),
−
registres généraux,
−
pile.
Le CO et le PSW représentent le
petit contexte, et les registres généraux et la pile représentent le
grand contexte.
II.3.3. Image mémoire d’un processus
L’espace mémoire alloué à un processus, dit image mémoire (Memory Map) du processus, est
divisé en un ensemble de parties :
1.
Code (Text) : qui correspond au code des instructions du
programme à exécuter. L’accès à cette zone se fait en lecture seulement
(Read-Only).
2.
Données (Data) : qui contient l’ensemble des constantes et
variables déclarées.
3.
Pile (Stack) : qui permet de stocker :
•
les valeurs des registres,
•
les variables locales et paramètres de fonctions,
•
les adresses de retour des fonctions.
4.
Tas (Heap) : une zone à partir de laquelle l’espace peut être
alloué dynamiquement en cours d’exécution (Runtime), en utilisant par exemple
les fonctions new et malloc.
II.3.4. Descripteur de Processus
(PCB)
Chaque processus est représenté dans le système d’exploitation par
un bloc de contrôle de processus (Process Control Bloc, PCB). Le contenu du PCB
varie d’un système à un autre suivant sa complexité. Il peut contenir :
1.
Identité du processus : chaque processus possède deux noms
pour son identification :
−
Un nom externe sous forme de chaîne de caractères fourni par
l’usager (c’est le nom du fichier exécutable).
−
Un nom interne sous forme d’un entier fourni par le système. Toute
référence au processus à l’intérieur du système se fait par le nom interne pour
des raisons de facilité de manipulation.
2.
Etat du processus : l’état peut être nouveau, prêt, en
exécution, en attente, arrêté, …etc.
3.
Contexte du processus : compteur ordinal, mot d’état,
registres ;
4.
Informations sur le scheduling de l’unité centrale : ces
informations comprennent la priorité du processus, des pointeurs sur les files
d’attente de scheduling, …etc.
5.
Informations sur la gestion mémoire : ces informations
peuvent inclure les valeurs des registres base et limite, les tables de pages
ou les tables de segments.
6.
Information sur l’état des E/S : l’information englobe la
liste de périphériques d’E/S alloués à ce processus, une liste de fichiers
ouverts, etc.
7.
Informations de Comptabilisation : ces informations
concernent l’utilisation des ressources par le processus pour facturation du
travail effectué par la machine (chaque chose a un coût).
Figure
7. Bloc de
contrôle de processus (PCB).
Le système d’exploitation maintient dans une table appelée «table
des processus» les informations sur tous les processus créés (une entrée par processus : Bloc de Contrôle de
Processus PCB). Cette table permet au SE de localiser et gérer tous les
processus.
Donc, un processus en cours d’exécution peut être schématisé comme
suit :
Figure 8. Schéma général d’un processus en cours exécution.
II.3.5. Etat d’un processus
Un processus prend un certain nombre d’états durant son exécution,
déterminant sa situation dans le système vis-à-vis de ses ressources. Les trois principaux états d’un
processus sont :
- Prêt (Ready) : le processus attend la libération du processeur pour s’exécuter.
- Actif (Running) : le processus est en exécution.
- Bloqué (Waiting) : le processus attend une ressource physique ou logique autre que le processeur pour s’exécuter (mémoire, fin d’E/S, …etc.).
Figure
9.
Diagramme de transition des états d’un processus.
II.3.6. Multiprogrammation
Dans un système multiprogrammé, le processeur assure l’exécution
de plusieurs processus en parallèle (pseudo-parallélisme).
Le passage dans l’exécution d’un processus à un autre nécessite
une opération de sauvegarde du contexte du processus arrêté, et le chargement
de celui du nouveau processus. Ceci s’appelle la commutation du contexte
(Context Switch).
II.3.7. Mécanisme de commutation de
contexte
La commutation de contexte consiste à changer les contenus des
registres du processeur central par les informations de contexte du nouveau
processus à exécuter.
Figure
10.
Mécanisme de commutation de contexte.
La commutation du contexte se fait en deux phases:
−
La première phase consiste
à commuter le petit contexte (CO, PSW) par une instruction indivisible.
− La deuxième phase consiste quant à elle à commuter le grand contexte par celui du nouveau processus.
Figure
11. Les
phases d’une commutation de contexte.
II.4. Les systèmes d'interruption
II.4.1. Définition et organigramme
général d'une interruption.
II.4.1.1. Définition
Une interruption est une
réponse à un événement qui interrompt l’exécution du programme en cours à
un point observable (interruptible) du
processeur central. Physiquement, l’interruption se traduit par un signal
envoyé au processeur. Elle permet de forcer le processeur à suspendre l’exécution du programme en cours,
et à déclencher l’exécution d’un programme prédéfini, spécifique à l’événement,
appelé routine d’interruption (Rit).
II.4.1.2. Organigramme général
Figure 12. Traitement d'une interruption.
Le programme repris après le traitement de l’interruption peut
être le programme interrompu ou autre.
II.4.2. Mécanismes de gestion des
interruptions
Lorsqu'une interruption survient, le processeur achève l'exécution
de l'instruction en cours pour les interruptions externes, puis il se produit :
1.
Sauvegarde du contexte dans une pile :
-
adresse de la prochaine instruction à exécuter dans le programme interrompu,
-
contenu des registres qui seront modifiés par le programme
d'interruption,
-
contenu du mot d'état (registre de drapeaux) rassemblant les
indicateurs
(Tout cela forme le contexte sauvegardé)
2.
Chargement du contexte du programme d'interruption (contexte actif) et passage en mode système (ou
superviseur)
3.
Exécution du programme d'interruption
4.
Retour au programme interrompu en restaurant le contexte (commande
Assembleur IRET) et en repassant en mode utilisateur.
II.4.3. Systèmes d'interruption sur
les PCs.
Les interruptions ne jouent
pas seulement un rôle important dans le domaine logiciel, mais aussi pour
l'exploitation de l'électronique.
On distingue donc :
- interruptions internes : protection du système et des processus, appelées par une instruction à l'intérieur d'un programme (overflow, erreur d'adressage, code opération inexistant, problème de parité…) (hardware internes)
- interruptions logiques : permet à un processus utilisateur de faire un appel au système (software),
- interruptions matérielles déclenchées par une unité électronique (lecteur, clavier, canal, contrôleur de périphérique, panne de courant,....) ou par l'horloge (hardware externes).
0 Commentaires