Seitenverwaltung und virtueller Speicher

Lerne, wie ein Betriebssystem Speicher in Seiten unterteilt und mithilfe von Seitentabellen jede Adresse übersetzt, die ein Programm verwendet. Verfolge die Übersetzung durch den TLB, den kleinen Hardwarecache, der sie beschleunigt, und durch mehrstufige Seitentabellen, die selbst bei 64-Bit-Adressräumen klein bleiben. Erfahre dann, wie Programme durch Auslagerung mehr Speicher nutzen können, als der Rechner besitzt: Behandle Seitenfehler, vergleiche Seitenersetzungsstrategien wie FIFO, LRU und den Clock-Algorithmus anhand durchgerechneter Referenzfolgen und erkenne Seitenflattern und Gegenmaßnahmen.

MittelEinheit 4 von 9 in Kurs: Betriebssysteme – Prozesse, Speicher, Threads und Dateisysteme

Was du lernst

  1. Unterteile Speicher in gleich große Seiten und Seitenrahmen und übersetze jede virtuelle Adresse mithilfe einer prozessspezifischen Seitentabelle in eine physische Adresse.
    • Unterteile den virtuellen Adressraum in Seiten und den physischen Speicher in Seitenrahmen
      Erkläre, warum die Seitenverwaltung Segmente variabler Größe ersetzt, und unterteile eine virtuelle Adresse in Seitennummer und Offset.
    • Übersetze eine Adresse mit einer linearen Seitentabelle
      Lies Seitentabelleneinträge, verfolge die Schritte von einer virtuellen zu einer physischen Adresse und berechne den Speicherbedarf einer Seitentabelle.
  2. Erkläre, wie ein TLB kürzlich verwendete Übersetzungen zwischenspeichert, sage anhand des Zugriffsmusters eines Programms die Häufigkeit von Treffern voraus und sorge bei Fehlzugriffen und Kontextwechseln für korrekte Übersetzungen.
    • Verfolge einen TLB-Treffer und einen TLB-Fehlzugriff
      Verfolge die Schritte der Hardware mit einem TLB und nutze Lokalität, um die Häufigkeit von Treffern vorherzusagen.
    • Behandle TLB-Fehlzugriffe und Kontextwechsel
      Vergleiche hardware- und softwareverwaltete TLBs, sorge bei Kontextwechseln für korrekte Übersetzungen und berechne die TLB-Reichweite.
  3. Berechne, warum lineare Seitentabellen Speicher verschwenden, vergleiche platzsparende Strukturen und übersetze Adressen mit mehrstufigen Seitentabellen. Wäge dabei die Speicherersparnis gegen langsamere Fehlzugriffe ab.
    • Vergleiche Verfahren zur Verkleinerung einer Seitentabelle
      Wäge größere Seiten, die Kombination aus Segmentierung und Seitenverwaltung sowie invertierte Seitentabellen gegen den Speicherbedarf einer linearen Tabelle ab.
    • Übersetze Adressen mit einer zweistufigen Seitentabelle
      Teile eine virtuelle Adresse in Verzeichnisindex, Tabellenindex und Offset auf und durchlaufe Seitenverzeichnis und Seitentabelle bis zur physischen Adresse.
    • Passe Seitentabellen an 64-Bit-Adressen an
      Berechne, wie viele Stufen eine Seitentabelle benötigt, und erkläre, wie vier- und fünfstufige Tabellen und große Speicherseiten auf x86-64 in der Praxis funktionieren.
  4. Halte Seiten, die nicht in den Speicher passen, auf einer Festplatte oder SSD, verfolge einen Seitenfehler Schritt für Schritt, schätze seinen Aufwand ab und nutze Seitenfehler gezielt für verzögerte Speicherzuweisung und Copy-on-Write.
    • Lagere Seiten aus und ein und behandle einen Seitenfehler
      Erkläre den Auslagerungsbereich und das Präsenzbit und verfolge die Schritte von Hardware und Betriebssystem bei einem Seitenfehler.
    • Schätze den Aufwand von Seitenfehlern ab und halte Seitenrahmen frei
      Berechne die effektive Zugriffszeit bei Seitenfehlern und erkläre, wie das Betriebssystem Seitenrahmen im Voraus freigibt und veränderte Seiten zurückschreibt.
    • Nutze Seitenfehler für verzögerte Speicherzuweisung, Copy-on-Write und gemeinsame Speichernutzung
      Erkläre, wie Betriebssysteme Gültigkeits-, Präsenz- und Schutzbits nutzen, um Arbeit aufzuschieben und Speicher sicher gemeinsam zu nutzen.
  5. Simuliere und vergleiche Seitenersetzungsstrategien anhand von Referenzfolgen, erkläre, wie reale Systeme LRU annähern, und erkenne und behebe Seitenflattern.
    • Bewerte Seitenersetzungsstrategien anhand der optimalen Strategie
      Zähle Treffer und Fehlzugriffe in einer Referenzfolge, ordne Fehlzugriffe nach Art und nutze die optimale Strategie als Maßstab.
    • Vergleiche FIFO, zufällige Seitenersetzung und LRU
      Simuliere die klassischen Strategien anhand derselben Referenzfolge, erkläre die Belady-Anomalie und wähle eine Strategie für ein gegebenes Zugriffsmuster.
    • Nähere LRU mit Referenzbits und dem Clock-Algorithmus an
      Führe den Clock-Algorithmus mit Referenz- und Änderungsbits aus und erkläre, warum reale Systeme LRU annähern, statt es exakt zu implementieren.
    • Erkenne Seitenflattern und weise Seitenrahmen zu
      Erkläre Seitenflattern mit dem Arbeitsmengenmodell und wähle Gegenmaßnahmen wie Zulassungskontrolle, Seitenfehlerhäufigkeitssteuerung und den OOM-Killer.

Seitenverwaltung und virtueller Speicher einfach erklärt

5 Kapitel

1

Übersetze virtuelle Adressen mit Seitenverwaltung

Jeder Befehlsabruf sowie jeder Lese- und Schreibzugriff beginnt mit einer Adresse im virtuellen Adressraum eines Prozesses. Die Seitenverwaltung ermöglicht es dem Betriebssystem, dessen Inhalte in getrennten physischen Seitenrahmen abzulegen, während das Programm weiterhin aufeinanderfolgende Adressen sieht. Du teilst Adressen auf, verfolgst eine Suche in einer linearen Seitentabelle und unterscheidest die Adresse eines Abbildungseintrags von der Adresse der angeforderten Daten. Dieselben Berechnungen zeigen auch den Speicherbedarf der Seitenverwaltung.

1.1 Seiten, Seitenrahmen und Adressfelder

Ein Programm verwendet virtuelle Adressen. Der physische Speicher hält die Bytes in Seitenrahmen. Die Seitenverwaltung unterteilt den virtuellen Adressraum in gleich große Seiten und den physischen Speicher in gleich große Seitenrahmen. Das Betriebssystem kann jede Seite in jedem freien Seitenrahmen ablegen. Seite 0 könnte Seitenrahmen 12 belegen und Seite 1 den Seitenrahmen 3; das Programm sieht weiterhin aufeinanderfolgende virtuelle Adressen.

Das beseitigt externe Fragmentierung bei der Zuweisung einzelner Seiten. Bei Segmenten variabler Größe kann eine Anfrage scheitern, weil der freie Speicher in zu kleine Lücken aufgeteilt ist. Bei der Seitenverwaltung passt eine Seite immer in einen freien Seitenrahmen. Ein dünn besetzter Adressraum kann eine große Lücke zwischen Heap und Stack lassen, ohne dafür physische Seitenrahmen zu reservieren.

Ungenutzten Platz innerhalb von Seiten berechnen

Bei der Seitenverwaltung entsteht weiterhin interne Fragmentierung. Ein Bereich muss ganze Seiten belegen, auch wenn seine letzte Seite teilweise leer ist. Ein Bereich von 9.000 Byte benötigt drei 4 KiB große Seiten: Zwei Seiten nehmen 8.192 Byte auf, sodass 808 Byte für die dritte bleiben. Die Zuweisung belegt 12.288 Byte, wovon 3.288 Byte ungenutzt sind. KiB bedeutet 1.024 Byte, MiB bedeutet 1.048.576 Byte. Manche Bücher verwenden KB und MB für diese binären Größen.

Die Adresse in Felder aufteilen

Eine Adresse bezeichnet sowohl eine Seite als auch ein Byte innerhalb dieser Seite. Bei einer Seitengröße von 2k Byte bilden die niederwertigen k Bit den Offset. Die übrigen höherwertigen Bits bilden die virtuelle Seitennummer, kurz VPN. Eine 32-Bit-Adresse hat bei 4 KiB großen Seiten 12 Offsetbits und 20 VPN-Bits. In diesem Adressraum gibt es 220 mögliche virtuelle Seiten.

Bei 0x00403A7C ergeben die letzten drei Hexadezimalstellen den Offset 0xA7C, weil jede Hexadezimalstelle vier Bit darstellt. Die ersten fünf Stellen ergeben die VPN 0x00403. Diese Abkürzung funktioniert hier, weil die Feldgrenze zwischen Hexadezimalstellen liegt. Zähle bei einer anderen Seitengröße die Bits, bevor du den geschriebenen Hexadezimalwert aufteilst.

Die Dezimalrechnung liefert dasselbe Ergebnis:

VPN=⌊VA/P⌋,Offset=VA mod P

Dabei ist P die Seitengröße in Byte. Bei Seiten mit 1.024 Byte hat die virtuelle Adresse 5.000 die VPN 4 und den Offset 904. Vier vollständige Seiten umfassen 4.096 Byte; die übrigen 904 Byte bestimmen die Position der Adresse innerhalb von Seite 4. Offsets beginnen bei null, die Offsets dieser Seite reichen also von 0 bis 1.023.

Die Übersetzung ersetzt die VPN durch eine physische Seitenrahmennummer. Den Offset übernimmt sie unverändert: Byte 904 einer virtuellen Seite ist Byte 904 ihres Seitenrahmens. Die Seitennummer allein ist keine Byteadresse. Multipliziere eine Seitenrahmennummer mit der Seitengröße, um die Startadresse des Seitenrahmens zu finden, und addiere dann den Offset.

Eine Seitengröße wählen

Größere Seiten verringern die Anzahl der Abbildungen und ermöglichen, dass jede zwischengespeicherte Übersetzung mehr Bytes abdeckt. Sie verschwenden aber auch mehr Platz in teilweise genutzten Seiten und übertragen beim Laden einer Seite mehr Daten. Eine übliche Basisseitengröße ist 4 KiB; andere Systeme verwenden 16 KiB oder 64 KiB. x86-64 unterstützt auch große Abbildungen wie 2 MiB große Seiten.

Wichtige Erkenntnisse

  • Eine virtuelle Seite und ein physischer Seitenrahmen sind gleich groß.
  • Jeder freie Seitenrahmen kann jede Seite aufnehmen; benachbarte virtuelle Seiten müssen keine benachbarten Seitenrahmen belegen.
  • Die niederwertigen Adressbits ergeben den Offset, der bei der Übersetzung erhalten bleibt.
  • Runde Zuweisungen bei der Berechnung der internen Fragmentierung auf ganze Seiten auf.
  • Größere Seiten verringern den Verwaltungsaufwand für Abbildungen, können aber mehr Platz verschwenden.

1.2 Eine lineare Seitentabelle lesen

Eine Seitentabelle erfasst die Abbildungen eines Prozesses. In einer linearen Seitentabelle indiziert die VPN ein Array: Eintrag 4 beschreibt die virtuelle Seite 4. Jeder Prozess hat eine eigene Tabelle, sodass dieselbe virtuelle Adresse in verschiedenen Prozessen auf unterschiedliche physische Bytes verweisen kann. Bei einem Kontextwechsel wählt das Betriebssystem über ein Seitentabellenbasisregister die Tabelle des neuen Prozesses aus.

Zustand und Berechtigungen eines Eintrags lesen

Ein Seitentabelleneintrag, kurz PTE, enthält eine physische Seitenrahmennummer (PFN) und Steuerinformationen. Im Lehrmodell gibt ein Gültigkeitsbit an, dass die Seite zum Adressraum gehört; ein Präsenzbit gibt an, dass ihr Inhalt im physischen Speicher liegt. Schutzbits steuern das Lesen, Schreiben, Ausführen und den Benutzerzugriff. Ein Änderungsbit erfasst Schreibzugriffe seit seinem letzten Zurücksetzen. Ein Referenzbit erfasst die Nutzung seit seinem letzten Zurücksetzen.

Dies sind begriffliche Rollen, keine Zusage identischer Hardwarestrukturen. Auf x86 gibt es kein separates Gültigkeitsbit in einem PTE. Ist das Präsenzbit nicht gesetzt, unterscheidet das Betriebssystem anhand eigener Aufzeichnungen eine ungenutzte Adresse von einer gültigen, andernorts gespeicherten Seite. Auf x86 setzt die Hardware das Referenz- und das Änderungsbit; das Betriebssystem verwaltet sie und setzt sie zurück.

Den Eintrag und das Byte finden

So übersetzt du eine Adresse mit einer linearen Tabelle:

  1. Teile die virtuelle Adresse in VPN und Offset auf.
  2. Finde den Eintrag bei table base+VPN×PTE size.
  3. Prüfe, ob die Abbildung existiert, präsent ist und diesen Zugriff erlaubt.
  4. Bilde die physische Adresse aus PFN×page size+offset.
  5. Lies oder schreibe das Byte an dieser physischen Adresse.

Bei Seiten mit 1.024 Byte ergibt die virtuelle Adresse 5.000 die VPN 4 und den Offset 904. PTE 4 sei präsent, erlaube den angeforderten Lesezugriff und enthalte PFN 9. Seitenrahmen 9 beginnt bei 9.216, die physische Byteadresse ist also 10.120. Die Adresse des Tabelleneintrags wird separat berechnet: Belegen Einträge je 4 Byte, liegt PTE 4 um 16 Byte hinter der Tabellenbasis.

Ein Hexadezimalbeispiel: Bei 4 KiB großen Seiten wird 0x00403A7C in VPN 0x403 und Offset 0xA7C aufgeteilt. Enthält die erlaubte Abbildung PFN 0x1F2B5, lautet die physische Adresse 0x1F2B5A7C. Der PTE liegt bei Basis + 0x403 × 4 = Basis + 0x100C. Das Anhängen des Offsets bildet eine Datenadresse; die Multiplikation der VPN mit der Eintragsgröße ermittelt den PTE. Diese beiden Adressen dienen unterschiedlichen Zwecken.

Eine fehlgeschlagene Prüfung löst eine Ausnahme aus. Das Betriebssystem kann eine gültige, nicht im Speicher befindliche Seite einlagern, nullinitialisierten Speicher bereitstellen oder eine andere zulässige Abbildung korrigieren. Eine unzulässige Adresse oder ein verbotener Zugriff verursacht normalerweise eine Speicherzugriffsverletzung. Eine präsente Seite kann einen Schreibzugriff dennoch abweisen, wenn ihr Schutz das Schreiben verbietet.

Tabellenplatz und Speicherlesezugriffe zählen

Lineare Tabellen sind selbst für kleine Prozesse aufwendig. Bei virtuellen 32-Bit-Adressen und 4 KiB großen Seiten benötigt jede Tabelle 1.048.576 Einträge. Bei je 4 Byte sind das 4 MiB pro Prozess, einschließlich der Einträge für ungenutzte virtuelle Seiten. Hundert Prozesse benötigen allein für diese Tabellen 400 MiB.

Außerdem fügen sie jedem Speicherzugriff eine Suche hinzu. In einem einfachen Modell ohne Übersetzungscache liest der Prozessor einen PTE und dann die angeforderten Daten: zwei Speicherzugriffe. Gemeinsame Nutzung ist dennoch möglich: Zwei Prozesse können ihre getrennten virtuellen Seiten gezielt auf dieselbe PFN abbilden, etwa bei schreibgeschütztem Programmcode.

Wichtige Erkenntnisse

  • Eine lineare Tabelle ist ein über die VPN indiziertes Array.
  • PTE-Position = table base+VPN×entry size.
  • Physische Adresse = PFN×page size+offset.
  • Präsenz und Berechtigung beantworten unterschiedliche Fragen.
  • Die Tabellengröße hängt vom gesamten virtuellen Adressraum ab, einschließlich ungenutzter Seiten.
  • Getrennte Prozesstabellen können gezielt einen physischen Seitenrahmen gemeinsam nutzen.
2

Beschleunige die Adressübersetzung mit dem TLB

Würde jeder Zugriff über den Speicher übersetzt, wäre vor jedem eigentlichen Zugriff eine zusätzliche Suche nötig. Ein TLB hält kürzlich verwendete Übersetzungen nahe am Prozessor bereit. Sein Erfolg hängt neben der Kapazität auch von der Zugriffsreihenfolge ab, und sein Inhalt muss bei Prozesswechseln oder Änderungen an Abbildungen korrekt bleiben. Du verfolgst Treffer und Fehlzugriffe, schätzt die durchschnittliche Zugriffszeit ab und setzt zwischengespeicherte Übersetzungen mit der Arbeit des Betriebssystems in Beziehung.

2.1 TLB-Treffer, Fehlzugriffe und Lokalität

Ein Translation Lookaside Buffer, kurz TLB, ist ein kleiner Hardwarecache für Adressübersetzungen in der Speicherverwaltungseinheit (MMU). Er enthält kürzlich verwendete VPN-zu-PFN-Abbildungen und Zugriffsinformationen. Er speichert Übersetzungen zwischen, während ein Datencache Programmbytes enthält. Ein Programm kann in einem Cache einen Fehlzugriff und im anderen einen Treffer erzielen.

Treffer und Fehlzugriffe verfolgen

Bei einem TLB-Treffer erhält die MMU die PFN aus dem zwischengespeicherten Eintrag, prüft die Zugriffsberechtigungen und kombiniert die PFN mit dem unveränderten Offset. Sie muss die Seitentabelle nicht lesen. Auch bei einem Treffer muss der Speicherschutz durchgesetzt werden. Das Gültigkeitsbit des TLB gibt an, dass ein zwischengespeicherter Eintrag nutzbar ist; es sagt nicht aus, ob eine virtuelle Seite zum Adressraum des Prozesses gehört.

Bei einem TLB-Fehlzugriff muss das System die Übersetzung in der Seitentabelle suchen. Ist die Seite präsent und der Zugriff erlaubt, trägt es die Übersetzung ein und schließt den Zugriff ab oder wiederholt ihn. Ein Lesezugriff auf den Massenspeicher ist nicht nötig. Meldet die Tabelle dagegen eine fehlende Abbildung oder einen verbotenen Zugriff, muss das Betriebssystem einen Seitenfehler behandeln. Ein TLB-Fehlzugriff allein ist kein Seitenfehler.

Wiederverwendung anhand der Lokalität vorhersagen

TLBs können weit weniger Einträge aufnehmen, als es virtuelle Seiten gibt. Dennoch funktionieren sie gut, weil Programme Lokalität aufweisen. Räumliche Lokalität bedeutet, dass benachbarte Adressen zeitlich nah beieinander genutzt werden. Sobald eine Übersetzung zwischengespeichert ist, können viele Adressen innerhalb dieser Seite sie nutzen. Zeitliche Lokalität bedeutet, dass kürzlich genutzte Adressen wahrscheinlich erneut genutzt werden, etwa bei den Befehlen einer Schleife.

Betrachte 16.384 Ganzzahlen zu je vier Byte, die aufeinanderfolgend in einem an einer Seitengrenze ausgerichteten Array gespeichert sind. Bei 4 KiB großen Seiten enthält jede Seite 1.024 Ganzzahlen, das Array umfasst also 16 Seiten. Bei anfänglich leerem TLB und ohne andere störende Übersetzungen verursacht die erste Ganzzahl auf jeder Seite einen Fehlzugriff. Die nächsten 1.023 auf dieser Seite erzielen Treffer. Insgesamt gibt es 16 Fehlzugriffe und 16.368 Treffer, was eine Trefferquote von etwa 99,9 % ergibt.

