Numérique et Sciences Informatiques > Architecture des Ordinateurs > Systèmes d'Exploitation (OS) > Gestion de la mémoire

Gestion de la mémoire vive (RAM)

Comprendre comment le système d'exploitation gère la mémoire vive (RAM) pour exécuter les programmes : allocation, libération, pagination et segmentation. Exemples concrets pour les lycéens.

Introduction à la mémoire vive (RAM)

La mémoire vive, ou RAM (Random Access Memory), est l'endroit où l'ordinateur stocke temporairement les données et les instructions nécessaires à l'exécution des programmes. Contrairement au disque dur (stockage permanent), la RAM est volatile : son contenu est effacé lorsque l'ordinateur est éteint. Elle permet un accès rapide aux données, essentiel pour le bon fonctionnement des applications.

Imaginez la RAM comme le plan de travail d'un cuisinier. Il y place les ingrédients et les ustensiles dont il a besoin immédiatement pour préparer un plat. Une fois le plat terminé, il range ces éléments et prépare le plan de travail pour une nouvelle recette.

Allocation de la mémoire

Lorsque vous lancez un programme, le système d'exploitation (OS) doit lui allouer de l'espace en mémoire vive pour stocker son code, ses données et les variables qu'il utilise. C'est l'allocation de mémoire. L'OS utilise différents algorithmes pour décider de la quantité de mémoire à allouer et où la placer.

Exemple: Lorsque vous ouvrez un navigateur web, le système d'exploitation lui attribue une portion de la RAM pour charger les pages web, les images et les scripts.

L'allocation peut être statique (taille fixe déterminée à la compilation) ou dynamique (taille variable ajustée pendant l'exécution du programme). L'allocation dynamique est plus flexible, mais nécessite une gestion plus complexe pour éviter les fuites de mémoire.

Libération de la mémoire

Lorsque vous fermez un programme, ou lorsqu'une variable n'est plus utilisée, il est essentiel de libérer la mémoire qui lui était allouée. Si la mémoire n'est pas libérée, elle reste occupée et ne peut pas être réutilisée par d'autres programmes. Cela conduit à des fuites de mémoire, qui peuvent ralentir l'ordinateur et, à terme, provoquer un plantage.

Exemple: Si vous fermez votre navigateur web, le système d'exploitation doit libérer la mémoire vive qu'il utilisait pour que d'autres applications puissent l'utiliser. Si la mémoire n'est pas libérée, l'ordinateur finira par manquer de mémoire, et les nouvelles applications ne pourront pas s'exécuter.

En C ou C++, le programmeur est responsable de la libération de la mémoire allouée dynamiquement. Dans d'autres langages, comme Java ou Python, un ramasse-miettes (garbage collector) s'occupe de la libération automatique de la mémoire non utilisée.

La pagination

La pagination est une technique de gestion de la mémoire qui divise la mémoire virtuelle en blocs de taille fixe appelés pages. La mémoire physique (RAM) est également divisée en blocs de taille fixe appelés cadres de page.

Lorsqu'un programme a besoin de plus de mémoire qu'il n'y en a de disponible physiquement, le système d'exploitation peut déplacer certaines pages vers le disque dur (fichier d'échange ou swap). Cela permet d'exécuter des programmes plus grands que la RAM disponible, mais ralentit les performances car l'accès au disque dur est beaucoup plus lent que l'accès à la RAM.

Illustration: Imaginez que vous avez un livre très grand (le programme) et un bureau petit (la RAM). Vous ne pouvez pas étaler tout le livre sur le bureau en même temps. Vous posez donc seulement quelques pages (les pages de la mémoire virtuelle) sur le bureau et gardez le reste du livre à côté (le fichier d'échange). Quand vous avez besoin d'une page qui n'est pas sur le bureau, vous l'échangez avec une page qui y est déjà.

La segmentation

La segmentation est une autre technique de gestion de la mémoire qui divise la mémoire en blocs de taille variable appelés segments. Chaque segment correspond généralement à une partie logique du programme (code, données, pile).

Contrairement à la pagination, les segments peuvent avoir des tailles différentes, ce qui permet de mieux s'adapter aux besoins du programme. Cependant, la segmentation peut entraîner une fragmentation de la mémoire, ce qui complique l'allocation et la libération.

Exemple: Un programme pourrait avoir un segment pour le code principal, un segment pour les données globales, et un segment pour la pile d'appels. Chaque segment peut avoir une taille différente selon les besoins du programme.

Ce qu'il faut retenir

  • RAM: Mémoire volatile où les programmes sont exécutés.
  • Allocation: Attribution de mémoire aux programmes.
  • Libération: Restitution de la mémoire non utilisée.
  • Fuites de mémoire: Mémoire allouée mais non libérée, nuisible aux performances.
  • Pagination: Division de la mémoire en pages de taille fixe, avec possible utilisation du fichier d'échange.
  • Segmentation: Division de la mémoire en segments de taille variable.
La bonne gestion de la mémoire est cruciale pour le bon fonctionnement d'un système informatique.

FAQ

  • Qu'est-ce qu'une fuite de mémoire et comment l'éviter?

    Une fuite de mémoire se produit lorsqu'un programme alloue de la mémoire mais ne la libère pas après l'avoir utilisée. Cela peut entraîner une saturation de la mémoire et un ralentissement de l'ordinateur. Pour l'éviter, il faut s'assurer de libérer la mémoire allouée dynamiquement dès qu'elle n'est plus nécessaire, en utilisant les fonctions appropriées (par exemple, free() en C/C++).
  • Pourquoi la pagination peut-elle ralentir l'ordinateur?

    La pagination peut ralentir l'ordinateur car elle implique le transfert de données entre la RAM et le disque dur (fichier d'échange). L'accès au disque dur est beaucoup plus lent que l'accès à la RAM. Lorsque le système d'exploitation doit fréquemment échanger des pages entre la RAM et le disque dur (thrashing), les performances de l'ordinateur peuvent être fortement dégradées. Avoir suffisamment de RAM peut aider à minimiser le recours à la pagination.