Skip to main content

La mémoire

La mémoire d'un ordinateur se décompose en plusieurs éléments, dont le prix et le temps d'accès sont très variables. Nous développerons dans ce chapitre et le suivant les questions et solutions relatives à la mémoire centrale. L'importance de la gestion de la mémoire centrale vient de son coût et du coût relatif des autres formes de stockage.

La mémoire centrale

La mémoire est un tableau à une dimension de mots machines (ou d'octets), chacun ayant une adresse propre. Les échanges avec l'extérieur se font en général par des lectures ou des écritures à des adresses spécifiques. Le système UNIX est multi-tâche, ceci pour maximiser l'utilisation du PCU. Cette technique pose comme condition obligatoire que la mémoire centrale soit utilisée et ou partagée entre les différentes tâches. Les solutions de gestion de la mémoire sont très dépendantes du matériel et ont mis longtemps à évoluer vers les solutions actuelles. Nous allons voir plusieurs approches qui peuvent servir dans des situations particulières. La mémoire est le point central dans un système d'exploitation, c'est à travers elle que l'unité centrale communique avec l'extérieur.

Allocation contiguë

Pas de gestion de la mémoire

Cette méthode, qui a l'avantage de la simplicité et de la rapidité, permet toute liberté quand à l'utilisation de la mémoire. En effet, toute adresse est accessible, et peut être utilisée pour n'importe qu'elle tâche. Le désavantage : aucune fonctionnalité, tout doit être reprogrammé, typiquement il n'y a pas de système d'exploitation.

Le moniteur résidant

On cherche à protéger le noyau des interfaces possibles de la part des utilisateurs. Pour cela, toute adresse d'instruction ou de donnée manipulée par un programme utilisateur est comparée à un registre barrière. Tant que l'adresse est supérieur à la barrière, l'adresse est légale, sinon l'adresse est une référence illégale au moniteur et une interruption est émise. Cette méthode demande que pour tout accès à la mémoire une vérification de la validité de l'adresse soit réalisée. Ceci ralentit toute exécution d'un accès mémoire. Globalement ce temps supplémentaire peut être oublié.

Le registre barrière

L'implémentation d'un tel mécanisme doit être réalisée de façon matérielle. La valeur du registre barrière est parfois réalisée de façon fixe sur une machine, ce qui pose les problèmes dès que l'on veut changer le noyau et ou protéger plus de mémoire.

Le registre base

Le mécanisme suivant est une notion plus utile et plus ergonomique pour décrire la zone d'adressage d'un programme, et utile pour résoudre le problème de déplacement des programmes en mémoire. En effet, du fait que l'on utilise un registre barrière, les adresses utilisables de la mémoire ne commencent plus à 0000, alors que l'utilisateur veut continuer à utiliser des adresses logiques qui commencent à 0000. Pour continuer à fournit cette possibilité le registre barrière est transformé en registre de base. À chaque utilisation logique du programme, on ajoute à cette adresse la valeur du registre de base pour trouver l'adresse physique. L'utilisateur ne connaît plus les adresses physiques. Il travaille uniquement avec des adresses logiques. Le moniteur a évidemment une valeur nulle pour son registre de base et donc peut adresser toute la mémoire. Le changement de la valeur du registre de base se fait de façon protégée en mode moniteur. Ces deux systèmes de protection de la mémoire sont clairement monoprocessus. Seul le moniteur peut être protégé par ces mécanismes, il n'est pas possible de protéger les processus entre eux.

Le swap

Il est possible avec les registres barrière ou les registres de base d'écrire des systèmes temps partagé, en utilisant le mécanisme de swap. Swapper, c'est échanger le contenu de la mémoire centrale avec le contenu d'une mémoire secondaire. Par extension swapper devient l'action de déplacer une zone mémoire de la mémoire vers le support de swap ou réciproquement du périphérique de swap vers la mémoire. Le système va réaliser cet échange à chaque changement de contexte. Les systèmes de swap utilisent une mémoire secondaire qui est en général un disque mais on peut utiliser d'autre supports secondaire plus lents ou plus rapides comme des bandes ou mémoires secondaires.

Le coût du swap

Sur un tel système, le temps de commutation de tâches est très important. Il est donc nécessaire que chaque processus de l'unité de traitement en temps suffisamment long pour que le ralentissement dû au swap ne soit pas trop sensible. Que se passe t'il sinon ? Le système utilise la majeure partie de ses ressource à déplacer des processus en et hors mémoire centrale. L'unité de traitement n'est plus utilisée au maximum

Utilisation de la taille des processus

Pour améliorer les mécanismes de swap, on remarque que le temps de swap est proportionnel à la taille des données à déplacer. Pour améliorer les performances, il faut donc introduire la notion de taille effective d'un processus, ce qui permet d'améliorer le débit mais cela impose que toutes les augmentations ou réductions de taille d'un processus utilisateur soient réalisée par un appel système afin que le noyau connaisse à tout moment la taille réelle de chaque processus.

Swap et exécutions concurrentes

Une autre approche très efficace est de réaliser le swap pendant l'exécution d'un autre processus. Mais avec le système de registres de relocation c'est dangereux. En effet nous ne pouvons pas assurer qu'un processus utilisateur donné ne va pas écrire dans les adresses réservées à un autre processus.

Ordonnancement en mémoire des processus

Les choix de l'implémentation des mécanismes d'adressage influence énormément l'ordonnancement des processus. Nous travaillons dans le cas d'un système de traitement par lots c'est à dire en temps partagé mais les processus restent en mémoire tout le temps de leur exécution. S'il n'y a plus de place le processus est mis en attente. Nous devons résoudre le problème suivant : il nous faut un algorithme pour choisir dynamiquement, parmi les blocs libres de la mémoire centrale, celui qui va recevoir le nouveau processus (algorithme d'allocation de mémoire à un processus). On reconnaît en général trois méthodes

  • Fisrt fit le premier bloc suffisamment grand pour contenir notre processus est choisi
  • Best fit le plus petit bloc suffisamment grand pour contenir notre processus est choisi
  • Worst-fil le bloc qui nous laisse le plus grand morceau de mémoire libre est choisi.

De nombreuse expériences pratiques et des simulations ont montré que le meilleur est first fit puis best fit et que ces deux algorithmes sont beaucoup plus efficaces que worst fit.