Comment remap_pfn_range remappe la mémoire du noyau en espace utilisateur?
remap_pfn_range
fonction (utilisé dans mmap
appel dans le pilote) peut être utilisé pour la carte de mémoire du noyau vers l'espace utilisateur. Comment est-il fait? Quelqu'un peut-il expliquer les étapes précises? En Mode noyau est un mode privilégié (PM), tandis que l'espace utilisateur non privilégié (MNP). En PM PROCESSEUR peut accéder à toute la mémoire, tandis que dans MNP de la mémoire est limitée - ne peut pas être consulté par le CPU. Lorsque remap_pfn_range
est appelé, comment est la gamme de la mémoire qui a été limité seulement à H, est maintenant accessible à l'utilisateur de l'espace?
Regardant remap_pfn_range
le code est pgprot_t struct
. C'est de la protection de la cartographie liée struct. Qu'est-ce que la protection de la cartographie? Est-il la réponse à la question ci-dessus?
source d'informationauteur Kapil Gokhale
Vous devez vous connecter pour publier un commentaire.
C'est très simple, la mémoire du noyau (en général) n'a tout simplement une page d'entrée de la table avec l'architecture de bits qui dit: "cette page d'entrée de la table n'est valable que pendant que le PROCESSEUR est en mode noyau".
Ce remap_pfn_range n'est de créer une autre page d'entrée de la table, avec une autre adresse virtuelle à la même mémoire physique de la page qui n'a pas que peu ensemble.
Généralement, c'est une mauvaise idée en passant 🙂
Le cœur du mécanisme de la page table MMU:
Liées image1 http://windowsitpro.com/content/content/3686/figure_01.gif
ou ceci:
Les deux photos ci-dessus les caractéristiques du matériel x86 mémoire MMU, rien à voir avec le noyau Linux.
Ci-dessous décrit comment les VMAs est liée au processus de task_struct:
Image http://image9.360doc.com/DownloadImg/2010/05/0320/3083800_2.gif
Image http://images.slideplayer.com/16/5079265/slides/slide_24.jpg
Et la recherche dans la fonction elle-même ici:
http://lxr.free-electrons.com/source/mm/memory.c#L1756
Les données dans la mémoire physique peut être consulté par le noyau à travers le noyau de la PTE, comme indiqué ci-dessous:
Résultat d'Image pour la page protection des drapeaux du noyau linux http://www.tldp.org/LDP/tlk/mm/page-tables.gif
Mais après l'appel de remap_pfn_range() PTE (pour un noyau de mémoire mais, pour être utilisée dans l'espace utilisateur pour y accéder) est dérivé (avec les différentes protection de la page de drapeaux). Le processus de la VMA mémoire sera mis à jour pour utiliser cette PTE d'accéder à la même mémoire - et donc la réduction de la nécessité de la mémoire des déchets par la copie. Mais le noyau et l'espace utilisateur PTE ont des attributs différents, - qui est utilisé pour contrôler l'accès à la mémoire physique, et la VMA sera également spécifié les attributs au niveau du processus: