SkillGridInformatik durch Machen lernen

Speicher und virtuelle Adressen

Warum jeder Prozess seinen eigenen Adressraum sieht und wie das Betriebssystem diese Illusion günstig macht.

13 Min. · 38 XP

Würden Prozesse physische Adressen direkt nutzen, könnte jeder Fehler die Daten eines anderen Programms überschreiben, und jedes Programm müsste wissen, wohin es geladen wurde. Beides ist untragbar.

Virtueller Speicher teilt jeden Adressraum in gleich große Seiten und bildet sie über eine Seitentabelle auf physische Rahmen ab. Die MMU der CPU übersetzt bei jedem Zugriff, sodass das Programm nie echte Adressen sieht.

CPUMMURAMDisk (swap)read virtual address 0x2A14split into page + offsetlook up page table, find framereturn the bytepage not presentpage fault, load the pagewrite frame into RAMretry the instruction

Seiten, auf die lange nicht zugegriffen wurde, können auf die Platte geschrieben und ausgelagert werden. Werden sie wieder gebraucht, holt ein Seitenfehler sie zurück. So kann ein Programm mehr Speicher nutzen, als physisch vorhanden ist — aber nicht kostenlos.

/* Виртуальный адрес — это НЕ адрес в микросхеме памяти.
 * MMU переводит его в физический на каждом обращении. */
#define PAGE_SHIFT 12          /* страница = 4 КиБ */

int vpn  = vaddr >> PAGE_SHIFT;   /* номер виртуальной страницы */
int off  = vaddr & 0xFFF;         /* смещение внутри страницы   */
int pfn  = page_table[vpn].frame; /* номер физического фрейма   */
int paddr = (pfn << PAGE_SHIFT) | off;

Praxis

  1. Warum können zwei Prozesse beide die Adresse 0x1000 nutzen, ohne sich zu stören?

    Hinweise
    • Die Adresse, die das Programm sieht, ist nicht die, die der Speicherchip sieht.
    • Jeder Prozess bekommt seine eigene Übersetzungstabelle.

    12 XP

  2. Bringe die Schritte der Behandlung eines Seitenfehlers in die richtige Reihenfolge.

    Hinweise
    • Die Hardware kann das nicht allein lösen — sie muss den Kernel fragen.
    • Der fehlerhafte Befehl geht nicht verloren; er läuft danach erneut.

    14 XP

  3. Ein Rechner hat 8 GB Arbeitsspeicher, ein Programm braucht 20 GB. Erkläre, was passiert und warum es trotzdem funktionieren kann.

    Hinweise
    • Nicht das ganze Programm wird im selben Moment gebraucht.
    • Der Rechner hat einen langsameren Ort für den Rest.

    14 XP