Speicherverwaltung Seitenfehler

Hi,

bereite mich grad auf eine Prüfung vor. Habe Probleme mit folgender Aufgabe:
Gegeben sei ein Maschinenbefehl der Größe 4 Byte der ein 32 bit Wort von einer gegebenen Adresse in ein Register lädt.
Wie viele Seitenfehler können bei der Ausführung des Befehls auftreten.

Ich kann zwar virtuelle Adressen auf physikalische umrechnen aber das ist meine erste Rechnung mit Seitenfehlern…

Kann jemand helfen?

LG
syrvn

Hallo syrvn,

Gegeben sei ein Maschinenbefehl der Größe 4 Byte der ein 32
bit Wort von einer gegebenen Adresse in ein Register lädt.
Wie viele Seitenfehler können bei der Ausführung des Befehls
auftreten.

Da fehlt noch eine Angabe:
Wie gross ist eine Seite?
Theoretisch kann deine Seite auch nur 1 Byte gross sein. Macht zwar keinen Sinn, aber hier musst du eine Annahme treffen.

Ich kann zwar virtuelle Adressen auf physikalische umrechnen
aber das ist meine erste Rechnung mit Seitenfehlern…

Was ein Seitenfehler ist, ist die klar?

Dann überlege dir mal, welche Möglichkeiten es gibt, die benötigten Bytes auf Seiten zu verteilen.

Einen Seitenfehler mehr, bekomme ich noch, wenn der Befehl angesprungen wird und nicht Teil einer Codesequenz ist.

MfG Peter(TOO)

Hi Peter,

sorry für die verspätete Antwort.
War 3 Tage unterwegs…

Mh leider steht nicht dabei wie groß eine Seite ist. Aber bei anderen Aufgaben sind wir einfach immer von 4 Byte pro Seite ausgegangen. Lass uns deshalb einfach 4 Bytes für eine Seite nehmen.

Was Seiten, Seitenrahmen und Seitenfehler sind hab ich wie folgt zusammengefasst: (sollte soweit richtig sein)

Seiten (Pages) und Seitenrahmen:
Der virtuelle Adressraum ist ein Einheiten unterteilt, die Seiten genannt werden. Die entsprechenden Einheiten im physischen Speicher heißen Seitenrahmen oder auch Seitenkacheln (page frames). Die Seiten und Seitenrahmen sind immer gleich groß. Zwischen Speicher und Platte werden immer ganze Seiten übertragen

Seitenfehler:
Versucht ein Programm auf eine Seite zuzugreifen, die nicht im physischen Speicher liegt, stellt die MMU dies fest und löst einen Systemaufruf aus. Dieser wird Seitenfehler genannt. Das Betriebssystem sucht sich dann einen wenig benutzten Seitenrahmen aus und schreibt seinen Inhalt zurück auf die Platte. Dann lädt es die Seite, die den Seitenfehler ausgelöst hat, in den frei gewordenen Seitenrahmen, passt die Abbildungstabellen an und führt den abgebrochenen Befehl
noch einmal aus.

Einen Seitenfehler mehr, bekomme ich noch, wenn der Befehl angesprungen wird und nicht Teil einer Codesequenz ist.
– Das verstehe ich leider nicht. Meinst du damit, dass es einen Seitenfehler gibt, wenn ein Befehl neu ausgeführt wird, weil sich bis dato noch keine Seite des Befehls im Hauptspeicher (Seitenrahmen) befindet?

Dann überlege dir mal, welche Möglichkeiten es gibt, die benötigten Bytes auf Seiten zu verteilen.
– Kann ich ueberhaupt sagen wie viele Seitenfehler es geben wird, wenn ich nicht einmal weiss, wie viele Seitenrahmen ich im Hauptspeicher zur Verfügung habe? Gut ich weiss, dass eine Seite 4 Byte groß ist. Ebenso der Maschinenbefehl und das Wort (32Bit = 4 Byte). Wie man davon aber nun auf die Anzahl der Seitenfehler kommt will mir einfach nicht in den Sinn kommen.

Grüße
syrvn

Hallo syrvn,

