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 August 2011
Hallo, geht hier um die 3 c)
meine antworten:
c1)
0xf000: a, i
0x1000: b, p
c2) error, da p static ist und somit read-only
c3) das BS erkennt mangelnde rechte und blockiert daher den write-zugriff
Stimmt das so? bin mir da relativ unsicher…
Hier der Link zur Klausur: http://www4.cs.fau.de/Lehre/SS11/V_SP1/Pruefung/2011s-SP-Klausur-www.pdf
static == readonly?? meines wissen sagt static nur, dass die variable auf dem Datensegment landet und nicht auf dem Stack(wenn du diese Variable innerhalb einer Funktion deklarierierst, ausserhalb der Funktion hat das eine andere Bedeutung). Du meinst wahrscheinlich const mit readonly.
static int *p = (int *)0x4018;
Gibt ein Pagefault(Trap), da die Seite noch nicht eingelagert wurde. Feststellen kannst du das, wenn du ein Blick auf die Seitentabelle in der vorherigen Aufgabe wirfst
Wie geht das BS bei einem Pagefault vor?
EDIT: DOPPELPOST
ok danke,
ja bin mit static etwas durcheinander gekommen.
Dann ist die c1) auch teilfalsch, müsste dann 0x3000 (=d1) : b, p sein denke ich.
c3) würde dann das BS trappen und die seite von der disc in den hauptspeicher laden, korrekt?
oder in d2 liegen, dass weisst du ja nicht.
int a;
ist eine nicht-initialisierte globale Variable. Die wurde ja ausserhalb einer Funktion deklariert .Normalerweise kommt die ins BSS-Segment. Da wir hier kein BSS haben, wuerde ich die auch ins Datensegment schieben, aber auf keinen Fall auf dem Stack.
Auf dem Stack kommen nur Sachen wie lokale Variablen, Funktionsparameter oder Ruecksprungadressen.
Jo so in etwa. MMU sendet ein Trap. BS lagert die Seite ein, und es wird fortgefahren. Aber die genauen Schritte bitte noch mal in den Folien nachlesen
Sorry, dass es so durcheinander ist, aber ich wollte mein post noch fixen, dann hast du schon deinen naechsten gemacht ^^.
Also zusammenfassend zur 3c) Die MMU stellt fest, dass das Present Bit nicht gesetzt ist und stellt dem BS einen Page fault zu. Daraufhin lagert das Betriebssystem die Seite ein und aktualisiert die Page Table.
Ist das so korrekt?
Was wäre jetzt eigentlich, wenn die Seite tatsächlich readonly wäre. Würde die MMU bereits den Zugriffsfehler erkennen oder wird die Seite erst wie oben eingelagert und daraufhin der Zugriffsfehler erkannt?
Jop ist richtig so. Ich geb gleich die Loesung fuer die 3c raus bzw fuer diesen Typ von Aufgabe :). <— Die lass ich lieber sein, copy pasta aus den Loesungen vom Blatt auf die Klausur ist nicht das Ziel.
Zur anderen Frage: Ich glaub die MMU checkt dann, ob das Rechtebit dazu gesetzt ist und gibt gleich einen Fault.
Es fehlt noch, dass der Befehl wiederholt wird und damit das Programm fortgesetzt wird. (Und das BS muss noch nachschauen, ob die Seite überhaupt ausgelagert war.)
Vom Prinzip her passiert dasselbe, MMU löst einen Page-Fault aus. Dann kommt das BS ran und schaut nach, was der Grund für den Trap war (read-only, non-present, non-executable; code-fetch, data-fetch; user-access, supervisor-access) und handelt dementsprechend. Wenn read-only der Grund war, wird der Prozess terminiert, war non-present der Grund, dann wie schon beschrieben.
Wenn die Seite ausgelagert war und zusätzlich read-only ist, dann kommt es darauf an was das BS macht. Kann gleich den Prozess terminieren oder erst mal einlagern und dann gibt es nochmal einen Trap beim Schreiben. Dann nicht wegen non-present sondern wegen read-only.
Hat zufällig noch jemand ne Lösung zur 3b) parat?
Also die Frage bezüglich 3b wäre noch aktuell.
Was ist denn ueberhaupt mit [quote]
Skizzieren Sie die Datenstrukturen,die die MMU für dieUmsetzung des beschriebenen virtuellen Adressraums benötigt
[/quote]
Gemeint?
Page-Tables und wie die genutzt werden um die Adresse umzusetzen. Praktisch das aus den Vorlesungsfolien.
Ich weiß jetzt nicht so recht wie ich das aus den Folien auf die Aufgabe übertragen soll. Hat da evtl. jemand eine Lösung zur 3b?
Ich verstehe nicht wie man bei der 3a) vorgehen muss. Die Adressen der Seitenrahmen im physikalischen Speicher sind ja schon vorgegeben. Ich dachte man kommt über die 16 Bit Adresslänge an die virtuelle Speicheradresse, bzw. kann dann von der virtuellen auf die physikalische schließen, aber ich kann nicht nachvollziehen, wie man dann schon auf die eingezeichneten virtuellen 0xf000 auf die physikalischen 0x9000 kommt. Wie macht man das?