Die Zugriffsreihenfolge verändert dieses Ergebnis. In C speichert int a[1024][1024] die Zeilen aufeinanderfolgend. Nimm Ganzzahlen zu je vier Byte, eine Ausrichtung an einer Seitengrenze, 4 KiB große Seiten und einen LRU-TLB mit 64 Einträgen an. Jede Zeile belegt eine Seite. Beim zeilenweisen Durchlaufen entsteht ein Fehlzugriff pro Zeile, also 1.024 Fehlzugriffe. Beim spaltenweisen Durchlaufen werden 1.024 verschiedene Seiten besucht, bevor wieder die erste erreicht wird. Deren Übersetzung wurde bereits verdrängt, sodass alle 1.048.576 Arrayzugriffe fehlschlagen. Die Größe des Arrays bleibt gleich; die Anzahl der Zugriffe bis zur Wiederverwendung ändert sich.

Durchschnittlichen Aufwand für Treffer und Fehlzugriffe berechnen

Das Zeitmodell muss angeben, wie viel Zeit ein Treffer und ein Fehlzugriff kosten. Der Speicher benötige 100 ns, die TLB-Abfrage keine zusätzliche Zeit und ein Fehlzugriff bei einer linearen Tabelle einen zusätzlichen Lesezugriff auf den Speicher. Ein Treffer kostet 100 ns und ein erfolgreich behandelter Fehlzugriff 200 ns. Bei einer Trefferquote von 98 %:

EAT=0,98(100)+0,02(200)=102 ns

Dieser Durchschnitt enthält in beiden Fällen den abschließenden Datenzugriff. Würde nur der zusätzliche Lesezugriff für den PTE als gesamter Aufwand des Fehlzugriffs gezählt, wäre der Gesamtaufwand zu niedrig angesetzt. Bei mehrstufigen Tabellen kann ein Fehlzugriff mehrere Tabellenlesezugriffe erfordern, sodass Lokalität noch wichtiger wird.

Wichtige Erkenntnisse

  • Der TLB speichert Übersetzungen und Berechtigungen, keine Programmdaten.
  • Auch bei einem Treffer werden Zugriffsberechtigungen durchgesetzt.
  • Ein TLB-Fehlzugriff kann ohne Seitenfehler behandelt werden.
  • Benachbarte Zugriffe nutzen dieselbe Übersetzung; wiederholte Zugriffe verwenden sie erneut.
  • Die Zugriffsreihenfolge kann TLB-Fehlzugriffsraten stark verändern.

2.2 Zwischengespeicherte Übersetzungen korrekt halten

Ein TLB-Fehlzugriff erfordert die Suche nach einer Übersetzung, doch Architekturen teilen diese Arbeit unterschiedlich auf. Bei einem hardwareverwalteten TLB, wie auf x86 und ARM, durchläuft die MMU die Seitentabelle ausgehend von der gewählten Tabellenwurzel. Die Hardware legt das Format fest, das sie durchlaufen kann. Ist die Abbildung nutzbar, füllt sie den Übersetzungscache, ohne bei einem gewöhnlichen Fehlzugriff eine Behandlungsroutine des Betriebssystems aufzurufen.

Ein softwareverwalteter TLB, wie er in klassischen MIPS- und SPARC-Entwürfen genutzt wird, löst bei einem Fehlzugriff eine Ausnahme aus. Eine Behandlungsroutine des Betriebssystems findet die Abbildung und trägt sie mit privilegierten Befehlen ein. Das gibt dem Betriebssystem mehr Freiheit beim Aufbau seiner Tabellen. Bei der Rückkehr aus dieser Ausnahme wird der Befehl mit dem Fehlzugriff wiederholt; bei der Rückkehr aus einem Systemaufruf wird normalerweise nach dem Aufruf fortgefahren.

Die Nachfüllroutine erreichbar halten

Die Behandlungsroutine für Fehlzugriffe benötigt zuverlässigen Zugriff auf ihre eigenen Befehle und Daten. Löst die Behandlung eines Fehlzugriffs innerhalb der Routine sofort dieselbe Art eines unbehandelten Fehlzugriffs aus, kann der Fortschritt ausbleiben. Entwürfe vermeiden dies durch nicht übersetzten Speicher oder dauerhaft fest zugewiesene Übersetzungen für den wesentlichen Code und die Daten der Routine.

Den richtigen Adressraum wählen

Kontextwechsel bringen ein weiteres Problem mit sich. Prozess A könnte VPN 7 auf Seitenrahmen 20 abbilden, während Prozess B VPN 7 auf Seitenrahmen 90 abbildet. Bliebe der nicht gekennzeichnete Eintrag von A nach dem Wechsel zu B erhalten, würde er B zum falschen Seitenrahmen führen. Das Laden der Seitentabellenwurzel von B allein macht eine zwischengespeicherte Abbildung ohne Kennung nicht sicher.

Eine Lösung ist, beim Wechsel die betreffenden TLB-Einträge zu invalidieren. Ihre Gültigkeitsbits werden zurückgesetzt, sodass der neue Prozess sie erneut füllen muss. Eine andere Lösung versieht Einträge mit einer Adressraumkennung (ASID). Bei der Suche müssen dann sowohl die virtuelle Seite als auch ihre Adressraumkennung übereinstimmen. Auf x86 heißt diese Kennung Prozesskontextkennung, kurz PCID. Einträge mehrerer Adressräume können im Cache bleiben, während die Hardware nur die zum aktuellen Kontext gehörenden auswählt. Die erneute Vergabe von Kennungen muss weiterhin so verwaltet werden, dass ein alter Eintrag nicht mit einem neuen Adressraum verwechselt werden kann.

Geänderte Abbildungen invalidieren

Auch eine Änderung eines PTE macht eine zwischengespeicherte Übersetzung ungültig. Das Betriebssystem entferne die Schreibberechtigung im Speicher, lasse aber einen beschreibbaren TLB-Eintrag bestehen. Der Prozessor könnte über diesen alten Eintrag weiterhin Schreibzugriffe erlauben. Das Betriebssystem muss betroffene Übersetzungen invalidieren. Auf einem Rechner mit mehreren Kernen muss jeder Kern mitwirken, der die Abbildung zwischengespeichert haben könnte. Diese Koordination heißt TLB-Shootdown.

Die Reichweite der Übersetzungen berechnen

Neben der Korrektheit ist auch die Kapazität entscheidend. Die TLB-Reichweite ist die Speichermenge, die durch die zwischengespeicherten Übersetzungen abgebildet wird:

reach=entries×page size

Ein TLB mit 64 Einträgen erreicht bei 4 KiB großen Seiten 256 KiB und bei 2 MiB großen Seiten 128 MiB. Die Reichweite beschreibt den durch Abbildungen abgedeckten Bereich, nicht die Kapazität des physischen Speichers. Reale Prozessoren können für verschiedene Seitengrößen getrennte TLB-Kapazitäten haben; diese Rechnung vergleicht daher eine feste Anzahl von Einträgen.

Ist ein TLB voll, ersetzt er eine Übersetzung. LRU bevorzugt kürzlich genutzte Einträge; die zufällige Ersetzung wählt ohne Berücksichtigung der letzten Nutzung. Ein wiederholter Durchlauf über eine Seite mehr, als hineinpasst, ist für LRU ungünstig, weil jede Übersetzung unmittelbar vor ihrer erneuten Nutzung verdrängt wird.

Wichtige Erkenntnisse

  • Die Hardware oder eine Behandlungsroutine des Betriebssystems kann einen TLB nachfüllen.
  • ASIDs unterscheiden identische VPNs, die zu verschiedenen Adressräumen gehören.
  • Wird ein PTE geändert, müssen veraltete zwischengespeicherte Übersetzungen invalidiert werden.
  • Ein TLB-Shootdown koordiniert die Invalidierung über mehrere Kerne hinweg.
  • Die Reichweite entspricht der Anzahl der Einträge mal der Seitengröße.
3

Verkleinere Seitentabellen

Große virtuelle Adressräume machen ein vollständiges Array von Seitenabbildungen unpraktisch. Verschiedene Seitentabellenstrukturen sparen Platz, indem sie Abbildungen unterschiedlich organisieren oder weglassen. Du vergleichst diese Möglichkeiten, verfolgst einen zweistufigen Durchlauf und überträgst dieselben Überlegungen zu Bitfeldern auf x86-64. Jede Struktur wägt den Speicher für Abbildungen gegen die Arbeit ab, die anfällt, wenn dem TLB eine Übersetzung fehlt; große Seiten verändern beide Seiten dieses Verhältnisses.

3.1 Alternativen zu einer vollständigen linearen Tabelle

Eine lineare Seitentabelle reserviert einen Eintrag für jede mögliche virtuelle Seite. Die meisten Prozesse nutzen nur einen kleinen Teil ihres Adressraums: Code und Heap liegen nahe dem einen Ende, der Stack nahe dem anderen, und eine große Lücke trennt sie. Eine Tabelle mit Millionen ungültiger Einträge verbraucht dennoch Speicher. Um diesen Aufwand zu verringern, muss die Seitengröße, die Tabellenorganisation oder beides geändert werden.

Die Seitenanzahl verringern

Größere Seiten verringern die Anzahl der VPNs. Bei einem 32-Bit-Adressraum und 16 KiB großen Seiten bilden 14 Bit den Offset und 18 Bit die VPN. Eine lineare Tabelle benötigt dann 262.144 Einträge. Bei je 4 Byte belegt sie 1 MiB, gegenüber 4 MiB bei 4 KiB großen Seiten. Das spart Tabellenplatz, obwohl der Prozess weiterhin 4 GiB virtuelle Bytes adressieren kann.

Der Aufwand verlagert sich. Bei einer kleinen Zuweisung kann mehr Platz auf der letzten Seite verschwendet werden, und beim Einlagern einer Seite werden mehr Bytes übertragen. Eine größere Seitengröße unterscheidet nicht zwischen einem dicht genutzten Teil des Adressraums und einer ungenutzten Lücke; sie verringert lediglich für beide die Anzahl der Einträge.

Lücken mit getrennten Segmenttabellen aussparen

Eine Kombination aus Segmentierung und Seitenverwaltung gibt Code, Heap und Stack eigene Seitentabellen. Jedes Segment hat eine Tabellenbasis und eine Schranke für seine Seitennummern. Die Lücke zwischen den Segmenten benötigt keine Einträge. Die Übersetzung wählt zuerst das Segment aus, prüft seine Schranke und sucht dann die Seite innerhalb dieses Segments.

Dieser Ansatz setzt eine brauchbare Aufteilung in Segmente voraus. Seine Tabellen können unterschiedlich lang sein und zusammenhängenden physischen Speicher benötigen, wodurch für die Tabellen selbst erneut externe Fragmentierung entsteht. Die Datenseiten des Prozesses bleiben gleich groß; die fragmentierten Objekte sind nun die Seitentabellen variabler Größe.

Stattdessen physische Seitenrahmen indizieren

Eine invertierte Seitentabelle ändert, was ein Eintrag beschreibt. Sie hat für den gesamten Rechner einen Eintrag pro physischem Seitenrahmen und erfasst den belegenden Prozess und die VPN. Bei 16 GiB physischem Speicher und 4 KiB großen Seitenrahmen benötigt sie 4.194.304 Einträge, unabhängig davon, wie viele Prozesse große virtuelle Adressräume haben. Um aus dieser Anzahl die Gesamtgröße in Byte zu berechnen, wird noch die Eintragsgröße benötigt.

Eine gewöhnliche Tabelle nutzt die VPN direkt als Arrayindex. Eine invertierte Tabelle sucht stattdessen nach dem Paar aus Adressraumidentität und VPN. Eine Hashstruktur kann dies effizient machen, bei Kollisionen können aber zusätzliche Suchschritte nötig sein. Gemeinsam genutzte Seitenrahmen erfordern ebenfalls eine zusätzliche Behandlung, weil ein Seitenrahmen mehrere virtuelle Namen haben kann. Hashbasierte Seitentabellen, wie sie in PowerPC-Systemen verwendet wurden, nutzen verwandte Suchprinzipien; eine hashbasierte Tabelle ist nicht zwangsläufig eine streng invertierte Tabelle mit einem Eintrag pro Seitenrahmen.

Tabellen nach genutztem Bereich zuweisen

Mehrstufige Seitentabellen behalten die indizierte Suche bei und weisen Tabellenseiten niedrigerer Stufen nur dort zu, wo Abbildungen benötigt werden. Ein Eintrag einer höheren Stufe kann einen ganzen ungenutzten Bereich kennzeichnen, ohne dessen Tabelle niedrigerer Stufe zuzuweisen. Dies ist die übliche Lösung auf modernen Systemen. Bei dünn besetzten Adressräumen ist die Ersparnis am größten, während ein TLB-Fehlzugriff mehr Suchschritte erfordert.

Vergleiche die Verfahren anhand der Frage, was ihre Größe bestimmt. Eine lineare Tabelle wächst mit der Anzahl virtueller Seiten pro Prozess. Eine invertierte Tabelle wächst mit der Anzahl physischer Seitenrahmen im System. Eine Hierarchie wächst mit den für die Abbildungen benötigten Tabellenzweigen. Keine dieser Anzahlen entspricht der Anzahl der Bytes von Programmdaten, die gerade im Speicher liegen.

Wichtige Erkenntnisse

  • Größere Seiten verringern die Anzahl der PTEs, können aber die interne Fragmentierung erhöhen.
  • Getrennte Segmenttabellen sparen Lücken aus, können aber Tabellenzuweisungen variabler Größe erfordern.
  • Eine invertierte Tabelle hat für das System einen Eintrag pro physischem Seitenrahmen.
  • Die Suche in einer invertierten Tabelle benötigt eine Adressraumidentität und eine VPN.
  • Eine Hierarchie lässt Tabellen niedrigerer Stufen für ungenutzte Adressbereiche weg.

3.2 Eine zweistufige Seitentabelle durchlaufen

Eine zweistufige Seitentabelle unterteilt eine große lineare Tabelle in seitengroße Stücke. Ein Seitenverzeichnis zeigt auf diese Stücke. Das Verzeichnis wird zugewiesen, eine Seitentabellenseite der unteren Stufe aber nur dann, wenn ihr Bereich Abbildungen benötigt. Ein fehlender Verzeichniseintrag kann einen ganzen ungenutzten Bereich darstellen.

Die 10/10/12-Aufteilung herleiten

Nimm eine virtuelle 32-Bit-Adresse, 4 KiB große Seiten und 4 Byte große Einträge. Jede Seitentabellenseite enthält 1.024 Einträge, sodass ein 10-Bit-Index einen Eintrag auswählt. Die Adresse wird in 10 Verzeichnisbits, 10 Tabellenbits und 12 Offsetbits aufgeteilt. Jede Tabelle der unteren Stufe bildet 1.024 Seiten ab und deckt 4 MiB virtuelle Adressen ab. Auch das Verzeichnis hat 1.024 Einträge und belegt eine 4 KiB große Seite.

Verzeichnis- und Tabelleneinträge verfolgen

Der Durchlauf folgt physischen Zeigern:

  1. Addiere directory index×4 zur physischen Basis des Verzeichnisses. Lies diesen Seitenverzeichniseintrag (PDE).
  2. Zeigt er auf eine Tabellenseite, multipliziere seine PFN mit 4.096, um die physische Basis dieser Tabelle zu erhalten.
  3. Addiere table index×4 und lies den PTE.
  4. Prüfe die Abbildung auf der untersten Stufe und kombiniere ihre PFN mit dem Offset.

Der PDE zeigt auf eine Tabelle, während der PTE auf die angeforderte Datenseite zeigt. Wer diese Rollen verwechselt, leitet einen Zugriff in den Speicher der Seitentabelle statt zu den Programmdaten.

Für die virtuelle Adresse 0x00803ABC ist der Verzeichnisindex 2, der Tabellenindex 3 und der Offset 0xABC. Verzeichniseintrag 2 zeige auf Seitenrahmen 0xA1. Dessen Tabelle beginnt bei 0xA1000. Eintrag 3 liegt 12 Byte nach Tabellenbeginn bei 0xA100C. Enthält der erlaubte, präsente PTE die PFN 0x2F3C4, lautet die Datenadresse 0x2F3C4ABC.

Beachte die zwei unterschiedlichen Faktoren. Ein Tabellenindex zählt Einträge, multipliziere ihn also mit der Eintragsgröße. Eine PFN zählt Seitenrahmen, multipliziere sie also mit der Seitengröße. Der Offset zählt Bytes innerhalb der letzten Seite und benötigt keinen der beiden Faktoren. Die Verzeichnisbasis und die beim Durchlauf verwendeten Zeiger sind physische Adressen; virtuelle Zeiger würden eine weitere Übersetzung erfordern, um diese Übersetzung durchzuführen.

Tabellen und Lesezugriffe für die Suche zählen

Der Speicherbedarf hängt davon ab, wie die Abbildungen angeordnet sind. Ein Prozess nutze die unteren 8 MiB seines 4 GiB großen Adressraums und die oberen 4 MiB; beide Bereiche seien an Verzeichnisgrenzen ausgerichtet. Der untere Bereich benötigt zwei Tabellenseiten, der obere eine. Mit dem Verzeichnis ergibt das vier Seiten oder 16 KiB statt einer 4 MiB großen linearen Tabelle. Würde dieselbe Anzahl an Datenseiten dünn über viele Verzeichnisbereiche verteilt abgebildet, könnten mehr Tabellenseiten nötig sein.

Im grundlegenden Lehrmodell bedeutet ein ungültiger PDE, dass keine Seite in seinem 4-MiB-Bereich zum Adressraum gehört. Der Durchlauf endet, ohne einen PTE zu lesen. Vollständige Betriebssysteme können fehlende Einträge auch für verzögerte Speicherzuweisung nutzen. Daher entscheiden ihre Softwareaufzeichnungen über die Bedeutung eines aus Sicht der Hardware nicht präsenten Eintrags.

Die Hierarchie spart Platz, indem sie bei einem TLB-Fehlzugriff zusätzliche Arbeit verursacht. Ein zweistufiger Durchlauf ohne zwischengespeicherte Einträge liest vor dem Datenzugriff einen PDE und einen PTE: insgesamt drei Speicherlesezugriffe gegenüber zwei bei einer linearen Tabelle. Ein TLB-Treffer umgeht diese Tabellenlesezugriffe. Das macht eine hohe Trefferquote besonders wertvoll, je tiefer die Hierarchie wird.

Wichtige Erkenntnisse

  • Die 10/10/12-Aufteilung ergibt sich aus 4 KiB großen Seiten und 4 Byte großen Einträgen.
  • Ein PDE verweist auf eine Tabellenseite; ein PTE verweist auf einen Datenseitenrahmen.
  • Multipliziere Indizes mit der Eintragsgröße und PFNs mit der Seitengröße.
  • Zähle sowohl das Verzeichnis als auch die zugewiesenen Tabellenseiten der unteren Stufe.
  • Ein TLB-Fehlzugriff verursacht zusätzliche Tabellenlesezugriffe; ein Treffer umgeht den Durchlauf.
  • Dünn besetzte Abbildungen sparen am meisten, wenn sie sich wenige Tabellenseiten teilen.

3.3 Mehrstufige Tabellen und große Speicherseiten auf x86-64

Die Anzahl der Tabellenstufen ergibt sich aus drei Größen: der implementierten Breite virtueller Adressen, der Seitengröße und der Eintragsgröße. Berechne zuerst die Breite des Offsets. Berechne dann, wie viele Einträge auf eine Tabellenseite passen und wie viele Bits einen Eintrag auswählen. Teile schließlich die übrigen VPN-Bits in Indexfelder auf und runde die Anzahl der Stufen bei Bedarf auf.

