klausur-gra-2010-02-15 Aufgabe 8 (Achtung Lösung!)

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.

klausur-gra-2010-02-15 Aufgabe 8 (Achtung Lösung!)
Die eigentliche Tabelle ist immer nur die Spalte Deskriptor. D.h. implizit indexiert. Zuordnung ist Tag → Inhalt. Offset ist das Byteoffset in der Tabelle.

Seitenverzeichnis bei 0x00000000
Index Offset  Deskriptor Pagetable
0x000 0x000  0x00001002
0x001 0x004  0x00000000
0x002 0x008  0x00000000
...
0x3ff 0xffc  0x00000000

Seitentabelle bei 0x00001000
Index   Offset  Deskriptor Page
0x000   0x000   0x00000000
0x001   0x004   0x0fffe003   (ROM: readonly + present)
0x002   0x008   0x0ffff003
0x003   0x00c   0x00000000
0x004   0x010   0x00000000
        ...
0x3ef   0xfbc   0x00000000  (Tag 0x3ef * 4 = 0xfbc Offset) 
0x3f0   0xfc0   0x00010002  (Heap willkürlich auf 0x00010000 gemapped, present bit)
0x3f1   0xfc4   0x00011002
0x3f2   0xfc8   0x00012002
0x3f3   0xfcc   0x00013002
0x3f4   0xfd0   0x00014002
0x3f5   0xfd4   0x00015002
0x3f6   0xfd8   0x00016002
0x3f7   0xfdc   0x00017002
0x3f8   0xfe0   0x00018002
0x3f9   0xfe4   0x00019002
0x3fa   0xfe8   0x0001a002
0x3fb   0xfec   0x0001b002
0x3fc   0xff0   0x0001c002
0x3fd   0xff4   0x0001d002
0x3fe   0xff8   0x0001e002
0x3ff   0xffc   0x0001f002  (Eine Seite Stack.)

Fehler drin?

Dass die Stackseite direkt über dem Heap liegt ist ja egal. Die Seiten müssen ja nicht hintereinander liegen…?

In der Aufgabe war ja eigentlich nur die Seitentabelle gefragt… nur wenn ich das so mach wie hier, brauch ich für die Tabelle schon 90 min… :wink: Würde es reichen einfach die Spalte Inhalt mit entsprechenden Auslassungen hinzumalen, ohne Offset usw.? “Beschreiben sie” ist irgendwie etwas vage…


  • Die Offsets im Seitenverzeichnis stimmen nicht.
  • Du scheinst die Berechtigungs-Bits im Deskriptor ein bisschen durcheinander zu würfeln.

So eine Aufgabe löst man am besten mit einer Zeichnung (zweistufige Seitentabelle mit Beschriftung, Seitendeskriptoren eingezeichnet wo relevant).


Bzw. eigentlich ja die Tags… das Offset stimmt ja, wenn jeder Eintrag 4 Byte groß ist :slight_smile:


Warum, jeder Eintrag 4 Byte…?
Die Tags vom Seitenverzeichnis haben nicht gestimmt, jetzt sollte es passen.

Äh, ja… Bit 0 und 1 vertauscht… habs verbessert.


Hast Recht - die Offsets haben gepasst, die Indizes waren falsch.


Könntest du deine Lösung vlt. ausführlicher erklären? Kann diesen Aufgabentyp nicht wirklich nachvollziehen. Hast du da evtl. i.welche Beispiele für?


Mhh, hast Du Dir die Folien im Abschnitt 5.3 angeschaut? Da wird das eigentlich ziemlich genau beschrieben.

Die virtuelle 32 Bit-Adresse wird aufgeteilt in 3 Felder,
10 Bit DIR
10 Bit Page
12 Bit Offset

DIR4 ist hier der Offset in dem Seitenverzeichnis. Maskiert man die höherwertigen 20 Bit dieses Eintrags erhält man die Adresse der zu der Adresse gehörenden Pagetabelle. Page4 ist wieder der Offset in der Pagetabelle. Die höherwertigen 20 Bit des Eintrags in der Pagetabelle ergeben die Adresse der Seite. physikalische Adresse = Adresse der Seite + Offset

Als Beispiel mal die Adressen des ROMs. 0x00001000 bis 0x00002fff soll in das ROM gemapped werden.
Die niederwertigen (=letzten) 3 Hex-Stellen bilden das Offset in der Seite (4KB = 2^12 => 12 Bit, eine Hex-stelle entspricht 4 Bit).
Die ersten beiden Stellen und die erste Hälfte der 3ten Stelle geben den Index im Seitenverzeichnis. Die Bits sind bei allen angegebenen Adressen null, also braucht das Seitenverzeichnis nur einen Eintrag der auf die Seitentabelle verweist und das dazuge-or-te present bit. Alle anderen Einträge im Verzeichnis werden nicht benötigt und sind null.
Die zweite Hälfte der 3ten Stelle und die 4te und 5te geben den Index in der Seitentabelle. Der Adressbereich ist genau zwei Seiten Groß, also braucht es dafür zwei Einträge in der Tabelle.
Den Heap und Stack habe ich einfach 64K nach oben verschoben, damit es sich leichter zählt.

Hoffentlich kommen in der Klausur keine 64 Bit Adressen… :wink:


hat er glaub ich im Tutorium ausgeschlossen ;).

Dank dir soweit scho mal. Werd’s mir morgen dann mal anschauen, etz wird erst mal Risiko gezoggt^^.


Im Tutorium haben wir ja auch die Lösung per Zeichnung gemacht. Fand ich auch bei weitem verständlicher.

Wenn mich nicht alles täuscht wurde ja auch erwähnt, dass wir uns Segmentierung mal anschaun sollten.
Denkt ihr dieser Aufgaben Klassiker wird abgeändert, und wenn wie würde sich des dann vermutlich auf die Zeichnung auswirken?
Oda denkt ihr eher an eine Nebenfrage nach dem Prinzip Addition statt kon… ?!


Der letzte Offset im der Table sollte IMHO 0xfff (4095 dec) sein und der letzte Index 0x3ff (1023 dec). Oder?


Index sollte 0x3ff sein, aber Offset muss 0xffc sein → von 0xffc bis 0xfff liegt der letzte Eintrag :slight_smile:


Jepp.


Boah eine letzte Bitte! Wenn mir doch irgendwer das Bild von dem Seitenverzeichnis+Seitentabelle einscannen oder zeichnen oder sonst wie zeigen koennte! Dieses Gewulst da oben ist nicht zu verstehen und ich brauch nur noch diese eine Aufgabe! Ich weiss es ist spaet und so… Waer echt super, hoffentlich meldet sich noch wer!
DANKE
hoffhoff*


Hier ein Foto von rupran’s Meisterwerk.
Hat bissi mehr Info (z.B. Foo), aber auch alle notwendigen Inhalte sind drauf
http://user.tigerhead.net/~thelazt/protection.JPG


Vielen Dank!