Skip to main content

Introduction

La mémoire

La mémoire a toujours été une ressource indispensable d'un système. Elle est partagée entre tous les processus. La mémoire est une suite non-structurée d'octets, le système d'exploitation ne connait donc pas la structure des informations en mémoire (qui dépends de chaque processus).

Importance de la mémoire

Les instructions d'un programme peuvent contenir des adresses mémoires en argument il est donc nécessaire qu'un processus se trouve entièrement en mémoire pour pouvoir s'exécuter. Une gestion efficace de cette mémoire est donc primordiale.

Types de mémoires

Registres

Les registres sont des zones mémoires attachées au processus, leur taille est généralement très réduite (de l'ordre de quelques Ko) mais sont extrènement rapide, pouvant généralement être accédé en un seul cycle d'horloge du processeur.

Mémoire vive (RAM)

La mémoire vive est la mémoire princiaple du système. Elle est la ressource importante à gérer et est souvent présente en quantité (entre 2 et 64Go). Elle est standardisée aux normes DDR3 et DDR4. Elle est plus lente par rapport au CPU (il faut parfois plusieurs cycles d'horloge pour récupérer une information), le CPU doit donc attendre ou mettre la donnée en cache. Cependant cette ressource reste beaucoup plus rapide qu'un disque (SSD ou HDD).

Mémoire cache

La mémoire cache a pour but d'améliorer les performances générales du système en plancant en mémoire plus rapide les données souvent demandées.

Il existe 3 niveaux de mémoire cache, le premier niveau sert à stocker tempoerairement des instructions et données. Les 2 autres niveaux sont présents entre la mémoire RAM et la mémoire cache de premier niveau.

Mémoire virtuelle

La mémoire virtuelle est une mémoire simulée par le système. Elle utilise le disque dur comme ram additionelle. Elle est seulement limitée par la taille du disque dur mais elle est très lente.

Isolation de la mémoire

Il est essentiel que chaque processus aie une zone mémoire réservée pour éviter des problèmes de sécurité et d'intégrité des données.

Un processus ne peut donc pas écrire dans l'espace mémoire d'un autre. Si il essaye on aura une "Segmentation Fault". La mémoire n'est donc pas partagées entre les processus sauf lorsque cela est explicitement demandé. (Voir Mémoire partagée pour plus d'informations).

Translation d'adresse

Lorsqu'un programme est chargé il est placé entièrement en mémoire à une adresse de départ. Son espace d'adressage est défini et les instructions du programme font référence à l'adresse 0.

La translation peut être effectuée à 3 moments :

  • A la compilation (inexistant aujourd'hui), on met les addresses physiques dans le programme compilé ;
  • Au chargement (l'addresse de départ est choisie lors du chargement du processus par le système d'exploitation) ;
  • A l'exécution, lors de l'exécution des intstructions, cela demande un hardware précis et est utilisé par la segmentation.

Types d'adresses

On parle d'adresse logique pour parler de l'addresse présente dans les programmes (qui se réfèrent à l'adresse 0).

On parle en revanche d'adresse physique pour parler d'une case mémoire adressable de la mémoire RAM.

La conversion entre l'adresse logique et l'adresse physique est faite par le Memory Management Unit (MMU) qui est un composant matériel spécialisé dans l'opération de translation.