Virtual Memory

Problem: Nutzeradressraum besteht aus mehreren Bereichen, die aus unterschiedlichen Quellen stammen können.


(In task_struct eingebettet)

Lösung:





1:m




n:1







Rudimentäres Konzept einer Virtualisierung
















(MMU: Memory Management Unit à gibt’s nur bei Linux!)


ê Hauptproblem: fast alle Mapping/Unmapping-Operationen geschehen in Interrupt-Routinen! Statusinformationen sind in vm_area_struct, struct page und in PTE’s (Page-Table-Entries) verteilt!



Vorgehensweise (Strategie):

  1. Null-mapping:
    Ist bei einem Aufruf vom do_map() file == null, dann spricht man von einem anonymen Mapping. Wird auf Speicherseiten lesend zugegriffen, wird ein Verweis auf immer dieselbe leere Seite eingefügt. Bei Schreiben einer Seite in einem anonymen Virtuellen Speicherbereich, wird eine leere Seite initialisiert.
    Es gibt eine reservierte Speicherseite, die nur Null-Bytes enthält. Diese Seite wird mehrfach eingebettet, aber read-only. beim ersten Schreibzugriff wird durch wp_page() eine andere (gelöschte) Seite eingeblendet à anonymes Mapping

  2. File-Mapping: (startet mit leeren PTE)
    nopage() holt die gewünschte Seite. Bei RW-Mapping und beim ersten Schreibzugriff wird die Seite auf dirty gesetzt.

  3. Sys V ist vollkommen getrennt.


ê Der Swapping-Code ist separat von Virtualisierungs-Architektur

à treten sich gegenseitig auf die Füße.

à neue Architektur!