Die vier Stufen herleiten

Bei der vierstufigen Seitenverwaltung auf x86-64 beträgt die implementierte Breite virtueller Adressen 48 Bit. Eine 4 KiB große Seite ergibt 12 Offsetbits. Bei 8 Byte pro Eintrag passen 512 Einträge auf eine Tabellenseite, die durch 9 Bit ausgewählt werden. Die VPN hat 36 Bit, sodass vier 9-Bit-Indizes nötig sind. Ein erfolgreicher Durchlauf ohne zwischengespeicherte Einträge folgt vier Einträgen und greift dann auf die Daten zu.

Die Stufen heißen PML4, Seitenverzeichniszeigertabelle, Seitenverzeichnis und Seitentabelle. Ihre Indizes belegen die Bits 47–39, 38–30, 29–21 und 20–12. CR3 bezeichnet die physische Wurzel. Linux nennt die entsprechenden Stufen PGD, PUD, PMD und PTE; seine allgemeine Hierarchie enthält eine P4D-Stufe, die zusammengefaltet wird, wenn die Architektur nur vier Stufen verwendet.

Adressbreite und RAM unterscheiden

Ein implementierter 48-Bit-Adressraum enthält 256 TiB adressierbare Bytes. Adressen werden weiterhin in 64-Bit-Werten gehalten: In der gewöhnlichen kanonischen Form wiederholen die Bits oberhalb von Bit 47 dessen Wert. Die gültigen unteren und oberen Bereiche sind durch eine nicht kanonische Lücke getrennt. Die Bezeichnung als 48-Bit-Adressraum bedeutet weder, dass jedes 64-Bit-Muster nutzbar ist, noch dass ein Prozess 256 TiB RAM erhält.

Eine lineare Tabelle wäre riesig. Es gibt 236 virtuelle Seiten; multipliziert mit 8 Byte pro Eintrag ergibt das 239 Byte oder 512 GiB pro Prozess. Eine Hierarchie stellt ungenutzte Bereiche durch fehlende Zweige dar, statt all diese Einträge zu reservieren.

Prozessoren mit Unterstützung für fünfstufige Seitenverwaltung können 57 implementierte virtuelle Adressbits nutzen, wenn dieser Modus aktiviert ist. Oberhalb der PML4 kommt ein weiterer 9-Bit-Index hinzu. Das ergibt 128 PiB adressierbare Bytes und einen weiteren möglichen Tabellenlesezugriff. Die oberen Bits einer kanonischen Adresse wiederholen dann Bit 56. Die Prozessorunterstützung und der aktivierte Seitenverwaltungsmodus bestimmen, welche Breite gilt.

Den Durchlauf bei einer großen Seite beenden

Große Speicherseiten beenden den Durchlauf frühzeitig. Auf x86-64 kann ein Eintrag auf Seitenverzeichnisebene direkt eine 2 MiB große Seite abbilden, wobei 21 Offsetbits bleiben. Ein Seitenverzeichniszeigereintrag kann eine 1 GiB große Seite abbilden, wobei 30 Offsetbits bleiben. Niederwertige Bits, die sonst Einträge niedrigerer Stufen auswählen würden, wählen nun Bytes innerhalb dieser großen Seite aus.

Das verringert sowohl die Länge des Durchlaufs als auch die Anzahl der für einen bestimmten Bereich benötigten Übersetzungen. Es erhöht die TLB-Reichweite, was Datenbanken und anderen großen Arbeitslasten helfen kann. Die physische Abbildung benötigt einen passend ausgerichteten zusammenhängenden Bereich von Seitenrahmen, und eine teilweise genutzte große Seite kann erheblich mehr Speicher verschwenden. Linux unterstützt die ausdrückliche Zuweisung großer Speicherseiten und transparente große Speicherseiten; die unterstützten Größen hängen von der Architektur ab.

Die einfache Aufwandsrechnung setzt voraus, dass keine Tabelleneinträge zwischengespeichert sind. Reale Prozessoren speichern Seitenverwaltungsstrukturen zwischen und Tabellenlesezugriffe können in gewöhnlichen Caches Treffer erzielen. Vier Stufen bedeuten daher nicht, dass bei jedem TLB-Fehlzugriff vier Verzögerungen durch Hauptspeicherzugriffe auftreten. Sie beschreiben die Abhängigkeitskette und deren Aufwand ohne zwischengespeicherte Einträge.

Wichtige Erkenntnisse

  • Berechne die Indexbreite aus der Anzahl der Einträge pro Tabellenseite.
  • Die vierstufige Seitenverwaltung auf x86-64 teilt 36 VPN-Bits in vier 9-Bit-Indizes auf.
  • Die implementierte Breite virtueller Adressen ist kleiner als der 64-Bit-Wert, der die Adresse enthält.
  • Ein Eintrag für eine große Speicherseite beendet den Durchlauf frühzeitig und lässt mehr Bits für den Offset.
  • Caches für den Seitentabellendurchlauf verringern den typischen Aufwand, ohne die Hierarchie zu verändern.
4

Nutze durch Auslagerung mehr Speicher als den verfügbaren physischen Speicher

Ein Prozess kann mehr virtuelle Seiten besitzen, als er gerade im physischen Speicher hält. Das Betriebssystem stellt Seiteninhalte bereit, wenn ein Zugriff sie benötigt, manchmal aus dem Auslagerungsbereich und manchmal ganz ohne Lesezugriff auf den Massenspeicher. Du verfolgst den Befehl, der den Seitenfehler ausgelöst hat, durch die Behandlungsroutine und zurück zur Ausführung, schätzt den Aufwand schwerer Seitenfehler ab und erfährst, warum Seitenfehler auch nützliche Funktionen wie nullinitialisierten Speicher und Copy-on-Write unterstützen.

4.1 Eine Seite vom Auslagerungsbereich zurück in den Speicher verfolgen

Virtuelle Adressräume können zusammen größer sein als der physische Speicher, weil nicht jede Seite ständig im Speicher liegen muss. Der Auslagerungsbereich speichert verdrängte Seiteninhalte auf einer Festplatte oder SSD. Linux kann eine Auslagerungspartition oder -datei nutzen; Windows verwendet eine Auslagerungsdatei. Der physische Speicher hält die aktuell eingelagerten Seiten.

Die Seitenverwaltung verschiebt einzelne Seiten. Beim Auslagern wird eine Seite auf einen Hintergrundspeicher geschrieben, bevor ihr Seitenrahmen erneut verwendet wird; beim Einlagern wird sie zurückgelesen. Historisch bezeichnete Auslagerung auch das Verschieben eines ganzen Prozesses. Heute ist damit häufig das Verschieben von Seiten gemeint. Achte daher darauf, was verschoben wird.

Die fehlende Abbildung deuten

Das Präsenzbit eines PTE teilt der Hardware mit, ob eine Abbildung auf einen Seitenrahmen im physischen Speicher verfügbar ist. Wurde eine gültige Seite ausgelagert, hält das Betriebssystem fest, wo ihr Inhalt zu finden ist, entweder in von der Software verwendeten Bits des Eintrags oder in separaten Metadaten. Ein Präsenzbit mit dem Wert null verweist nicht von sich aus auf den Auslagerungsbereich: Es kann auch nicht zugewiesenen oder verzögert zugewiesenen Speicher bezeichnen.

Ein Seitenfehler ist eine Ausnahme, die ein Zugriff auslöst, der mit der aktuellen Abbildung nicht abgeschlossen werden kann. Er kann eine fehlende Abbildung oder eine Schutzverletzung melden. Die Behandlungsroutine entscheidet, ob der Zugriff zulässig ist und wie er behandelt wird. Sie kann gespeicherte Bytes laden, nullinitialisierten Speicher bereitstellen, einen bereits eingelagerten Seitenrahmen abbilden oder eine private Kopie erstellen. Ein tatsächlich ungültiger Zugriff führt normalerweise zu einer Speicherzugriffsverletzung.

Eine gespeicherte Seite wiederherstellen

Verfolge einen Lesezugriff auf eine ausgelagerte Seite bei Seiten mit 1.024 Byte:

  1. Die virtuelle Adresse 5.000 ergibt VPN 4 und Offset 904.
  2. Der TLB hat keine nutzbare Übersetzung. Der Seitentabellendurchlauf findet die gültige Seite als nicht präsent; Softwareaufzeichnungen verweisen auf Auslagerungsblock 37.
  3. Die Behandlungsroutine beschafft Seitenrahmen 9. Ist kein Seitenrahmen frei, muss zunächst Speicher zurückgewonnen werden.
  4. Das Betriebssystem liest Block 37 in Seitenrahmen 9. Der Prozess, der den Seitenfehler ausgelöst hat, wartet; ein anderer ausführbarer Prozess kann die CPU nutzen.
  5. Nach Abschluss trägt das Betriebssystem PFN 9 ein, markiert die Abbildung als präsent und macht den Prozess ausführbar.
  6. Der Befehl wird wiederholt. Die Übersetzung führt nun zur physischen Adresse 10.120.

Sobald die Bytes verfügbar sind, setzt der Befehl seine vorgesehene Operation fort. Würde die Ausführung nach dem fehlgeschlagenen Befehl fortgesetzt, ginge ein Lese- oder Schreibzugriff verloren. Der Prozess kann eine Verzögerung bemerken, seine virtuelle Adresse hat sich aber nicht geändert.

Den Seitenfehler einordnen und Bedarf vorhersagen

Ein schwerer Seitenfehler benötigt einen Lesezugriff auf den Massenspeicher. Ein leichter Seitenfehler wird ohne diese Ein-/Ausgabe behoben, etwa durch Bereitstellen eines mit Nullen gefüllten Seitenrahmens oder durch Abbilden eines bereits eingelagerten Seitenrahmens. Viele leichte Seitenfehler bedeuten daher nicht dieselben Gerätezugriffe wie ebenso viele schwere Seitenfehler. Unter Linux meldet /usr/bin/time -v für einen Befehl beide Anzahlen.

Bei der Seitenanforderung bei Bedarf wird eine Seite erst beim Zugriff bereitgestellt. So kann ein Programm beginnen, ohne seinen gesamten Inhalt zu laden. Beim Vorabladen werden Seiten eingelagert, die voraussichtlich bald benötigt werden. Gute Vorhersagen vermeiden spätere Wartezeiten; schlechte verbrauchen Bandbreite und Speicher für Seiten, die nie genutzt werden.

Halte die Ereignisse auseinander: Ein TLB-Fehlzugriff erfordert die Suche nach einer Übersetzung. Bei einem Seitenfehler muss das Betriebssystem ein Abbildungsproblem behandeln. Eine Speicherzugriffsverletzung ist eine übliche Folge eines verbotenen Zugriffs. Bei einer eingelagerten Seite, auf die der Zugriff erlaubt ist, kann ein TLB-Fehlzugriff auftreten, ohne dass eines der beiden anderen Ereignisse eintritt.

Wichtige Erkenntnisse

  • Nicht präsent bedeutet nicht automatisch, dass eine Seite im Auslagerungsbereich gespeichert ist.
  • Ein schwerer Seitenfehler benötigt einen Lesezugriff auf den Massenspeicher; ein leichter nicht.
  • Ein Seitenfehler bei einer ausgelagerten Seite blockiert den Prozess, bis der Lesevorgang abgeschlossen ist.
  • Die Behandlungsroutine korrigiert die Abbildung und wiederholt den Befehl, der den Seitenfehler ausgelöst hat.
  • Die Seitenanforderung bei Bedarf wartet auf die Nutzung; das Vorabladen sagt zukünftige Nutzung voraus.
  • TLB-Fehlzugriff, Seitenfehler und Speicherzugriffsverletzung sind verschiedene Ereignisse.

4.2 Seitenfehleraufwand, veränderte Seiten und freie Seitenrahmen

Ein seltener Lesezugriff auf den Massenspeicher kann die durchschnittliche Speicherzugriffszeit dominieren. Dabei sei p die Wahrscheinlichkeit, dass ein Zugriff einen schweren Seitenfehler auslöst, M die gewöhnliche Zugriffszeit und F die gesamte Behandlungszeit für einen Zugriff mit Seitenfehler. Ein einfaches Modell mit zwei Fällen ergibt:

EAT=(1−p)M+pF

Dabei umfasst F den Lesezugriff auf den Massenspeicher, die Arbeit des Betriebssystems und das gegebenenfalls nötige Zurückschreiben einer veränderten Opferseite. Es ist die Gesamtzeit für den Seitenfehlerfall, nicht nur ein kleiner Zusatzaufwand für die PTE-Suche.

Die Wirkung seltener Seitenfehler berechnen

Ein gewöhnlicher Zugriff dauere 100 ns und ein schwerer Seitenfehler insgesamt 8 ms. Rechne 8 ms vor der Mittelwertbildung in 8.000.000 ns um. Bei einem Seitenfehler pro 1.000 Zugriffe:

EAT=0,999(100)+0,001(8000000)=8099,9 ns

Das ist etwa das 81-Fache der gewöhnlichen Zugriffszeit. Eine Seitenfehlerrate von 0,1 % klingt gering, aber ein Seitenfehler kostet so viel Zeit wie viele Tausend Speicherzugriffe.

Für eine Verlangsamung unter 10 % muss der Durchschnitt unter 110 ns liegen. Umstellen ergibt:

p<110−1008000000−100≈1,25×10−6

Das ist weniger als ungefähr ein schwerer Seitenfehler pro 800.000 Zugriffe. Die zulässige Wahrscheinlichkeit hängt von der angenommenen Behandlungszeit ab. Bei einer beispielhaften SSD-Behandlungszeit von 0,1 ms ist die Wartezeit kürzer, beträgt aber immer noch 100.000 ns: tausend Zugriffe zu je 100 ns.

Seitenrahmen bereithalten

Das Betriebssystem versucht, Seitenrahmen bereitzuhalten, bevor ein Seitenfehler einen benötigt. Ein Seitendämon im Hintergrund, etwa kswapd unter Linux, gewinnt Speicher zurück, wenn die Anzahl freier Seitenrahmen unter eine niedrige Wasserstandsmarke fällt. Im grundlegenden Wasserstandsmarkenmodell arbeitet er weiter, bis eine hohe Wasserstandsmarke erreicht ist. So muss nicht bei jedem Seitenfehler erst eine Opferseite ausgewählt und vorbereitet werden.

Änderungen vor der erneuten Nutzung sichern

Eine veränderte Seite enthält Änderungen seit dem letzten Zurücksetzen des Änderungszustands. Bevor ihr Seitenrahmen erneut genutzt wird, müssen diese Änderungen gesichert werden, sofern die Seite Teil des Speichers eines Prozesses bleibt. Das Zurückschreiben kann im Hintergrund erfolgen. Nach erfolgreichem Zurückschreiben kann die eingelagerte Seite als unverändert markiert werden; ein späterer Schreibzugriff verändert sie erneut.

Eine unveränderte Seite darf nur dann ohne erneuten Schreibvorgang verworfen werden, wenn ihr Inhalt wiederhergestellt oder neu erzeugt werden kann. Unveränderter Programmcode kann erneut aus der ausführbaren Datei gelesen werden. Eine Seite mit einer aktuellen Kopie im Auslagerungsbereich kann von dort gelesen werden. Eine unveränderte anonyme Seite ohne wiederherstellbare Kopie darf nicht einfach vergessen werden. Das Änderungsbit allein belegt nicht, dass eine Kopie auf einem Hintergrundspeicher existiert.

Muss bei einem Seitenfehler synchron eine veränderte Seite verdrängt werden, kann ein Schreibvorgang für die Opferseite und anschließend der angeforderte Lesevorgang nötig sein. Wird eine unveränderte, wiederherstellbare Opferseite bevorzugt, entfällt dieser Schreibvorgang im kritischen Ablauf der Seitenfehlerbehandlung. Die Bündelung von Seitentransfers fasst mehrere Schreibvorgänge zu größeren Übertragungen zusammen, was besonders bei Festplatten nützlich ist.

Wichtige Erkenntnisse

  • Rechne vor der Mittelwertbildung alle Zeitwerte in dieselbe Einheit um.
  • Eine geringe Wahrscheinlichkeit für schwere Seitenfehler kann die effektive Zugriffszeit dominieren.
  • Ein Seitendämon im Hintergrund hält einen Vorrat freier Seitenrahmen bereit.
  • Der Änderungszustand erfasst Schreibzugriffe seit dem letzten Zurücksetzen, nicht einfach seit dem Laden.
  • Eine unveränderte Seite darf nur sicher verworfen werden, wenn ihr Inhalt wiederhergestellt oder neu erzeugt werden kann.
  • Das Zurückschreiben im Hintergrund kann einen Schreibvorgang für die Opferseite aus dem Ablauf der Seitenfehlerbehandlung entfernen.

4.3 Nullinitialisierung bei Bedarf, gemeinsamer Code und Copy-on-Write

Seitenfehler sind nützliche Stellen, an denen Arbeit aufgeschoben werden kann. Eine Abbildung kann zu einem Prozess gehören, bevor das Betriebssystem ihr einen privaten Seitenrahmen zuweist. Bei der Nullinitialisierung bei Bedarf erhält der Prozess beim ersten Zugriff mit Nullen gefüllten Speicher. Dadurch müssen nicht alle reservierten Seiten im Voraus zugewiesen und mit Nullen gefüllt werden. Die Nullinitialisierung verhindert außerdem, dass ein Prozess Datenreste eines anderen Prozesses sieht.

Der Seitenfehler benötigt keinen Lesezugriff auf die Festplatte, weil der benötigte Inhalt aus Nullen und nicht aus gespeicherten Bytes besteht. Es ist ein leichter Seitenfehler. Ein System kann die Implementierung optimieren, aber das sichtbare Ergebnis bleibt: Neu bereitgestellter Speicher enthält die erforderlichen Nullen.

Schreibgeschützten Code gemeinsam nutzen

Getrennte Seitentabellen erfordern keine getrennten Kopien jeder Seite. Zwei PTEs können dieselbe PFN enthalten, auch bei unterschiedlichen virtuellen Adressen. Prozesse, die dasselbe Programm ausführen, können schreibgeschützten Code gemeinsam nutzen. Fünfzig Prozesse, die einen Editor nutzen, können auf eine eingelagerte Kopie jeder gemeinsam genutzten Codeseite verweisen. Der Schreibschutz verhindert, dass ein Prozess diese Befehle für alle verändert.

Beim Schreiben private Inhalte erzeugen

Copy-on-Write (COW) ermöglicht die anfängliche gemeinsame Nutzung von Seiten, die später möglicherweise private Inhalte benötigen. Nach fork() haben Eltern- und Kindprozess getrennte Adressräume, können sich aber ihre gewöhnlichen privaten Datenseitenrahmen teilen. Das Betriebssystem markiert ihre beschreibbaren privaten Abbildungen als schreibgeschützt und hält fest, dass es sich um COW-Abbildungen handelt. Lesezugriffe gelingen ohne Kopieren.

Wenn einer der Prozesse erstmals eine gemeinsam genutzte COW-Seite beschreibt, verstößt der Schreibzugriff gegen deren aktuellen Schutz und löst einen Seitenfehler aus. Die Behandlungsroutine erkennt den zulässigen COW-Fall, weist einen privaten Seitenrahmen zu, kopiert die Seite, richtet für den schreibenden Prozess eine beschreibbare Abbildung ein und wiederholt den Befehl. Der andere Prozess behält den ursprünglichen Inhalt. Das Betriebssystem muss außerdem dafür sorgen, dass zwischengespeicherte Übersetzungen mit den geänderten Abbildungen übereinstimmen.

