web-dev-qa-db-fra.com

Déterminer la taille de la table de pages pour la mémoire virtuelle

Considérez un système de mémoire virtuelle avec une adresse d'octets virtuels de 38 bits, des pages de 1 Ko et 512 Mo de mémoire physique. Quelle est la taille totale de la table de pages pour chaque processus sur cette machine, en supposant que les bits valide, protection, sale et d'utilisation prennent un total de 4 bits et que toutes les pages virtuelles sont en cours d'utilisation? (supposons que les adresses de disque ne sont pas stockées dans la table des pages.)

20
John_D

Eh bien, si la question est simplement "quelle est la taille du tableau des pages?" indépendamment de sa place dans la mémoire physique, la réponse peut être calculée ainsi:

Premier souvenir physique. Il y a 512K pages de mémoire physique (512M/1K). Cela nécessite 19 bits pour représenter chaque page. Ajoutez cela aux 4 bits d'informations comptables et vous obtenez 23 bits.

Maintenant mémoire virtuelle. Avec un espace d'adressage de 38 bits et une taille de page de 10 bits (1 Ko), vous avez besoin de 228 entrées dans votre table de pages.

Donc 228 Les entrées de table de page à 23 bits chacune sont 6 174 015 488 bits ou 736M.

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

Maintenant, évidemment, cela ne fonctionnera pas si vous ne disposez que de 512 Mo de RAM), donc vous avez quelques options.

  1. Vous pouvez réduire le nombre de pages physiques. Par exemple, n'autorisez que la moitié de la mémoire à faire l'objet d'une pagination, en gardant l'autre moitié résidente à tout moment. Cela économisera un bit par entrée, pas vraiment assez pour faire une différence.

  2. Augmentez la taille de la page, si possible. Une page de 1K sur un espace d'adressage de 38 bits est la raison des tableaux de pages très volumineux. Par exemple, je pense que le '386, avec son espace d'adressage 32 bits, utilise des pages 4K. Cela se traduirait par un million d'entrées de table de pages, bien moins que les 260 millions requis ici.

  3. Allez à plusieurs niveaux. Un peu plus avancé mais cela signifie essentiellement que les tableaux de pages eux-mêmes sont sujets à la pagination. Vous devez conserver le premier niveau des tableaux de pages résidant dans la mémoire physique, mais le deuxième niveau peut entrer et sortir selon les besoins. Cela réduira considérablement les exigences physiques mais au détriment de la vitesse, car deux niveaux de défauts de page peuvent se produire pour accéder à une page de processus réelle (un pour les tables de pagination secondaires, puis un pour la page de processus).


Regardons de plus près l'option 3.

Si nous autorisons 32M pour la table de pagination principale et donnons à chaque entrée 4 octets (32 bits: seuls 23 sont nécessaires mais nous pouvons arrondir ici pour plus d'efficacité), cela permettra 8 388 608 pages pour la table de pages secondaire.

Étant donné que chacune de ces pages de table de pages secondaires fait 1K de long (nous permettant de stocker 256 entrées de table de pages secondaires à 4 octets chacune), nous pouvons adresser un total de 2 147 483 648 pages virtuelles.

Cela permettrait à 8 192 processus entièrement chargés (c'est-à-dire en utilisant l'intégralité de leur espace d'adressage 28 bits) de s'exécuter côte à côte, en supposant que vous disposiez d'une bonne partie de l'espace disque pour stocker les pages non résidentes.

Maintenant, évidemment, la table de pagination principale (et le sous-système VM, et probablement une bonne partie du reste du système d'exploitation) doit rester résidente à tout moment. Vous ne pouvez pas être autorisé à sortir l'un des les pages principales puisque vous pourriez bien avoir besoin de cette page pour la ramener :-)

Mais c'est un coût résident de seulement 32 Mo sur 512 Mo pour la table de pagination principale, bien meilleur que le (au minimum, pour un processus entièrement chargé) de 736 Mo.

30
paxdiablo

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

ÉTAPE 1: TROUVER LE NO D'ENTRÉES DANS LE TABLEAU DE LA PAGE:

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

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

il y a donc 2 ^ 28 entrées dans le tableau des pages

ÉTAPE 2: PAS DE CADRES DANS LA MÉMOIRE PHYSIQUE:

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

nous avons donc besoin de 19 bits et de 4 bits supplémentaire pour des bits valides, de protection, sales et d'utilisation au total 23 bits = 2,875 octets

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