Fortgeschrittene Speicherverwaltung

Lernziele und Kompetenzen

  • Sie lernen die weiterfĂĽhrenden Konzepte der Speicherverwaltung in modernen Betriebssystemen kennen,

  • verstehen wie Speichermanagement mittels einer Free List realisiert werden kann,

  • verstehen die Grundlagen des Pagings

Grundlegende Ăśberlegung

Wie gehen wir mit großen Adressräumen um?

  • Zwischen Heap und Stack liegt ggf. viel (ungenĂĽtzter) Speicher

  • Mit 32-Bit lassen sich 4 GB groĂźe Adressräume ansprechen

Exkurs

  • Unter 32-Bit Windows waren die obersten 2 GB physikalischem Speicher fĂĽr Windows Reserviert: max. 2 GB virtueller Adressraum

  • Unter 32-Bit Linux 1 GB physikalischem Speicher fĂĽr Betriebssystem: max. 3 GB virtueller Adressraum

Lösung: Segmentierung

  • Ein Base- und Bounds-Paar pro logisches Speichersegment des Adressraums

  • Was ist eine Speichersegment?

  • Zusammenhängender Speicherbereich

  • In unserem Fall drei Segmente

    • Programm-Code

    • Heap

    • Stack

Hardware-UnterstĂĽtzung

  • Folglich: Es mĂĽssen drei Base- und Bounds-Paare in der MMU unterstĂĽtzt werden

  • Frage: Woher weiĂź die CPU welches Segment gemeint ist?

  • Lösung: Teile der virtuellen Speicheradresse werden fĂĽr das Segment genutzt

Base- und Bounds Beispiel

Segment
Base
Größe

Code

32K

2K

Heap

34K

3K

Segment

28K

2K

Segmentation Fault

Speicherzugriff auf illegale Adresse in segmentiertem (aber auch bei nicht-segmentiertem Speicher)

Wie kann dass passieren?

  • Typisch fĂĽr C-Programmer.

  • Aufgrund von Pointer-Arithmetik ist es rechte einfach versehentlich eine Adresse zu »berechnen«, die auĂźerhalb des gĂĽltigen Segments liegt

Adressierung von Code-Segmenten

Beispiel:

  • 00 - Code Segment

  • 01 - Heap Segment

  • 10 - Stack Segment

Berechnung:

  • Offset + Base-Register: physikalische Speicheradresse

  • Zum PrĂĽfen der Obergrenze, wir die Größe hinzuaddiert

  • Was ist mit dem Stack?

    • Hardware-Support durch zusätzliches Bit

  • Aus EffizienzgrĂĽnden: Speicherbereiche können geteilt werden

    • Hardware-Support durch zusätzliches Protection-Bit

    • Segment kann somit in mehreren virtuellen Adressräumen genutzt werden

Segment
Base
Gräße (max. 4K)
Wächst pos.
Schutz

Code

32K

2K

1

Read-Execute

Heap

34K

3K

1

Read-Write

Stack

28K

2K

0

Read-Write

Segmentierung und das Betriebssystem

  • Bei Context Switch mĂĽssen Segment-Register ebenfalls gesichert/geladen werden

  • Was passiert wenn das Speichersegment nicht genĂĽgt?

    • malloc-Aufruf liefert Pointer auf Speicherbereich im Heap, Heap ist jedoch zu klein

    • sbrk-SysCall wird ausgefĂĽhrt, um Heap zu vergrößern

    • Betriebssystem vergrößert das Segment und aktualisiert die entsprechenden Register

    • Hinweis: Vergrößerung kann vom Betriebssystem zurĂĽckgewiesen werden (Programm hat bereits genĂĽgend Speicher oder es gibt keinen physikalischen Speicher mehr)

Fragmentierung

Speicherfragmentierung (engl. external fragmentation)

  • UrsprĂĽngliche Annahme: Alle virtuellen Adressräume sind gleich groĂź, das ist leider in der Realität nicht so

  • FĂĽr Segmente mĂĽssen passende Speicherbereiche gesucht werden

  • Physikalischer Speicher besteht somit schnell aus einer Vielzahl an belegten Speicherabschnitten und Löchern

  • Speicher muss vom Betriebssystem komprimiert werden

