Frage

Betrachten sie ein virtuelles Speichersystem mit einer 38-Bit virtuellen Byte-Adresse, 1 KB Seiten und 512 MB Arbeitsspeicher. Wie hoch ist die Gesamtgröße der Seitentabelle für jeden Prozess auf dieser Maschine unter der Annahme, dass der gültig, Schutz, schmutzig und Verwendung Bits insgesamt 4 Bits übernehmen, und dass alle die virtuellen Seiten sind im Einsatz? (Unter der Annahme, dass die Plattenadressen sind nicht in der Seitentabelle gespeichert.)

War es hilfreich?

Lösung

Nun, wenn die Frage ist einfach: „Was ist die Größe der Seitentabelle?“ unabhängig davon, ob es in den physischen Speicher passt, kann die Antwort so berechnet werden:

Erster physischer Speicher. Es gibt 512K Seiten des physikalischen Speichers (512M / 1K). Dies erfordert 19 Bits jede Seite darzustellen. Hinzufügen, dass die 4 Bits von Abrechnungsinformationen und Sie erhalten 23 Bit.

Jetzt virtuelle Speicher. Mit einem 38-Bit-Adressraum und eine 10-Bit (1K) Seitengröße, die Sie benötigen 2 28 Einträge in der Seitentabelle.

Daher 2 28 Seitentabelleneinträge auf 23 Bits jeweils 6174015488 Bits oder 736m.

Das ist die maximale Größe, die für ein Single-Level-VM-Subsystem für jeden Prozess .

Jetzt offensichtlich, dass die nicht zur Arbeit gehen, wenn Sie nur 512M physischen RAM, so dass Sie ein paar Optionen.

  1. Sie können die Anzahl der physischen Seiten reduzieren. Zum Beispiel erlaubt nur die Hälfte des Speichers unter Paging zu sein, die andere Hälfte resident zu jeder Zeit zu halten. Dies wird einen Bit pro Eintrag zu speichern, nicht wirklich genug, um einen Unterschied zu machen.

  2. Erhöhen Sie die Seitengröße, , wenn möglich . Eine 1K-Seite auf einem 38-Bit-Adressraum ist der Grund für die sehr klobig Seitentabellen. Zum Beispiel denke ich, die ‚386, mit seinem 32-Bit-Adressraum verwendet 4K-Seiten. Das in einer Million Seitentabelleneinträgen führen würde, weit weniger als die 260 Millionen erforderlich hier.

  3. Go Multi-Level. Ein bisschen weiter fortgeschritten, aber es ist im Grunde bedeutet, dass die Seitentabellen selbst unterliegen Paging sind. Sie haben die erste Ebene der Seitentabellen resident im physischen Speicher zu halten, aber die zweite Ebene in und aus je nach Bedarf gehen. Dies wird erheblich die physikalischen Anforderungen reduzieren, aber auf Kosten der Geschwindigkeit, da zwei Ebene der Seitenfehler auftreten können, bei einer tatsächlichen Prozess Seite (eine für die sekundären Paging-Tabellen dann einem für den Prozess Seite) zu erhalten.


Schauen wir uns ein wenig näher bei Option 3.

Wenn wir 32M für die primären Auslagerungs Tabelle erlauben und jedem Eintrag 4 Bytes geben (32 Bits: nur 23 benötigt werden, aber wir können für Effizienz hier aufgerundet)., Wird dies ermöglichen 8.388.608 Seiten für die Sekundärseitentabelle

Da jeder dieser sekundären Seite Tabellenseiten 1K lang ist (uns ermöglicht, auf 4 speichern 256 Sekundärseitentabelleneinträge Bytes each), haben wir insgesamt 2147483648 virtuellen Seiten adressieren können.

Dies würde es 8192 voll geladen (das heißt, mit ihrem gesamten 28-Bit-Adressraum) Prozesse nebeneinander laufen zu lassen, vorausgesetzt, Sie einen erheblichen Teil des Speicherplatz haben die nicht-residenten Seiten zu speichern.

Jetzt offensichtlich die primäre Paging-Tabelle (und das VM-Subsystem, und wahrscheinlich ein gutes Stück von dem Rest des OS) haben resident jederzeit zu bleiben. Sie können nicht auf Seite einer der Hauptseiten erlaubt werden, da Sie auch die Seite benötigen, um es wieder in zu bringen: -)

Aber das ist ein Bewohner Kosten nur 32M des 512M für die primären Auslagerungs Tabelle, viel besser als die (auf einem Minimum, für einen voll beladenen Prozess) von 736m.

Andere Tipps

Größe der Seitentabelle = gesamte Anzahl der Seitentabelleneinträge * Größe des Seitentabelleneintrags

Schritt 1: FESTSTELLUNG DER NICHT VON DEN Einträge auf Seite Tabelle:

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

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

so gibt es 2 ^ 28 Einträge in der Seitentabelle

Schritt 2: NO OF FRAMES im physikalischen Speicher:

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

so brauchen wir 19 bits und zusätzliche 4 bits für gültig, Schutz, schmutzig und Verwendung Bits total 23 Bit = 2.875 Bytes

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

1 KB Seiten = 2 ^ 10, 512 MB = 2 ^ 29 => Offset = 29 -. 10 = 19 Bit

virtuelle zwei Teil: Seitenrahmen + offset => Seitenrahmen + Dirty-Bit = 38-19 = 29 Bit. 29-Bit-4-Bit enthält verschmutzt (oben) => 25 Bit für realen Seitenrahmen, wobei jeder Seitenrahmen hat 10 Bit lang.

So, Seitentabellengröße:. 2 ^ 25 * 10 = 320M

Hope dies korrekt ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top