Bonjour,
J'essaie de comprendre les différents mécanismes de gestion de la mémoire et je bloque un peu sur ces points.
Au commencement il y a la pagination qui permet de découper la mémoire centrale en cadre de page qui devront contenir les différentes régions mémoires du processus (code, pile, tas) .
L'intérêt de la pagination c'est qu'il n'est pas nécessaire que les cadres de page soient contigus et qu'ils peuvent contenir des bouts des différentes régions mémoires.
La MMU (memory management unit) se chargera de faire la correspondance entre les adresses virtuelles qui sont manipulées par le processus et contiguës pour une même région mémoire et les adresses physiques (qui adresse réellement les cadres de page en mémoire centrale). La MMU fera la correspondance à l'aide du registre Rc3 et du répertoire de page ...
Est ce que j'ai bon jusque là?
Le buddy system est un mécanisme dont l'objectif est de ranger des ensembles de cadre de page contigu (et donc en mémoire centrale) ensemble. On a par exemple un groupe de 2, 4, 8 ... 1024 cadres de pages contigus. L'intérêt c'est que lorsque le processus va avoir besoin d'allouer de la mémoire, il suffira de se pointer dans un groupe qui a le nombre de page nécessaire ou plus pour récupérer les cadres de page nécessaire.
Le restant des cadres de page non utilisés étant rangés dans le groupe qui lui correspond.
Un autre mécanisme est le slab allocator , on a des caches en mémoires centrales et dans ces caches il y a des slabs. Un slab est une sorte de table contenant plusieurs exemplaires d'un type d'objet.
Cela est utile car souvent les processus créent les mêmes types d'objets comme par exemple des tampons réseaux. Et on a donc déjà des objets créés, pas besoin de réaliser une allocation mémoire avec malloc(). Il suffit juste de se rendre dans le bon slab.
D'après ce que j'ai compris c'est que le slab se situe plutôt du côté de la mémoire physique (tout comme le buddy system), il s'occupe de l'organisation de la mémoire centrale.
Je voudrais avoir confirmation qu'il y a bien un cache par type d'objets et qu'un cache contient plusieurs slab. D'ailleurs pourquoi un cache contient plusieurs slab? c'est pour gérer l'évolution de sa taille: en cas de demande de création de nouveaux objets, de nouvelles pages lui sont allouées et donc de nouveaux slabs sont créés?
Merci d'avance.
Partager