Ein Prozess habe 400 MiB eingelagerte private Daten. Sein Kindprozess beschreibe drei verschiedene 4 KiB große Seiten, bevor er exec() aufruft. Die durch diese Schreibzugriffe kopierten Daten umfassen insgesamt 12.288 Byte. Wiederholte Schreibzugriffe auf eine bereits private Seite verursachen nicht jedes Mal eine neue Kopie der ganzen Seite. Die Erstellung der Seitentabellen und die übrige Prozessverwaltung verursachen weiterhin Aufwand; COW vermeidet das sofortige Kopieren aller 400 MiB Daten.

Das ist besonders nützlich, wenn auf fork() bald exec() folgt, das den Adressraum des Kindprozesses ersetzt. Würden alle alten Daten sofort kopiert, entstünde Arbeit, deren Ergebnis der Kindprozess möglicherweise nie nutzt. Absichtlich gemeinsam genutzte beschreibbare Abbildungen haben eine andere Semantik: COW beschreibt private Abbildungen, die sich bei einem Schreibzugriff unterscheiden müssen.

Ein schreibgeschützter PTE allein bedeutet nicht, dass COW vorliegt. Ein Schreibzugriff auf tatsächlich schreibgeschützten Programmcode ist ein Fehler; ein Schreibzugriff auf eine durch COW geschützte Datenseite kann ermöglicht werden. Softwareaufzeichnungen unterscheiden die Fälle, sodass dieselbe Schutzausnahme der Hardware entweder zu einer erfolgreichen Wiederholung oder zu einer Speicherzugriffsverletzung führen kann.

Kernelabbildungen schützen

Auch Kernelabbildungen nutzen Schutzmechanismen. Ein herkömmlicher Entwurf bildet Kernelspeicher mit ausschließlichem Kernelzugriff in den Adressraum jedes Prozesses ab. So kann der Kernel betreten werden, ohne eine vollständig andere Abbildung auszuwählen. Code im Benutzermodus kann nicht auf diese Seiten zugreifen, nur weil sie Adressen haben. Die Kernel-Seitentabellenisolation, die auf betroffenen Systemen eingeführt wurde, nachdem Meltdown 2018 öffentlich bekannt wurde, entfernt die meisten Kernelabbildungen, während Benutzercode läuft, und wechselt beim Eintritt in den Kernel die Abbildungen.

Wichtige Erkenntnisse

  • Bei Bedarf nullinitialisierter Speicher benötigt keinen Lesezugriff auf den Massenspeicher und darf keine alten Daten offenlegen.
  • Verschiedene Seitentabellen können denselben schreibgeschützten Codeseitenrahmen abbilden.
  • COW ermöglicht die gemeinsame Nutzung privater Daten, bis ein Schreibzugriff eine private Kopie erfordert.
  • Die Behandlungsroutine unterscheidet COW anhand von Softwareaufzeichnungen von einem verbotenen Schreibzugriff.
  • COW vermeidet das Kopieren von Daten, die ein Kindprozess bald durch exec verwirft.
5

Wähle Seitenersetzungsstrategien und verhindere Seitenflattern

Ist für eine benötigte Seite kein Seitenrahmen frei, muss das Betriebssystem auswählen, was entfernt wird. Diese Wahl verändert zukünftige Seitenfehlerraten. Doch selbst eine gute Strategie kann nicht alle aktiven Seiten im Speicher halten, wenn der Bedarf zu hoch ist. Du vergleichst Strategien anhand von Referenzfolgen, nutzt Hardwarebits zur Annäherung an die letzte Nutzung und setzt die Arbeitsmenge eines Prozesses mit der Zuweisung von Seitenrahmen in Beziehung. Abschließend erkennst du, wann wiederholte Seitentransfers nützlichen Fortschritt verhindern.

5.1 Fehlzugriffe zählen und die optimale Opferseite finden

Eine Seitenersetzungsstrategie wählt eine eingelagerte Seite zur Verdrängung, wenn für eine benötigte Seite kein Seitenrahmen frei ist. Der physische Speicher dient als Cache für Seiteninhalte. Die Strategie versucht, Seiten zu behalten, deren zukünftige Nutzung teure Seitenfehler vermeidet. Ein Fehlzugriff bei der Seitenersetzung ist ein abstraktes Ereignis, bei dem eine Seite nicht im Speicher liegt; ob Ein-/Ausgabe nötig ist, hängt von der Herkunft des fehlenden Inhalts ab.

Treffer und Fehlzugriffe erfassen

Vergleiche Strategien mit derselben Referenzfolge, derselben Anzahl an Seitenrahmen und demselben Ausgangszustand. Eine Referenzfolge führt Seitennummern in der Reihenfolge der Zugriffe auf. Frage bei jedem Zugriff zuerst, ob die Seite eingelagert ist. Falls ja, notiere einen Treffer. Andernfalls notiere einen Fehlzugriff, lade die Seite und verdränge nur dann eine Opferseite, wenn der Speicher bereits voll ist.

Erste Zugriffe sind Fehlzugriffe, auch wenn noch Seitenrahmen frei sind. Diese Erstzugriffsfehler lassen sich durch die Wahl einer anderen Opferseite nicht vermeiden. Spätere Fehlzugriffe aufgrund unzureichender Kapazität sind Kapazitätsfehler. Bei der Seitenersetzung gibt es keine Platzierungskonflikte: Eine Seite kann jeden Seitenrahmen belegen. Konfliktfehler gehören zu Caches mit eingeschränkter Platzierung, nicht zu diesem vollständig flexiblen Seitenrahmenmodell.

Die am weitesten entfernte zukünftige Nutzung wählen

Die optimale Strategie, OPT oder MIN, wählt die Seite, deren nächste Nutzung am weitesten in der Zukunft liegt. Eine Seite, die nie wieder genutzt wird, ist eine ideale Opferseite. Dies ergibt für eine bekannte Referenzfolge die wenigsten Fehlzugriffe, doch ein laufendes Betriebssystem kann beliebige zukünftige Zugriffe nicht kennen. OPT dient als Maßstab für praktische Strategien.

Verwende drei zunächst leere Seitenrahmen und die Folge 1, 2, 3, 1, 4, 1, 5, 2, 1, 4, 3, 1. Die ersten drei Zugriffe füllen den Speicher und sind Fehlzugriffe. Der nächste Zugriff auf 1 ist ein Treffer. Bei Zugriff 5 kommt Seite 4: Die eingelagerten Seiten 1, 2 und 3 werden als Nächstes an den Positionen 6, 8 und 11 genutzt. Verdränge 3, deren nächste Nutzung am weitesten entfernt ist.

Nach dem Treffer auf 1 kommt Seite 5 an Position 7. Die eingelagerten Seiten 1, 2 und 4 werden als Nächstes an den Positionen 9, 8 und 10 genutzt, daher verdrängt OPT 4. Die nächsten Zugriffe auf 2 und 1 sind Treffer. Der Zugriff auf Seite 4 an Position 10 ist ein Fehlzugriff; entweder 2 oder 5 kann verdrängt werden, weil keine der beiden Seiten erneut genutzt wird. Anschließend ist der Zugriff auf Seite 3 ein Fehlzugriff und entfernt eine weitere Seite ohne zukünftige Nutzung. Der letzte Zugriff auf 1 ist ein Treffer.

Gesamtergebnisse und Arbeitslasten vergleichen

Der Ablauf hat 7 Fehlzugriffe und 5 Treffer. Zählt man alle 12 Zugriffe, beträgt die Trefferquote 5/12 oder etwa 41,7 %. Es gibt fünf verschiedene Seiten und damit fünf Erstzugriffsfehler. Werden diese Fehlzugriffe aus der angegebenen Quote ausgeschlossen, beträgt sie 5/7 oder etwa 71,4 %. Beide Quoten können denselben Ablauf beschreiben, gib daher immer den Nenner an.

Um nicht den Überblick zu verlieren, halte den aktuellen Zugriff vom nachfolgenden Teil der Folge getrennt. OPT vergleicht die nächste Nutzung jeder eingelagerten Seite nach der aktuellen Position; es wählt nicht die Seite mit der größten Nummer oder die zuerst geladene Seite. Werden zwei Seiten nie wieder genutzt, bleibt jede der beiden Entscheidungen optimal.

Die Arbeitslast beeinflusst, wie stark sich die Strategie auswirkt. Sind Zugriffe auf alle Seiten gleich wahrscheinlich, bietet die bisherige Nutzung wenig Orientierung. Bei Lokalität erhält eine kleine, häufig genutzte Seitenmenge viele Zugriffe, und sie zu erhalten verbessert die Trefferquote. Der Abstand zwischen der Anzahl der Fehlzugriffe einer praktischen Strategie und der von OPT misst die mögliche Verbesserung bei dieser Arbeitslast.

Wichtige Erkenntnisse

  • Zähle das anfängliche Füllen als Fehlzugriffe, auch bevor eine Seite verdrängt wird.
  • OPT verdrängt die eingelagerte Seite, deren nächste Nutzung am weitesten entfernt ist.
  • OPT ist ein Maßstab, weil es zukünftige Zugriffe kennen muss.
  • Bei der Seitenersetzung gibt es Kapazitätsfehler, aber keine Konfliktfehler durch die Platzierung in Seitenrahmen.
  • Gib an, ob der Nenner der Trefferquote Erstzugriffsfehler enthält.

5.2 FIFO, LRU und Auswirkungen der Arbeitslast

FIFO verdrängt unter den aktuell eingelagerten Seiten diejenige, die zuerst geladen wurde. Eine Warteschlange erfasst die Ankunftsreihenfolge. Ein Treffer verschiebt die Seite nicht ans Ende dieser Warteschlange. Dadurch ist FIFO einfach zu verwalten, kann aber eine weiterhin häufig genutzte Seite verdrängen, nur weil sie vor langer Zeit ankam.

Statt der Ankunft die letzte Nutzung verfolgen

LRU erfasst die letzte Nutzung jeder eingelagerten Seite. Bei einem Treffer wird diese Seite zur zuletzt genutzten; bei einem Fehlzugriff und vollem Speicher wird die Seite verdrängt, deren letzte Nutzung am längsten zurückliegt. Das folgt der zeitlichen Lokalität: Kürzliche Nutzung sagt häufig eine Nutzung in naher Zukunft voraus. Ankunftszeit und Zeitpunkt der letzten Nutzung beschreiben unterschiedliche Abläufe.

Die zufällige Seitenersetzung wählt eine eingelagerte Opferseite zufällig aus, ohne eine Reihenfolge nach letzter Nutzung zu führen. Ihr Ergebnis variiert zwischen den Läufen. Sie kann das deterministische Fehlermuster von LRU bei einer zyklischen Arbeitslast vermeiden, aber dennoch unglückliche Entscheidungen treffen. LFU erfasst statt der letzten Nutzung die Anzahl der Zugriffe. Ohne Alterung kann LFU eine Seite behalten, die in einer früheren Programmphase häufig genutzt wurde, jetzt aber ungenutzt ist.

Strategien anhand derselben Folge verfolgen

Vergleiche drei leere Seitenrahmen bei 1, 2, 3, 1, 4, 1, 5, 2, 1, 4, 3, 1. Die Seiten 1, 2 und 3 füllen zunächst den Speicher. Der Treffer auf 1 lässt die FIFO-Reihenfolge unverändert, sodass die eintreffende Seite 4 die Seite 1 verdrängt. LRU behandelt 1 dagegen als kürzlich genutzt und verdrängt 2. Der folgende Zugriff auf 1 ist daher bei FIFO ein Fehlzugriff und bei LRU ein Treffer.

Bei LRU verdrängen die späteren Fehlzugriffe 3 für Seite 5, 4 für Seite 2, 5 für Seite 4 und 2 für Seite 3. Am Ende stehen 8 Fehlzugriffe und 4 Treffer. FIFO verursacht 10 Fehlzugriffe und 2 Treffer. OPT verursacht bei derselben Folge 7 Fehlzugriffe. LRU verbessert hier das Ergebnis von FIFO, erreicht aber nicht das Optimum mit Kenntnis der Zukunft.

Die Belady-Anomalie erklären

Mehr Seitenrahmen verbessern nicht jede Strategie bei jeder Folge. Die Belady-Anomalie ist eine Zunahme der Fehlzugriffe, wenn FIFO mehr Seitenrahmen erhält. Bei 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 hat FIFO mit drei Seitenrahmen 9 Fehlzugriffe und mit vier 10. Die zusätzliche Kapazität verändert die späteren Opferseiten der Warteschlange, sodass ihre Mengen eingelagerter Seiten nicht zwangsläufig ineinander enthalten sind.

LRU und OPT sind Stack-Algorithmen: Werden Gleichstände einheitlich behandelt, ist die Menge eingelagerter Seiten bei einer kleineren Anzahl von Seitenrahmen in der Menge bei einer größeren Anzahl enthalten. Eine größere Kapazität kann daher einen Treffer bei kleinerem Speicher nicht in einen Fehlzugriff bei größerem Speicher verwandeln. LRU ergibt bei der Anomaliefolge 10 Fehlzugriffe mit drei Seitenrahmen und 8 mit vier.

Für die letzte Nutzung ungünstige Arbeitslasten erkennen

LRU hat dennoch ungünstige Arbeitslasten. Durchlaufe die Seiten 1, 2, 3, 4 dreimal mit drei Seitenrahmen. Jede neue Seite verdrängt die als Nächstes benötigte, was 12 Fehlzugriffe ergibt. OPT benötigt 6. Die zufällige Seitenersetzung kann nützliche Seiten über einen Zyklus hinweg behalten und schneidet hier im Durchschnitt besser ab. Ebenso kann ein einmaliger Durchlauf eine nützliche, häufig genutzte Seitenmenge aus einem LRU-Cache verdrängen.

Ein Strategievergleich muss die Arbeitslast und die Anzahl der Seitenrahmen berücksichtigen. Bei vielen Programmen macht Lokalität die letzte Nutzung zu einem nützlichen Anhaltspunkt. Das ist der Grund für LRU-Annäherungen in realen Systemen. Eine regelmäßige Schleife knapp oberhalb der Kapazität begünstigt eine andere Wahl; ein beobachteter Vorteil bei einer kurzen Folge begründet keine allgemeingültige Rangfolge.

Wichtige Erkenntnisse

  • FIFO-Treffer ändern die Ankunftsreihenfolge nicht; LRU-Treffer ändern die Reihenfolge nach letzter Nutzung.
  • LFU zählt Nutzungen, während LRU erfasst, wann die letzte Nutzung stattfand.
  • Die zufällige Seitenersetzung variiert zwischen Läufen und kann dennoch ungünstige Opferseiten wählen.
  • Bei FIFO kann die Belady-Anomalie auftreten.
  • Bei LRU und OPT sind die Mengen eingelagerter Seiten mit zunehmender Kapazität ineinander enthalten.
  • Eine zyklische Arbeitslast knapp oberhalb der Kapazität kann LRU ungünstig beeinflussen.

5.3 Die letzte Nutzung mit einem Uhrzeiger annähern

Exaktes LRU verursacht bei jedem Speicherzugriff Arbeit. Bei Zeitstempeln aktualisiert jeder Zugriff einen Zeitstempel und die Auswahl der Opferseite sucht nach dem ältesten. Bei einer geordneten Liste steht die Opferseite am Ende bereit, aber jeder Zugriff muss seine Seite an den Anfang verschieben. Diese Struktur bei jedem Lese- und Schreibzugriff per Software zu aktualisieren wäre zu aufwendig.

Das Referenzbit lesen

Die Hardware bietet ein weniger aufwendiges Signal: das Referenzbit. Die Hardware setzt es, wenn eine Seite gelesen oder beschrieben wird. Das Betriebssystem setzt es zurück, um ein weiteres Beobachtungsintervall zu beginnen. Ein gesetztes Bit bedeutet mindestens eine Nutzung seit dem letzten Zurücksetzen; es zählt nicht die Häufigkeit und zeigt nicht die genaue Reihenfolge der letzten Nutzung an.

Eine Opferseite suchen

Der Clock-Algorithmus ordnet Seitenrahmen in einem Kreis an und hält einen Zeiger auf den nächsten Kandidaten. Bei einer Ersetzung prüft er das Referenzbit des Kandidaten. Ist das Bit 1, setzt der Zeiger es zurück und bewegt sich weiter. Ist das Bit 0, wird dieser Seitenrahmen zum Opfer. Die neue Seite kommt mit gesetztem Referenzbit hinein und der Zeiger bewegt sich darüber hinaus. Ein Treffer setzt das Bit der referenzierten Seite, ohne den Zeiger zu bewegen.

Der Kreis enthalte A mit Bit 1, B mit Bit 0 und C mit Bit 1; der Zeiger stehe bei A. Ein Seitenfehler bei D setzt das Bit von A zurück und bewegt den Zeiger zu B. B hat bereits Bit 0, sodass D die Seite B mit Bit 1 ersetzt und der Zeiger bei C endet. Ist der nächste Zugriff ein Seitenfehler bei E, setzt der Zeiger das Bit von C zurück, findet dann A mit 0 und ersetzt A. Wäre zwischen diesen Seitenfehlern auf A zugegriffen worden, wäre das Bit von A 1 und A erhielte eine weitere Chance.

Sind alle Bits 1 und erfolgen dazwischen keine neuen Zugriffe, setzt ein Durchlauf sie alle zurück. Bei seiner Rückkehr verdrängt der Zeiger dann die Seite, bei der er begonnen hat. Diese einzelne Auswahl ähnelt der nächsten Opferseite nach FIFO-Ankunftsreihenfolge, doch Clock richtet sich allgemein nach der Nutzung und der Zeigerposition; es ist nicht immer gleichbedeutend mit FIFO.

Ein vollständiger Clock-Ablauf benötigt eine Festlegung des Ausgangszustands. Hier werden leere Seitenrahmen der Reihe nach mit Bit 1 gefüllt; der Zeiger bleibt bis zur ersten Ersetzung bei Seitenrahmen 0. Treffer setzen Bits. Jede Ersetzung bewegt den Zeiger weiter. Nach dieser Festlegung ergeben drei Seitenrahmen bei 1, 2, 3, 1, 4, 1, 5, 2, 1, 4, 3, 1 10 Fehlzugriffe. Eine kurze Folge kann den Nutzen einer Annäherung an die letzte Nutzung verdecken; über längere Läufe bildet Clock Lokalität oft gut ab.

Schreibaufwand und reale Varianten berücksichtigen

Ein veränderter Zustand erhöht den Aufwand, weil die Opferseite gesichert werden muss. Eine bevorzugte Reihenfolge beim erweiterten Clock-Algorithmus ordnet Paare aus (Referenzbit, Änderungsbit) als (0, 0), (0, 1), (1, 0), dann (1, 1). Das bevorzugt eine Seite, die weder kürzlich genutzt wurde noch ungesicherte Änderungen enthält. Implementierungen unterscheiden sich darin, wie Durchläufe Bits zurücksetzen und Schreibvorgänge planen. Das Zurückschreiben im Hintergrund kann einen veränderten Kandidaten vor der Ersetzung unverändert machen.

Reale Systeme nutzen umfangreichere Varianten. VAX/VMS legte entfernte Seiten auf Listen unveränderter oder veränderter Seiten ab, sodass ein Prozess eine Seite zurückholen konnte, bevor ihr Seitenrahmen erneut genutzt wurde. Linux hat aktive und inaktive Listen verwendet und bietet Multi-Gen LRU an, das Seiten nach beobachteter letzter Nutzung gruppiert. Diese Systeme nutzen Hinweise der Hardware für Entscheidungen des Betriebssystems; das Referenzbit der Hardware wählt selbst keine Opferseite.

Wichtige Erkenntnisse

  • Die Verwaltung für exaktes LRU bei jedem Zugriff ist aufwendig.
  • Ein Referenzbit erfasst, ob seit dem Zurücksetzen eine Nutzung stattgefunden hat, aber nicht deren Anzahl.
  • Clock setzt eine 1 zurück und geht weiter; bei einer 0 wird die Seite verdrängt.
  • Treffer setzen Referenzbits, bewegen aber den Uhrzeiger nicht.
  • Unveränderte, nicht referenzierte Seiten sind günstige Opferseiten für den erweiterten Clock-Algorithmus.
  • Gib beim Verfolgen von Clock den Ausgangszustand und die Bewegung des Zeigers an.

