suivant: kfree
monter: Gestion de heap
précédent: Gestion de heap
  Table des matières
L'allocation de pages est un mécanisme puissant, mais qui oblige à toujours savoir à quel endroit on veut mapper des pages. On voudrait pouvoir se débarasser de cette obligation, c'est à dire d'avoir une fonction qui prend en paramètres la taille de la zone que l'on veut allouer, et qui renvoie un pointeur vers cette zone. La fonction kalloc va gérer ce mécanisme.
On réserve une partie de l'espace d'adressage kernel pour cet usage, appelée le heap. Chaque fois que l'on va appeler la fonction kalloc, on va aller chercher un emplacement libre suffisemment grand dans le heap. On va éventuellement allouer les pages correspondantes, puis renvoyer un pointeur vers cette zone.
On a placé le heap en 0x20000000. On commence ainsi l'allocation à cette adresse, et on avance jusqu'à trouver une zone libre.
Chaque zone mémoire est précédée d'une structure de ce type:
- prédécent contient l'adresse de la structure précédente dans le heap
- suivant contient l'adresse de la structure suivante dans le heap
- état contient 0 si la zone est occupée, 1 si la zone est libre
Lors d'une demande d'allocation, l'algorithme va donc être le suivant:
- 1 - Aller à la première structure, située en 0x20000000
- 2 - Regarder si la zone suivante est libre, et si oui que l'espace est suffisant
- 3 - Si non, aller à la prochaine structure, retourner au 2
- 4 - Si oui, modifier la structure pour indiquer que la zone est désormais allouée. Si il rèste suffisemment de place à la fin de la zone ainsi allouée, y rajouter une structure indiquant que la zone suivante est libre.
suivant: kfree
monter: Gestion de heap
précédent: Gestion de heap
  Table des matières
2003-03-30