web-dev-qa-db-fra.com

traduire l'adresse virtuelle en adresse physique

Le tableau de pages suivant concerne un système avec des adresses physiques et virtuelles 16 bits et des pages de 4 096 octets. Le bit de référence est mis à 1 lorsque la page a été référencée. Périodiquement, un thread met à zéro toutes les valeurs du bit de référence.Tous les nombres sont fournis en décimal. enter image description here

Je souhaite convertir les adresses virtuelles suivantes (en hexadécimal) en adresses physiques équivalentes. Je souhaite également définir le bit de référence pour l'entrée appropriée dans le tableau des pages.

0xE12C

0x3A9D

0xA9D9

0x7001

0xACA1

Je sais que les réponses sont, mais je veux savoir comment puis-je obtenir ces réponses:

0xE12C → 0x312C
0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1

J'ai trouvé et essayé This mais cela ne m'a pas beaucoup aidé.

13
Ruan

Il est donné que l'adresse virtuelle est longue de 16 bits.
Par conséquent, il y a 2 ^ 16 adresses dans l'espace d'adressage virtuel.
La taille de la page est donnée à 4 Ko (il y a des adresses 4K (4 * (2 ^ 10)) dans une page), donc le nombre de pages sera (2 ^ 16)/(2 ^ 12) = 2 ^ 4.
Pour adresser chaque page, 4 bits sont nécessaires.
Les 4 bits les plus significatifs de l'adresse virtuelle désigneront le numéro de page référencé et les 12 bits restants seront le décalage de page.

Une chose à retenir est que la taille de la page (dans l'espace d'adressage virtuel) est toujours identique à la taille du cadre dans la mémoire principale. Par conséquent, les 12 derniers bits resteront les mêmes dans l'adresse physique que celle de l'adresse virtuelle.

Pour obtenir l'adresse de trame dans la mémoire principale, utilisez simplement les 4 premiers bits.
Exemple: considérez l'adresse virtuelle 0xACA1
Ici A dans A CA1 désigne le numéro de page (10) et le numéro de trame correspondant est 5 (0101) donc l'adresse physique résultante sera → 0x5CA1.

14
Akash Mahapatra

Pour traduire une adresse virtuelle en une adresse physique (s'applique [~ # ~] seulement [~ # ~] à cette question de devoirs), nous devons savoir 2 choses:

  • Taille de la page
  • Nombre de bits pour l'adresse virtuelle

Dans cet exemple: Système 16 bits , Taille de page 4Ko et la taille de la mémoire physique est 64 Ko .

Tout d'abord, nous devons déterminer le nombre de bits nécessaires pour agir comme décalage à l'intérieur de la page.
log2(Page-Size) = log2(4096) = 12 bits pour décalage

Sur les 16 bits pour l'adresse virtuelle, 12 sont pour l'offset, cela signifie que chaque processus a 2^4 = 16 pages virtuelles. Chaque entrée du tableau des pages stocke le cadre correspondant contenant la page. Par exemple:

enter image description here

Maintenant, traduisons!

Tout d'abord pour la facilité de travail permet de convertir 0xE12C à binary.

0xE12C = (1110 0001 0010 1100) in base 2
1110 = 14 in decimal
Entry 14 in P.T => Page frame 3.

Permet de le concaténer aux 12 bits de décalage

Answer: (0011 0001 0010 1100) = 0x312C

Un autre exemple: 0x3A9D

0x3A9D = 0011 1010 1001 1101
0011 = 3
PageTable[3] = 10
10 in decimal = 1010 in binary
1010 1010 1001 1101 in binary = 0xAA9D
13
Tony Tannous

Pour vous aider à résoudre cette question, nous devons obtenir nos coordonnées correctement:

  1. 16 bits d'espace d'adressage virtuel = 2 ^ 16 = 65 536 espace d'adressage
  2. 16 bits d'espace d'adressage physique = 2 ^ 16 = 65 536 espace d'adressage
  3. La taille de page de 4096 octets détermine le décalage, qui est Log (4096)/Log (2) = 12 bits. Cela signifie, 2 ^ 12 pour la taille de la page
  4. Selon @Akash Mahapatra, le décalage de l'adresse virtuelle est directement mappé au décalage sur l'adresse physique

À ce titre, nous avons maintenant:

  • 2 ^ 16 (16 bits) pour l'adresse virtuelle - 2 ^ 12 (12 bits) pour l'offset = 4 bits pour les pages, ou plutôt le nombre total de pages disponibles.
  • Je ne répéterai pas le calcul physique car ce sont les mêmes chiffres.
  • 2 ^ 4 (4 bits) pour les pages = 16, ce qui correspond au nombre d'entrées du tableau ci-dessus!

Nous y arrivons ... soyez patient! :)

L'adresse mémoire 0xE12C en notation hexadécimale contient également 16 bits d'adresse. (Puisqu'il est indiqué dans la question.)

Tranchons maintenant l'adresse ...

Nous supprimons d'abord "0x" des informations.

Nous pouvons convertir E12C en notation binaire comme @Tony Tannous, mais je vais appliquer un petit raccourci.

Mapping of the Address and Offset

J'utilise simplement un ratio. Eh bien, l'adresse est notée en 4 caractères ci-dessus, et puisque 16/4 = 4, je peux définir la première lettre comme adresse virtuelle, tandis que les 3 autres sont des adresses décalées.

Avec les informations, "E" au format hexadécimal, je dois convertir en Decimal = 14. Ensuite, je regarde votre tableau fourni, et j'ai trouvé le cadre de page "3". Le cadre de page 3 est noté au format décimal, qui doit ensuite être reconverti au format hexadécimal ... Duh! ... qui est 3!

Ainsi, le mappage d'adresse physique de l'emplacement de mémoire virtuelle de 0xE12C peut être trouvé à 0x312C sur la mémoire physique.

Vous retournerez ensuite au tableau, vous vous référerez à la colonne de bit de référence et vous mettrez un "1" à la ligne 14.

Appliquer le même concept pour ceux-ci -

0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1

Si vous remarquez, les 3 derniers chiffres sont identiques (ce qui détermine le décalage). Et le 1er des 4 chiffres est mappé selon le tableau:

table entry 3 -> page frame 10 -> hex notation A
table entry A (10) -> page frame 5 -> hex notation 5
table entry 7 -> page frame 15 -> hex notation F
table entry A (10) -> page frame 5 -> hex notation 5

J'espère que cette explication vous aidera, vous et d'autres comme moi! :)

2
joke