[Kos-dev] Allocateur de memoire virtuelle pour le noyau

Christophe Avoinne (Club-Internet) kos-dev@enix.org
Sat, 5 May 2001 01:48:56 +0200


Petit rappel du pourquoi de l'intérêt de l'identity mapping du kmalloc :

- Quelque soient les tâches, ils auront tous la même adresse physique ==
adresse virtuelle, ce qui évite le danger de non-synchronisation entre les
PTE ou PDE de toutes les tâches. En effet, vous auriez tout à fait intérêt à
permettre au noyau de pouvoir en allouer en interne pour que les IRQ
puissent les remplir quelque soit la tâche où ils interviennent. Ce n'est
pas un hasard que Linux ait choisi cette approche (c'est à mon sens
l'approche la plus optimale).
- Par ailleurs, utiliser ce type d'adresse pour valider les PDE s'avère
supérieur. Exemple : j'ai deux tâches. L'une requiert la création d'une zone
de plus 4 Mo à partager entre tous les tâches (car noyau). La première tâche
devra également modifier le ou les PDE de la deuxième tâche pour être en
phase. Si la page contenant les PDE est une adresse physique accessible, il
nous sera facile d'écrire le ou les PDE dans celle de la deuxième tâche
depuis la première tâche. Si l'adresse physique n'était pas accessible, on
serait d'abord obligé de changer de CR3 pour être dans la deuxième et
modifier le ou les PDE puis de revenir sur le CR3 de la première tâche. Quel
gachi de temps quand on plus de 2 tâches à synchroniser !

Faut-il pour autant que tout le code du noyau soit en adresse physique ?
non, on peut effectivement utiliser un adressage virtuel. D'ailleurs, j'ai
toujours estimé qu'il n'avait pas lieu d'exécuter ce code dans l'espace
d'adresse physique accessible.

Une fonction kvalloc serait alors utilisé pour ça.

Je pense en revanche que les pages pour les CR3 et les PDE des tâches
auraient très intérêt à utiliser des adresses physiques accessibles.

Hlide.

P.S.: je tâcherais de vous expliquer un algorithme qui permet d'allouer des
pages physiques à taille variable (arbres déployés), avec allocation et
défragmentation de l'ordre O(ln n). Il s'apparante légèrement à celui de
chaos mais en mieux.