02_Speicherverwaltung Flashcards
1
Q
Speicherhierarchie
A
- CPU kann nur Befehle aus RAM ausführen, nichts von Festplatte
- bei Starten des Rechners lädt BIOS von Festplatte ins RAM – erst dann Verzweigung ob UNIX oder Windows
- bis Festplatte alles flüchtig
2
Q
Binden von Modulen
A
- Lage der Variablen und die Sprungadresse müssen zum Zeitpunkt der Compilierung festgelegt werden, bzw. zum Zeitpunkt des Ladens in den Speicher berechnet werden
- Symtab = symbol table – alle vermerkt, um Funktionen/ Variablen/… eines Moduls zu finden
- Beim Compilieren von Modulen kennt der Compiler keine Adressen aus anderen Modulen -> Module immer auf die gleichen Adressen übersetzt
- Binden: Module in eine Datei zusammengefügt + Referenzen neu berechnet
- Adressen verschieben sich um einen bestimmten Betrag = relozieren/reallocation
- am besten: CPU nutzt virtuelle Adressierung statt absolute (Identität von physischer + verwendeter Adresse)
3
Q
Partitionierung
A
- bei multi-programming BS
- Aufteilung des Hauptspeichers in feste Bereiche, OS im Rest des Speichers
- Relozieren auf Partition beim Laden der Programme -> Adressen finden und neu berechnen
- viel Verschnitt (Verlust), da die Programme nicht genauso groß sind + Programme max. so groß wie Partition
- Verbesserung: unterschiedlich große Partitionen -> mehr Aufwand beim Laden, um passende Partition zu finden, Platzverlust durch Fragmentierung (insg. genügend freier Speicher, aber auf viele kleine Bruchstücke verteilt)
4
Q
Segementierte Adressierung
A
- Möglichkeit, Code und Daten eines Prozesses verschiebbar im Speicher anzuordnen
- Umschieben der Adressen, ohne Adressen neu zu berechnen – nur das richtige Segmentregister muss geladen werden
- 16 Bit breite Register adressiert -> 64 kB Adressen (Daten und Stack)
- zusätzl. 4 Segmentregister -> Inhalt, um 4 Bit versetzt, auf 16 Bit - Adresse aufaddiert
- insg. 20-Bit-Adressen -> 1 MB Adressraum des Prozessors nutzbar
5
Q
Virtuelle Adressierung
Grundlage
A
- ermöglicht Trennung verschiedener Anwendungen
- virtuelle Adresse in MMU in reelle Adresse umgewandelt
- Paging: Adresse bereichsweise umgerechnet -> Speicher zerfällt in Pages, die nicht weiter zerlegbar sind
6
Q
Virtuelle Adressierung
Vorgehen
A
- Page ist Index der Page Table, pro Programm eine Page Table
- Offset wird aus der virtuellen Adresse übernommen
- CR3 = Prozessorregister, das auf den Beginn der PT im RAM zeigt
- am Beispiel von 32-Bit Rechner
- real page um 12 Bit nach links verschoben -> hat rechts 12 Nullen = Beginn der page
- wenn sich nur Offset ändert, wird in selbe Page adressiert
- real page++ zeigt um 2^12 Adressen weiter = jede Page ist 4 KB (2^12) groß -> Anwendung mit 21 kB werden 24 kB zugeordnet
- PT = 4 MB groß, da für jede Seite ein Eintrag erforderlich (2^20 Möglichkeiten) -> mit page directory: wenn Eintrag ungültig, spart man sich Speicherplatz für Page Table
7
Q
Virtuelle Adressierung
Page Table Entry
A
- ermöglicht, ZUgriff eines laufenden Programms auf zugewiesene Speicherbereiche zu beschränken -> sicheres BS
- T: Write-Back außer Kraft gesetzt
- Write-Back: Kopie gleichzeitig in Cache + RAM, Aktion erst fertig wenn in RAM geschrieben
- Write-Through: nur in Cache gespeichert, bei erneuten Zugriffen write-back
- wenn P=0: kein Zugriff/Eintrag nicht vorhanden
- MMU generiert Interrupt (Exception)
- Schreib-/Lesebefehl wird nicht ausgeführt
- Behandlung einer page exception im BS
- A+M für Speicherverwaltung wichtig
8
Q
Virtuelle Adressierung
Huge Pages
A
- 4 MB Pages statt 4 kB
- alle Page Tables eingespart
- Offset von 12 Bit auf 22 Bit vergrößert -> benötigt, um 4 MB zu adressieren
- restliche 10 Bits für 4 kB Page-Directory
- Vorteil: einfachere Speicherverwaltung
- Nachteil: erhöhter Seitenverschnitt
- ABER: meist Mischung aus 4 KB und 4 MB Pages
9
Q
Aufteilung des virtuellen Adressraums
A
- Daten und Code haben feste Länge
- Heap:
- Speicher, der während der Laufzeit angefordert wird
- wird größer und kleiner
- Stack: wächst während der Laufzeit, speichert temporäre Daten
- Stack Pointer zeigt auf nächsten freien Speicherraum
- Heap und Stack wachsen aufeinander zu -> Freiraum dazwischen
- jede Seite des Anwendungsadressraums wird auf reellen Adressraum abgebildet -> virtuell zusammenhängend. in Realität über gesamten Speicher verteilt
- max. eine Seitengröße Verschnitt
10
Q
2-stufige virtuelle Adressierung
A
- PTP = page table pointer, zeigt auf Anfang einer page table
- MMU hört schon im PD auf, wenn P=0
- 4K-Page: Offset von 2^12
- kleines Programm:
- 1 Page Table für Daten und Code 1 Page Table für Stack = 12 KB
- 1 Page Directory: alle außer 2 P-Bits auf 0 gesetzt
11
Q
Virtuelle Adressierung bei 64-Bit-Prozessoren
A
- Umsetzungsprinzip
- 4 Teiltabellen
- jeder Adressteil 9 Bit breit
- 2^9 Einträge * 8 Byte (64 Bit pro Tabelleneintrag) = 4 KB Größe der Tabellen
- wenn p = false: Folgetabelle muss nicht im Hauptspeicher gespeichert sein
12
Q
Invertierte Seitentabellen
A
- nicht MMU, sondern Software (Hash-Algorithmus)
- Größe der Seitentabellen exakt proportional dem Speicherausbau, da für jede 4k-Seite genau einen Eintrag in Seitentabelle
- Adressumsetzung über Hash-Algorithmus
- linker Teil der Adresse mit Inhalt der Hashtabelle verglichen: Index des Fundorts = Seitennummer i
- i*4k (4096) = Beginn der Seite
- Seitennummer + Offset = reelle Adresse
- pid = process id
p = Seitennummer im Prozess
13
Q
Virtuelle Adressierung
Translation Lookaside Buffer
A
- Nachteil der virtuellen Adressierung: zusätzliche Speicherzugriffe für PD und PT -> schlechte Performance
- TLB = schneller, kleiner, vollassoziativer Cache
- für zuletzt genutzte virtuelle Adressen die reelle Adresse gespeichert
- Adressberechnung ohne Verzögerung
- Nachteil: bei jedem Kontextwechsel invalide, da jeder Prozess über eigene PD verfügt