Déterminer la taille de la table de page pour la mémoire virtuelle
envisagez un système de mémoire virtuelle avec une adresse byte virtuelle de 38 bits, des pages de 1KB 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 bits valide, de protection, sale et d'utilisation prennent un total de 4 bits, et que toutes les pages virtuelles sont utilisées? (supposons que les adresses de disque ne sont pas stockées dans la table de page.)
3 réponses
Eh bien, si la question est simplement "quelle est la taille de la table de page?"qu'elle s'inscrive ou non 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 ça aux 4 bits d'information comptable et vous obtenez 23 bits.
maintenant mémoire virtuelle. Avec un espace d'adresse de 38 bits et une taille de page de 10 bits (1K), vous avez besoin 2 28 entrées dans votre tableau de page.
donc 2 28 les entrées de tableau de page à 23 bits chacune est de 6,174,015,488 bits ou 736M.
C'est la taille maximale nécessaire pour un seul niveau de la VM sous-système pour chaque processus.
maintenant évidemment, cela ne va pas marcher si vous avez seulement 512M de RAM physique donc vous avez quelques options.
Vous pouvez réduire le nombre de pages physiques. Exemple, permettez seulement à la moitié de la mémoire d'être sujet à la pagination, en gardant l'autre moitié résident à tout moment. Cela permettra d'économiser un peu par entrée, pas vraiment assez pour faire une différence.
Augmenter la taille de la page, si possible. Une page de 1K sur un espace d'adresse de 38 bits est la raison pour les tables de page très volumineuses. Par exemple, je pense que le '386, avec son espace d'adresse de 32 bits, utilise 4K pages. Cela se traduirait par un million d'entrées de tableau de page, beaucoup moins que les 260 millions nécessaires ici.
multi-niveau. Un peu plus avancé mais il signifie fondamentalement que les tables de page eux-mêmes sont sujets à la pagination. Vous devez garder le premier niveau des tables de page résident dans la mémoire physique, mais le deuxième niveau peut entrer et sortir si nécessaire. Ceci réduira considérablement les exigences physiques mais au prix de la vitesse, puisque deux niveaux de défauts de page peuvent se produire pour obtenir une page de processus réelle (un pour les tables de pagination secondaires puis un pour le processus de la page).
regardons de plus près à l'option 3.
si nous autorisons 32M pour la table de pagination primaire et donnons à chaque entrée 4 bytes (32 bits: seulement 23 sont nécessaires mais nous pouvons arrondir pour l'efficacité ici), cela permettra 8.388.608 pages pour la table de page secondaire.
puisque chacune de ces pages de table de page secondaire est de 1K long (nous permettant de stocker 256 entrées de table de page secondaire à 4 bytes chacun), nous pouvons adresser un total de 2 147 483 648 pages virtuelles.
cela permettrait à 8 192 processus entièrement chargés (c.-à-d. utilisant leur espace d'adresse entier de 28 bits) de s'exécuter côte à côte, en supposant que vous ayez une bonne partie de l'espace disque pour stocker les pages non-résidentes.
de toute évidence, la table de pagination primaire (et le sous-système VM, et probablement une bonne partie du reste de L'OS) doit rester résidente à tout moment. Vous ne pouvez pas être autorisé à biper une des pages primaires car vous pourriez bien avoir besoin que la page afin de le ramener dans :-)
mais c'est un coût résident de seulement 32M du 512M pour la table de pagination primaire, beaucoup mieux que le (au minimum, pour un processus entièrement chargé) de 736M.
taille de la table de page= nombre total d'entrées dans la table de page*taille de l'entrée dans la table de page
ÉTAPE 1: TROUVER LE NOMBRE D'ENTRÉES DANS LE TABLEAU DE 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 de page
STEP2: NO OF FRAMES IN PHYSICAL MEMORY:
no of frames in the physical memory=(512*1024*1024)/(1*1024)=524288=2^19
il nous faut donc 19 bits
et en plus 4 bits
pour les valides, la protection, la sale et l'utilisation de bits
totalement 23 bits=2.875 octets
size of the page table=(2^28)*2.875=771751936B=736MB
1KB pages = 2^10, 512MB = 2^29 = > Offset = 29-10 = 19 bit.
virtual comprend deux parties: page frame + offset => page frame + dirty bit = 38-19 = 29 bit. 29 bit inclut 4 bit dirty (ci-dessus) => 25 bit pour un vrai cadre de page, chaque cadre de page a 10 bit de long.
Donc, la page taille de la table: 2^25 * 10 = 320M.
J'espère que c'est correct.