2010-09-29 - Aufgabe 6

Segmentierung/MMU

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

2010-09-29 - Aufgabe 6
Und weiter geht es. Hier wieder ein paar Lösungsansätze. Wenn da noch mal jemand drüber schaut und seinen Senf da lässt, tut er wahrscheinlich nicht nur mir einen Gefallen. :slight_smile:

In einer Segmenttabelle stehen zur Segmentnummer die physikalische Startadresse und die Länge des Segments. Zuerst wird der Offset überprüft, er muss kleiner als die Segmentlänge sein. Danach wird die physikalische Adresse ermittelt, indem der Offset auf die Startadresse addiert wird.

Tatsächlich wird das in den Folien nie explizit genannt, oder aber ich habe es nicht gefunden. Da die Page-Tables aber selbst wieder in Pages gespeichert sind, liegen diese offensichtlich i.A. im Arbeitsspeicher.

Wären alle Seiten in einer großen Seitentabelle müsste man diese für alle Prozesse bereit halten. Platzsparender hingegen ist eine mehrstufige Seitenverwaltung mit einem Seitenverzeichnis.

Hier bin ich mir nicht ganz sicher, ob ich auch die Flags mit angeben soll, oder ob die Einträge allein schon reichen. Wenn ich das richtig verstanden habe, dann bilden die ersten fünf Byte der virtuellen Adresse den Tag und ebenso die ersten fünf der physikalischen Adresse den Inhalt des Eintrages (eben jeweils ohne das Offset).

Tag     | Physical Page Address
0x00802 | 0xE0120
0x003FF | 0x01000
0x00002 | 0x15014

Page Fault.
Nachdem es nur 1 Punkt auf die Frage gibt, vermute ich mal diese Antwort genügt und es ist nicht nach dem Prozess gefragt, der einem Page Fault folgt?


Laut Tutorium: In TLB kommen auch die Read bzw. Write Flags, ohne Present bit, weil es klar ist, dass wenn etwas in TLB liegt, es ist present :).


…und was ist, falls eine Seite, deren aufgeloeste Adresse im TLB steht, vom Betriebssystem ausgelagert wird?

dafuer gibt’s INVLPG (http://siyobik.info/index.php?module=x86&id=144)


Das heißt aber doch trotzdem, dass ein Present-Bit nicht nötig ist, oder? In deinem Link steht ja „FLUSH“, was ich so verstehe, dass dieser Eintrag dann einfach aus der TLB gelöscht wird, somit ist auch kein PRESENT-Bit mehr nötig.


ok, ich haette es deutlicher machen koennen:

war als fiktive Frage gemeint, was passiert, wenn ein Eintrag im TLB durch Auslagern ungueltig wird und man kein Present Bit hat, das auf 0 gesetzt weren koennte. Antwort: Der Eintrag kann gezielt geloscht werden (INVLPG), wodurch es also auch hier nicht noetig ist.

Also KEIN Present-Bit. Punkt. :slight_smile: