Je suis intéressé par la différence entre Highmem et Lowmem :
- Pourquoi y a-t-il une telle différenciation ?
- Que gagnons-nous en faisant cela ?
- Quelles sont les fonctionnalités de chacun ?
Réponse acceptée :
Sur une architecture 32 bits, la plage d'espace d'adressage pour l'adressage de la RAM est :
0x00000000 - 0xffffffff
ou 4'294'967'295
(4 Go).
Le noyau Linux divise cela en 3/1 (peut également être 2/2 ou 1/3 ) en espace utilisateur (mémoire élevée) et espace noyau (mémoire faible) respectivement.
La plage de l'espace utilisateur :
0x00000000 - 0xbfffffff
Chaque processus utilisateur nouvellement généré obtient une adresse (plage) à l'intérieur de cette zone. Les processus utilisateur ne sont généralement pas fiables et il leur est donc interdit d'accéder à l'espace du noyau. De plus, ils sont considérés comme non urgents, en règle générale, le noyau essaie de différer l'allocation de mémoire à ces processus.
La plage d'espace du noyau :
0xc0000000 - 0xffffffff
Un processus du noyau obtient son adresse (plage) ici. Le noyau peut accéder directement à ce 1 Go d'adresses (enfin, pas le 1 Go complet, il y a 128 Mo réservés pour un accès mémoire élevé).
Les processus générés dans l'espace noyau sont fiables, urgents et supposés sans erreur, la demande de mémoire est traitée instantanément.
Chaque processus du noyau peut également accéder à la plage d'espace utilisateur s'il le souhaite. Et pour y parvenir, le noyau mappe une adresse de l'espace utilisateur (la mémoire haute) vers son espace noyau (la mémoire basse), les 128 Mo mentionnés ci-dessus sont spécialement réservés à cela.
Que le partage soit 3/1, 2/2 ou 1/3 est contrôlé par CONFIG_VMSPLIT_...
option; vous pouvez probablement vérifier sous /boot/config*
pour voir quelle option a été sélectionnée pour votre noyau.