– Kann ich ueberhaupt sagen wie viele Seitenfehler es geben
wird, wenn ich nicht einmal weiss, wie viele Seitenrahmen ich
im Hauptspeicher zur Verfügung habe? Gut ich weiss, dass eine
Seite 4 Byte groß ist. Ebenso der Maschinenbefehl und das Wort
(32Bit = 4 Byte). Wie man davon aber nun auf die Anzahl der
Seitenfehler kommt will mir einfach nicht in den Sinn kommen.

Das hier ist mein Seitenrahmen:

+====+====+====+====+
I | | | I
+====+====+====+====+
Da kann ich jetzt meine 4 Bytes ablegen
+====+====+====+====+
I B1 | B2 | B3 | B4 I
+====+====+====+====+
Dann gibt es aber noch folgende Möglichkeiten:
+====+====+====+====++====+====+====+====+
I | B1 | B2 | B3 II B4 | | | I
+====+====+====+====++====+====+====+====+

+====+====+====+====++====+====+====+====+
I | | B1 | B2 II B3 | B4 | | I
+====+====+====+====++====+====+====+====+

+====+====+====+====++====+====+====+====+
I | | | B1 II B2 | B3 | B4 | I
+====+====+====+====++====+====+====+====+

MfG Peter(TOO)

Hey,

danke, dass du dich noch mit meiner verspäteten Antwort auseinandersetzt!

Ich verstehe zwar was du mir dort aufgezeichnet hast, aber dennoch weiss ich nicht, wie ich das zur Lösung der Aufgabe benutzen kann…
Kann aber auch sein, dass ich die Frage gar nicht 100% verstanden habe.

Ich verstehe das Problem wie folgt:
Angenommen wir haben nicht ein Wort mit 32 Bit länge sondern sagen wir mit 128 Bit = 16 Byte.
Belassen wir die Seitengröße bei 4 Byte

Weiterhin nehme ich jetzt an, dass mein Hauptspeicher relativ klein ist und nur ueber 3 Seitenrahmen verfügt. Es können sich also maximal nur 3*4Byte = 12 Byte im Hauptspeicher befinden. Das Wort ist aber 16 Byte groß.

Seitenrahmen 3
+====+=====+=====+=====+
I B9 | B10 | B11 | B12 I
+====+=====+=====+=====+

Seitenrahmen 2
+====+====+====+====+
I B5 | B6 | B7 | B8 I
+====+====+====+====+

Seitenrahmen 1
+====+====+====+====+
I B1 | B2 | B3 | B4 I
+====+====+====+====+

Da die restlichen 4 Bytes nicht mehr in den Hauptspeicher passen erhalte ich einen Seitenfehler. Was dann passiert ist doch, dass die MMU je nachdem welcher Seitenersetzungsalgorithmus (FIFO, LRU) verwendet wird, eine dieser Seitenrahmen auf die Festplatte auslagert, um dann die restlichen 4 Bytes in den Hauptspeicher überführen zu können.

Bin mir eben jetzt nicht sicher, ob dass das Problem der Aufgabenstellung ist oder ob ich hier einen Gedankenfehler habe.

Gruß

PS: in welche Tags muss ich denn die Seitenrahmen einschließen, damit die wie bei dir ordentlich dargestellt werden??

Hallo Fragewurm,

Bin mir eben jetzt nicht sicher, ob dass das Problem der
Aufgabenstellung ist oder ob ich hier einen Gedankenfehler
habe.

Wir haben ja folgende Lage:

Dann gibt es aber noch folgende Möglichkeiten:
+====+====+====+====+
I B1 | B2 | B3 | B4 I
+====+====+====+====+

+====+====+====+====+ +====+====+====+====+
I | B1 | B2 | B3 I I B4 | | | I
+====+====+====+====+ +====+====+====+====+

+====+====+====+====+ +====+====+====+====+
I | | B1 | B2 I I B3 | B4 | | I
+====+====+====+====+ +====+====+====+====+

+====+====+====+====+ +====+====+====+====+
I | | | B1 I I B2 | B3 | B4 | I
+====+====+====+====+ +====+====+====+====+

Der schlechteste Fall ist, wenn sich keiner der Rahmen im Speicher befindet.

PS: in welche Tags muss ich denn die Seitenrahmen
einschließen, damit die wie bei dir ordentlich dargestellt
werden??

PRE-Tag

MfG Peter(TOO)