Lecture 4
Lecture 4
Lecture 4
• Processus et boot
Le kernel est chargé à partir du disque lors du démarrage du système (Bootstrapping =
initialisation du système et définition de l'environnement pour exécuter des processus)
Un premier processus (init) est lancé, s'exécute (réside) jusqu'à l'arrêt du système. Les
autres processus sont alors créés à partir d'init (ou d'un de ses descendants).
• Processus et espace d'adressage
Plusieurs processus partagent le CPU, la mémoire, les périphériques. Si le système est à
temps partagé, l'exécution des processus est virtuellement concurrente. Chaque processus a
son espace d'adressage contenant : ses instructions (code) et ses données.
Il contient un ensemble de registres (compteur ordinal, pointeur de pile, ...) nécessaires au
bon fonctionnement du processus.
• Processus et noyau
La sémantique des interactions entre le kernel et les processus utilisateurs est définie à
travers l'API système : les appels système. Ainsi le kernel effectue les instructions pour le
compte du processus.
Le kernel intervient également quand un processus effectue une action interdite, division par
zéro, débordement de pile (stack over_ow), adressage mémoire incorrect (segmentation
fault), cause une exception matérielle (hardware exception) que le kernel traite pour le
compte du processus.
• Le segment de code : représente le programme à exécuter. Il est toujours placé dans des
zones fixes de la mémoire, c'est-à-dire au début de la zone disponible (puisqu'il n'est pas
amené à augmenter de taille durant l'exécution du processus).
• Le segment de données : Au dessus du segment de code se trouve le segment de données.
Ce segment est traditionnellement composé d'un segment de données initialisées (les variables
globales et statiques) et d'un segment de données non initialisées qui est créé dynamiquement.
Ce segment est amené à croître décroitre suite à l'allocation dynamique de variables.
• La pile d’exécution : Pour stocker les données obtenues en cours d'exécution, le système
utilise un segment pile. Ce segment est généralement situé en haut de l'espace d'adressage et il
croît vers les adresses basses (pile renversée).
On utilise souvent les piles lors des appels de fonction. Le système empile le nom de
la fonction et les paramètres à passer à la fonction puis les différentes variables
locales de la fonction. Une fois la fonction terminée le système dépile toutes les
données qu'il a placées pour l'appel de la fonction. Il a à nouveau l'accès aux
données qu'il avait stockées avant l'appel de la fonction et peut poursuivre
l'exécution du programme.
1. Structure de données pour la gestion des processus