Speicherverwaltung — Änderungen 2414 → 2493

Zeile 5: Zeile 5:
  
 
== physische Speicherverwaltung ==
 
== physische Speicherverwaltung ==
−
Die '''physische Speicherverwaltung''' bildet die unterste Ebene und ermöglicht das Allozieren und Freigeben von physischen Speicherbereichen. Meist sind diese Speicherbereiche gleich groß und richten sich nach der Seitengröße der jeweiligen Architektur. Intern speichert die physische Speicherverwaltung welche Speicherbereiche im physischen Speicher frei sind. Dies könnte folgendermaßen implementiert werden:
+
Die '''physische Speicherverwaltung''' bildet die unterste Ebene und ermöglicht das Allozieren und Freigeben von physischen Speicherbereichen. Meist sind diese Speicherbereiche gleich groß und richten sich nach der Seitengröße der jeweiligen Architektur. Die Seitengröße beträgt normalerweise bei der [[x86]]- und [[x86-64]]-Architektur 4kB. Es sind dort auch 4 ([[x86]]) bzw. 2MB ([[x86-64]]) möglich. Intern speichert die physische Speicherverwaltung welche Speicherbereiche im physischen Speicher frei sind. Dies könnte folgendermaßen implementiert werden:
  
 
=== Bitmap ===
 
=== Bitmap ===
Zeile 38: Zeile 38:
  
 
== virtuelle Speicherverwaltung ==
 
== virtuelle Speicherverwaltung ==
−
Die '''virtuelle Speicherverwaltung''' befindet sich eine Schicht über der [[Speicherverwaltung#physischen Speicherverwaltung | physischen Speicherverwaltung]] und ist für die Organisation der Speicherbereiche im virtuellen Adressraum eines Prozesses zuständig. Dies bedeutet auch, dass sie das Ein- und Ausblenden von physischen Speicherseiten in den virtuellen Adressraum eines Prozesses übernimmt.<br>
+
Die '''virtuelle Speicherverwaltung''' befindet sich eine Schicht über der [[Speicherverwaltung#physischen Speicherverwaltung | physischen Speicherverwaltung]] und ist für die Organisation der Speicherbereiche im virtuellen Adressraum eines Prozesses zuständig. Unter [[x86]] und [[x86-64]] beispielsweise wird ein virtueller Adressraum über den [[Paging | Paging-Mechanismus]] (siehe dort für eine genauere Erklärung) realisiert. Dieser virtuelle Adressraum hat erstmal nichts mit dem physischen Adressraum gemeinsam. Erst die virtuelle Speicherverwaltung stellt durch Ein- und Ausblenden von physischen Speicherseiten in den virtuellen Adressraum diese Verbindung her und blendet die Segmente des Prozessimage (Code, Daten, nicht initialisierte Daten, ...), den Heap, den Stack, benötigte shared-libraries, [[IPC#Shared-memory | shared-memory]], auch den Kernel, etc. in den virtuellen Adressraum ein oder aus. Die dafür benötigten physischen Speicherseiten werden der physischen Speicherverwaltung entnommen.
−
Das wird im Grunde so gemacht: Jeder Prozess bekommt beim Erzeugen mindestens ein Pagedirectory und ein Pagetable. Pagedirectory und Pagetable sind jeweils 4kB groß, die Pages können mithilfe der physischen Speicherverwaltung leicht und dynamisch angefordert werden. Wann immer man ein neues Pagedirectory oder Pagetable braucht, muss man einfach nur eine physische Speicherseite von der physischen Speicherverwaltung anfordern. Natürlich braucht der Prozess auch noch Speicher den er benutzen kann, dieser wird auch mithilfe der physischen Speicherverwaltung angefordert und kann dann leicht in die Pagetables eingetragen werden. Beim Prozesswechsel muss man nur noch CR3 mit dem richtigen Pagedir laden. Man sollte natürlich auf keinen Fall vergessen den Kernel in jeden der Pagedirectories/Pagetables der Prozesse einzutragen.
+
 
 +
Die virtuelle Speicherverwaltung übernimmt in einem Multiprozessorsystem auch die Aufgabe die virtuellen Adressräume über mehrere Prozessoren hinweg konsistent zu halten (siehe auch [[SMP]]).
  
 
[[Category:Tutorials]]
 
[[Category:Tutorials]]