Éléments fournis: adresse octet virtuel 64 bits, pages 16 Ko, adresse octet physique 32 bits.
Quelle est la taille totale de la table des pages sur cette machine, en supposant que les bits valides, de protection, sales et d'utilisation prennent un total de 4 bits et que toutes les pages virtuelles sont en cours d'utilisation.
Jusqu'à présent, je connais le nombre total d'entrées de table de pages: 2 ^ 64/2 ^ 14 = 2 ^ 50, mais je ne suis pas en mesure de comprendre comment trouver la taille de chaque entrée.
Chaque entrée contient 4 bits comme indiqué dans la question, mais le reste de la taille de l'entrée peut-il être trouvé à partir de l'adresse d'octet physique? Je suis confus dans cette partie.
Merci.
Voir ci-dessous une méthode de calcul de la taille du tableau des pages:
Obtenez d'abord le décalage de la page en calculant log2 (taille de la page en octets). Dans votre exemple, la taille de la page est de 16 Ko, donc log2 (16 * 2 ^ 10) est 14; autrement dit, le décalage de page est de 14 bits.
Ensuite, calculez la taille du numéro de page physique (PPN) en soustrayant le décalage de page du nombre total de bits alloués à l'adresse physique. Dans votre exemple, l'adresse physique est de 32 bits, PPN = 32 - 14 ou 18 bits.
Vous pouvez maintenant calculer la taille de l'entrée de table de page (PTE) en ajoutant un bit valide, un bit de protection, etc. au PPN calculé. Cette valeur sera le nombre total de bits requis par entrée de page. Dans notre exemple, PTE sera de 22 bits.
Une dernière information dont nous avons besoin est le nombre d'entrées de page dans le tableau des pages. Nous pouvons obtenir cela en soustrayant le décalage de page du nombre total de bits que nous avons pour le numéro de page virtuel; c'est-à-dire 64 - 14 = 50, c'est-à-dire que nous avons besoin de 2 ^ 50 entrées pour représenter la gamme complète des adresses virtuelles.
Ainsi, la taille totale du tableau de pages s'élève à 2 ^ 50 * 22 bits , ce qui équivaut à 2,75PB. Comme cela est beaucoup à garder en mémoire et sera probablement coûteux et lent, les processeurs modernes utilisent Translation Lookaside Buffer (TLB) comme cache pour les entrées de page récemment utilisées.
J'espère que cela t'aides!
Vous avez une taille de page de 16 Ko = 2 ^ 14, vous avez donc besoin de 14 bits pour le décalage de page. Sur l'adresse virtuelle 64 bits, si vous supprimez ce décalage, il vous restera 50 bits. Cela implique que vous avez 2 ^ 50 entrées dans votre tableau de pages.
De plus, étant donné que votre adresse physique est de 32 bits et que l'offset représente 14 bits sur ces 32 bits, il vous reste les 18 bits qui doivent provenir du tableau des pages.
Sur ces 18 bits, 4 bits sont votre validité, votre utilisation, etc.
Quoi qu'il en soit, par entrée, les bits utilisés = 18
Mémoire totale pour la table des pages (c'est par processus, vous devrez donc la multiplier par le nombre de processus si cela est spécifié) = 2 ^ 50 * 18 bits
Un petit éclaircissement pour ceux qui pourraient se demander, car je n'ai pas trouvé la définition claire dans CSAPP et est venu confus quand j'étudiais. Numéro de page physique (PPN) fait référence à la page dans laquelle se trouve ce PA. Si PPN = 0, alors ce PA est dans le tableau de la 0e page, si PPN = 11, alors le PA se trouve dans le 3e tableau . Une astuce est que le nombre de bits d'un décalage détermine la taille de cet emplacement . Si décalage de page est de 14 bits, la taille d'une page est de 2 ^ 14 unités de cet emplacement (ici par PTE). Corrige moi si je me trompe.