5.4 Arbeitsmengen, Zuweisung von Seitenrahmen und Seitenflattern

Seitenflattern tritt auf, wenn Prozesse die meiste Zeit damit verbringen, Seiten nach Seitenfehlern einzulagern und Seiten zu verdrängen, die bald wieder benötigt werden. Das Speichergerät bleibt beschäftigt, während die CPU-Auslastung sinkt, obwohl Programme noch Arbeit haben. Eine niedrige CPU-Auslastung allein weist nicht auf Seitenflattern hin; der Hinweis ist die Kombination aus umfangreichen Seitentransfers und geringem Fortschritt.

Die Ursache ist ein Speicherbedarf, der die verfügbaren Seitenrahmen übersteigt. Ein Prozess benötigt eine brauchbare Zusammenstellung eingelagerter Seiten, um seine aktuelle Phase abzuschließen. Passen die aktiven Seitenmengen mehrerer Prozesse zusammen nicht in den Speicher, verdrängen ihre Seitenfehler wiederholt nützliche Seiten. Noch mehr Prozesse zu starten kann diesen Druck verstärken, obwohl die CPU nicht ausgelastet erscheint.

Den aktuellen Seitenbedarf schätzen

Die Arbeitsmenge, geschrieben W(t,Δ), schätzt den aktuellen Bedarf eines Prozesses. Im Modell mit einem Zugriffsfenster ist sie die Menge der verschiedenen Seiten in den letzten Δ Zugriffen bis zum Zeitpunkt t. Zähle jede Seite einmal, auch wenn sie im Fenster mehrfach vorkommt. Die Größe der Arbeitsmenge ist eine Anzahl von Seiten, nicht die Anzahl der Zugriffe.

Betrachte bei Fenstergröße 5 und der Folge 1, 2, 1, 3, 2, 1, 4, 5, 4, 5, 4, 6, 5, 4 den Zustand nach Zugriff 6. Die letzten fünf Zugriffe sind 2, 1, 3, 2, 1, das ergibt {1, 2, 3} mit Größe 3. Nach Zugriff 8 ist das Fenster 3, 2, 1, 4, 5, was Größe 5 ergibt. Nach Zugriff 11 ist es 4, 5, 4, 5, 4, was Größe 2 ergibt. Der Bedarf erreicht vorübergehend einen Höchstwert, während sich alte und neue Phase überlappen.

Aktiven Bedarf und Zuweisung steuern

Ein kurzes Fenster kann noch benötigte Seiten auslassen; ein zu langes kann Seiten aus einer abgeschlossenen Phase enthalten. Peter Dennings Arbeitsmengenmodell verbindet diesen wechselnden Bedarf mit der Zuweisung. Eine Arbeitsmengenstrategie führt Prozesse nur aus, wenn ihre Arbeitsmengen zusammen in den Speicher passen. Ist das nicht der Fall, suspendiert sie einen oder mehrere Prozesse und gibt deren Seitenrahmen frei. Das ist Zulassungskontrolle.

Die Seitenfehlerhäufigkeitssteuerung (PFF) nutzt gemessene Seitenfehlerraten. Oberhalb eines oberen Schwellenwerts benötigt ein Prozess mehr Seitenrahmen. Unterhalb eines unteren Schwellenwerts können einige Seitenrahmen neu zugewiesen werden. Benötigt ein Prozess Seitenrahmen und sind keine verfügbar, kann es nötig sein, einen Prozess zu suspendieren. Zwei Schwellenwerte verringern ständige Anpassungen um einen einzelnen Grenzwert herum.

Bei globaler Seitenersetzung kann ein Seitenfehler eine Seite eines anderen Prozesses verdrängen. Das passt sich flexibel an wechselnden Bedarf an, erlaubt aber einem Prozess, die Seitenfehler eines anderen zu erhöhen. Bei lokaler Seitenersetzung stammen Opferseiten nur aus den dem Prozess mit dem Seitenfehler zugewiesenen Seitenrahmen. Das begrenzt gegenseitige Störungen, hilft aber einem Prozess mit zu wenigen zugewiesenen Seitenrahmen nur, wenn die Zuweisung geändert wird.

Gegenmaßnahmen bei Speicherdruck wählen

Nützliche Gegenmaßnahmen verringern den Bedarf oder erhöhen die Kapazität: weniger Programme ausführen, physischen Speicher hinzufügen oder die Lokalität verbessern, etwa indem Arrays in Speicherreihenfolge durchlaufen werden. Ein schnellerer Auslagerungsbereich verringert den Aufwand jedes schweren Seitenfehlers; er sorgt nicht dafür, dass eine zu große aktive Seitenmenge hineinpasst. Der Ersatz einer Festplatte durch eine SSD kann den Fortschritt verbessern, ohne die Ursache zu beseitigen.

Bei extremem Druck kann der OOM-Killer von Linux einen ausgewählten Prozess beenden, wenn das Zurückgewinnen und Auslagern nicht genügend Speicher freigeben können. Die Auswahl beruht auf einer speicherbezogenen Bewertung und strategischen Anpassungen, nicht einfach darauf, welcher Prozess der größte ist. Der Speicher kann beim Prozessende zurückgewonnen werden, und die Arbeit des Prozesses geht verloren. Dies ist eine letzte Maßnahme zur Freigabe von Ressourcen und unterscheidet sich vom Suspendieren eines Prozesses, der später fortgesetzt werden kann.

Wichtige Erkenntnisse

  • Seitenflattern verbindet umfangreiche Seitentransfers mit wenig nützlichem Fortschritt.
  • Eine Arbeitsmenge zählt verschiedene Seiten in einem Fenster kürzlich erfolgter Zugriffe.
  • Die Zulassungskontrolle begrenzt aktive Prozesse auf die Anzahl, die der Speicher unterstützen kann.
  • PFF passt die Zuweisung von Seitenrahmen anhand eines oberen und eines unteren Schwellenwerts für die Seitenfehlerrate an.
  • Globale Seitenersetzung erlaubt die Verdrängung zwischen Prozessen; lokale Seitenersetzung isoliert die Auswahl der Opferseiten.
  • Schnelleres Auslagern verringert die Verzögerung, erhöht aber nicht die Kapazität an Seitenrahmen.
  • Beendet der OOM-Killer einen Prozess, geht dessen Arbeit verloren; beim Suspendieren kann sie erhalten bleiben.

Seitenverwaltung und virtueller Speicher: Beispiele

5 Interaktive Lektionen

1

Übersetze eine virtuelle Adresse Schritt für Schritt

11 Schritte
Teile eine Adresse auf, finde ihren PTE, prüfe die Abbildung und berechne die endgültige physische Byteadresse.
  1. 1
    EinführungVon einer Adresse zu einem Byte

    Ein Lesebefehl gibt eine virtuelle Byteadresse an. Die Bytes selbst liegen in physischen Seitenrahmen, und die Seitentabelle des aktuellen Prozesses verbindet beides. Verfolge eine Adresse durch die Aufteilung, die Suche nach dem Eintrag und den abschließenden Zugriff.

    Halte zwei Fragen auseinander: Wo liegt der Eintrag, der diese Seite beschreibt, und wo liegt das Byte, das der Befehl anfordert? Beides sind Adressen, sie zeigen aber auf unterschiedliche Objekte.

  2. 2
    ErklärungSeiten können verschoben werden, ohne Programmadressen zu ändern

    Eine Seite ist ein Stück virtuellen Speichers fester Größe; ein Seitenrahmen ist ein gleich großes Stück physischen Speichers. Seite 0 könnte Seitenrahmen 15 belegen, während Seite 1 Seitenrahmen 2 belegt.

    Das Programm sieht über diese Seiten hinweg weiterhin aufeinanderfolgende virtuelle Adressen. Jede Seite passt in jeden freien Seitenrahmen, sodass das Betriebssystem keine große zusammenhängende physische Lücke für einen ganzen Prozess benötigt.

  3. 3
    BeispielDie Seite von ihrem Offset trennen

    Verwende 2 KiB große Seiten und die virtuelle Adresse 11.600. Jede Seite enthält 2.048 Byte. Fünf vollständige Seiten umfassen 10.240 Byte, daher gehört diese Adresse zu VPN 5.

    Die verbleibenden 1.360 Byte ergeben ihren Offset. Binär enthalten die niederwertigen 11 Bit diesen Offset, weil eine Seite 211 Bytepositionen hat. Die höherwertigen Bits bezeichnen die virtuelle Seite.

  4. 4
    BeispielUngenutzten Platz in einer Zuweisung berechnen

    Ein Bereich benötigt 10.700 Byte und verwendet 2 KiB große Seiten. Fünf Seiten fassen nur 10.240 Byte, daher benötigt er sechs Seiten. Ihre Gesamtkapazität beträgt 12.288 Byte.

    Subtrahiere die Größe des Nutzbereichs, um 1.588 ungenutzte Byte innerhalb der Zuweisung zu erhalten. Das ist interne Fragmentierung. Freie Seitenrahmen an anderer Stelle gehören nicht zu dieser Verschwendung; die ungenutzten Bytes liegen innerhalb einer zugewiesenen Seite.

  5. 5
    HerausforderungEine andere Adressaufteilung versuchen

    Bei 8 KiB großen Seiten greift ein Prozess auf die virtuelle Adresse 25.100 zu. Welche VPN und welcher Offset bezeichnen dieses Byte?

    ---reveal---

    Drei Seiten umfassen 24.576 Byte, sodass der Offset 524 bleibt. Die VPN ist 3 und der Offset 524. Der Offset muss kleiner als 8.192 sein; diese Schranke hilft, einen Fehler beim Quotienten oder bei der Subtraktion zu erkennen, bevor du die Seite übersetzt.

  6. 6
    ErklärungVor den Daten den Eintrag finden

    In einer linearen Seitentabelle indiziert die VPN ein prozessspezifisches Array. Liegt seine Basis bei der physischen Adresse 20.000 und sind Einträge 8 Byte groß, beginnt PTE 5 bei 20.040.

    Die Multiplikation mit der Eintragsgröße findet Abbildungsinformationen. Sie findet nicht das angeforderte Programmbyte. Der Eintrag muss eine physische Seitenrahmennummer liefern und die angeforderte Operation erlauben, bevor der Prozessor die Datenadresse bilden kann.

  7. 7
    KernaussageDen Zustand der Abbildung prüfen

    Eine Seite kann zu einem Prozess gehören, ohne im Speicher eingelagert zu sein. Sie kann auch eingelagert sein und eine bestimmte Operation verbieten. Präsenz und Berechtigung beantworten unterschiedliche Fragen.

    Das Lehrmodell gibt Gültigkeit, Präsenz und Schutz getrennte Rollen. x86 bietet kein separates Gültigkeitsbit; ist eine Hardwareabbildung nicht präsent, unterscheidet das Betriebssystem anhand seiner Aufzeichnungen Auslagerung, verzögerte Speicherzuweisung und eine ungenutzte Adresse.

  8. 8
    BeispielDie Übersetzung abschließen

    Kehre zur virtuellen Adresse 11.600 mit 2 KiB großen Seiten zurück: VPN 5, Offset 1.360. PTE 5 erlaube den Lesezugriff, sei präsent und gebe Seitenrahmen 14 an.

    Seitenrahmen 14 beginnt bei Byte 28.672. Die Addition des unveränderten Offsets ergibt die physische Byteadresse 30.032. Der PTE bei 20.040 liefert uns dieses Ergebnis; er ist nicht selbst die Adresse, von der das Programm seine Daten liest.

  9. 9
    HerausforderungDie richtige endgültige Adresse wählen

    Bei 1 KiB großen Seiten wird die virtuelle Adresse 3.250 über einen präsenten PTE, der den Zugriff erlaubt, auf Seitenrahmen 11 abgebildet. Welche physische Adresse ergibt sich? Erkläre, welcher Teil unverändert bleibt.

    ---reveal---

    Die Adresse hat VPN 3 und Offset 178. Seitenrahmen 11 beginnt bei 11.264, das Ergebnis ist also 11.442. Der Offset bleibt 178, weil eine Seite und ihr Seitenrahmen dieselben internen Bytepositionen haben.

  10. 10
    HerausforderungDie Aufteilung mit der Tabellengröße verbinden

    Ein System hat virtuelle 24-Bit-Adressen, 4 KiB große Seiten und 8 Byte große Einträge in einer linearen Tabelle. Wie viel Speicher belegt die vollständige Tabelle?

    ---reveal---

    Der Offset benötigt 12 Bit, sodass 12 VPN-Bits und 4.096 Einträge bleiben. Die Multiplikation mit acht ergibt 32.768 Byte oder 32 KiB. Die Tabelle enthält weiterhin Einträge für ungenutzte Seiten; wenige zugewiesene Datenseitenrahmen verkleinern dieses vollständige lineare Array nicht.

  11. 11
    ZusammenfassungDie beiden Adressberechnungen lesen

    Nutze die VPN, um einen Abbildungseintrag zu finden, prüfe seinen Zustand und nutze seine PFN, um einen Seitenrahmen zu finden. Übernimm dann den ursprünglichen Offset in diesen Seitenrahmen.

    Die Eintragsgröße bestimmt die Bewegung durch die Tabelle; die Seitengröße bestimmt die Bewegung durch die physischen Seitenrahmen. Wenn du diese Einheiten im Blick behältst, funktioniert dieselbe Methode mit Dezimaladressen, Hexadezimaladressen und unterschiedlichen Seitengrößen.

2

Nutze den TLB und halte Übersetzungen korrekt

12 Schritte
Verfolge Treffer, Fehlzugriffe, Lokalität, Kontextkennungen, Invalidierung und TLB-Reichweite.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungWarum wiederholte Übersetzung schnell sein kann
  2. 2
    ErklärungEin Treffer erspart die Tabellensuche
  3. 3
    KernaussageEin Fehlzugriff kann vollständig im Speicher behandelt werden
  4. 4
    BeispielDie Fehlzugriffe eines sequenziellen Arrays zählen
  5. 5
    BeispielAus vollständigen Fällen einen Durchschnitt bilden
  6. 6
    HerausforderungLokalität bei einem zweiten Durchlauf nutzen
  7. 7
    ErklärungWählen, wer das Nachfüllen übernimmt
  8. 8
    BeispielÜbersetzungen nach Adressraum kennzeichnen
  9. 9
    VerbindungEine Tabellenänderung erfordert Cache-Invalidierung
  10. 10
    HerausforderungDie Reichweite der Übersetzungen berechnen
  11. 11
    HerausforderungEin Kapazitätsproblem von einem Korrektheitsproblem unterscheiden
  12. 12
    ZusammenfassungLeistung und Korrektheit verfolgen
3

Durchlaufe kleinere Seitentabellen

14 Schritte
Vergleiche Tabellenorganisationen, verfolge ein zweistufiges Beispiel und leite tiefere Tabellen und Abbildungen großer Speicherseiten her.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungWeniger Speicher für Abbildungen benötigen
  2. 2
    ErklärungFragen, was ein Eintrag beschreibt
  3. 3
    VerbindungZwei Möglichkeiten vergleichen, Verschwendung zu vermeiden
  4. 4
    HerausforderungEine Anzahl für die invertierte Tabelle prüfen
  5. 5
    ErklärungDie VPN in zwei Indizes aufteilen
  6. 6
    BeispielDen Verzeichniseintrag lesen
  7. 7
    BeispielDem physischen Zeiger bis zur untersten Stufe folgen
  8. 8
    HerausforderungZugewiesene Tabellen für dünn besetzte Abbildungen zählen
  9. 9
    ErklärungEine tiefere Hierarchie herleiten
  10. 10
    KernaussageDie implementierte Breite im Blick behalten
  11. 11
    BeispielEinen Verzeichniseintrag die Daten abbilden lassen
  12. 12
    HerausforderungEine weitere Stufenzahl berechnen
  13. 13
    HerausforderungEinen Vorschlag für große Speicherseiten beurteilen
  14. 14
    ZusammenfassungSpeicherplatz und Sucharbeit getrennt zählen
4

Behandle Seitenfehler und verschiebe unnötige Arbeit

14 Schritte
Stelle eine ausgelagerte Seite wieder her, schätze ihren Aufwand ab und wende Nullinitialisierung bei Bedarf und Copy-on-Write an.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungAuf Inhalte warten und dann erneut versuchen
  2. 2
    ErklärungEine nicht präsente Abbildung deuten
  3. 3
    BeispielDie gespeicherte Seite finden
  4. 4
    BeispielDie Abbildung eintragen und fortfahren
  5. 5
    HerausforderungZwei Arten von Seitenfehlern unterscheiden
  6. 6
    BeispielDen Aufwand vor der Mittelwertbildung umrechnen
  7. 7
    ErklärungOpferseiten vorbereiten, bevor Seitenfehler sie benötigen
  8. 8
    KernaussagePrüfen, ob eine unveränderte Seite wiederherstellbar ist
  9. 9
    HerausforderungDen Schreibvorgang der Opferseite zum kritischen Ablauf hinzufügen
  10. 10
    ErklärungNullen nur bei Bedarf bereitstellen
  11. 11
    ErklärungPrivate Seiten bis zu einem Schreibzugriff gemeinsam nutzen
  12. 12
    HerausforderungKopierte Seiten statt Schreibbefehle zählen
  13. 13
    HerausforderungAus dem Verhalten beim Seitenfehler auf die Ursache schließen
  14. 14
    ZusammenfassungMit Seitenfehlern die richtigen Inhalte bereitstellen
5

Vergleiche Opferseiten und verhindere Seitenflattern

20 Schritte
Verfolge Strategien, führe den Uhrzeiger aus, schätze Arbeitsmengen ab und wähle Gegenmaßnahmen gegen übermäßige Seitentransfers.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungNützliche Seiten eingelagert halten
  2. 2
    TippDie Simulationsbedingungen festlegen
  3. 3
    BeispielEine Opferseite mit Kenntnis der Zukunft wählen
  4. 4
    BeispielDen Vergleichsablauf abschließen
  5. 5
    HerausforderungDen unvermeidbaren Anteil bestimmen
  6. 6
    ErklärungFür FIFO die Ankunftsreihenfolge nutzen
  7. 7
    BeispielFür LRU den letzten Zugriff nutzen
  8. 8
    KernaussageNicht annehmen, dass die letzte Nutzung Wiederverwendung immer vorhersagt
  9. 9
    HerausforderungEin Ergebnis mit zusätzlichem Seitenrahmen deuten
  10. 10
    ErklärungDie genaue Reihenfolge durch ein Nutzungssignal ersetzen
  11. 11
    BeispielEine Clock-Entscheidung treffen
  12. 12
    HerausforderungEiner kürzlich genutzten Seite eine weitere Chance geben
  13. 13
    VerbindungVeränderte Opferseiten berücksichtigen
  14. 14
    ErklärungSpeicherdruck erkennen, der Fortschritt verhindert
  15. 15
    BeispielEine Arbeitsmenge beim Phasenwechsel zählen
  16. 16
    ErklärungNach Bedarf oder anhand von Seitenfehlern zuweisen
  17. 17
    HerausforderungIsolation von Kapazität unterscheiden
  18. 18
    VerbindungEine Gegenmaßnahme wählen, die die Ursache verändert
  19. 19
    HerausforderungArbeitsmengen mit Seitenersetzung verbinden
  20. 20
    ZusammenfassungAbläufe mit dem laufenden System verbinden

Seitenverwaltung und virtueller Speicher: Übungsaufgaben

50 Übungsfragen in 5 Sets

Set 1: Übung 1: Das Modell der Seitenverwaltung aufbauen10 Übungsfragen

