Croisière au coeur d'un OS Etape 3 : Gestion de la mémoire physique

Gestion de la mémoire physique

Jusqu'ici, l'ensemble du code et des données utilisées par SOS était allouée "en statique", c'est-à-dire par le compilateur dans le fichier exécutable du noyau. Ces allocations correspondaient soit aux variables globales, soit aux variables locales déclarées "static", soit encore au code. Toutefois, comme dans de nombreux systèmes d'exploitation, SOS pourra allouer dynamiquement de la mémoire supplémentaire selon ses besoins. Cela permettra par exemple de créer des processus, de stocker les données nécessaires à la gestion des systèmes de fichiers, etc. . .

Le principe général de l'allocation dynamique de mémoire est assez simple. Il s'agit de connaitre les emplacements libres et les emplacements occupés de la mémoire et d'écrire un jeu de fonctions permettant d'allouer et de libérer ces emplacements. Pour éviter tout écrasement du code ou des données allouées, la contrainte élémentaire est que les emplacements alloués ne peuvent pas être ré-alloués pour une autre utilisation sans avoir été libérés entre-temps.

La première étape pour permettre l'allocation dynamique de mémoire est de gérer la mémoire physique, c'est-à-dire la mémoire physiquement présente dans l'ordinateur.

Pour des raisons liées à la pagination (que nous étudierons au prochain article, Etape 4), nous décidons de découper la mémoire physique en zones de 4 Ko, appelées pages physiques. Nous avons donc à implanter ici le mécanisme d'allocation le plus simple qui soit : il s'agit seulement de savoir quelles pages physiques sont occupées ou non et de permettre l'allocation et la libération de ces pages.

En toute rigueur, nous devrions aussi parler de l'allocation et de la libération de zones plus grandes ou plus petites que 4 ko. Ceci sera en fait pris en charge par les deux mécanismes que nous présenterons dans les deux prochains articles (Etape 4 et 5). Ces deux mécanismes utiliseront évidemment le présent gestionnaire de mémoire physique.

Valid XHTML 1.0!