Question

Considérons un système de mémoire virtuelle avec une adresse d'octet virtuel 38 bits, 1KB pages et 512 Mo de mémoire physique. Quelle est la taille totale de la table de page pour chaque processus sur cette machine, en supposant que les valides, les bits de protection, sales et prennent usage un total de 4 bits, et que toutes les pages virtuelles sont utilisées? (En supposant que les adresses disque ne sont pas stockées dans la table de page.)

Était-ce utile?

La solution

Eh bien, si la question est tout simplement « quelle est la taille de la table de la page? » indépendamment du fait qu'il se tenir dans la mémoire physique, la réponse peut être calculée ainsi:

Première mémoire physique. Il y a 512K pages de mémoire physique (512 Mo / 1K). Cela nécessite 19 bits pour représenter chaque page. Ajoutez à cela les 4 bits de l'information comptable et vous obtenez 23 bits.

mémoire virtuelle maintenant. Avec un espace d'adressage 38 bits et une taille de page 10 bits (1K), vous avez besoin de 2 28 entrées dans votre table de page.

Par conséquent, 2 28 entrées de table de page en 23 bits chacun est 6,174,015,488 bits ou 736m.

C'est la taille maximale nécessaire pour un seul niveau sous-système VM pour chaque processus .

Maintenant, évidemment que ça ne va pas au travail si vous avez seulement 512 Mo de RAM physique si vous avez deux options.

  1. Vous pouvez réduire le nombre de pages physiques. Par exemple, permettre seulement la moitié de la mémoire à faire l'objet d'échange, en gardant l'autre moitié résident à tout moment. Cela permettra d'économiser un bit par entrée, pas vraiment assez pour faire une différence.

  2. Augmenter la taille de la page, si possible . Une page 1K sur un espace d'adressage 38 bits est la raison pour les tables de pages très gros morceaux. Par exemple, je pense que le « 386, avec son espace d'adressage 32 bits, utilise pages de 4 Ko. Cela se traduirait par un million d'entrées de table de pages, beaucoup moins que les 260 millions nécessaires ici.

  3. Go multi-niveaux. Un peu plus avancé, mais il essentiellement des moyens que les tables de pages sont eux-mêmes soumis à la pagination. Vous devez garder le premier niveau des tables en mémoire la page résident physique, mais le second niveau peut entrer et sortir au besoin. Cela permettra de réduire considérablement les besoins physiques, mais au détriment de la vitesse, étant donné que deux niveaux de défauts de page peuvent se produire pour obtenir à une page de processus réel (une pour les tables de pagination secondaire puis une pour la page de processus).


Le regard de laisser un peu plus à l'option 3.

Si nous permettons à 32M pour la table d'échange principal et donner à chaque entrée 4 octets (32 bits: seulement 23 sont nécessaires, mais nous pouvons arrondir l'efficacité ici)., Cela permettra 8,388,608 pages de la table page secondaire

Depuis chacune de ces pages de table de page secondaire est 1K longue (ce qui nous permet de stocker 256 entrées de table de page secondaire à 4 octets), nous pouvons répondre à un total de 2,147,483,648 pages virtuelles.

Cela permettrait 8192 processus entièrement chargé (à savoir, en utilisant la totalité de leur espace d'adressage 28 bits) pour exécuter côte à côte, supposant que vous avez un morceau de juste d'espace disque pour stocker les pages non-résidents.

Maintenant, évidemment, la table d'échange principal (et le sous-système VM, et probablement un morceau de juste du reste du système d'exploitation) doit rester résident à tout moment. Vous ne pouvez pas être autorisé à la page sur l'une des pages principales puisque vous pouvez bien besoin de cette page afin de le ramener dans: -)

Mais c'est un coût résident de seulement 32 millions de 512M pour la table d'échange principal, beaucoup mieux que le (au minimum, pour un processus entièrement chargé) de 736m.

Autres conseils

taille de la table de page = nombre total d'entrées de table de page * taille de l'entrée de table de page

ETAPE 1: trouver le NO d'entrées dans la page Tableau:

no of page table entries=virtual address space/page size

=2^38/2^10=2^28

donc il y a 2 ^ 28 entrées dans la table des pages

STEP2: NO DE CADRES EN PHYSIQUE MEMOIRE:

no of frames in the physical memory=(512*1024*1024)/(1*1024)=524288=2^19

nous avons donc besoin 19 bits et 4 bits supplémentaire pour valide, protection, sale et bits d'utilisation totalement 23 bits = 2.875 octets

size of the page table=(2^28)*2.875=771751936B=736MB

1KB pages = 2 ^ 10, 512Mo = 2 ^ 29 => Offset = 29 -. 10 = 19 bits

comprend virtuel en deux parties: cadre de page + offset => cadre de page + bit sale = 38-19 = 29 bits. 29 bits comprend quatre sale de bits (ci-dessus) => 25 bits pour la trame de pages réelles, chaque cadre de page a 10 bits de long.

Ainsi, la taille de la table de page:. 2 ^ 25 * 10 = 320M

Hope this correct.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top