Welche Seite fliegt aus dem Speicher?
Seitenersetzung entscheidet, welche Seite das Betriebssystem aus dem Arbeitsspeicher wirft, wenn ein Rahmen gebraucht wird und alle belegt sind. Eine schlechte Wahl erzeugt viele Seitenfehler, und jeder kostet so viel Zeit wie tausende normale Zugriffe.
Sie kennen das vom Schreibtisch in der Bibliothek. Er hat drei Plätze für Bücher, und das Magazin ist weit weg. Jedes Buch, das Sie holen, verdrängt eines der drei.
Am Ende dieser Lektion
Notiz
Ich kann Seitenersetzung mit FIFO und LRU Schritt für Schritt simulieren.
Schlüsselwörter
| Begriff | Was er bedeutet | Beispiel |
|---|---|---|
| Seitenfehler | ein Zugriff auf eine Seite, die nicht im Speicher liegt | |
| Treffer | ein Zugriff auf eine Seite, die schon im Speicher liegt | |
| Zugriffsfolge | die Reihe der Seitennummern, die ein Programm benutzt | 1 2 3 1 |
| FIFO | first in, first out: Die älteste Seite fliegt hinaus | |
| LRU | least recently used: Die am längsten unbenutzte Seite fliegt hinaus | |
| Swap-Bereich | Platz auf der Festplatte für ausgelagerte Seiten |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Bei vollem Speicher muss eine Seite weichen
Der Arbeitsspeicher hat nur eine feste Zahl von Rahmen. Braucht ein Prozess eine Seite, die nicht darin liegt, und alle Rahmen sind belegt, muss eine andere Seite gehen. Das Ersetzungsverfahren wählt diese Opferseite.
Gut ist ein Verfahren, das später möglichst wenige Seitenfehler macht. Die Zukunft kennt das System nicht. Deshalb rät jedes Verfahren anhand der Vergangenheit.
Nicht jeder Seitenfehler liest die Festplatte
Ein Hauptfehler liest die Seite von der Festplatte und dauert Millisekunden. Ein Nebenfehler findet die Seite schon irgendwo im Speicher und muss nur die Tabelle anpassen.
Linux zählt beide seit dem Start des Rechners. In /proc/vmstat heißt der Zähler für alle Fehler pgfault und der für die Hauptfehler pgmajfault. Beide Zahlen sind auf jeder Maschine anders, pgfault ist viel größer.
Die Seitenfehler seit dem Start zählen
grep -E "^pg(maj)?fault " /proc/vmstatHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
Die Fehler Ihrer Shell ansehen
ps -o pid,min_flt,maj_flt,comm -p $$Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.
FIFO wirft die älteste Seite hinaus
Bei FIFO (first in, first out) wirft das System die Seite hinaus, die am längsten im Speicher liegt. Es merkt sich nur die Reihenfolge, in der die Seiten hereinkamen. Das ist einfach zu bauen.
Der Nachteil: Eine Seite kann alt und trotzdem ständig in Gebrauch sein. FIFO wirft sie dennoch hinaus, und kurz darauf folgt der nächste Seitenfehler.
Beispiel: FIFO mit drei Rahmen
| Zugriff | Rahmen danach (älteste links) | Seitenfehler? |
|---|---|---|
| 1 | 1 | ja |
| 2 | 1 2 | ja |
| 3 | 1 2 3 | ja |
| 1 | 1 2 3 | nein, Treffer |
| 4 | 2 3 4 | ja, die 1 fliegt hinaus |
| 1 | 3 4 1 | ja, die 2 fliegt hinaus |
| 2 | 4 1 2 | ja, die 3 fliegt hinaus |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
LRU wirft die am längsten unbenutzte Seite hinaus
Bei LRU (least recently used) wirft das System die Seite hinaus, die am längsten nicht benutzt wurde. Die Annahme: Wer eine Seite gerade benutzt hat, braucht sie bald wieder. Man nennt das Lokalität.
LRU macht meist weniger Seitenfehler als FIFO. Es muss aber bei jedem Zugriff die Reihenfolge ändern. Das ist teuer, deshalb nutzen echte Systeme Näherungen.
Beispiel: LRU mit denselben Zugriffen
| Zugriff | Rahmen danach (älteste links) | Seitenfehler? |
|---|---|---|
| 1 | 1 | ja |
| 2 | 1 2 | ja |
| 3 | 1 2 3 | ja |
| 1 | 2 3 1 | nein, die 1 rückt nach hinten |
| 4 | 3 1 4 | ja, die 2 fliegt hinaus |
| 1 | 3 4 1 | nein, Treffer |
| 2 | 4 1 2 | ja, die 3 fliegt hinaus |
Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.
Ein häufiger Fehler
Warnung
Viele glauben, mehr Rahmen bedeuten bei jedem Verfahren weniger Seitenfehler. Bei FIFO stimmt das nicht immer. Die Folge 1 2 3 4 1 2 5 1 2 3 4 5 macht mit drei Rahmen 9 Fehler und mit vier Rahmen 10. Das heißt Belady-Anomalie. LRU hat dieses Problem nicht.
Ausgelagerte Seiten landen im Swap-Bereich
Eine Seite, die ein Rahmen räumen muss und die verändert wurde, schreibt das System in den Swap-Bereich auf der Festplatte. Sonst gingen die Änderungen verloren.
Der Befehl free -m zeigt Arbeitsspeicher und Swap in Mebibyte. Er hat die Zeilen Mem und Swap und je Zeile Spalten wie total, used und free. Hat die Maschine keinen Swap, steht dort 0.
Speicher und Swap ansehen
free -mHier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.