Frage 1 von 10

Wie viele Offsetbits benötigt eine 8 KiB große Seite?
  1. 10 Bit
  2. 13 Bit
  3. 12 Bit
  4. 16 Bit
Antwort zeigenAntwort ausblenden
Antwort: B
Eine 8 KiB große Seite enthält 8.192 Bytepositionen, ihre Offsets reichen also von 0 bis 8.191 und benötigen 13 Bit. Zwölf Bit wählen nur 4.096 Positionen aus, was für eine 4 KiB große Seite genügt. Die Adressbreite bestimmt die verbleibenden VPN-Bits, nicht die Offsetbreite für diese Seitengröße.

Frage 2 von 10

Bei Seiten mit 2.048 Byte hat die virtuelle Adresse 7.300 eine präsente Abbildung auf Seitenrahmen 6, die den Zugriff erlaubt. Welche physische Byteadresse erreicht der Zugriff?
  1. 7.300
  2. 14.336
  3. 13.290
  4. 13.444
Antwort zeigenAntwort ausblenden
Antwort: D
Die virtuelle Seite ist 3 und der Offset 1.156, da drei Seiten 6.144 Byte umfassen. Seitenrahmen 6 beginnt bei 12.288, was die physische Adresse 13.444 ergibt. Die ursprüngliche virtuelle Seitennummer zu verwenden würde die Adresse unverändert lassen und die Abbildung auf Seitenrahmen 6 ignorieren.

Frage 3 von 10

Was muss noch geprüft werden, wenn ein Schreibzugriff seine Übersetzung im TLB findet?
  1. Ob die gespeicherten Berechtigungen das Schreiben erlauben
  2. Ob die Seite einen zweiten freien Seitenrahmen hat
  3. Ob die Daten ebenfalls im TLB gespeichert sind
  4. Ob die Seitentabelle einen neuen linearen Index hat
Antwort zeigenAntwort ausblenden
Antwort: A
Ein TLB-Eintrag enthält neben der Seitenrahmennummer auch Zugriffsberechtigungen, sodass bei einem Treffer der angeforderte Schreibzugriff weiterhin erlaubt sein muss. Eine Übersetzung zu finden gewährt keinen uneingeschränkten Zugriff. Der TLB enthält Abbildungsinformationen; die Programmdaten können sich anderswo in der Speicherhierarchie befinden.

Frage 4 von 10

Ein TLB mit 128 Einträgen bildet 4 KiB große Seiten ab. Wie groß ist seine Reichweite?
  1. 32 KiB
  2. 128 KiB
  3. 512 KiB
  4. 4 MiB
Antwort zeigenAntwort ausblenden
Antwort: C
Jeder Eintrag deckt eine 4 KiB große Seite ab, sodass 128 Einträge 512 KiB Speicher darstellen. Die Anzahl der Einträge allein ist keine Kapazität in Byte. Eine Reichweite von 4 MiB würde bei dieser Seitengröße die achtfache Übersetzungsreichweite erfordern; sie lässt sich nicht aus der Größe des installierten RAM ableiten.

Frage 5 von 10

Ein vollständiger virtueller 30-Bit-Adressraum nutzt 4 KiB große Seiten und 8 Byte große Einträge in einer linearen Tabelle. Wie viel Speicher belegt eine Tabelle?
  1. 256 KiB
  2. 1 MiB
  3. 8 MiB
  4. 2 MiB
Antwort zeigenAntwort ausblenden
Antwort: D
Nach Abzug von 12 Offsetbits bleiben 18 VPN-Bits, was 262.144 Einträge ergibt. Acht Byte pro Eintrag ergeben 2.097.152 Byte oder 2 MiB. Das Ergebnis 256 KiB zählt Einträge so, als belege jeder ein Byte; der Tabellenspeicher muss die tatsächliche Eintragsgröße berücksichtigen.

Frage 6 von 10

Ein zweistufiges System nutzt 4 KiB große Seiten und auf beiden Stufen 4 Byte große Einträge. Ein Prozess bildet Seiten in genau fünf Verzeichnisbereichen ab. Wie viel Speicher belegen sein Verzeichnis und seine Tabellen der unteren Stufe?
  1. 20 KiB
  2. 40 KiB
  3. 24 KiB
  4. 4 MiB
Antwort zeigenAntwort ausblenden
Antwort: C
Jeder belegte Verzeichnisbereich benötigt eine 4 KiB große Tabelle der unteren Stufe, und der Prozess benötigt außerdem sein 4 KiB großes Verzeichnis. Sechs Tabellenseiten ergeben insgesamt 24 KiB. Werden nur die fünf Tabellen der unteren Stufe gezählt, ergibt das 20 KiB und lässt die Wurzel aus, die diese Tabellen erreichbar macht.

Frage 7 von 10

Eine gültige Seite erhält beim ersten Zugriff einen mit Nullen gefüllten Seitenrahmen, ohne dass vom Massenspeicher gelesen wird. Welche Art von Seitenfehler ist aufgetreten?
  1. Ein leichter Seitenfehler
  2. Ein schwerer Seitenfehler
  3. Ein TLB-Treffer
  4. Eine Speicherzugriffsverletzung
Antwort zeigenAntwort ausblenden
Antwort: A
Das Betriebssystem hat die Abbildung korrigiert, ohne Seiteninhalte vom Massenspeicher zu lesen; deshalb ist dies ein leichter Seitenfehler. Ein schwerer Seitenfehler erfordert einen Lesezugriff auf den Massenspeicher. Die Bereitstellung von nullinitialisiertem Speicher ist eine zulässige Behandlung eines Seitenfehlers; die Ausnahme allein bedeutet nicht, dass der Prozess einen ungültigen Zugriff vorgenommen hat.

Frage 8 von 10

Ein gewöhnlicher Zugriff dauert 80 ns; die gesamte Behandlung eines schweren Seitenfehlers dauert 2 ms. Wenn einer von 10.000 Zugriffen einen schweren Seitenfehler verursacht, wie hoch ist die effektive Zugriffszeit im Modell mit zwei Fällen?
  1. 80,02 ns
  2. 279,992 ns
  3. 199,992 ns
  4. 2.079,992 ns
Antwort zeigenAntwort ausblenden
Antwort: B
Rechne 2 ms in 2.000.000 ns um und verwende die Seitenfehlerwahrscheinlichkeit 0,0001. Der Durchschnitt beträgt 0,9999×80+0,0001×2000000=279,992 ns. Der Wert 199,992 ns lässt den Beitrag des gewöhnlichen Zugriffs aus; Millisekunden wie Nanosekunden zu verwenden setzt den Aufwand des Seitenfehlers zu niedrig an.

Frage 9 von 10

Bei zwei anfänglich leeren Seitenrahmen verarbeitet OPT 2, 7, 2, 9, 7, 2. Wie viele Fehlzugriffe treten einschließlich der ersten Nutzungen auf?
  1. 3 Fehlzugriffe
  2. 5 Fehlzugriffe
  3. 4 Fehlzugriffe
  4. 6 Fehlzugriffe
Antwort zeigenAntwort ausblenden
Antwort: C
Die ersten Zugriffe auf 2 und 7 sind Fehlzugriffe, dann ist 2 ein Treffer. Bei 9 verdrängt OPT die Seite 2, weil 7 früher benötigt wird; 7 ist ein Treffer und die letzte 2 ein Fehlzugriff, was vier Fehlzugriffe ergibt. Drei ist nur die Anzahl verschiedener Seiten und lässt den späteren Kapazitätsfehler bei der Rückkehr von Seite 2 aus.

Frage 10 von 10

Bei drei anfänglich leeren Seitenrahmen verarbeitet OPT 6, 1, 4, 6, 8, 1, 9, 6, 4. Wie viele Fehlzugriffe gibt es insgesamt und wie hoch ist die Trefferquote ohne Erstzugriffsfehler?
  1. 6 Fehlzugriffe; 75 % Treffer
  2. 5 Fehlzugriffe; 100 % Treffer
  3. 6 Fehlzugriffe; 33,3 % Treffer
  4. 7 Fehlzugriffe; 50 % Treffer
Antwort zeigenAntwort ausblenden
Antwort: A
Die fünf verschiedenen Seiten verursachen fünf Erstzugriffsfehler; OPT hat außerdem einen Fehlzugriff, wenn 4 am Ende zurückkehrt, insgesamt also sechs Fehlzugriffe. Der vierte, sechste und achte Zugriff sind Treffer. Nach Ausschluss von fünf Erstzugriffen bleiben vier Zugriffe und drei Treffer, sodass 75 % richtig sind; 33,3 % beziehen alle neun Zugriffe ein.
Set 2: Übung 2: Suchvorgänge und Seitenfehler verfolgen10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Ein Bereich von 17.500 Byte nutzt 8 KiB große Seiten. Wie viele Byte bleiben in seinen zugewiesenen Seiten ungenutzt?
  1. 1.116 Byte
  2. 8.192 Byte
  3. 7.076 Byte
  4. 15.268 Byte
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Wo liegt PTE 11 in einer linearen Tabelle mit 8 Byte großen Einträgen relativ zur Tabellenbasis?
  1. 88 Byte hinter der Basis
  2. 11 Byte hinter der Basis
  3. 19 Byte hinter der Basis
  4. 80 Byte hinter der Basis
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Ein an einer Seitengrenze ausgerichtetes Array enthält 6.144 Werte zu je vier Byte. Es wird bei 8 KiB großen Seiten, leerem TLB und ohne störende Zugriffe einmal der Reihe nach gelesen. Wie viele TLB-Fehlzugriffe treten auf?
  1. 6 Fehlzugriffe
  2. 12 Fehlzugriffe
  3. 6.144 Fehlzugriffe
  4. 3 Fehlzugriffe
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Eine Tabellenseite hat 4.096 Byte und jeder Eintrag 8 Byte. Wie viele Bit wählen einen Eintrag aus?
  1. 8 Bit
  2. 9 Bit
  3. 10 Bit
  4. 12 Bit
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Ein hypothetischer Rechner nutzt virtuelle 39-Bit-Adressen, 4 KiB große Seiten und 8 Byte große Einträge in seitengroßen Tabellen. Wie viele Stufen werden benötigt?
  1. 3 Stufen
  2. 2 Stufen
  3. 4 Stufen
  4. 5 Stufen
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Der Lesevorgang einer ausgelagerten Seite ist abgeschlossen und die Behandlungsroutine trägt eine präsente Abbildung ein. Was soll mit dem Befehl geschehen, der den Seitenfehler ausgelöst hat?
  1. Er wird übersprungen, damit die Ausführung fortgesetzt wird
  2. Er wird mit der korrigierten Abbildung erneut ausgeführt
  3. Er wird durch einen neuen Systemaufruf ersetzt
  4. Er wird mit der Auslagerungsblocknummer abgeschlossen
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Nach fork beschreibt ein Kindprozess fünf verschiedene gemeinsam genutzte COW-Seiten von je 4 KiB und schreibt danach erneut auf die erste dieser Seiten. Wie viele Seitendaten werden für diese Schreibzugriffe kopiert?
  1. 4 KiB
  2. 24 KiB
  3. 20 KiB
  4. 40 KiB
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Verarbeite 4, 8, 2, 4, 6, 8, 4 mit drei anfänglich leeren Seitenrahmen nach FIFO und LRU. Wie viele Fehlzugriffe ergeben sich insgesamt jeweils?
  1. FIFO: 6; LRU: 5
  2. FIFO: 5; LRU: 6
  3. FIFO: 6; LRU: 6
  4. FIFO: 5; LRU: 5
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Clock hat die Seitenrahmen A(1), B(1), C(0), D(1), der Zeiger steht bei B. Ein Seitenfehler lädt E. Was ist das Ergebnis der Ersetzung einschließlich der neuen Zeigerposition?
  1. B wird verdrängt; E hat Bit 1; Zeiger auf C
  2. C wird verdrängt; E hat Bit 1; Zeiger auf D
  3. C wird verdrängt; E hat Bit 0; Zeiger auf D
  4. D wird verdrängt; E hat Bit 1; Zeiger auf A
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Drei Prozesse haben Arbeitsmengengrößen von 7, 5 und 4 Seiten. Nur 12 Seitenrahmen sind verfügbar. Wenn die Zulassungskontrolle genau einen ganzen Prozess suspendiert und die Anzahl der entfernten Arbeitsmengenseiten minimiert, welchen Prozess soll sie suspendieren und wie viele benötigte Seitenrahmen bleiben frei?
  1. Prozess mit 5 Seiten suspendieren; 1 Seitenrahmen frei
  2. Prozess mit 7 Seiten suspendieren; 3 Seitenrahmen frei
  3. Keinen Prozess suspendieren; 4 Seitenrahmen frei
  4. Prozess mit 4 Seiten suspendieren; 0 Seitenrahmen frei
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 3: Übung 3: Die Mechanismen kombinieren10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Ein virtueller 28-Bit-Adressraum hat 16 KiB große Seiten und 8 Byte große Einträge in einer vollständigen linearen Tabelle. Wie groß ist die Tabelle?
  1. 64 KiB
  2. 128 KiB
  3. 256 KiB
  4. 2 MiB
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Das Betriebssystem entfernt die Schreibberechtigung einer Abbildung, die zwei Kerne möglicherweise zwischengespeichert haben. Welchen zwischengespeicherten Zustand muss es aktualisieren?
  1. Nur die Datenbytes auf beiden Kernen invalidieren
  2. Die Übersetzung nur auf dem schreibenden Kern invalidieren
  3. Die veraltete Übersetzung auf beiden Kernen invalidieren
  4. Die Adressraumkennungen aller Prozesse ersetzen
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Eine invertierte Tabelle deckt 8 GiB physischen Speicher mit 8 KiB großen Seitenrahmen ab. Wie viele Einträge benötigt sie?
  1. 1.048.576 Einträge
  2. 262.144 Einträge
  3. 2.097.152 Einträge
  4. 8.388.608 Einträge
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Ein zweistufiges 32-Bit-System nutzt 4 KiB große Seiten und 4 Byte große Einträge. Das Verzeichnis beginnt bei der physischen Adresse 0x3000. Ein erlaubter Zugriff nutzt die virtuelle Adresse 0x01407120; sein PDE enthält PFN 0x52 und sein PTE enthält PFN 0x9C. Wie lauten die PDE-Adresse, die PTE-Adresse und die endgültige Datenadresse?
  1. 0x3005, 0x52007, 0x9C120
  2. 0x3014, 0x5201C, 0x52120
  3. 0x301C, 0x52014, 0x9C120
  4. 0x3014, 0x5201C, 0x9C120
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Ein schwerer Seitenfehler benötigt einen Seitenlesevorgang von 0,15 ms. Ist die gewählte Opferseite verändert, dauert ein zuvor erforderlicher synchroner Schreibvorgang 0,20 ms. Um wie viel langsamer ist dieser Seitenfehler als einer mit einer unveränderten Opferseite, deren Inhalt wiederherstellbar ist? Vernachlässige den übrigen Aufwand.
  1. 0,20 ms langsamer
  2. 0,05 ms langsamer
  3. 0,15 ms langsamer
  4. 0,35 ms langsamer
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Warum muss eine neu bereitgestellte, bei Bedarf nullinitialisierte Seite Nullen enthalten, bevor der Prozess sie liest?
  1. Damit die virtuelle Adresse der Seite ihrer Seitenrahmennummer entspricht
  2. Damit die Seite bereits eine Kopie im Auslagerungsbereich hat
  3. Damit der Prozessor ihr Änderungsbit niemals setzen kann
  4. Damit Datenreste eines anderen Prozesses nicht sichtbar werden
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Ein Ablauf mit 20 Zugriffen beginnt mit leerem Speicher, greift auf acht verschiedene Seiten zu und verzeichnet 13 Fehlzugriffe. Wie hoch ist seine Trefferquote ohne Erstzugriffsfehler?
  1. 7/20 oder 35 %
  2. 12/20 oder 60 %
  3. 7/12, etwa 58,3 %
  4. 7/13, etwa 53,8 %
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Eine LRU-Simulation mit zwei Seitenrahmen beginnt bei 9, 3, 9, 7, 3, 9, 7 mit leerem Speicher. Wie viele Fehlzugriffe gibt es und kann eine LRU-Simulation mit drei Seitenrahmen bei derselben Folge mehr Fehlzugriffe haben?
  1. 5 Fehlzugriffe; mehr Seitenrahmen können keine hinzufügen
  2. 6 Fehlzugriffe; mehr Seitenrahmen können keine hinzufügen
  3. 6 Fehlzugriffe; mehr Seitenrahmen können welche hinzufügen
  4. 7 Fehlzugriffe; mehr Seitenrahmen können welche hinzufügen
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Clock beginnt mit voll belegten Seitenrahmen A(1), B(0), C(1), der Zeiger steht bei A. Die Zugriffe sind D, A, E, wobei D und E anfangs fehlen; Treffer setzen Bits und Ersetzungen setzen das neue Bit und bewegen den Zeiger weiter. Wie lauten die endgültigen Seitenrahmeninhalte in der ursprünglichen Reihenfolge und die Zeigerposition?
  1. E, D, C; Zeiger bei B
  2. A, E, D; Zeiger bei B
  3. E, D, C; Zeiger bei C
  4. A, D, E; Zeiger bei A
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Wie lautet nach Zugriff 9 in 2, 6, 2, 8, 6, 9, 9, 6, 4 die Arbeitsmenge für ein Fenster mit fünf Zugriffen?
  1. {4, 6, 9}
  2. {2, 4, 6, 8, 9}
  3. {4, 6, 8, 9}
  4. {4, 9}
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 4: Übung 4: Aufwand und Zugriffsmuster analysieren10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Eine virtuelle 34-Bit-Adresse nutzt 8 KiB große Seiten. Wie viele VPN-Bits und virtuelle Seiten hat der Adressraum?
  1. 13 VPN-Bits; 213 Seiten
  2. 22 VPN-Bits; 222 Seiten
  3. 21 VPN-Bits; 234 Seiten
  4. 21 VPN-Bits; 221 Seiten
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Ein an einer Seitengrenze ausgerichtetes C-Array hat 128 Zeilen und 1.024 Ganzzahlen zu je vier Byte pro Zeile. Ein LRU-TLB mit 64 Einträgen ist anfangs leer; die Seiten sind 4 KiB groß und nur Arrayzugriffe zählen. Wie viele TLB-Fehlzugriffe treten beim zeilenweisen und beim spaltenweisen Durchlaufen auf?
  1. Zeilenweise: 128; spaltenweise: 131.072
  2. Zeilenweise: 128; spaltenweise: 128
  3. Zeilenweise: 1.024; spaltenweise: 131.072
  4. Zeilenweise: 131.072; spaltenweise: 128
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Die Prozesse A und B nutzen beide VPN 12, die auf unterschiedliche Seitenrahmen abgebildet ist. Ihre TLB-Einträge tragen unterschiedliche ASIDs. Warum können beide Einträge über einen Wechsel hinweg im Cache bleiben?
  1. Die Suche gleicht die PFN und die gespeicherten Berechtigungen ab
  2. Die Suche gleicht die aktuelle ASID zusammen mit der VPN ab
  3. Die Suche gleicht nach Aktualisierung der Tabellenwurzel nur die VPN ab
  4. Die Suche gleicht über alle Seiten hinweg nur die aktuelle ASID ab
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Ein zweistufiges 32-Bit-System hat 4 KiB große Seiten und 4 Byte große Einträge. Prozess A bildet 1.024 aufeinanderfolgende Seiten ab der virtuellen Adresse null ab. Prozess B bildet 1.024 Seiten ab, eine in jedem Verzeichnisbereich. Wie viel Tabellenspeicher benötigt jeder einschließlich seines Verzeichnisses?
  1. A: 4 KiB; B: 4 MiB
  2. A: 8 KiB; B: 8 KiB
  3. A: 8 KiB; B: 4 MiB + 4 KiB
  4. A: 4 MiB; B: 4 MiB + 4 KiB
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Ersetze bei der vierstufigen Seitenverwaltung auf x86-64 einen vollständig belegten, ausgerichteten 2-MiB-Bereich mit 4-KiB-Abbildungen durch eine 2-MiB-Abbildung. Nimm an, dass obere Tabellen für andere Abbildungen weiterhin benötigt werden. Wie viele Tabellenseiten der untersten Stufe und Lesezugriffe beim Durchlauf pro TLB-Fehlzugriff entfallen für diesen Bereich?
  1. 512 Tabellenseiten; ein Lesezugriff beim Durchlauf
  2. Eine Tabellenseite; zwei Lesezugriffe beim Durchlauf
  3. Eine Tabellenseite; ein Lesezugriff beim Durchlauf
  4. 512 Tabellenseiten; zwei Lesezugriffe beim Durchlauf
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Ein Zugriff führt zu einem TLB-Fehlzugriff, aber sein PTE ist präsent und erlaubt den Zugriff. Erfordert die Beschaffung dieser Übersetzung einen schweren Seitenfehler?
  1. Ja; jedes Nachfüllen des TLB liest die Seite aus dem Auslagerungsbereich
  2. Nein; die Übersetzung kann ohne Massenspeicherzugriff eingetragen werden
  3. Ja; das Präsenzbit wird durch den TLB-Fehlzugriff zurückgesetzt
  4. Nein; der Zugriff wird ohne jede Berechtigungsprüfung abgeschlossen
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Gewöhnliche Zugriffe dauern 120 ns und Zugriffe mit schwerem Seitenfehler insgesamt 3 ms. Welche maximale Wahrscheinlichkeit für schwere Seitenfehler hält den Durchschnitt im Modell mit zwei Fällen bei höchstens 150 ns?
  1. 150/3000000=5,0×10−5
  2. 30/3000120≈1,0×10−5
  3. 120/3000000=4,0×10−5
  4. 30/2999880≈1,0×10−5
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Vergleiche LRU und OPT bei drei anfänglich leeren Seitenrahmen für 5, 2, 8, 5, 1, 2, 5, 8. Wie viele Fehlzugriffe verursacht jede Strategie?
  1. LRU: 6; OPT: 5
  2. LRU: 7; OPT: 5
  3. LRU: 6; OPT: 6
  4. LRU: 7; OPT: 6
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Ein Durchlauf des erweiterten Clock-Algorithmus vergleicht X mit (Referenzbit, Änderungsbit) = (0, 1) und Y mit (1, 0). Welche Seite wird nach der üblichen Klassenreihenfolge bevorzugt und welcher Sicherungsaufwand kann dabei entstehen?
  1. Y; seine Sicherung kann einen Schreibvorgang erfordern
  2. X; sein Referenzbit 0 macht Schreiben unnötig
  3. X; seine Sicherung kann einen Schreibvorgang erfordern
  4. Y; sein Änderungsbit 0 belegt, dass es ungenutzt war
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Zwei Prozesse benötigen jeweils sechs Seiten, um Fortschritte zu machen, erhalten zusammen aber acht Seitenrahmen. Eine vorgeschlagene Lösung wechselt von globaler zu lokaler Seitenersetzung und gibt jedem vier Seitenrahmen. Warum kann das Seitenflattern bestehen bleiben?
  1. Jede Zuweisung bleibt kleiner als die Arbeitsmenge ihres Prozesses
  2. Lokale Seitenersetzung legt jede Zuweisung dauerhaft fest
  3. Acht Seitenrahmen reichen bei getrenntem Besitz jeder Seite
  4. Beide Prozesse wählen Opferseiten weiterhin aus einem globalen Vorrat
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 5: Übung 5: Übertragen und diagnostizieren10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Bei 8 KiB großen Seiten hat die virtuelle Adresse 0x00012345 eine präsente Abbildung auf PFN 0x2D, die den Zugriff erlaubt. Welche physische Adresse ergibt sich?
  1. 0x0005A345
  2. 0x0002D345
  3. 0x0005B345
  4. 0x00012345
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Zwei Entwürfe haben keine zusätzliche TLB-Abfragezeit und keine Seitenfehler oder Caches für den Seitentabellendurchlauf. Der Speicher benötigt 90 ns. Entwurf L hat eine lineare Tabelle und 95 % TLB-Treffer; Entwurf H hat eine vierstufige Tabelle und 99 % Treffer. Wie hoch sind ihre durchschnittlichen Zugriffszeiten?
  1. L: 94,5 ns; H: 90,9 ns
  2. L: 85,5 ns; H: 89,1 ns
  3. L: 94,5 ns; H: 93,6 ns
  4. L: 99 ns; H: 97,2 ns
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Bei fester virtueller Adressbreite wechselt eine lineare Tabelle von 4 KiB großen Seiten und 8 Byte großen Einträgen zu 16 KiB großen Seiten und 16 Byte großen Einträgen. Wie ändert sich ihre Gesamtgröße in Byte?
  1. Sie wird ein Viertel so groß
  2. Sie wird halb so groß
  3. Sie bleibt gleich groß
  4. Sie wird doppelt so groß
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Ein hypothetisches System nutzt 46 implementierte virtuelle Adressbits, 8 KiB große Seiten und 8 Byte große Einträge in seitengroßen Tabellen. Die unteren Indizes werden vollständig ausgeschöpft. Wie viele Stufen werden benötigt und wie viele Indexbits bleiben für die Wurzel?
  1. Drei Stufen; 10 Wurzelindexbits
  2. Vier Stufen; 6 Wurzelindexbits
  3. Fünf Stufen; 3 Wurzelindexbits
  4. Vier Stufen; 3 Wurzelindexbits
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Eine veränderte Seite wird erfolgreich zurückgeschrieben und bleibt dabei eingelagert. Danach beschreibt sie kein Prozess. Welchen Zustand hat sie und kann ein weiterer Zugriff sie ohne Einlagern nutzen?
  1. Verändert und eingelagert; ja
  2. Unverändert und eingelagert; ja
  3. Unverändert und nicht eingelagert; nein
  4. Verändert und nicht eingelagert; nein
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Die Prozesse A, B und C teilen sich anfangs durch COW zwei private Datenseiten von je 4 KiB. A beschreibt beide Seiten, dann B die erste und C anschließend die zweite. Eine Behandlungsroutine verwendet einen ursprünglichen Seitenrahmen erst dann erneut, wenn er nur noch einen Besitzer hat. Wie viel zusätzlicher physischer Seitenspeicher wird für diese Schreibzugriffe benötigt?
  1. 16 KiB
  2. 12 KiB
  3. 20 KiB
  4. 24 KiB
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Eine Referenzfolge nutzt sieben verschiedene Seiten und beginnt mit leerem Speicher. Wie viele Erstzugriffsfehler muss sie enthalten?
  1. 0 Erstzugriffsfehler
  2. 6 Erstzugriffsfehler
  3. 7 Erstzugriffsfehler
  4. 14 Erstzugriffsfehler
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Zwei anfänglich leere FIFO-Simulationen verarbeiten 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5, 1 mit drei und vier Seitenrahmen. Wie viele Fehlzugriffe gibt es und zeigt die größere Zuweisung bei dieser vollständigen Folge die Belady-Anomalie?
  1. Drei: 9; vier: 10; ja
  2. Drei: 10; vier: 10; nein
  3. Drei: 11; vier: 10; nein
  4. Drei: 10; vier: 11; ja
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Clock hat die Seitenrahmen R(1), S(1), T(1), der Zeiger steht bei S. Während der Suche nach einer Opferseite treten keine Treffer auf. Welche Seite wird verdrängt und wo endet der Zeiger nach der Ersetzung?
  1. R wird verdrängt; Zeiger endet bei S
  2. S wird verdrängt; Zeiger endet bei T
  3. T wird verdrängt; Zeiger endet bei R
  4. S wird verdrängt; Zeiger endet bei S
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Zu einem Zeitpunkt haben die Prozesse A und B die Zugriffsfenster 7, 4, 7, 9, 4, 7 und 2, 8, 2, 5, 8, 2. Die Fenstergröße ist sechs und ihre Seitenmengen überschneiden sich nicht. Sie haben insgesamt fünf Seitenrahmen. Was folgert eine arbeitsmengenbasierte Zulassungsstrategie?
  1. Bedarf: zwölf Seitenrahmen; beide Fenster automatisch verkürzen
  2. Bedarf: fünf Seitenrahmen; beide Arbeitsmengen passen bereits
  3. Bedarf: sechs Seitenrahmen; die Menge aktiver Prozesse verringern
  4. Bedarf: drei Seitenrahmen; beide Prozesse können alle teilen
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Hängst du bei deiner eigenen Aufgabe fest? Hausaufgabenhilfe

