La mémoire est représentée par un grand tableau de mot (octets), chacun ayant sa propre adresse. Le processeur va extraire les instructions de la RAM en fonction de la valeur d’un compteur d’instructions. Une partie du SE gère le stockage de la mémoire centrale de l’ordinateur et du disque : ceci se nomme le système de gestion de la mémoire. Les principales fonctions du systèmes de gestion de la mémoire sont : 

• Le suivi de l’état des différentes parties de la mémoire si elles sont utilisées ou non utilisées => connaître les zones libres et utilisées

 • L’allocation et la libération de la mémoire principale aux différents processus 

• L’utilisation de la mémoire virtuelle et le contrôle du va et vient (swapping) entre la mémoire principale et le disque lorsque cette dernière ne peut pas contenir tous les processus. Il existe plusieurs stratégies pour gérer la mémoire telles que :

la monoprogrammation consiste à charger et exécuter un seul processus à la fois et entièrement en MC. • Organisation de la MC : cas de MS-DOS. 
• Problème : cas de programme volumineux ne pouvant tenir en MC.
 La Multiprogrammation avec partitions fixes La majorité des SE récents autorisent l’exécution de plusieurs processus en parallèle. Pour appliquer la multiprogrammation, la mémoire est subdivisée en N partitions de taille fixe. Chaque partition sera allouée à un seul processus. Le nombre de partitions est nommé le degré de multiprogrammation. Afin de gérer l’allocation de la mémoire aux processus, le SE manipule une table qui l’informe sur les partitions disponibles (appelée Trou (Hole en anglais)) et celles occupées. 
On distingue deux types de partitions :
 • Partition fixes avec des files d’attente différentes (voir Figure 7 (a)).
 • Partition fixes avec une seule file d’attente (voir Figure 7 (b)). L

La Multiprogrammation avec partitions fixes : Exemple

Comme le montre la Figure 7, il est possible de définir un partitionnement fixe au lancement du système par exemple où les partitions ne sont pas forcément de la même taille. La Figure 7(a) représente le partitionnement fixe avec des files d’attentes différentes (Multiple input queues) c’est-à-dire l'allocation de la mémoire physique est alors obtenue en associant une file d'attente par partition, les processus d'une même partition étant amenés les uns après les autres dans la portion correspondante de mémoire physique. L’inconvénient de cette méthode est le déséquilibre de la partition de la mémoire entre les files, on peut avoir une file vide pour une grande partition et une autre pleine pour une petite partition. Ce qui entraîne une mauvaise utilisation de la mémoire et du processeur. Ce problème a été résolu en utilisant une seule file comme il est illustré dans la Figure 7(b) et donc toutes les partitions partagent une seule file d’attente (single input queue) .

Va et Vient , le partitionnement dynamique

• La mémoire est insuffisante pour contenir tous les processus courant. Ce qui nécessite de placer certains de ces processus sur le disque. Ils seront ensuite ramenés en mémoire pour continuer leurs exécutions. 
• Il faudra donc ramener régulièrement des processus sur le disque en mémoire centrale et inversement. C’est ce qu’on appelle le va-et-vient ou swapping. 
• L’utilisation d’une Mémoire auxiliaire (backing store) : disque rapide suffisamment grand pour pouvoir ranger les copies de toutes les images mémoire de tous les utilisateurs. La plupart du temps le swapping est constitué de temps de transfert. Le temps total de transfert est directement proportionnel à la quantité de mémoire transférée.
Pour les deux dernières stratégies, pagination et segmentation sont des stratégies appliquées sur la mémoire virtuelle. On commence donc par présenter la définition de la mémoire virtuelle. 

Mémoire virtuelle : elle fournit un espace d’adressage différent de la mémoire RAM. Ainsi, il est possible d’exécuter des programmes qui nécessitent plus de ressources que la taille de la RAM disponible. 

Mémoire virtuelle = RAM + partition SWAP 

