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.
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.
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.
So übersetzen Sie eine virtuelle Adresse in eine physische Adresse (gilt [~ # ~] nur [~ # ~] zu dieser Hausaufgabenfrage) müssen wir wissen 2 Dinge:
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:
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
Um Ihnen bei der Lösung dieser Frage zu helfen, müssen wir die richtigen Angaben machen:
Als solches haben wir jetzt:
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.
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! :)