Schlüsselbegriffe

79 Schlüsselbegriffe, jeweils mit Definition

Ä

Änderungsbit
Ein Änderungsbit erfasst, ob eine Seite seit dem letzten Zurücksetzen ihres Änderungszustands beschrieben wurde, und hilft dabei, ungesicherte Änderungen zu erkennen.
Nach Abschluss des Zurückschreibens kann das Betriebssystem den Änderungszustand zurücksetzen, während die Seite eingelagert bleibt.

A

Adressraumkennung
Eine Adressraumkennung versieht zwischengespeicherte Übersetzungen mit ihrem Adressraumkontext, sodass identische VPNs verschiedener Prozesse unterscheidbar bleiben.
Unterschiedliche ASIDs erlauben, dass zwei Übersetzungen für die virtuelle Seite 7 sicher im selben TLB nebeneinander bestehen.
Arbeitsmenge
Eine Arbeitsmenge ist die Menge verschiedener Seiten, die ein Prozess in einem kürzlich zurückliegenden Zugriffsfenster genutzt hat. Sie schätzt seinen aktuellen Bedarf an eingelagerten Seiten.
Für das Fenster mit fünf Zugriffen 4, 5, 4, 5, 4 ist die Arbeitsmenge {4, 5} mit Größe zwei.
Auslagerungsbereich
Ein Auslagerungsbereich ist ein reservierter Speicherbereich, der Inhalte aus dem physischen Speicher verdrängter Seiten sichert, etwa eine Auslagerungsdatei oder -partition.
Eine Seitenfehlerbehandlungsroutine kann die Bytes einer verdrängten Seite von ihrem erfassten Auslagerungsort in einen freien Seitenrahmen lesen.

B

Belady-Anomalie
Die Belady-Anomalie ist eine Zunahme der Seitenfehlzugriffe, wenn eine Strategie bei derselben Referenzfolge und denselben Anfangsbedingungen mehr Seitenrahmen erhält.
Bei FIFO kann die Anomalie auftreten; zusätzliche Kapazität verändert die spätere Wahl der Opferseiten nach Ankunftsreihenfolge.
Bündelung von Seitentransfers
Die Bündelung von Seitentransfers fasst Seitenübertragungen zu größeren Speicheroperationen zusammen und verringert so den Aufwand vieler einzelner kleiner Übertragungen, besonders auf Festplatten.
Ein Seitendämon kann mehrere Schreibvorgänge veränderter Seiten zusammenfassen, während er Seitenrahmen für die spätere erneute Nutzung vorbereitet.

C

Clock-Seitenersetzung
Die Clock-Seitenersetzung durchsucht einen Ring von Seitenrahmen, setzt gesetzte Referenzbits zurück und verdrängt den ersten Kandidaten, den sie mit nicht gesetztem Bit findet.
Eine Seite mit Referenzbit 1 erhält eine weitere Chance, wenn der Zeiger ihr Bit zurücksetzt und weitergeht.
Copy-on-Write
Copy-on-Write nutzt private Seiteninhalte zunächst gemeinsam und erstellt eine private beschreibbare Kopie, wenn ein Prozess erstmals eine gemeinsam genutzte Seite beschreibt.
Ein Kindprozess, der nur drei 4 KiB große Seiten verändert, kann vermeiden, den gesamten Datenbereich des Elternprozesses zu kopieren.

D

Dünn besetzter Adressraum
Ein dünn besetzter Adressraum hat große ungenutzte virtuelle Bereiche zwischen abgebildeten Bereichen, etwa die Lücke zwischen Heap und Stack eines Prozesses.
Die große virtuelle Lücke benötigt nicht allein deshalb Datenseitenrahmen, weil auf beiden Seiten Adressen existieren.

E

Effektive Zugriffszeit
Die effektive Zugriffszeit ist die nach Wahrscheinlichkeiten gewichtete durchschnittliche Zeit für Speicherzugriffe unter einem festgelegten Aufwandsmodell für Treffer, Fehlzugriffe oder Seitenfehler.
Eine TLB-Trefferquote von 98 % ergibt 102 ns, wenn Treffer 100 ns und erfolgreich behandelte Fehlzugriffe 200 ns dauern.
Erstzugriffsfehler
Ein Erstzugriffsfehler ist ein Fehlzugriff bei der ersten Nutzung einer zuvor nicht geladenen Seite, der durch eine andere Strategie zur Wahl der Opferseite nicht vermieden werden kann.
Ein Ablauf, der mit leerem Speicher beginnt und auf fünf verschiedene Seiten zugreift, hat fünf Erstzugriffsfehler.
Erweiterter Clock-Algorithmus
Der erweiterte Clock-Algorithmus bezieht den Änderungszustand in die Auswahl von Opferseiten mit zweiter Chance ein, sodass sowohl die Zugriffshistorie als auch der Aufwand zur Sicherung des Inhalts eine Rolle spielen.
Eine Seite, deren Referenz- und Änderungsbit beide 0 sind, gehört zur bevorzugten Klasse (0, 0): Es gibt keine aufgezeichnete kürzliche Nutzung und keine Änderungen, die auf das Zurückschreiben warten.

F

FIFO-Seitenersetzung
Die FIFO-Seitenersetzung verdrängt die eingelagerte Seite, die zuerst geladen wurde, und behält die Ankunftsreihenfolge bei Treffern unverändert bei.
Eine häufig genutzte Seite kann dennoch die FIFO-Opferseite sein, wenn sie vor allen anderen eingelagerten Seiten ankam.
Fünfstufige Seitenverwaltung
Die fünfstufige Seitenverwaltung fügt auf unterstützenden x86-64-Prozessoren eine obere Tabellenstufe hinzu und ermöglicht im ausgewählten Zustand 57 implementierte virtuelle Adressbits.
Die Aktivierung der zusätzlichen Stufe fügt einen weiteren Neun-Bit-Index vor den vier bekannten unteren Indizes hinzu.

G

Gemeinsam genutzte Codeseite
Eine gemeinsam genutzte Codeseite ist eine physische Seite mit Programmbefehlen, die schreibgeschützt in die Adressräume mehrerer Prozesse abgebildet wird.
Mehrere Instanzen eines Editors können über unterschiedliche PTEs eine eingelagerte Kopie derselben Codeseite nutzen.
Globale Seitenersetzung
Die globale Seitenersetzung erlaubt einem Prozess mit Seitenfehler, eine Seite eines anderen Prozesses zu verdrängen, und nutzt den Seitenrahmenvorrat flexibel gemeinsam.
Ein wachsender Prozess kann die Seitenfehlerrate eines anderen erhöhen, indem er Seitenrahmen übernimmt, die dessen Seiten enthielten.
Große Speicherseite
Eine große Speicherseite ist eine Seite, die größer als die Basisseitengröße ist und deren Abbildung einen hierarchischen Durchlauf bei einem Eintrag einer höheren Stufe beenden kann.
Ein Verzeichniseintrag auf x86-64 kann eine 2 MiB große Seite direkt abbilden und die Suche in der untersten Tabelle auslassen.

H

Hardwareverwalteter TLB
Ein hardwareverwalteter TLB wird bei einer fehlenden Übersetzung von der Prozessorhardware nachgefüllt, indem diese ein von der Hardware festgelegtes Seitentabellenformat durchläuft.
Ein gewöhnlicher TLB-Fehlzugriff auf x86 kann behandelt werden, ohne eine Nachfüllroutine des Betriebssystems aufzurufen.
Hashbasierte Seitentabelle
Eine hashbasierte Seitentabelle findet Abbildungsdatensätze über einen Hash der Identität der virtuellen Seite; bei Kollisionen von Schlüsseln ist zusätzliche Behandlung nötig.
Eine Hashsuche kann eine Prozess-und-VPN-Abbildung finden, ohne jeden Eintrag einer invertierten Struktur zu durchsuchen.

I

Interne Fragmentierung
Interne Fragmentierung ist zugewiesener, aber ungenutzter Platz innerhalb eines Blocks fester Größe, etwa der teilweise gefüllten letzten Seite eines Bereichs.
Ein Bereich von 9.000 Byte in drei 4 KiB großen Seiten lässt 3.288 zugewiesene Byte ungenutzt.
Invertierte Seitentabelle
Eine invertierte Seitentabelle hat für das System einen Eintrag pro physischem Seitenrahmen und erfasst die Adressraumidentität und die virtuelle Seite, die ihn belegt.
Bei 16 GiB RAM und 4 KiB großen Seitenrahmen hat eine strikt invertierte Tabelle 4.194.304 Seitenrahmeneinträge.

K

Kanonische Adresse
Eine kanonische Adresse ist eine x86-64-Adresse, deren ungenutzte obere Bits das höchste implementierte virtuelle Adressbit wiederholen.
Im gewöhnlichen vierstufigen Modus müssen die Bits oberhalb von Bit 47 dieses wiederholen, damit die Adresse kanonisch ist.
Kapazitätsfehler
Ein Kapazitätsfehler tritt auf, wenn die begrenzte Anzahl von Seitenrahmen verhindert, eine Seite bis zu einem späteren erneuten Zugriff zu behalten.
Ein Zugriff auf eine zurückkehrende Seite kann fehlschlagen, obwohl sie früher geladen wurde, weil eine andere Seite ihren Seitenrahmen übernommen hat.
Kernel-Seitentabellenisolation
Die Kernel-Seitentabellenisolation trennt die meisten Kernelabbildungen von den während der Ausführung im Benutzermodus genutzten Abbildungen und wechselt beim Eintritt in den Kernel den Abbildungskontext.
Auf betroffenen Systemen verringert die Isolation die Gefährdung durch Meltdown, verursacht aber zusätzlichen Aufwand beim Wechsel der Abbildungen.

L

Leichter Seitenfehler
Ein leichter Seitenfehler wird behoben, ohne Seiteninhalte vom Massenspeicher zu lesen, etwa durch Bereitstellen nullinitialisierten Speichers oder Abbilden eines eingelagerten Seitenrahmens.
Eine Nullinitialisierung bei Bedarf kann die Anzahl leichter Seitenfehler erhöhen, ohne Zugriffe auf den Auslagerungsbereich zu verursachen.
LFU-Seitenersetzung
Die LFU-Seitenersetzung wählt die Seite mit der niedrigsten gezählten Zugriffshäufigkeit, was Seiten begünstigen kann, die vor langer Zeit häufig genutzt wurden.
Ohne Alterung kann eine früher häufig genutzte Seite bleiben, während eine nützliche Seite einer neuen Phase verdrängt wird.
Lineare Seitentabelle
Eine lineare Seitentabelle ist ein Array mit einem Eintrag für jede mögliche virtuelle Seite, das die virtuelle Seitennummer als Index nutzt.
Eine vollständige lineare 32-Bit-Tabelle mit 4 KiB großen Seiten und 4 Byte großen Einträgen belegt 4 MiB pro Prozess.
Lokale Seitenersetzung
Die lokale Seitenersetzung beschränkt die Wahl von Opferseiten auf die dem Prozess mit dem Seitenfehler selbst zugewiesenen Seitenrahmen und begrenzt so Verdrängungen zwischen Prozessen.
Eine Zuweisung von vier Seitenrahmen kann eine Arbeitsmenge von sechs Seiten nicht allein deshalb aufnehmen, weil die Seitenersetzung lokal ist.
LRU-Seitenersetzung
Die LRU-Seitenersetzung verdrängt die eingelagerte Seite, deren letzter Zugriff am längsten zurückliegt, und aktualisiert die Reihenfolge nach letzter Nutzung bei einem Treffer.
Ein Treffer auf eine früh angekommene Seite schützt sie bei LRU, obwohl sie in der FIFO-Warteschlange weiterhin alt bleibt.

