• Aucun résultat trouvé

CHAPITRE 2 MIGRATION DE PROCESSUS

2.1 Introduction

Dans cette section, nous identifions les différents éléments fondamentaux qui interviennent dans la migration de processus. Rappelons qu’un agent mobile est un processus où la migration est initiée par son code.

2.1.1 Concept de processus

Le concept de processus est fondamental dans un système d’exploitation. Un processus est l’image d’un programme en cours d'exécution en mémoire. Les processus sont les seuls "éléments actifs" du système. Nous n'envisageons pas le cas où un processus s'exécuterait sur plusieurs processeurs simultanément. L'exécution de processus se fait d'une façon séquentielle: les instructions qui la composent sont chargées dans le processeur puis exécutées les unes après les autres. Un processus est plus que le code d’un programme. Un processus est caractérisé à un instant donné par: les données, la pile, le tas, la valeur du compteur ordinal, le contenu des registres ainsi que l'état spécifique du système d'exploitation sous- jacent comme les paramètres liés pour traiter la mémoire et la gestion de fichiers. Un programme est une entité passive comme le contenu d'un fichier stocké sur le disque tandis qu'un processus est une entité active avec un compteur ordinal spécifiant d’adresse de la

prochaine instruction à exécuter et des ressources associées. Un processus est dynamique par opposition à un programme qui lui est statique.

Bien que deux processus puissent être associés au même programme, on les considère néanmoins comme deux séquences d'exécution séparées. Par exemple, plusieurs utilisateurs peuvent exécuter une copie du même programme. Chacune de celle-ci est un processus et, bien que le code de programme soit équivalent, les sections de données varieront. Il est aussi commun d'avoir un processus qui engendre plusieurs processus en s’exécutant. Comme le présente la figure 2.1, une structure d’un processus en mémoire est composée d’un segment de:

 La pile permettant de stocker les appels de fonctions avec leurs paramètres et leurs variables locales. Lors d’un retour de fonction, les paramètres et variables sont dépilés.

 Le tas réservé aux allocations dynamiques de mémoire.  Les Données contenant les variables globales.

 Le Code correspondant aux instructions du programme à exécuter. Ce code est le fichier exécutable produit par le compilateur ou assembleur.

pile tas données code max 0

État d’un processus

Un processus en exécution change d’état. L'état d’un processus est défini en partie par son activité courante. Chaque processus peut être dans un des états suivants [Silberschatz et al., 2012]:

 nouveau: le processus est en cours de création,

 en exécution: le processus s’exécute sur le processeur,

 en attente: le processus attend l’arrivé d’entrée/sortie ou d’événement,  prêt: le processus attend pour être assigné au processeur,

 terminé: le processus a terminé son exécution.

Les noms des états sont arbitraires et varient entre les systèmes d'exploitation. Cependant, les états qu'ils représentent se trouvent sur tous les systèmes. Certains systèmes d'exploitation décrivent plus des états, mais l’importance est à un instant donné un seul processus peut être exécuté. Cependant, beaucoup de processus peuvent être prêts et en attente. La figure 2.2 illustre les différents états d’un processus.

nouveau

prêt en exécution

terminé

en attente

Bloc de contrôle de processus

Chaque processus est représenté dans le système d'exploitation par un bloc de contrôle de processus (process control block), appelé aussi bloc de contrôle de tâche (task control block) tel que l’illustre la figure 2.3. Pour gérer les processus, le système d'exploitation sauvegarde plusieurs informations dans des structures de données. Le contenu d’un bloc de contrôle d’un processus (BCP) peut varier d’un système à l’autre. En générale, on trouve dans chaque processus les informations suivantes:

 L’état de processus: nouveau, prêt, en exécution, en attente, terminé, suspendu, etc.  Le numéro d'identification unique est affecté à la création de chaque processus.

 Le compteur ordinal: Avant de pouvoir connaître le contenu d’une instruction, il faut aller la chercher en mémoire centrale. Et c’est justement le rôle d’un registre particulier communément appelé le compteur ordinal dont le contenu désigne l’adresse de l’instruction suivante à exécuter avant de pouvoir la lire en mémoire.

 Les registres: Le nombre et le type de registres varient dépendamment de l'architecture de chaque ordinateur. Ils comportent des accumulateurs, des registres d'index, des pointeurs de piles et des registres généraux. Le compteur ordinal et l’état de processus sont sauvegardés lorsque le processus quitte l'état "en exécution" et seront rechargés une fois que le processus revient à son état "en exécution".

 L’ordonnancement: Les informations concernant les files d'attente, le numéro de priorité, etc.

 La mémoire: Les informations relatives à la quantité mémoire allouée au processus et les pointeurs vers ces zones mémoires.

 La comptabilisation: Les informations qui définissent le temps d’exécution alloué pour chaque processus.

 L’état des opérations d’entrées/sorties: les périphériques alloués, l’opération en attente, les fichiers ouverts, etc.

état de processus numéro de processus

compteur ordinal registres limites mémoire liste des fichers ouverts

. . .

Figure 2.3 Bloc de contrôle de processus

2.1.2 Processus et mémoire

Chaque processus dispose d’un espace de mémoire. Après l’unité centrale de traitement (UCT), le second élément fondamental de tout ordinateur est la mémoire. Idéalement, la mémoire devrait satisfaire les trois critères [Tanenbaum, 2008]:

1. une mémoire extrêmement rapide (plus rapide que le temps d’exécution d’une instruction de façon à ce que le processeur ne soit pas freiné par les accès mémoire), 2. un espace mémoire de grande taille disponible,

3. une mémoire peu coûteuse.

Comme aucune des technologies courantes ne satisfait ces trois critères, la mémoire des ordinateurs actuels est organisée en plusieurs couches qui réalisent ainsi une hiérarchie de mémoire. Le but principal de cette hiérarchie est de simuler l’existence d’une mémoire rapide de grande capacité. Dans cette hiérarchie, les mémoires les plus proches du processeur sont les plus rapides mais aussi les plus petites en capacité. En revanche, les mémoires les plus éloignées du processeur sont les plus lentes mais aussi les plus grandes en capacité. Comme le montre la figure 2.4 [Cazes et Dlacroix, 2011] [Tanenbaum, 2008], la mémorisation de l’information dans un ordinateur ne se fait pas en un lieu unique mais elle est organisée dans une hiérarchie de mémoires.

Figure 2.4 Hiérarchie de mémoires, vitesse, coût et taille.

Pour réaliser une mémoire rapide de grande capacité, la mémoire principale (la mémoire RAM) est découpée en blocs de taille fixe, appelées pages réelles ou cases. La mémoire des processus, mémoire virtuelle, est également découpée en blocs de même taille fixe, appelées pages. Pour faire la correspondance entre la page virtuelle et celle réelle, une table (une par processus) est gérée par le système d'exploitation. Un mécanisme de traduction des adresses virtuelles en adresses réelles associe à chaque numéro de page virtuelle le numéro de case réelle qui contient cette page, si elle existe. Cette traduction est assurée par un module matériel appelé unité de gestion de mémoire (en anglais Memory Management Unit, MMU).