• [^] # Re: Il manque

    Posté par . En réponse à la dépêche Sortie du noyau 2.6.11. Évalué à 3.

    > 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) :

    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(...)