M

Mehrstufige Seitentabelle
Eine mehrstufige Seitentabelle ist eine Hierarchie indizierter Tabellen, die Zweige niedrigerer Stufen nur dort zuweist, wo Adressabbildungen sie benötigen.
Ein ungenutzter virtueller Bereich kann durch einen fehlenden Zweig statt durch Tausende ungenutzter Einträge der untersten Stufe dargestellt werden.
Multi-Gen LRU
Multi-Gen LRU ist ein Linux-Verfahren zur Seitenrückgewinnung, das Seiten nach beobachteter letzter Nutzung gruppiert, um die Verdrängung bei Speicherdruck zu steuern.
Die generationsbasierte Alterung gibt dem Rückgewinnungscode mehr Informationen über die letzte Nutzung als ein einzelnes nicht gealtertes Referenzbit.

N

Nullinitialisierung bei Bedarf
Die Nullinitialisierung bei Bedarf stellt beim ersten Zugriff nullinitialisierten Speicher bereit, statt jede reservierte Seite im Voraus zuzuweisen und mit Nullen zu füllen.
Eine erstmals berührte Heapseite kann ohne Festplattenzugriff bereitgestellt werden, wobei alte Bytes eines wiederverwendeten Seitenrahmens verborgen bleiben.

O

OOM-Killer
Ein OOM-Killer beendet bei extremem Speicherdruck einen ausgewählten Prozess, damit dessen Speicher beim Prozessende zurückgewonnen werden kann.
Die Arbeit des beendeten Prozesses geht verloren, während die freigegebenen Ressourcen anderen Prozessen die Fortsetzung ermöglichen können.
Opferseite
Eine Opferseite ist eine eingelagerte Seite, die zur Verdrängung ausgewählt wird, damit ihr physischer Seitenrahmen für den Inhalt einer anderen Seite wiederverwendet werden kann.
OPT wählt die eingelagerte Opferseite mit der am weitesten entfernten nächsten Nutzung in der bekannten zukünftigen Folge.
Optimale Seitenersetzung
Die optimale Seitenersetzung verdrängt die Seite, die am weitesten in der Zukunft benötigt wird, und ergibt für eine vollständig bekannte Referenzfolge die minimale Anzahl an Fehlzugriffen.
OPT ist ein Maßstab für Simulationen, weil ein Betriebssystem die zukünftigen Zugriffe eines beliebigen Programms nicht kennen kann.

P

Paging-Strukturcache
Ein Paging-Strukturcache hält zwischengeschaltete Seitentabelleninformationen bereit, sodass spätere Durchläufe manche Suchen auf oberen Stufen nicht wiederholen müssen.
Ein TLB-Fehlzugriff bei vier Stufen kann weniger als vier Hauptspeicherverzögerungen kosten, wenn zwischengeschaltete Einträge zwischengespeichert sind.
Physische Seitenrahmennummer
Eine physische Seitenrahmennummer bezeichnet einen Seitenrahmen durch seinen Index im physischen Speicher, nicht durch die Byteadresse seines Anfangs.
Bei 4 KiB großen Seiten bezeichnet die physische Seitenrahmennummer 3 den Seitenrahmen, der bei der Byteadresse 12.288 beginnt.
PML4
Die PML4 ist die oberste Tabelle bei der vierstufigen Seitenverwaltung auf x86-64. Sie wird über CR3 ausgewählt und durch die Bits 47–39 der virtuellen Adresse indiziert.
Der PML4-Eintrag führt zu einer Seitenverzeichniszeigertabelle, bevor der Durchlauf das Verzeichnis und die unterste Stufe erreicht.
Präsenzbit
Ein Präsenzbit teilt der Hardware mit, ob ein Eintrag eine Abbildung auf einen eingelagerten Seitenrahmen bereitstellt; bei einem nicht gesetzten Bit muss die Software den Zustand der Seite bestimmen.
Ein nicht gesetztes Präsenzbit kann die Behandlungsroutine zu Auslagerungsmetadaten oder einer Nullinitialisierung bei Bedarf führen.

R

Räumliche Lokalität
Räumliche Lokalität ist die Tendenz, zeitlich nah beieinander auf benachbarte Adressen zuzugreifen, sodass eine Seitenübersetzung für viele Zugriffe dienen kann.
Das Lesen benachbarter Arrayelemente ergibt nach dem ersten Element auf einer Seite oft viele TLB-Treffer.
Referenzbit
Ein Referenzbit erfasst, ob auf eine Seite zugegriffen wurde, seit das Betriebssystem das Bit zuletzt zurückgesetzt hat; es zählt die Zugriffe nicht.
Zehn Lesezugriffe nach dem Zurücksetzen hinterlassen denselben Bitwert wie ein Lesezugriff: Das Referenzbit ist 1.
Referenzfolge
Eine Referenzfolge ist eine geordnete Folge von Seitennummern, mit der Treffer, Fehlzugriffe und die Wahl von Opferseiten für eine Seitenersetzungsstrategie simuliert werden.
Dieselbe Referenzfolge und dieselben anfänglichen Seitenrahmen ermöglichen einen Vergleich von FIFO und LRU unter gleichen Bedingungen.

S

Schutzbits
Schutzbits legen erlaubte Operationen für eine Abbildung fest, etwa Lesen, Schreiben, Ausführen und Zugriff aus dem Benutzermodus.
Eine eingelagerte Codeseite kann einen Schreibzugriff abweisen, obwohl ihre Seitenrahmennummer verfügbar ist.
Schwerer Seitenfehler
Ein schwerer Seitenfehler erfordert einen Lesezugriff auf den Massenspeicher, um den Seiteninhalt zu beschaffen, bevor das Betriebssystem die Abbildung vervollständigen kann.
Das Lesen einer ausgelagerten Datenseite von einer SSD ist auch dann ein schwerer Seitenfehler, wenn die SSD schnell ist.
Segmentierung mit Seitenverwaltung
Segmentierung mit Seitenverwaltung gibt jedem Segment eine begrenzte Seitentabelle und lässt Einträge für virtuelle Lücken zwischen Segmenten weg.
Getrennte Heap- und Stacktabellen sparen Einträge für die Lücke, können aber unterschiedlich große Tabellenzuweisungen erfordern.
Seite
Eine Seite ist ein Block virtueller Adressen fester Größe, der als Einheit auf einen gleich großen physischen Seitenrahmen abgebildet wird.
Eine 4 KiB große virtuelle Seite kann Seitenrahmen 12 belegen, selbst wenn die nächste virtuelle Seite Seitenrahmen 3 belegt.
Seitenanforderung bei Bedarf
Die Seitenanforderung bei Bedarf stellt eine Seite bereit, sobald ein Zugriff sie erstmals benötigt, sodass nicht jede Seite vor Ausführungsbeginn vorbereitet werden muss.
Ein Programm kann starten, während Seiten, auf die es noch nicht zugegriffen hat, noch keine eingelagerten Inhalte haben.
Seitendämon
Ein Seitendämon ist ein Hintergrundprozess oder -thread des Betriebssystems, der Speicher zurückgewinnt und freie Seitenrahmen vorbereitet, bevor dringende Zuweisungen sie benötigen.
kswapd unter Linux kann beginnen, Seiten zurückzugewinnen, während noch ein kleiner Vorrat freier Seitenrahmen vorhanden ist.
Seitenfehler
Ein Seitenfehler ist eine Ausnahme, die ausgelöst wird, wenn ein Speicherzugriff mit seiner aktuellen Abbildung nicht abgeschlossen werden kann, etwa bei fehlender Präsenz oder einer Schutzverletzung.
Die Behandlungsroutine kann einen COW-Schreibfehler beheben, aber einen Schreibzugriff auf tatsächlich schreibgeschützten Programmcode abweisen.
Seitenfehlerhäufigkeitssteuerung
Die Seitenfehlerhäufigkeitssteuerung passt die Zuweisung von Seitenrahmen an einen Prozess anhand eines oberen und eines unteren Schwellenwerts für seine gemessene Seitenfehlerrate an.
Ein Prozess oberhalb des oberen Schwellenwerts benötigt mehr Seitenrahmen; einer unterhalb des unteren kann einige freigeben.
Seitenflattern
Seitenflattern ist anhaltendes umfangreiches Verschieben von Seiten bei wenig nützlicher Ausführung, weil aktive Prozesse mehr eingelagerte Seiten benötigen, als der Speicher aufnimmt.
Niedrige CPU-Auslastung zusammen mit ständigen Seitentransfers kann darauf hinweisen, dass das Starten weiterer Prozesse den Druck verschlimmern würde.
Seitenoffset
Ein Seitenoffset ist die Byteposition innerhalb einer Seite, die in den niederwertigen Adressbits kodiert ist und bei der Übersetzung erhalten bleibt.
Ein Offset von 904 bezeichnet weiterhin Byte 904, nachdem die Seite auf den physischen Seitenrahmen 9 abgebildet wurde.
Seitenrahmen
Ein Seitenrahmen ist ein Block physischen Speichers fester Größe, der eine virtuelle Seite der entsprechenden Seitengröße aufnehmen kann.
Das Betriebssystem kann jeden freien 4 KiB großen Seitenrahmen nutzen, um eine neu benötigte 4 KiB große Seite aufzunehmen.
Seitentabelle
Eine Seitentabelle ist eine vom Betriebssystem verwaltete Struktur, die die Abbildungen virtueller auf physische Adressen und Zugriffsinformationen eines Prozesses erfasst.
Durch den Wechsel der aktuellen Seitentabelle können zwei Prozesse dieselbe virtuelle Adresse für unterschiedliche Daten nutzen.
Seitentabellendurchlauf
Ein Seitentabellendurchlauf folgt indizierten Abbildungseinträgen von der gewählten Wurzel zu einem Eintrag der untersten Stufe, der die angeforderte physische Seite bezeichnet.
Ein zweistufiger Durchlauf liest einen PDE und einen PTE, bevor der Prozessor auf die angeforderten Daten zugreift.
Seitentabelleneintrag
Ein Seitentabelleneintrag ist ein Abbildungsdatensatz, der eine physische Seitenrahmennummer und Zustands- oder Schutzinformationen für eine virtuelle Seite enthält.
Der Prozessor prüft einen Seitentabelleneintrag, bevor er dessen Seitenrahmennummer für den Abschluss einer Übersetzung nutzt.
Seitenverzeichnis
Ein Seitenverzeichnis ist eine Tabelle einer höheren Stufe, deren Einträge Seitentabellenseiten niedrigerer Stufen finden oder deren Bereiche als fehlend markieren.
In einem 10/10/12-System deckt ein Verzeichniseintrag einen virtuellen Bereich mit 1.024 Datenseiten ab.
Seitenverzeichniseintrag
Ein Seitenverzeichniseintrag ist ein Datensatz, der auf eine untere Tabelle zeigt und Zustand oder Berechtigungen für den von ihm dargestellten virtuellen Bereich enthält.
Die Seitenrahmennummer eines PDE, der nicht zur untersten Stufe gehört, findet eine Seite mit PTEs, nicht den endgültigen Datenseitenrahmen des Programms.
Softwareverwalteter TLB
Ein softwareverwalteter TLB nutzt eine Ausnahmebehandlungsroutine des Betriebssystems, um eine fehlende Übersetzung zu finden und mit privilegierten Befehlen einzutragen.
Eine klassische MIPS-Nachfüllroutine kehrt zurück, damit der Prozessor den Befehl mit dem Fehlzugriff wiederholen kann.
Speicherabbildung mit ausschließlichem Kernelzugriff
Eine Speicherabbildung mit ausschließlichem Kernelzugriff erlaubt privilegierten Kernelzugriff und verweigert gewöhnliche Zugriffe aus dem Benutzermodus auf den abgebildeten Speicher.
Ein Lesezugriff aus dem Benutzermodus auf eine Kernel-Seite mit ausschließlichem Kernelzugriff wird auch dann abgewiesen, wenn die Abbildung präsent ist.
Speicherverwaltungseinheit
Eine Speicherverwaltungseinheit ist Prozessorhardware, die bei Speicherzugriffen Adressen übersetzt und Berechtigungen von Abbildungen durchsetzt.
Die MMU kann einen Schreibzugriff über eine schreibgeschützte Übersetzung auch dann abweisen, wenn die TLB-Suche einen Treffer erzielt.
Speicherzugriffsverletzung
Eine Speicherzugriffsverletzung ist eine übliche Reaktion des Betriebssystems auf einen ungültigen oder verbotenen Speicherzugriff, den die Behandlungsroutine nicht zulässig beheben kann.
Ein TLB-Fehlzugriff bei einer präsenten Seite, die den Zugriff erlaubt, verursacht allein keine Speicherzugriffsverletzung.
Stack-Algorithmus
Ein Stack-Algorithmus hat bei steigender Seitenrahmenkapazität ineinander enthaltene Mengen eingelagerter Seiten, sodass zusätzliche Seitenrahmen seine Fehlzugriffszahl nicht erhöhen.
LRU und OPT haben die Stack-Eigenschaft, obwohl LRU dennoch mehr Fehlzugriffe als OPT verursachen kann.

T

Tabellenindex
Ein Tabellenindex ist das VPN-Feld, das einen Eintrag innerhalb der unteren Tabelle auswählt, die durch den vorhergehenden Verzeichniseintrag gefunden wurde.
Tabellenindex 3 findet einen PTE 12 Byte hinter seiner Tabellenbasis, wenn Einträge vier Byte belegen.
TLB-Fehlzugriff
Ein TLB-Fehlzugriff tritt auf, wenn im Übersetzungscache keine nutzbare Übersetzung für eine angeforderte virtuelle Seite und den Kontext gefunden wird.
Ein TLB-Fehlzugriff kann aus einem präsenten PTE behandelt werden, ohne Seiteninhalte aus dem Auslagerungsbereich zu lesen.
TLB-Invalidierung
Eine TLB-Invalidierung macht zwischengespeicherte Übersetzungen in ihrem Geltungsbereich ungültig, sodass spätere Zugriffe sie anhand aktueller Abbildungsinformationen erneut laden müssen.
Das Invalidieren bei einem Kontextwechsel verhindert, dass der nächste Prozess eine Übersetzung ohne Kennung nutzt.
TLB-Reichweite
Die TLB-Reichweite ist die Speichermenge, die durch eine Menge zwischengespeicherter Übersetzungen dargestellt wird. Sie wird als Anzahl der Einträge mal Seitengröße berechnet.
Vierundsechzig Einträge stellen bei 4 KiB großen Seiten 256 KiB dar, sofern jeder Eintrag diese Seitengröße abbildet.
TLB-Shootdown
Ein TLB-Shootdown koordiniert die Invalidierung über Prozessorkerne hinweg, die eine vom Betriebssystem geänderte Abbildung zwischengespeichert haben könnten.
Wird die Schreibberechtigung entfernt, müssen andere Kerne aufhören, eine etwaige ältere beschreibbare Übersetzung zu nutzen.
Translation Lookaside Buffer
Ein Translation Lookaside Buffer ist ein schneller Hardwarecache für kürzlich verwendete Übersetzungen virtueller Seiten und deren Zugriffsinformationen.
Der sequenzielle Zugriff auf viele Ganzzahlen auf einer Seite kann eine einzige zwischengespeicherte TLB-Übersetzung wiederverwenden.

U

Uhrzeiger
Ein Uhrzeiger markiert den bei der Clock-Seitenersetzung als Nächstes zu prüfenden Seitenrahmen und bewegt sich weiter, wenn Bits von Kandidaten zurückgesetzt oder Kandidaten ersetzt werden.
Nachdem Clock die Seite in einem Seitenrahmen ersetzt hat, bewegt sich der Uhrzeiger zum nächsten Seitenrahmen im Ring.
Unveränderte Seite
Eine unveränderte Seite hat laut Erfassung ihres Änderungszustands keine ausstehenden Änderungen; sie sicher zu verwerfen erfordert dennoch wiederherstellbaren oder neu erzeugbaren Inhalt.
Unveränderter Code kann ohne neuen Schreibvorgang verworfen und später aus seiner ausführbaren Datei erneut geladen werden.

V

Verzeichnisindex
Ein Verzeichnisindex ist das höherwertige VPN-Feld, das bei einer hierarchischen Adressübersetzung einen Eintrag im Seitenverzeichnis auswählt.
Im 10/10/12-Verfahren wählen die höchsten zehn Bit für die virtuelle Adresse 0x00803ABC den Verzeichniseintrag 2.
Virtuelle Seitennummer
Eine virtuelle Seitennummer ist der höherwertige Teil einer virtuellen Adresse, der angibt, welche virtuelle Seite das angeforderte Byte enthält.
Bei Seiten mit 1.024 Byte hat die virtuelle Adresse 5.000 die virtuelle Seitennummer 4 und den Offset 904.
Vorabladen
Vorabladen stellt Seiten vor dem Bedarf bereit und nutzt ein erwartetes Zugriffsmuster, um spätere Wartezeiten auf Seiteninhalte zu verringern.
Vorauslesen kann bei einem sequenziellen Zugriffsmuster helfen, verschwendet aber Ressourcen, wenn die vorhergesagten Seiten ungenutzt bleiben.

W

Wasserstandsmarke
Eine Wasserstandsmarke ist ein Schwellenwert für freien Speicher, der die Rückgewinnung im Hintergrund auslöst oder begrenzt, damit das System einen Vorrat an Seitenrahmen erhält.
Fällt der freie Speicher unter eine niedrige Wasserstandsmarke, beginnt die Rückgewinnung mit dem Ziel einer höheren Anzahl freier Seitenrahmen.

Z

Zeitliche Lokalität
Zeitliche Lokalität ist die Tendenz, kürzlich genutzte Adressen erneut zu verwenden, wodurch kürzlich verwendete Übersetzungen für das Zwischenspeichern nützlich sind.
Eine kurze Schleife führt wiederholt Code auf denselben wenigen Seiten aus und kann deren zwischengespeicherte Abbildungen erneut nutzen.
Zufällige Seitenersetzung
Die zufällige Seitenersetzung wählt eine eingelagerte Opferseite zufällig, vermeidet eine Reihenfolge nach letzter Nutzung und liefert zwischen Läufen unterschiedliche Ergebnisse.
Zufällige Entscheidungen können bei einem zu großen Zyklus im Durchschnitt besser als LRU abschneiden, aber ein einzelner Lauf kann dennoch unglücklich ausfallen.
Zulassungskontrolle
Die Zulassungskontrolle begrenzt die Menge aktiver Prozesse so, dass verfügbare Seitenrahmen deren Speicherbedarf decken können, und suspendiert bei Bedarf Prozesse.
Übersteigen aktive Arbeitsmengen die Kapazität, kann das Suspendieren eines Prozesses den übrigen Prozessen Fortschritt ermöglichen.
Zurückschreiben
Zurückschreiben sichert den veränderten Inhalt einer eingelagerten Seite auf einem Hintergrundspeicher, sodass ihr Änderungszustand nach Erfolg zurückgesetzt werden kann.
Eine Seite zurückzuschreiben erfordert nicht, sie sofort zu verdrängen; der Prozess kann den Seitenrahmen weiter nutzen.

Über diese Einheit

Von StudeliFehler melden

Erstelle deine eigenen Lernmaterialien

Mach aus deinen Notizen, Folien und Dokumenten Lernleitfäden, Übungsfragen, Karteikarten und 6 weitere Tools.

Jetzt starten