La mémoire virtuelle utilise les techniques de pagination, segmentation ou segmentation paginée. La mémoire d'échange (Swap) est un espace de stockage de disque dur qui est utilisée chaque fois que la RAM manque de mémoire. Il existe un programme de gestion de la mémoire sous Linux qui prend en charge ce processus. Chaque fois que la RAM manque de mémoire, le programme de gestion de la mémoire recherche tous les blocs de données inactifs présents dans la RAM qui n'ont pas été utilisés depuis longtemps. Lorsqu'il trouve ces blocs avec succès, il les déplace dans la mémoire d'échange. De cette façon, l'espace de la RAM est libéré et peut donc être utilisé pour d'autres programmes nécessitant un traitement urgent.

Gestion de la mémoire : Pagination (Paging)

Avant d’expliquer la notion de pagination, quelques prés-requis sont nécessaires. 

• L’espace adresse logique (virtuelle) d’un processus n’est pas contigu. Alors que, la mémoire physique est découpée en blocs de taille fixe appelés cadres de pages ou en anglais frames. 

• La mémoire logique est également subdivisée en blocs de la même taille appelés pages. 

• Pour exécuter un programme de n pages, il faut trouver n cadres libres et charger le programme. Il faut savoir quels cadres sont alloués, lesquels sont disponibles, etc. Cette information est sauvegardée dans la table de cadre (Frame table). 

La pagination consiste donc à diviser l’espace d’adressage virtuel en pages qui ont la même taille. La mémoire physique est également divisée en pages physiques ayant la même taille. La pagination consiste à placer seulement certaines pages dans la RAM. Les autres pages restent dans la mémoire auxiliaire jusqu’à qu’elles soient référencées. Une table de pages existe pour gérer les correspondances entre les pages virtuelles et les pages physiques, c’est à dire : il traduit l’adresse logique en adresse physique. (voir Figure 8)


Pagination: défaut de page 

Maintenant, on va étudier le cas où l’adresse virtuelle référence une page qui n’est pas présente en mémoire physique. Ce cas est nommé défaut de page. Dans le cas de défaut de page, le mécanisme d’adressage génère un défaut de page. Si la mémoire physique est pleine, il faut virer de la mémoire physique une page c’està-dire un remplacement. Le choix d’une page « victime » se fait selon une stratégie de remplacement. Il existe plusieurs stratégies de remplacement : 

• FIFO, l’abréviation de First In First Out nommée aussi PEPS (l’abréviation de Premier Entré Premier Sortie) : le premier qui arrive sera celui qui sera servi le premier, donc par ordre chronologique de chargement. On remplace la page la plus anciennement utilisée, ce qui implique une datation lors du chargement de chaque page virtuelle. 

• LRU, l’abréviation de Least Recently Used : on remplace la page le plus récemment utilisée. Ce qui impose, encore, de dater les pages. 

LFU, l’abréviation de Last Frequently Used : on remplace la page la moins fréquemment utilisée. Pour cela, on a besoin d’un compteur de fréquence d’utilisation de chaque page.

 • RNDOM : il s’agit de choisir au hasard la page à remplacer. Cela ne nécessite pas d’informations supplémentaires.

La Segmentation 

Les programmes se divisent en parties appelées segments. Chaque segment représente une entité (procédure, bloc de données) (Voir Figure 9) . 

Les segments n’ont pas toujours la même taille. 

Un segment virtuel est de même taille qu’un segment en mémoire physique.


Le principe de traduction d’adresses consiste à traduire les adresse virtuelles (logiques) vers celles physiques. La Figure 10 montre l’utilisation du tableau des segments pour effectuer la traduction de l’adresse virtuelle vers l’adresse physique. Comme la pagination, la segmentation est également un schéma de gestion de mémoire. Le processus est divisé en segments de taille variable et chargé dans l’espace d’adressage mémoire logique. L’espace d’adressage logique est la collection de segments de taille variable. Chaque segment a son nom et sa longueur. Pour l’exécution, les segments de l’espace mémoire logique sont chargés dans l’espace mémoire physique. L’adresse spécifiée par l’utilisateur contient deux quantités : le nom du segment et le décalage. Les segments sont numérotés et référencés par le numéro de segment au lieu du nom de segment. Ce numéro de segment est utilisé comme index dans la table de segments et la valeur de décalage détermine la longueur ou la limite du segment. Le numéro de segment et le décalage génèrent conjointement l’adresse du segment dans l’espace de mémoire physique.