Exkurs: MS-DOS und EMM386.SYS

  • Unter MS-DOS gab es Anfangs ein 640KB Limit

  • Um den Speicher optimal auszunutzen musste der Speicher händisch optimiert werden, z.B.

    • durch Nutzung zusätzlicher Tools zur Speicherverwaltung

    • händisches Anordnen der zu ladenden Treiber, um LĂĽcken im

    • Speicher möglichst zu vermeiden (minimieren)

Hausaufgabe:

config.sys

Paging

  • Bisher gelernt: Segmentierung fĂĽhrt frĂĽher oder später dazu, dass der Speicher fragmentiert…

  • GlĂĽcklicherweise nutzen Betriebssysteme noch einen zweiten Mechanismus der Speicherverwaltung: Paging

  • Dabei wird der Speicher in fixe Einheiten aufgeteilt

    • Jede solche fixe Einheit heiĂźt Page (dt. Speicherseite)

    • Der physikalische Speicher ist demnach eine Aneinanderreihung von gleichgroĂźen Slots

    • Jeder solcher Slot heiĂźt Page Frame (dt. Seitenrahmen)

    • Jeder Frame kann eine Page enthalten

Paging Beispiele

Hier ein einfaches Beispiel:

  • 64-Byte virtueller Adressraum

  • 4 Pages a 16-Byte Pages

  • Betriebssystem muss »nur« vier freie Page Frames finden

  • DafĂĽr gibt es eine Free List mit freien Page Frames

  • Datenstruktur mit den Einträgen wo eine Page im physikalischen Speicher liegt, heiĂźt Page Table (dt. Seitentabelle)

  • Es gibt eine Page Table pro Prozess

Zuordnung von Frames

Paging und Address Translation

  • Unser Beispiel zuvor hatte ein 64-Byte Adressraum

  • Nun versuchen wir Daten aus einer virtuellen Adresse <virtual address> in das Register eax zu laden

  • HierfĂĽr benötigen wir zwei Komponenten

    • Virtual Page Number (VPN)

    • Offset (innerhalb der Page)

In Assembler:

  • Wir haben 16-Byte Seiten in einem 64-Byte Adressraum

  • Es mĂĽssen 4 Seiten adressiert werden können

  • Daher die 2-Bit Virtual Page Number (VPN)

  • Die restlichen Bits können zur Adressierung innerhalb der Seite verwendet werden (= Offset)

  • Beispiel:

    • Zugriff auf virtuelle Adresse 21

    • 21 im Dezimalsystem in ist 010101 Binär, ist 15 im Hexadezimalsystem

    • Somit Zugriff auf Byte5 in Page 1

In Asssembler:

  • Die physikalische Adresse1 von Page 1 ist 7 (= 111)

  • Physical Frame Number (PFN) oder auch Physical Page Number (PPN)

Wo liegen Page Tables?

  • Page Tables können sehr groĂź werden

    • Pro Eintrag 20-Bit VPN + 12-Bit Offset fĂĽr 4KB Pages

    • 20-Bit VPN bedeuten 220 Adressberechnungen pro Prozess (ca. 1 Million)

    • 100 Prozesse in einem 32-Bit System bedeuten ca. 400 MB nur fĂĽr die Page Tables

    • In 64-Bit Systemen nochmals einiges mehr

  • Daher keine extra Hardware (Speicher) in der MMU

  • Anstelle dessen werden Sie im Hauptspeicher vorgehalten

    • Konkret im virtuellen Speicher des Betriebssystems vorgehalten

Beispiel: x86 Page-Table-Eintrag

  • Present Bit (P): Liegt die Page im Hauptspeicher oder auf Disk (Swapping kommt später)

  • Read/Write Bit (R/W): Darf in die Page geschrieben werden

  • User/Supervisor Bit (U/S): Kann ein User-Mode Prozess auf die Page zugreifen

  • PWT, PCD, PAT u. G: Beschreiben Hardware-Caching

  • Accessed Bit (A): Wird fĂĽr einen sog. “Least recently used page”-Algorithmus genutzt

  • Dirty Bit (D): Wurde der Speicherinhalt verändert

  • PFN: Page Frame Number

Last updated