> Pour ton histoire d'API je ne vois pas de quoi tu parles. L'API pour
> accéder à la mémoire est une adresse mémoire. Ce n'est pas un
> "truc" avec des indirections etc.
Il parle du fait qu'actuellement, si tu veux traduire une adresse virtuelle, en adresse physique, tu dois parcourir la table des pages à la main. Les indirections dont il parle, ce sont les etapes du parcours des differents niveaux de la table de page.
Actuellement, si t'as une adresse "addr" d'un espace d'adressage "mm", tu dois faire (en virant les routines les verifications) :
Et enfin tu as le cadre physique "page" où est mappée ton adresse virtuelle.
Cette API ne correspond à rien sur certaines architectures qui utilisent autre chose d'une table de page.
Il serait donc mieux d'avoir une API du genre:
page = mmu_translate(mm, addr);
Et que mmu_translate fasse le code ci-dessus sur ia32 et fasse un truc adapté à l'architecture sur les autres.
C'est ce qui a été proposé recemment.
Voir "A proposal for a major memory management rework" dans http://lwn.net/Articles/124966(...)
[^] # Re: Il manque
Posté par Brice Goglin . En réponse à la dépêche Sortie du noyau 2.6.11. Évalué à 3.
> accéder à la mémoire est une adresse mémoire. Ce n'est pas un
> "truc" avec des indirections etc.
Il parle du fait qu'actuellement, si tu veux traduire une adresse virtuelle, en adresse physique, tu dois parcourir la table des pages à la main. Les indirections dont il parle, ce sont les etapes du parcours des differents niveaux de la table de page.
Actuellement, si t'as une adresse "addr" d'un espace d'adressage "mm", tu dois faire (en virant les routines les verifications) :
pgd = pgd_offset(mm, addr);
pud = pud_offset(pgd, addr);
pmd = pmd_offset(pud, addr);
pte = pte_offset_map(pmd, addr);
page = pte_page(*pte);
pte_unmap(pte);
Et enfin tu as le cadre physique "page" où est mappée ton adresse virtuelle.
Cette API ne correspond à rien sur certaines architectures qui utilisent autre chose d'une table de page.
Il serait donc mieux d'avoir une API du genre:
page = mmu_translate(mm, addr);
Et que mmu_translate fasse le code ci-dessus sur ia32 et fasse un truc adapté à l'architecture sur les autres.
C'est ce qui a été proposé recemment.
Voir "A proposal for a major memory management rework" dans
http://lwn.net/Articles/124966(...)