wake-up-neo.com

Virtuelle Adresse in physikalische Adresse übersetzen

Die folgende Seitentabelle bezieht sich auf ein System mit virtuellen und physischen 16-Bit-Adressen und 4.096-Byte-Seiten. Das Referenzbit wird auf 1 gesetzt, wenn auf die Seite verwiesen wurde. In regelmäßigen Abständen löscht ein Thread alle Werte des Referenzbits auf Null. Alle Zahlen werden in Dezimalzahlen angegeben. enter image description here

Ich möchte die folgenden virtuellen Adressen (hexadezimal) in die entsprechenden physischen Adressen konvertieren. Außerdem möchte ich das Referenzbit für den entsprechenden Eintrag in der Seitentabelle setzen.

0xE12C

0x3A9D

0xA9D9

0x7001

0xACA1

Ich weiß, dass die Antworten sind, aber ich möchte wissen, wie ich diese Antworten erreichen kann:

0xE12C → 0x312C
0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1

Ich habe This gefunden und versucht, aber es hat mir nicht viel geholfen.

13
Ruan

Es wird angegeben, dass die virtuelle Adresse 16 Bit lang ist.
Es befinden sich also 2 ^ 16 Adressen im virtuellen Adressraum.
Die Seitengröße wird mit 4 KB angegeben (eine Seite enthält 4 KB (4 * (2 ^ 10)) Adressen), daher beträgt die Anzahl der Seiten (2 ^ 16)/(2 ^ 12). = 2 ^ 4.
Um jede Seite anzusprechen, werden 4 Bits benötigt.
Die höchstwertigen 4 Bits in der virtuellen Adresse bezeichnen die Seitenzahl, auf die verwiesen wird, und die verbleibenden 12 Bits sind der Seitenversatz.

Beachten Sie, dass die Seitengröße (im virtuellen Adressraum) immer der Bildgröße im Hauptspeicher entspricht. Daher bleiben die letzten 12 Bits in der physischen Adresse dieselbe wie die der virtuellen Adresse.

Um die Rahmenadresse im Hauptspeicher zu erhalten, verwenden Sie einfach die ersten 4 Bits.
Beispiel: Betrachten Sie die virtuelle Adresse 0xACA1
Hier bezeichnet A in A CA1 die Seitenzahl (10) und die entsprechende Rahmennummer ist 5 (0101), daher lautet die resultierende physikalische Adresse → 0x5CA1.

14
Akash Mahapatra

So übersetzen Sie eine virtuelle Adresse in eine physische Adresse (gilt [~ # ~] nur [~ # ~] zu dieser Hausaufgabenfrage) müssen wir wissen 2 Dinge:

  • Seitengröße
  • Anzahl der Bits für die virtuelle Adresse

In diesem Beispiel: 16-Bit-System , 4 KB Seitengröße und Die physische Speichergröße beträgt 64 KB .

Zunächst müssen wir die Anzahl der benötigten Bits bestimmen, um als Offset innerhalb der Seite zu fungieren.
log2(Page-Size) = log2(4096) = 12 Bits für Offset

Von den 16 Bits für die virtuelle Adresse sind 12 für den Offset, dh jeder Prozess hat 2^4 = 16 virtuelle Seiten. Jeder Eintrag in der Seitentabelle speichert den entsprechenden Rahmen, der die Seite aufnimmt. Beispielsweise:

enter image description here

Jetzt können wir übersetzen!

Lassen Sie uns zur Erleichterung der Arbeit zunächst 0xE12C bis binary.

0xE12C = (1110 0001 0010 1100) in base 2
1110 = 14 in decimal
Entry 14 in P.T => Page frame 3.

Lässt es zu den 12 versetzten Bits verketten

Answer: (0011 0001 0010 1100) = 0x312C

Ein anderes Beispiel: 0x3A9D

0x3A9D = 0011 1010 1001 1101
0011 = 3
PageTable[3] = 10
10 in decimal = 1010 in binary
1010 1010 1001 1101 in binary = 0xAA9D
13
Tony Tannous

Um Ihnen bei der Lösung dieser Frage zu helfen, müssen wir die richtigen Angaben machen:

  1. 16 Bit virtueller Adressraum = 2 ^ 16 = 65.536 Adressraum
  2. 16 Bit physischer Adressraum = 2 ^ 16 = 65.536 Adressraum
  3. Die Seitengröße von 4096 Byte bestimmt den Versatz: Log (4096)/Log (2) = 12 Bit. Dies bedeutet 2 ^ 12 für die Seitengröße
  4. Gemäß @Akash Mahapatra wird der Versatz von der virtuellen Adresse direkt auf den Versatz auf die physikalische Adresse abgebildet

Als solches haben wir jetzt:

  • 2 ^ 16 (16 Bit) für virtuelle Adresse - 2 ^ 12 (12 Bit) für Offset = 4 Bit für Seiten bzw. Gesamtzahl der verfügbaren Seiten.
  • Ich werde die Berechnung für physisch nicht wiederholen, da es die gleichen Zahlen sind.
  • 2 ^ 4 (4bit) für Seiten = 16, was der Anzahl der obigen Tabelleneinträge entspricht!

Wir kommen dorthin ... hab Geduld! :)

Es ist auch bekannt, dass die Speicheradresse 0xE12C in Hexadezimalschreibweise eine 16-Bit-Adresse enthält. (Da es in der Frage angegeben ist.)

Lassen Sie uns die Adresse jetzt schlachten ...

Wir entfernen zuerst '0x' aus den Informationen.

Wir können E12C in eine binäre Notation wie @Tony Tannous konvertieren, aber ich werde eine kleine Abkürzung anwenden.

Mapping of the Address and Offset

Ich benutze einfach ein Verhältnis. Nun, die Adresse ist oben in 4 Zeichen notiert, und da 16/4 = 4, kann ich den ersten Buchstaben als virtuelle Adresse definieren, während die anderen 3 versetzte Adressen sind.

Mit der Information 'E' im hexadezimalen Format muss ich in Decimal = 14 konvertieren. Dann schaue ich mir Ihre Tabelle an und fand den Seitenrahmen '3'. Der Seitenrahmen 3 wird im Dezimalformat notiert, das dann wieder in das Hexadezimalformat konvertiert werden muss ... Duh! ... das ist 3!

Die Zuordnung der physischen Adresse des virtuellen Speicherorts von 0xE12C befindet sich also bei 0x312C im physischen Speicher.

Sie kehren dann zur Tabelle zurück und beziehen sich auf die Referenzbitspalte und setzen eine '1' in die Zeile 14.

Wenden Sie das gleiche Konzept für diese an -

0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1

Wenn Sie bemerken, sind die letzten 3 Stellen gleich (was den Versatz bestimmt). Und die erste der vier Ziffern wird gemäß der Tabelle zugeordnet:

table entry 3 -> page frame 10 -> hex notation A
table entry A (10) -> page frame 5 -> hex notation 5
table entry 7 -> page frame 15 -> hex notation F
table entry A (10) -> page frame 5 -> hex notation 5

Hoffe diese Erklärung hilft dir und anderen wie mir! :)

2
joke