Ein Seitenfehler (engl. page fault) tritt auf, wenn ein Programm auf eine Speicherseite zugreift, die in der Seitentabelle als nicht vorhanden markiert ist. Die CPU unterbricht die Ausführung und übergibt die Kontrolle an den Seitenfehler-Handler des Betriebssystems – kein Absturz, sondern ein normaler Teil des Memory Paging.

Minor und Major Page Faults

Betriebssysteme unterscheiden zwei Fälle:

  • Minor Page Fault (weich): Die Seite ist bereits im RAM, nur noch nicht in der Seitentabelle des Prozesses eingetragen – etwa bei Copy-on-Write nach fork() oder bei einer erstmals berührten, mit Nullen gefüllten Seite. Kein Festplattenzugriff nötig.
  • Major Page Fault (hart): Die Seite liegt nicht im RAM und muss erst von der Festplatte oder aus der Auslagerungsdatei gelesen werden. Das kostet mehrere Millisekunden – deutlich teurer als ein RAM-Zugriff.

Ablauf eines Major Page Faults

  1. Der Zugriff auf eine nicht vorhandene Seite löst eine Exception aus.
  2. Das Betriebssystem sucht einen freien Seitenrahmen; ist keiner frei, verdrängt es eine andere Seite per Seitenersatz (etwa per LRU) in die Auslagerungsdatei.
  3. Die angeforderte Seite wird vom Datenträger in den Rahmen geladen.
  4. Die Seitentabelle wird aktualisiert, der Prozess darf weiterlaufen.

Passiert das ständig und verbringt das System mehr Zeit mit Nachladen als mit Rechnen, spricht man von Thrashing – die Leistung bricht ein, bis genug Speicher freigegeben wird.

Der TLB puffert die Übersetzungen und kann bei einem Seitenwechsel invalidiert werden müssen – ein weiterer Grund, warum Seitenfehler nicht nur Speicher-, sondern auch Performance-Themen sind.

Verwandte Grundlagen: Demand Paging, Virtueller Speicher, Swap, MMU.