Forum: PC-Programmierung Paging: FIFO- bzw. LRU-Page-Replacement-Algorithm


von Hans W. (Gast)


Lesenswert?

Hi Leute!

Ich hab hier eine kleine Übung zum FIFO- bzw. 
LRU-Page-Replacement-Algorithm. Ich bin mir nicht ganz sicher, ob das 
stimmt was ich da zusammengemacht habe! Vielleicht könnte jemand von 
euch mit etwas mehr Ahnung kurz drüber schaun?

Hier die Aufgabe:

Die Hauptspeicheraufteilung erfolgt in 4 Frames.

Das ist der Referenzstring auf den der Algorithmus ausgeführt werden 
soll:
1
1234534167878978954542



Meine Lösung zur Aufgabe (FIFO) sieht so aus:
1
11115xx5558xx8xxx88xx2
2
 2222xx1111xx9xxx99xx9
3
  333xx3666xx6xxx55xx5
4
   44xx4477xx7xxx74xx4


Meine Lösung zur Aufgabe (LRU) sieht so aus:
1
11115xx5558xx8xxx88xx2
2
 2222xx1111xx9xxx99xx9
3
  333xx3666xx6xxx55xx5
4
   44xx4477xx7xxx74xx4

Da wo ich "x" geschrieben habe, kam ein Wert der schon in einem Frame 
drin war...

Was mich nun an meiner Lösung stört, ist die Tatsache, dass ich bei 
beiden Algorithmen auf das gleiche Ergebnis komme! Kann das sein?



Würd mich freun wenn ich Antworten dazu bekommen würde!

Danke!

von Karl H. (kbuchegg)


Lesenswert?

Hans Wurst schrieb:

> beiden Algorithmen auf das gleiche Ergebnis komme! Kann das sein?

Das kann schon sein.

Ich finde allerdings deine Darstellung nicht besonders übersichtlich, 
daher hab ich nicht versucht nachzuvollziehen, ob du irgendwo einen 
Fehler gemacht hast.

In deiner Darstellung sieht man nicht
   FIFO    welcher ist denn derjenige der als nächstes rausfliegt
   LRU     welcher ist den derjenige, der am wenigsten oft benutzt wurde


