Comment puis-je utiliser une table de pages à convertir une adresse virtuelle en une physique?
Permet de dire que j'ai une page normale de la table:
De la Table des pages (taille de la Page = 4k)
Page #: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Page Frame #: 3 x 1 x 0 x 2 x 5 x 7 4 6 x x x
Comment puis-je convertir un arbitraire adresse logique comme 51996 dans une adresse de mémoire physique?
Si je prends logarithme de base 2 (4096), j'obtiens 12. Je pense que c'est le nombre de bits que je suis supposer à utiliser pour le décalage de mon adresse.
Je suis pas sûr. 51996 /4096 = 12.69. Donc, est-ce à dire, elle se trouve sur la page n ° 12 avec un certain décalage?
Comment puis-je tourner que dans l'adresse physique de "51996"?
OriginalL'auteur | 2009-05-06
Vous devez vous connecter pour publier un commentaire.
Pour déterminer la page de l'adresse de mémoire, prendre la première sur P bits (de la N bits).
P = lg2(numberOfPages)
Dans votre exemple, P=lg2(16)=4
Donc les 4 premiers bits d'une adresse de mémoire nous dira la page. Cela signifie que le reste doit être le décalage à partir du début de cette page.
Votre adresse d'exemple, 51996, est 1100101100011100 en binaire. I. e. [1100:101100011100].
1100 (12 en décimal) est le numéro de la page
101100011100 (2844 en décimal) est le décalage
Maintenant, nous avons besoin de trouver l'endroit où la page 12 est en mémoire.
En regardant votre cadre, tableau, il apparaît que la page 12 est résident dans le 6e cadre. Dans un système où tous les mémoire paginable (c'est à dire pas mappés en mémoire IO) de la 6ème page de cadre sera à (entriesPerPage*frameNum)-1
Dans ce cas, 4000*6-1 = 23999 (Le "-1" est nécessaire, car la mémoire est 0-indexé.)Dans ce cas, 4096*6-1 = 24575 (Le "-1" est nécessaire, car la mémoire est 0-indexé.)
Maintenant tout ce que nous avons à faire est d'ajouter le décalage et nous avons l'adresse de mémoire physique:
23999 + 2844=26843 = 0x68DB24575 + 2844 = 27419 = 0x6B1B
Fait!
Espère que ce (edit) a été utile XD
Edit:
Grâce à Jel pour rattraper mon erreur 🙂
Grâce à user8 pour rattraper mon erreur! (frameNum au lieu de pageNum).
Les adresses sont de longueur fixe à travers des processus, de sorte que si un processus a qu'une seule page, tous ses adresses commencent par la même valeur. Dans l'exemple ci-dessus avec 16 pages, les quatre premiers bits d'une seule page, processus sera 0b0000.
Pourquoi êtes-vous en multipliant par 4000 au lieu de 4096 dans la deuxième à la dernière étape?
Bonne prise! Il convient de 4096. Je suppose que lorsque je l'ai d'abord lu la question, je suppose 4k===4000, bien que la question mentionne clairement 4096 plus d'une fois. Merci!
dans votre formule (entriesPerPage*pageNum)-1
pageNum
devrait êtreframeNum
OriginalL'auteur ParoXoN
Si je comprends votre question correctement (je n'ai probablement pas), vous voulez savoir comment trouver l'adresse physique à partir de l'adresse virtuelle à l'aide de la page table des structures. Dans ce cas, imaginez que vous êtes le processeur. Utilisez le 10 bits les plus significatifs de l'adresse pour trouver la page table dans le répertoire de la page (le niveau supérieur de la table des pages). Les 10 bits de l'index dans la table des pages (le niveau inférieur de la table des pages). Utiliser l'adresse de la page d'entrée de la table pour trouver l'adresse physique de la page. Les dix derniers bits de l'adresse de l'octet dans la page.
Par le chemin, vous trouverez probablement beaucoup plus de gens qui comprennent ce genre de question à un OS orienté site comme OSDev. Je ne pouvais pas vraiment aller dans trop de détails dans cette réponse parce que je n'ai pas fait ce genre de choses depuis des années.
OriginalL'auteur Zifre
Ce qui pourrait aider:
OriginalL'auteur oscar
première étape : 51996 /4000 = 12 -> p , demeurent= 3996 -> d (offset).
maintenant, regardez le tableau p(12) = 6
deuxième étape : (6*4000) + 3996 : 27996
l'adresse physique est 27996.
OriginalL'auteur tea-addict
La page suivante table est pour un système de 16 bits adresses virtuelles et physiques et à 4 096 octets pages. La référence bit est mis à 1 lorsque la page a été référencé. Périodiquement, un thread remet à zéro toutes les valeurs de la référence bits. Un tableau de bord pour un cadre de page indique que la page n'est pas dans la mémoire. La page de l'algorithme de remplacement est localisée à la LRU, et que tous les chiffres sont fournis en décimal.
Page De Cadre De Référence Bits
0 9 0
1 1 0
2 14 0
3 10 0
4 - 0
5 13 0
6 8 0
7 15 0
8 0 0
9 - 0
10 5 0
11 4 0
12 - 0
13 3 0
14 - 0
15 2 0
un. Convertir les suivants adresses virtuelles (en hexadécimal) de l'équivalent des adresses physiques (fournir des réponses en hexadécimal ET en décimal). Également définir la référence de peu pour que l'entrée correspondante dans la table des pages. (3)
j'. 0xBC2C
ii. 0x00ED
iii. 0xEA14
iv. 0x6901
v. 0x23A1
vi. 0xA999
OriginalL'auteur Anneline