J'ai fait des recherches sur Internet et j'ai constaté que la plupart des gens préconisent l'utilisation de kmalloc
car vous avez la garantie d'obtenir des blocs physiques contigus de mémoire. Cependant, il semble également que kmalloc
peut échouer si un contigu physique Le bloc que vous voulez est introuvable.
Quels sont les avantages d'avoir un bloc de mémoire contigu ? Plus précisément, pourquoi aurais-je besoin d'un bloc de mémoire contigu ? physique bloc de mémoire dans un appel système ? Y a-t-il une raison pour laquelle je ne pourrais pas simplement utiliser vmalloc
?
Enfin, si je devais allouer de la mémoire pendant le traitement d'un appel système, devrais-je spécifier GFP_ATOMIC
? Un appel système est-il exécuté dans un contexte atomique ?
GFP_ATOMIC
L'allocation est hautement prioritaire et n'est pas en sommeil. C'est le drapeau à utiliser dans les gestionnaires d'interruptions, les moitié et d'autres situations où vous où vous ne pouvez pas dormir.
GFP_KERNEL
Il s'agit d'une allocation normale qui pourrait être bloquée. C'est le drapeau à utiliser dans le code de contexte de processus quand il est sûr de dormir.
0 votes
Un bon article sur vmalloc et kmalloc http://learnlinuxconcepts.blogspot.in/2014/02/linux-memory-management.html
6 votes
Cet article affirme des absurdités comme : "Généralement, une architecture 32 bits a une taille de page de 4KB et une architecture 64 bits a une taille de page de 8KB". Je ne l'ai pas lu entièrement, mais je ne le qualifierais pas de "bon", ni même d'en croire un mot.
1 votes
Note (semi-relationnelle) :
vmalloc
est plus rapide avec le noyau 5.2 (Q2 2019)