FIFO würde ich so darstellen (wieder deine Sequenz)
1
1234534167878978954542
2
3
1:  1 x x x      ( x steht für uninteressant )
4
2:  2 1 x x
5
3:  3 2 1 x
6
4:  4 3 2 1      ( 1 ist als erster ins Set gekommen und fliegt als daher als erster raus
7
5:  5 4 3 2
8
3:  5 4 3 2      ( 3 ist schon im Set, keine Aktion erforderlich)
9
4:  5 4 3 2
10
1:  1 5 4 3
11
6:  6 1 5 4
12
....

während ich bei LRU im Prinzip dasselbe mache, nur dass ich, wenn eine 
Page angefordert wird, die schon im Set ist, diese an die erste Stelle 
hole. Die Page ganz rechts ist daher die, die schon am längsten nicht 
benutzt wurde.
1
1234534167878978954542
2
3
1:  1 x x x
4
2:  2 1 x x
5
3:  3 2 1 x
6
4:  4 3 2 1
7
5:  5 4 3 2
8
3:  3 5 4 2
9
4:  4 3 5 2
10
1:  1 4 3 5
11
6:  6 1 4 3
12
....

(und jetzt sieht man auch, dass es einen Unterschied gibt)

von Hans W. (Gast)


Lesenswert?

Hm, ok soweit.

Mal eine grundsätzliche Frage. Ist FIFO das gleiche wie FCFS?

First Come - First Served

Müsste wohl so sein. Das ist beides das Warteschlangenprinzip. Wer sich 
zuerst anstellt, kommt als erster drann. Und wenn das 'erster drann' nur 
datin besteht, dass er als erster wieder bei der Tür rausfliegt.

von Hans W. (Gast)


Angehängte Dateien:

Lesenswert?

Gut. Ich hab mir jetzt deine Lösung nochmals angeschaut und muss sagen 
mir leuchtet deine Lösung auch viel eher ein!

Aber:

In meinen Vorlesungsfolien hab ich dieses Beispiel drin. Das Beispiel 
siehst du an dem Bild welche als Anhang dabei ist. Nach diesem Beispiel 
hab ich dann auch meinen Referenzstring vom Eröffnungspost lösen wollen. 
Es ist zwar jetzt leider ein anderer String, aber wenn ich den String 
aus dem Bild im Anhang mit deiner Methode lösen will, komm ich (leider) 
auf ganz andere Ergebnisse, als das, was in dem Bild gezeigt wird!

Wie kommt das jetzt? Welche Methode ist nun richtig?

von Karl H. (kbuchegg)


Lesenswert?

Hans Wurst schrieb:

> Es ist zwar jetzt leider ein anderer String, aber wenn ich den String
> aus dem Bild im Anhang mit deiner Methode lösen will, komm ich (leider)
> auf ganz andere Ergebnisse, als das, was in dem Bild gezeigt wird!

Wieso? Passt doch.

Die Reihenfolge der Pages im Set spielt ja keine Rolle. Darum spricht 
man ja auch vom Page "Set" (Set = ungeordnete Menge)

von Hans W. (Gast)


Lesenswert?

In meinen Folien wird aber nicht vom Set gesprochen, sondern von page 
frames...

Wie kommt dann die Vorlesung auf dieses "komische" Ergebnis?

von Karl H. (kbuchegg)


Lesenswert?

Edit:
Jetzt hab ich dich. In deiner Zeichnung werden die Kästchen auch gleich
als reale Page-Frames aufgefasst. OK. So gesehen muss man das dann so
machen, auch wenn ich es nach wie vor unübersichtlich finde, weil man
sich merken muss, in welchem Kästchen jetzt gerade das Ende der FIFO
liegt. Für einen COmputer kein Problem, aber für einen Menschen (mit 
schwachem Gedächtnis, so wie ich) schon.

von Hans W. (Gast)


Lesenswert?

Ok. Jetzt glaub ich sprechen wir vom Selben...

Ich muss es also dennoch so machen wie ich es "rausgefunden" habe. Denn: 
Zum "Algorithmus" als solchen schweigen sich diese dummen Folien nämlich 
schön brav aus. Da muss man dann hergehen und den tieferen Sinn selber 
finden :-(



-> Könntest du dann vielleicht meine zwei Beispiele die ich Eingangs 
gezeigt habe nochmals durchschaun und sagen ob das so passt? Das wäre 
sehr nett!



Dann hab ich gleich noch eine Frage:

Ich soll dann laut Aufgabe auch noch angeben, was die minimal mögliche 
Anzahl von Pagefaults bei dieser Hauptspeicheraufteilung von 4 Frames 
ist.

Was ein Pagefault ist weiß ich soweit. Bspw.: Ein Pogramm will auf einen 
Speicherbereich zugreifen, der sich aber im Moment nicht im 
Hauptspeicher befindet, sondern ausgelagert wurde. Bspw. auf die HDD.

Wie lege ich dieses Wissen nun auf diese Aufgabe um?

EDIT: Schwaches Gedächtnis? Das hab ich auch. Vielleicht hilft es dir 
auch, wenn du beim Referenzstring einen Zeiger mitgehen lässt. So weißt 
du immer welches Element das nächste ist. Also mir hat's ein bisschen 
geholfen :-)

von Karl H. (kbuchegg)


Lesenswert?

Hans Wurst schrieb:
> Ok. Jetzt glaub ich sprechen wir vom Selben...
>
> Ich muss es also dennoch so machen wie ich es "rausgefunden" habe. Denn:
> Zum "Algorithmus" als solchen schweigen sich diese dummen Folien nämlich
> schön brav aus. Da muss man dann hergehen und den tieferen Sinn selber
> finden :-(

Ich würde es parallel mit beiden Systemen machen. Bei einer Klausur wäre 
mir nämlich das Risiko zu groß, da einen blöden Fehler heinzuhauen

Beim letzten Beispiel - FIFO

Request   Set       Pages
7         7 x x     7 x x
0         0 7 x     7 0 x
1         1 0 7     7 0 1
2         2 1 0     2 0 1
0         2 1 0     2 0 1
3         3 2 1     2 3 1
0         0 3 2     2 3 0
4         4 0 3     4 3 0
2         2 4 0     4 2 0
....

die neue Anforderung kommt links an das Set ran, dafür fällt rechts 
einer weg. Der der wegfällt, den such ich mir in den Pages und schreib 
dort die neue Page rein. Am Beispiel: in deiner Folie geht es weiter mit 
einem Request der Page 3

3

die kommt im Set links drann

3        3 2 4 0

dafür fällt die 0 raus

3        3 2 4

und in den Pages wird daher die vorhergehende Page mit der 0 durch die 
Page 3 ersetzt

3        3 2 4    4 2 3


Und mit dem LRU mach ichs genauso. Nur dort ist es sogar noch wichtiger, 
weil ich ja über die Reihenfolge Buch führen muss, welche Page am 
längsten nicht benutzt wurde. Mit so einem Hilfskonstrukt des Sets geht 
das ganz einfach.

von Hans W. (Gast)


Lesenswert?

Hallo! Ich bin's nochmal.

Kannst du mir vielleicht eine Übersicht der realen page frame Verteilung 
des Strings
1
1234534167878978954542
 mit dem LRU-Algo. machen?

Ich glaub ich hab den Algo. an sich noch nicht verstanden! Ich komme da 
immer noch auf die exakt gleiche Verteilung wie beim FIFO Algo...

LRU heißt least recentliy used. Das bedeutet auf deutsch: am längsten 
nicht verwendet.

Beispiel:
1
1234534167878978954542
1
1111
2
 222
3
  33
4
   4
Soweit ist das ja noch klar. Aber wie gehts jetzt weiter? Ich muss ja 
jetzt die 5 anschaun. Welches dieser Elemente im page frame ist das "am 
längsten nicht verwendete" Element?

Das wäre sehr nett!

von Karl H. (kbuchegg)


Lesenswert?

Hans Wurst schrieb:
> Hallo! Ich bin's nochmal.
>
> Kannst du mir vielleicht eine Übersicht der realen page frame Verteilung
> des Strings
1
1234534167878978954542
 mit dem LRU-Algo.
> machen?

> LRU heißt least recentliy used. Das bedeutet auf deutsch: am längsten
> nicht verwendet.

Genau

>
1
1234534167878978954542
>
>
1
> 1111
2
>  222
3
>   33
4
>    4
5
>
> Soweit ist das ja noch klar. Aber wie gehts jetzt weiter? Ich muss ja
> jetzt die 5 anschaun. Welches dieser Elemente im page frame ist das "am
> längsten nicht verwendete" Element?

Und genau aus dem Grund habe ich oben diese Zusatzinfo benutzt.

Der aktuell benutzte kommt immer links drann.

   1                    1
   2 1                  1 2
   3 2 1                1 2 3
   4 3 2 1              1 2 3 4

jetzt kommt 5 links drann.

   5 4 3 2 1            1 2 3 4

Offensichtlich ist dann das Element am rechten Rand das am längsten 
nicht benutzte.  Also 1. Die Page 1 wird durch die Page 5 ersetzt

   5 4 3 2              5 2 3 4

Page 3 wird angefordert. Page 3 ist schon im Set. Ich schieb sie nur an 
den linken Rand um damit zu dokumentieren: Egal was vorher war, 3 ist 
die aktuell jüngste im Set.

   3 5 4 2              5 2 3 4

Page 4 wird angefordert. Wieder: Um zu doumentieren, dass 4 die jüngste 
ist, schiebe ich sie an den linken Rand in meinem Set

   4 3 5 2              5 2 3 4

(und sehe gleichzeitig auch, dass jetzt 2 die älteste Page ist). Denn 
jetzt kommt die Anforderung nach Page 1

   1 4 3 5 2

welche die Page 2 rausschiesst (weil es die älteste ist) und daher wird 
Page 2 durch Page 1 ersetzt

   1 4 3 5              5 1 3 4

Alles eine reine Frage der Organisation. In diesem Fall lautet die 
Frage: wie kann ich mir ein Hilfskonstrukt machen, mit dem ich leicht 
feststellen kann, welches die jeweils älteste Page ist. Der linke Teil 
meiner Spalten ist also nichts anderes als eine Reihung der Pages nach 
Alter, während der rechte Teil die logischen Pagenummern in den 
physischen Pages anordnet.

von Hans W. (Gast)


Lesenswert?

Ich hab jetzt auch nochmal versucht den LRU Algo. mit deiner Set und 
Pages Methode nachzuvollziehen. Leider ist das mir auch nicht so 
gelungen. So weit bin ich gekommen:
1
Request    Set    Pages
2
   1      1xxx    1xxx
3
   2      21xx    12xx
4
   3      321x    123x
5
   4      4321    1234
6
   5

Als nächste käme nun die 5. Welche Set-Stelle bzw. Page-Stelle muss ich 
jetzt mit der 5 überschreiben? Und vor allem was ergibt dabei nun den 
pagefault? Immer wenn eine Stelle überschrieben wird, oder?

Edit: Da hat sich wohl der Eintrag etwas überschnitten. Ich arbeite 
jetzt erstmal deine letzte Antwort durch! Ich denke, dass ist genau das 
was ich suche :-)

von Karl H. (kbuchegg)


Lesenswert?

Hans Wurst schrieb:
> Ich hab jetzt auch nochmal versucht den LRU Algo. mit deiner Set und
> Pages Methode nachzuvollziehen. Leider ist das mir auch nicht so
> gelungen. So weit bin ich gekommen:
>
>
1
> Request    Set    Pages
2
>    1      1xxx    1xxx
3
>    2      21xx    12xx
4
>    3      321x    123x
5
>    4      4321    1234
6
>    5
7
>
>
> Als nächste käme nun die 5. Welche Set-Stelle bzw. Page-Stelle muss ich
> jetzt mit der 5 überschreiben?

Siehe letztes Posting

> Und vor allem was ergibt dabei nun den
> pagefault? Immer wenn eine Stelle überschrieben wird, oder?

Was ist denn ein Pagefault?
Wenn eine Page angefordert wird, die physisch nicht gemappt ist.

In deinem Schrieb ist das genau dann der Fall, wenn du in der rechten 
Spalte etwas verändern musst. Denn die rechte Spalte sagt dir ja, wie 
die Pages im Speicher liegen. Wenn du dort nichts verändern musst, hast 
du auch keinen Pagefault.

von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz Buchegger schrieb:

> feststellen kann, welches die jeweils älteste Page ist. Der linke Teil
> meiner Spalten ist also nichts anderes als eine Reihung der Pages nach
> Alter, während der rechte Teil die logischen Pagenummern in den
> physischen Pages anordnet.


Die rechte Spalte ist das was du auf deinen Lösungszettel schreibst, die 
linke Spalte ist das, was du auf einem Schmierzettel bei der 
Beantwortung der Frage nebenher mitführst.
Und dein Dozent wird dich ob deines guten Gedächtnisses bewundern :-)

