Allocation de mémoire pour le noyau
Le VMM : Virtual Memory Manager
Le vmm est la couche bas niveau de l'allocateur. C'est elle qui va s'occuper de regrouper plusieurs pages virtuelles contiguës en une seule entité dans laquelle on va pouvoir gérer l'allocation de plus petits objets (avec les slabs).
L'objectif du vmm va donc de gérer des ranges (intervalles) de pages physiques en les marquant comme libres ou occupées, comme toujours.
Allouer un range
L'allocation utilisée est de type first fit, ce qui veut clairement dire qu'on recherche le premier emplacement en mémoire qui convienne lorsqu'on en recherche un d'une certaine taille.
Lorsqu'on trouve cet emplacement, deux cas peuvent se présenter :
- l'emplacement fait exactement la taille recherchée, c'est le cas le plus simple : on supprime celui-ci de la liste des emplacements libres et on l'ajoute à la liste des emplacements occupés ;
- cas certainement plus courant, l'emplacement est plus grand que celui recherché, il faut donc le découper en deux : une zone de la taille de celle voulue qu'on va ajouter à la liste des zones occupées et ce qui reste doit être redimensionné en lui ôtant la zone utilisée.
Initialiser les ranges
On devra ensuite initialiser toute la mémoire avec les fonctions développées pour indiquer au système quelles sont les zones utilisables et celles qui ne le sont pas.
La chose à laquelle il faudra notamment faire le plus attention sera par exemple de protéger certaines zones de la mémoire physique en les marquant comme occupées et inutilisables. Ainsi, on devra prendre garde à marquer occupées :
- la zone du code noyau ;
- la mémoire vidéo (important si on ne souhaite pas voir s'afficher des caractères à l'écran lors de l'allocation de la mémoire (-;) ;
- ...