webentwicklung-frage-antwort-db.com.de

Seitennummer und Offset

Ich lerne die verschiedenen Arten der Speicherverwaltung. Ich verstehe den Punkt nicht, einen Offset-Bit in einer virtuellen Adresse zu haben. Und auch, warum Seitengrößen aus 2 gemacht werden?

  • Meine Hauptverwirrung ist: Geben Sie mir ein Beispiel für einen Offset, der in Anweisungen verwendet wird, um auf eine bestimmte virtuelle Adresse zuzugreifen?

  • Meine zweite Verwirrung ist: Die übliche Feststellung lautet: Wenn die Größe der logischen Adresse 2^m und die Seitengröße 2^n ist, bezeichnen die höherwertigen m-n Bits einer logischen Adresse die Seitennummer.

14
user1493786

Ich denke, dass deine primären und sekundären Verwirrungen auf allgemeine Verwirrung bezüglich des Themas zurückzuführen sind :)

Lassen Sie mich ein bisschen darüber reden und hoffentlich kann ich Ihnen helfen. Zunächst eine Analogie: Stellen Sie sich vor, Sie versuchen, ein Haus in einer Stadt zu finden. Stellen Sie sich vor, jedes Haus erhielt eine eindeutige Nummer - Sie können sich vorstellen, dass die Anzahl der Häuser bald sehr groß und verwirrend werden würde. Stellen Sie sich jetzt vor, dass Sie das Konzept der Straßen einführen - die Hausnummern werden jetzt etwas überschaubarer, wenn Sie sie in Nizza-Gruppen zusammengefasst haben. Also: Streets = Seitennummer, Hausnummer = Offsetadresse.

Der Sinn von virtuellen Speicherseiten besteht im Wesentlichen darin, dem Computer zu ermöglichen, den Speicher in überschaubaren Abschnitten aufzuteilen und nicht zu viel davon zu verschwenden. Das Schnitzen in Abschnitte (Seiten) ermöglicht eine detaillierte Kontrolle des Zugriffs, des Paging und anderer schöner Dinge. Je kleiner Ihre Seiten sind, desto weniger Speicherplatz wird verschwendet (wenn Prozess A 32 KB Speicherplatz erfordert und Ihre Seitengröße 64 KB beträgt, werden Sie mit einem Teil davon enden, der nicht verwendet wird), aber je höher der Wert Aufwand auf dem System.

Warum Seitengrößen Potenzen von 2 sind, ist der Platz in der Adresse, der keinen Platz verschwendet. Da Computer auf binärer Basis basieren (im Moment), tendiert alles dazu, auf Potenzen von 2 herunterzufallen. Stellen Sie sich vor, Sie hätten Zeug, das auf Faktoren von 10 basiert. 10 in binär ist 1010 - Sie müssen 4 Bits verwenden, um das zu speichern Warum also nicht für den gesamten Wertebereich gehen, können Sie aus 4 Bits wählen: 0000 - 1111 (0 bis 15 = 16 Werte).

Tut mir leid, ich habe ein bisschen gewaffnet - ich hoffe, das bringt Sie in die richtige Richtung!

24
GHC

Ich mag die Analogie des GHC mit den Straßen und Städten, warum wir Paging brauchen. Durch das Gruppieren von Bytes des Speichers in Seiten erhält die CPU eine größere Speichermenge.

Angenommen, die folgenden Eigenschaften sind angegeben:

  • die virtuelle Adresse beträgt 32 Bit 
  • seitenversatz beträgt 12 Bit
  • die physikalische Adresse beträgt 30 Bit 
  • das RAM ist 1GiB

Hier ist ein Digramm, das ich gemacht habe, das zeigt, wie die Seitennummer und der Seitenversatz verwendet werden, um eine bestimmte Zelle im Speicher zu adressieren:

 enter image description here

Es gibt eine virtuelle Adresse, die von der CPU generiert wird und aus einer virtuellen Seitennummer (20 Bit) und einem Seitenversatz (12 Bit) besteht.

Es gibt auch eine Seite, die für die Zuordnung von virtueller Seitennummer zu physischer Seitennummer verwendet wird (zusätzlich zeigt das Dirty-Bit, ob die Seite geändert wurde/das Resident-Bit, wenn sich die Seite im Speicher befindet) und rechts ist die Aufteilung des Speichers in Seiten (blau im Diagramm).

Die virtuelle Seitennummer wird mit 20 Adressbits an die Pagemap übergeben. Da die Seitennummer binär mit 20 Adressbits übergeben wird, kann die Seitenkarte bis zu 2 ^ 20 Datensätze haben (da Sie mit 20 Bits 2 ^ 20 verschiedene Nummern erhalten können). Dies ist auch der Grund, warum die Seitenzahlen Potenzen von sind 2.

Wenn Sie also die Seitenkarte verwenden, können Sie herausfinden, welche physische Seitennummer der angeforderten virtuellen Seitennummer zugeordnet wird. Der Seitenversatz wird nicht geändert. Mit der physischen Seitennummer und dem Seitenversatz haben Sie die physische Adresse. Über die Seitennummer gelangen Sie zu einer bestimmten Seite des Speichers und über den Offset gelangen Sie in die jeweilige Bytezelle. (Auch der Seitenversatz definiert die Seitengröße, da 12 Bit für Versatz bedeutet, dass wir 2 ^ 12 = 4096 Zellen (im Diagramm orange) innerhalb einer Seite adressieren können.)

In grün sehen Sie ein Beispiel, in dem wir die virtuelle Seitennummer 2 mit Seitenversatz 4095 anfordern. Gemäß der Seitenkarte ist die virtuelle Seitennummer 2 der physischen Seite 15 zugeordnet, die uns die physische Adresse mit der physischen Seitennummer 15 und dem Offset 4095 angibt. ( Normalerweise werden virtuelle/physikalische Seitennummern und Seitenoffsets hexadezimal angezeigt, aber ich habe Dezimalzeichen verwendet, um die Arbeit zu vereinfachen.

PS:

Die Beispieldaten stammen aus dieser Vorlesung - https://www.youtube.com/watch?v=3akTtCu_F_k - und gibt einen sehr guten Überblick über den virtuellen Speicher.

2
Viktor Nonov

Ich habe die gleiche Verwirrung, aber wenn ich es richtig verstanden habe, ist es wie folgt: Die Macht von 2 Fall liegt etwas außer dem allgemeinen Verständnis des Themas. Es ist eher eine Konvention, da wir es mit binären Werten zu tun haben und eine geeignete Aufteilung zwischen Bits benötigen, für die die Potenz von 2 angemessen ist.

Wenn z. B. ein pGe 64 k Wörter hat und es 4 Wörter pro Rahmen gibt, dann gilt 2 ^ x = 64 →> x = 6 

Dies bedeutet, dass jeder Rahmen eine physikalische Adresse haben kann, die 6 binäre Werte darstellt. 0 oder 1, wobei 4 die Bildnummer darstellt. Und zuletzt die genaue Position des Wortes unter den 4.

Beachten Sie, dass hier kein Frame 5 oder einen anderen Wert haben kann oder die sogenannte Konvention fehlschlägt.

1
Richa Chandra