von Hans W. (Gast)


Lesenswert?

Hier hab ich jetzt mal versucht den String komplett nach deiner Methode 
abzuarbeiten. Vielleicht magst du's mal durchschaun:
1
Request    Set    Pages
2
  1       1xxx    1xxx
3
  2       21xx    12xx
4
  3       321x    123x
5
  4       4321    1234
6
  5       5432    5234
7
  3       3542    5234
8
  4       4352    5234
9
  1       1435    5134
10
  6       6143    6143
11
  7       7614    6174
12
  8       8761    6178
13
  7       7861    6178
14
  8       8761    6178
15
  9       9876    6978
16
  7       7986    6978
17
  8       8796    6978
18
  9       9876    6978
19
  5       5987    5978
20
  4       4598    5948
21
  5       5498    5948
22
  4       4598    5948
23
  2       2459    5942


page faults = 13


Stimmt das jetzt so?

von Hans W. (Gast)


Lesenswert?

So, jetzt soll ich auf diesen gewohnten String noch den "optimal 
Algorithm" anwenden. Also quasi den Algorithmus, der am wenigsten 
Seitenfehler produziert. Dir schaut quasi in die Zukunft des Strings.
1
1234534167878978954542


Geht da deine Methode auch wieder? In meiner etwas unübersichtlicheren 
Methode hab ich den "optimal Algorithmus" schon durchschaut. Aber wie 
kann man das jetzt auf deine Methode übertragen bzw. gibt's da auch so 
eine schöne Methode?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.