Der Not Recently Used Seitenersetzungsalgorithmus, kurz NRU, ersetzt immer eine Seite, auf die in letzter Zeit nicht zugegriffen wurde.
Die Idee dahinter ist: Wenn in letzter Zeit nicht auf die Seite zugegriffen wurde, dann wird vermutlich auch in (naher) Zukunft nicht darauf zugegriffen werden müssen.
Um dieses Verfahren zu implementieren, müssen zwei Fragen beantwortet, bzw. Probleme gelöst werden:
Auf die erste Frage gibt es eine ganz einfache Antwort: Mit Hilfe des R-Bits.
In den Seitentabellen wird eine zusätzliche Spalte eingeführt, siehe Abbildung unten. Für jede einzelne Seite (d.h. in jedem Seitentabelleneintrag) wird mit Hilfe eines einzelnen Bits festgehalten, ob die betreffende Seite referenziert wurde.
Man spricht hier vom sogenannten Referenziert-Bit, oder kurz vom R-Bit.
Es liegt auf der Hand, dass das R-Bit (genau wie das M-Bit) beim Einlagern einer virtuellen Seite in einen Seitenrahmen im betreffenden Seitentabelleneintrag mit 0 initialisiert wird.
Die MMU nimmt später bei der (erfolgreichen) Umrechnung einer virtuellen in eine physikalische Adresse ein Setzen des R-Bits im betreffenden Eintrag der Seitentabelle vor.
Sobald eine Entscheidung bzgl. der zu ersetzenden Seite herbeigeführt werden muss, kategorisiert NRU alle in Seitenrahmen eingelagerte virtuelle Seiten in vier Klassen:
Könnte es vorkommen, dass in allen vier Klassen keine Seiten vorhanden sind? Begründe deine Meinung.
Die Arbeitsweise von NRU ist nun weitgehend bekannt. Allerdings fehlt noch die Antwort auf die zweite Frage von oben:
Tanenbaum 2009 nennt hier "ungefähr 20 ms", andere Autoren verzichten ganz auf eine konkrete Angabe. Es darf jedoch davon ausgegangen werden, dass diese Zeitspanne relativ kurz im Verhältnis zum menschlichen Zeitempfinden gewählt werden sollte.
Bevor die Auswirkung dieser Zeitspanne näher erläutert wird, noch folgende Überlegung:
Ein (beliebiger) Seitenersetzungsalgorithmus (und damit speziell auch NRU) lagert eine virtuelle Seite in einen physikalischen Seitenrahmen ein, wenn diese benötigt wird. Es ist eine Reaktion auf einen direkt zuvor aufgetretenen Seitenfehler.
Sobald nun die benötigte Seite eingelagert wurde (und der Scheduler dem betreffenden Prozess die CPU zugeteilt hat), wird der nächste Speicherzugriff sofort auf die gerade eingelagerte Seite erfolgen, das zugehörige R-Bit wird zwangsläufig gesetzt.
Können deshalb eigentlich eingelagerte Seiten mit R=0 vorkommen?
Sind also Seiten in Klasse 1 und 2 zu erwarten?
Die Wahrscheinlichkeit dafür dürfte sehr gering sein.
Jetzt kommt jedoch die erwähnte Zeitspanne ins Spiel: Immer nach Ablauf dieser Zeit werden in allen Seitentabellen alle R-Bits gelöscht (also auf 0 gesetzt)!
Damit dient das R-Bit als Indikator für all diejenigen eingelagerten virtuellen Seiten, die seit dem letzten "Auf-0-setzen" des R-Bits referenziert wurden. Folglich können sehr wohl Seiten in den Klassen 1 und 2 vorkommen.
Wenn nach Ablauf der erwähnten Zeitspanne das R-Bit gelöscht wird, sollte dann gleich auch das M-Bit mit gelöscht werden? Begründe deine Meinung!
Diese Seite steht unter der Creative Commons Namensnennung 3.0 Unported Lizenz http://i.creativecommons.org/l/by/3.0/80x15.png