web-dev-qa-db-fra.com

Numéro de page et offset

J'apprends les différents types de gestion de la mémoire. Je ne comprends pas l'intérêt d'avoir un bit de décalage dans une adresse virtuelle. Et aussi pourquoi les tailles de page ont une puissance de 2?

  • Ma principale confusion est la suivante: Me donner un exemple de décalage utilisé dans une instruction pour accéder à une adresse virtuelle donnée?

  • Ma deuxième confusion est la suivante: La déclaration habituelle est que si la taille de l'adresse logique est 2^m et la taille de la page est 2^n, les m-n bits de poids fort d'une adresse logique désignent le numéro de page.

14
user1493786

Je pense que vos confusions primaires et secondaires sont dues à une confusion générale sur le sujet :)

Laissez-moi vous en parler un peu et j'espère pouvoir vous aider. Premièrement, une analogie - imaginez que vous essayez de localiser une maison dans une ville. Imaginez que chaque maison se voit attribuer un numéro unique - vous pouvez imaginer que le nombre de maisons deviendra bientôt très grand et déroutant. Maintenant, imaginez que vous introduisiez le concept de rues - les numéros de maison deviennent maintenant un peu plus gérables puisque vous les avez regroupés en morceaux de Nice. Donc: Streets = numéro de page, numéro de maison = adresse de décalage.

L’intérêt des pages de mémoire virtuelle est de permettre à l’ordinateur de découper la mémoire en morceaux gérables sans perdre trop de temps. Le découper en morceaux (pages) permet un contrôle granulaire de l’accès, de la pagination et d’autres fonctions de ce type. Plus vos pages sont petites, moins vous perdez de mémoire (si le processus A nécessite 32 Ko, et que la taille de votre page est de 64 Ko, certaines d'entre elles ne seront pas utilisées), mais plus le frais généraux sur le système.

Pour expliquer pourquoi les tailles de page ont une puissance de 2, il s’agit de la nécessité de ne pas gaspiller d’espace dans l’adresse. Comme les ordinateurs sont basés sur le binaire (pour le moment), tout tend à se résumer à des puissances de 2. Imaginez si vous avez des choses basées sur des facteurs de 10. 10 en binaire est 1010 - vous devez utiliser 4 bits pour le tenir Alors pourquoi ne pas choisir la plage complète de valeurs sur 4 bits: 0000 - 1111 (0 à 15 = 16 valeurs).

Désolé, j'ai un peu bavardé - j'espère que cela vous incite à aller dans la bonne direction!

24
GHC

J'aime l'analogie du GHC avec les rues et les villes pour expliquer pourquoi nous avons besoin de la pagination. De plus, le regroupement d'octets de la mémoire dans des pages permet au processeur de disposer de plus grandes quantités de mémoire.

Supposons que les propriétés suivantes sont données:

  • adresse virtuelle 32 bits 
  • le décalage de page est de 12 bits
  • adresse physique est 30 bits 
  • le RAM est 1GiB

Voici un digramme que j'ai créé qui montre comment le numéro de page et le décalage de page sont utilisés pour adresser une cellule spécifique dans la mémoire:

 enter image description here

Il existe une adresse virtuelle générée par la CPU et composée du numéro de page virtuelle (20 bits) et du décalage de page (12 bits).

Il existe également un pagemap utilisé pour le mappage de numéro de page virtuel à numéro de page physique (en plus, le bit sale indique si la page a été modifiée/le bit de résident indique si la page réside dans la mémoire) et à droite le mode de répartition de la mémoire en pages. (en bleu sur le schéma).

Le numéro de page virtuelle est transmis au pagemap à l'aide de 20 bits d'adresse. Comme le numéro de page est passé en binaire, 20 bits d’adresse signifient que le plan de page peut avoir jusqu’à 2 ^ 20 enregistrements (avec 20 bits, vous pouvez obtenir 2 ^ 20 numéros différents). C’est aussi la raison pour laquelle les numéros de page sont puissants 2.

Donc, en utilisant le pagemap, vous pouvez trouver quel numéro de page physique est mappé au numéro de page virtuelle demandé, le décalage de page n'est pas modifié. Avec le numéro de page physique et le décalage de page, vous avez l'adresse physique. En utilisant le numéro de page, vous accédez à une page spécifique de la mémoire et en utilisant le décalage, vous accédez à la cellule d'octet spécifique. (De plus, le décalage de page définit la taille de la page, car 12 bits signifie que nous pouvons adresser 2 ^ 12 = 4096 cellules (en orange sur le diagramme) dans une page)

En vert, vous pouvez voir un exemple où nous demandons la page virtuelle numéro 2 avec le décalage de page 4095. Selon la page carte, le numéro de page virtuelle 2 correspond à la page physique 15, qui nous donne l'adresse physique avec le numéro de page physique 15 et le décalage 4095 ( normalement, les numéros de page virtuels/physiques et les décalages de page sont affichés en hexadécimal, mais j’ai utilisé décimal simplement pour simplifier)

PS:

Les exemples de données proviennent de cette conférence - https://www.youtube.com/watch?v=3akTtCu_F_k - il donne une très bonne vue d'ensemble de la mémoire virtuelle.

2
Viktor Nonov

J'ai la même confusion, mais si je l'ai bien compris, le résultat est le suivant: la puissance de 2 cas est légèrement supérieure à la compréhension générale du sujet. Cela ressemble plus à une convention, car nous avons affaire à des valeurs binaires et avons besoin d'une division appropriée entre les bits pour lesquels la puissance de 2 convient parfaitement.

Par exemple, si un pGe a 64k mots et qu'il y a 4 mots par image, alors 2 ^ x = 64 -> x = 6 

Ce qui signifie que chaque trame peut avoir une adresse physique constituant 6 valeurs binaires I.e. 0 ou 1 dans lequel 4 représentera le numéro d'image. Et dernier indiquant l'emplacement exact de la Parole parmi les 4.

Notez qu'ici chaque image ne peut pas avoir 5 ou toute autre valeur, sinon la convention dite échoue.

1
Richa Chandra