550 likes | 669 Views
Les 5: Geheugenbeheer. “If we wish to count lines of code, we should not regard them as ‘lines produced’ but as ‘lines spent.’” – Edsger Dijkstra. Overzicht. Logische vs. fysieke adressen Contigue allocatie van geheugen Niet-contigue allocatie van geheugen Paginering Segmentering
E N D
Les 5: Geheugenbeheer “If we wish to count lines of code, we should not regard them as ‘lines produced’ but as ‘lines spent.’”– Edsger Dijkstra
Overzicht • Logische vs. fysieke adressen • Contigue allocatie van geheugen • Niet-contigue allocatie van geheugen • Paginering • Segmentering • Segmentering + paginering
Geheugenbeheerprobleem Fysiek geheugen ? 0 0 Proces 1 Proces 1 • Allocatie • Relocatie N1 Proces 2 0 Proces 2 • Protectie • Delen N2 Geheugenbeheer: allocatie & Geheugenbeheer: relocatie & Geheugenbeheer: protectie & Geheugenbeheer: delen N
Een adres heeft veel gedaanten symbolisch broncode Compiler/assember/linker reloceerbaar Objectbestand/laadmodule steeds minder vrijheidsgraden Lader logisch Programmabeeld MMU fysiek Geheugen Adres: symbolisch
Binding in de compiler/linker symbolisch broncode Compiler/assember/linker reloceerbaar = fysiek Objectbestand/laadmodule Lader logisch = fysiek Programmabeeld MMU fysiek Geheugen Adres: reloceerbaar
Binding in de lader symbolisch broncode Compiler/assember/linker reloceerbaar Objectbestand/laadmodule Lader logisch = fysiek Programmabeeld Adres: logisch MMU fysiek Geheugen Roll-out/Roll-in
Binding tijdens de uitvoering symbolisch broncode Compiler/assember/linker reloceerbaar Objectbestand/laadmodule Lader logisch Programmabeeld : fysiek: fys MMU fysiek Geheugen
Adresbinding tijdens de uitvoering Adresvertaling (a) = a+14000 relocatieregister context
Protectie Geheugenbeheer: protectie {limietregister, relocatieregister} context
Overzicht • Logische vs. fysieke adressen • Contigue allocatie van geheugen • Niet-contigue allocatie van geheugen • Paginering • Segmentering • Segmentering + paginering
Contigue allocatie van partities met vaste grootte Partitie 4 Partitie 4 IBM OS 360 MFT Partitie 3 Partitie 3 Partitie 2 Partitie 2 Partitie 1 Partitie 1 OS OS Met gescheiden wachtrij Met gedeelde wachtrij
Contigue allocatie van partities met veranderlijke grootte Proces 4 Proces 3 • First Fit • Best Fit • Worst Fit • Next Fit Proces 2 Proces 1 OS Geheugenallocatie: contigu IBM OS 360 MVT
Fragmentatie Interne fragmentatie Externe fragmentatie OS Fragmentatie: intern & Fragmentatie: extern
Compactie & Defragmentatie 50%-regel = 33% verlies door fragmentatie
Boekhouding geheugen: vrijgeven geheugen Geheugenbeheer: vrije ruimte
Boekhouding geheugen: bitmaps Geheugen opgedeeld in eenheden vaste grootte A B C D 11111000 11111111 10011111 • vrijgeven geheugen eenvoudig • k opeenvolgende vrije blokken zoeken is trage operatie
Boekhouding geheugen: gelinkte lijsten A 0 50 V 50 30 A 80 60 V 140 30 A 170 20 A 190 50 A = gealloceerd V = vrij • k opeenvolgende blokken zoeken gaat snel • boekhouding ingewikkelder bij vrijgeven geheugen
Buddy Algoritme 256 MiB 64 MiB 16MiB 8 MiB 4 MiB 2 MiB 2 MiB 32 MiB 64 MiB 64 MiB 25 % interne fragmentatie ? % externe fragmentatie
Slaballocator geheugen Cache T1 A A A A V A A V v v A v v v v Cache T2 slabs v v A A v v A v A A A v v v A v v A = gealloceerd V = vrij A v v A
Het automatisch beheer van dynamisch gealloceerd geheugen Meer specifiek het automatisch vrijgeven van objecten die niet langer door een proces gebruikt worden Voordeel: minder werk dan manueel, foutloos Nadeel: trager dan manueel Geheugensanering(garbage collection)
Situatie vertrekpunten registers ← onbereikbaar grabbelgeheugen ← bereikbaar stapel → datageheugen
Directe geheugensanering vertrekpunten registers grabbelgeheugen 0 1 stapel 1 → 1 1 1 datageheugen 2 0 Geheugensanering: direct
Probleem: lussen vertrekpunten registers grabbelgeheugen 0 1 stapel 2 1 → 1 1 1 datageheugen 2 0
Mark-and-sweep vertrekpunten registers grabbelgeheugen √ x √ stapel √ → √ √ √ √ √ datageheugen √ x √ √ Geheugensanering: mark-and-sweep
Mark-and-sweep vertrekpunten registers grabbelgeheugen √ √ stapel √ → √ √ √ √ √ datageheugen √ √ √
Mark-and-compact vertrekpunten registers grabbelgeheugen √ √ √ stapel → √ √ √ √ √ datageheugen √ √ √ Geheugensanering: mark-and-compact
Kopiërend algoritme vertrekpunten registers grabbelgeheugen stapel → datageheugen Geheugensanering: kopiërende
Kopiërend algoritme vertrekpunten registers grabbelgeheugen stapel → datageheugen …
Generationele geheugensanering vertrekpunten registers grabbelgeheugen stapel → datageheugen nursery mature space Geheugensanering: generationeel
Generationele geheugensanering vertrekpunten registers grabbelgeheugen stapel → … datageheugen Kleine sanering nursery mature space
Generationele geheugensanering vertrekpunten registers grabbelgeheugen … stapel → promotie datageheugen nursery mature space
Overzicht • Logische vs. fysieke adressen • Contigue allocatie van geheugen • Niet-contigue allocatie van geheugen • Paginering • Segmentering • Segmentering + paginering
Geheugenallocatie: gepagineerd Allocatie per pagina Fysiek geheugen Pagina-tabel 0 0 Proces 1 2 7 5 2 0 6 Proces 2 4 1 3 3 8 Pagina’s (512B-16 MiB) Frames
Basisprincipe paginering fysiek geheugen Paginering offset f CVE p o f o PTBR logisch adres fysiek adres p f framenummer paginanummer Pagina = 4 KiB Offset = 12 bit Paginanummer = 20 bit paginatabel frames
Frametabel fysiek geheugen frametabel 0 1 proces 2 2 1 proces 1 0 1 proces 2 3 1 proces 2 1 1 proces 1 2 1 proces 2 0 1 proces 1 1 0 0 frames Frame: tabel
Additionele informatie Paginatabel (4 KiB) • Valid • Read-only • Dirty • Reference • Lock • Cached • … 21221000 54F54000 545E5000 5751A000 25487000 • Paginatabel: valid bit • Paginatabel: present bit • Paginatabel: read-only bit • Paginatabel: dirty bit • Paginatabel: modified bit • Paginatabel: reference bit • Paginatabel: lock bit • Paginatabel: cached bit 12 ongebruikte bits
Translation lookaside buffer logisch adres offset CVE fysiek geheugen p o f p1 f1 p2 f2 TLB treffer p3 f3 p4 f4 p5 f5 p6 f6 f o p7 f7 p8 f8 TLB fysiek adres p f TLB misser Pagina = 4 KiB Offset = 12 bit Paginanummer = 20 bit frames paginatabel
Hiërarchische adresvertaling Pagina = 4 KiB = 212 bytes Adresruimte: 4 GiB = 232 bytes 220 pagina’s 32 bits per element 4 MiB per paginatabel 4 MiB per proces Adresvertaling: hiërarchisch Page table length register Hiërarchische adresvertaling
Typische geheugenlayout 0 code data grabbel- geheugen stapel 2N
Meerniveautabellen 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 1 1 0 0 0 1 0 0 1 1
Hiërarchische paginering logisch adres offset CVE fysiek geheugen o f p1 f1 p2 f2 TLB treffer p3 f3 p4 f4 p5 f5 p6 f6 f o p7 f7 p8 f8 TLB fysiek adres directory-tabel TLB misser f SPARC: 8+6+6+12 IA32: 10+10+12 paginatabel frames Paginering: hiërarchisch
Hiërarchische paginering logisch adres offset CVE fysiek geheugen o f p1 f1 p2 f2 TLB treffer p3 f3 p4 f4 p5 f5 p6 f6 f o p7 f7 p8 f8 TLB fysiek adres directory-tabel TLB misser f SPARC: 8+6+6+12 IA32: 10+10+12 paginatabel frames Paginering: hiërarchisch
X86-64 vertaling Geheugen 12 52 CVE 9 16 9 9 9 12 TLB p1 f1 p2 f2 p3 f3 ... … pn pn CR3 PML4 (page map level 4) Paginapointers directory Paginadirectory Paginatabel
Verhakselde paginatabel logisch adres offset CVE fysiek geheugen p o f p1 f1 p2 f2 TLB treffer p3 f3 p4 f4 p5 f5 p6 f6 f o p7 f7 p8 f8 TLB fysiek adres hakselfunctie p1 f1 p2 f2 p3 f3 TLB misser Adresvertaling: hakselfunctie frames hakseltabel
Geïnverteerde paginatabellen logisch adres offset CVE fysiek geheugen pid p o f p1 f1 p2 f2 TLB treffer p3 f3 p4 f4 p5 f5 p6 f6 f o p7 f7 p8 f8 TLB fysiek adres f Zoeken pid p Adresvertaling: inverse paginatabel 64-bit UltraSPARC PowerPC frames frametabel
Geheugenbeheer: delen Delen van pagina’s Fysiek geheugen 0 Code 1 Code 2 2 Code 2 7 0 Data 1 5 Code herbetreedbaar! 2 Code 1 0 Code 1 Code 2 2 Code 2 7 Data 3 Data 2 6 2 Data 1 Data 2 0 Code 1 Code 2 2 Code 2 Code 2 7 8 Data 3 4 2 Frames
Gemeenschappelijk geheugen Fysiek geheugen Proces 1 0 0 Code 2 Code 1 2 Data 1 Code 2 7 Code 1 Data 1 1 Code A Data 2 4 3 Data 2 Proces 2 0 Code 2 Code A 3 Code B Code B 6 Code 2 Data 2 4 2 Pagina’s 8 Frames
Adresverwarring proces 1 proces 2 2000h 2000h 3B00h 3000h 3B00h Adres: verwarring
Overzicht • Logische vs. fysieke adressen • Contigue allocatie van geheugen • Niet-contigue allocatie van geheugen • Paginering • Segmentering • Segmentering + paginering
Geheugenallocatie: gesegmenteerd code bib stapel data Segmentering code stapel data bib programma fysiek geheugen