Memory Management 30.11.2016 vjj 1
30.11.2016 vjj 2 sledování stavu paměti free used správa paměti strategie přidělování paměti techniky přidělování paměti realizace uvolňování paměti
30.11.2016 vjj 3 Přidělení paměti při startu programu dynamické alokace během běhu programu RAM virtual memory heap přerozdělování paměti RAM vs. virtuální paměť
30.11.2016 vjj 4 historie x-bitový pravěk 32-ti bitový starověk klasika (sálové počítače) 8-mi/16-ti bitový středověk doba temna 32-ti bitový novověk renesance 32-ti/64-ti bitová současnost
30.11.2016 vjj 5 geneze jedna souvislá oblast sekce dynamické přemisťování sekcí stránkování stránkování na žádost segmentace segmentace a stránkování na žádost
30.11.2016 vjj 6 pravěk srozumitelná jednoduchost
30.11.2016 vjj 7 jediná souvislá sekce jednoduchost adresa v programu je skutečnou adresou ve fyzické RAM paměti počítače privilegovaný x uživatelský stav mezní registr ochrana paměti OS nevýhody: nevyužita CPU i paměť omezení úloh velikostí paměti první (sálové) počítače a po desítkách let znovu první PC (DOS)
source Start 700 Define A A = A + <0x708> compiler -> assembly language load add A store A <0x708> compiler -> obj ( -> link -> exe ) load add 0x700 0x708 store 0x700 30.11.2016 vjj 8
30.11.2016 vjj 9 RAM processor 20 28 control register address modul 30 32 SYSTEM
30.11.2016 vjj 10 ranný starověk fixed number of partitions multitasking
30.11.2016 vjj 11 výhody: multitasking pevně dané sekce adresa v programu je relativní vůči počátku sekce dynamické určení sekcí jednoduchá tabulka přidělených a volných sekcí nevýhody: zbytečné obsazení paměti nepoužitými částmi programu nevyužitá zbylá část sekce
30.11.2016 vjj 12 sekce free pgm 1 free pgm 2 free
30.11.2016 vjj 13 source A = A + B compiler -> assembly language load add store A B A? compiler -> obj ( -> link -> exe ) load add store load add store 0x700 0x708 0x700 loader -> RAM (5th partition) 0x4700 0x4708 0x4700
30.11.2016 vjj 14 Base register A = A + B store *, BaseReg... load 0x700 add 0x708 store 0x700 store *, BaseReg store 0x4000,BaseReg...... load A load 0x700+BaseReg add B add 0x708+BaseReg store A store 0x700+BaseReg
30.11.2016 vjj 15 rozvinutý starověk variable number of partitions -> dynamické sekce
30.11.2016 vjj 16 sekce free pgm 1 free pgm 2 free
30.11.2016 vjj 17 starověk - dynamické sekce přidělování oddělených sekcí adresy v každé části programu jsou modifikovány jiným segmentovým registrem nevýhody: fragmentace paměti virtuální paměť (skoro) není třeba umístit do paměti celý program najednou, dodatečně potřebné moduly mohou být v samostatné části, které se sekce paměti přidělí až když to je zapotřebí
30.11.2016 vjj 18 dynamické přemisťování sekcí compaction, recompaction, relocation hned po uvolnění paměti až podle potřeby když je čas když je to výhodné (???) přeadresování typ + data relokační registr, limit výhody: eliminace fragmentace nevýhody: cena, čas, vždy celé moduly
30.11.2016 vjj 19 RAM processor 20 partition 1 28 partition 2 control register address modul 30 32 partition 3 SYSTEM
30.11.2016 vjj 20 vrcholný starověk zlatá éra virtuální paměť
stránkování adresový prostor programu rozdělen na stránky (logické stránky) (4 kb) fyzická paměť rozdělena na rámce (fyzické stránky) (4 kb) transformace adres pomocí tabulek stránek překlad adres z logických na fyzické provádí procesor výhody: eliminace fragmentace nevýhody: složitější HW, práce s tabulkami, v RAM je vždy celý program 30.11.2016 vjj 21
30.11.2016 vjj 22 přepočítávání adres load add store 0x3700 0x3708 0x3700 PGM page 0 96 RAM frame 1 403 2 12 3 87 0x3700 = = page 3 + 0x700 = frame 87 + 0x700
30.11.2016 vjj 23 RAM processor 20 process 1 28 process 2 control register address modul 30 32 process 3 SYSTEM page table 2
30.11.2016 vjj 24 virtual memory proč virtuální? stránkování na žádost fyzické rámce jen pro stránky, které jsou skutečně používány tj. celkový počet stránek všech programů, ale dokonce i jediného programu, může překročit celkový počet fyzických rámců RAM
30.11.2016 vjj 25 stránkování na žádost stránka alokována příznak VALID tj. informace o tom, že odpovídající řádek v tabulce stránek byl již inicializován výpadek stránky příznak PRESENT tj. údaj v tabulce stránek o tom, ve kterém fyzickém rámci je stránka umístěna, je platný algoritmy nahrazování stránek hledání oběti FIFO LRU Least Recently Used NUR Not Used Recently algoritmus druhé naděje příznak ACCESSED clock algorithm varianta NUR sdružování dvojic ukládání změn jen když to je nutné příznak DIRTY
30.11.2016 vjj 26 tabulka stránek PGM page VALID PRESENT RAM frame ACCESSED DIRTY 0 1 1 96 0 0 1 1 0 403 0 0 2 1 1 12 1 1 3 0 0 87 0 0
30.11.2016 vjj 27 stránkování knihovna - dokument - šanon - stránka knihovník tabulka 1 tabulka 2 tabulka 3 úředník 1 úředník 2 úředník 3
30.11.2016 vjj 28 stránkování na žádost sklad knihovník příručí tabulka 1 tabulka 2 tabulka 3 úředník 1 úředník 2 úředník 3
30.11.2016 vjj 29 segmentace logické seskupení informací důsledné dotažení myšlenky algoritmu sdružování dvojic dynamické sestavovaní / linkování předchůdce DLL sdílené segmenty tabulka segmentů ochrana segmentů nevýhoda: fragmentace
30.11.2016 vjj 30 segmentace segment sada vlastních relativních adres + index (selektor) do tabulky deskriptorů deskriptor popisuje blok virtuální paměti Program Virtuální paměť segment 1 tabulky deskriptorů segment 2
30.11.2016 vjj 31 segmentace a stránkování na žádost konec šedesátých let minulého století vrchol memory managementu v operačních systémech sálových počítačů
30.11.2016 vjj 32 virtuální paměť disk pgm modul 1 Virtuální paměť 1 pgm modul 1 Virtuální paměť 2 pgm modul 2 RAM pgm modul 2 data modul 1 data modul 1 data modul 2 pgm modul 2 sys modul 1 sys modul 2 data modul 1 sys data sys modul 1 data modul 2 sys data sys modul 1 pgm modul 1 data modul 2 sys modul 1 sys data sys modul 2 sys modul 2 sys modul 2
středověk minipočítače, první PC
30.11.2016 vjj 34 PC 1024 1024 RAM 640 kb 512 kb -> 640 kb -> 1 MB -> 16 MB CPU 16 bitů 20 bitů memory 1024 kb 384 383 0000 HW 0000
30.11.2016 vjj 35 DOS (jediný společný) adresový prostor 1 MB offset (16 bitů) + segment (16 bitů) = adresa (20 bitů)... F F F F F F F F... F F F F F 1 0 F F E F 16 2 B 64*1024 B 64 kb 1 MB 64 kb 16 B
30.11.2016 vjj 36 A = A + B store *, BaseReg store dataseg, DataReg... load 0x700 add 0x708 store 0x700 store *, CodeReg store 0x4000, CodeReg store dataseg, DataReg store 0x5000, DataReg...... load A load 0x700 + DataReg add B add 0x708 + DataReg store A store 0x700 + DataReg
30.11.2016 vjj 37 adresový mód Windows 3.x reálný (max 640 kb RAM) - 8086 standardní (max 16 MB, RAM) - 80286 enhanced (max 16 MB, RAM a swap file) - 80386 16 MB = 2 24 B
30.11.2016 vjj 38 kouzla a čáry RAM 15 MB 16 MB 1 MB CPU 16 bitů 24 bitů memory 1024 kb 1024 0000 RAM 640 kb 64 kb HW 384 383 0000
30.11.2016 vjj 39 Windows 3.x nepreemptivní multitasking: Windows + všechny aplikace = jediný proces vlastní správa paměti hadle <-> adresa zamykání segmentů defragmentace
30.11.2016 vjj 40 Windows 3.x jeden společný, reálný, adresový prostor pro DOS program Windows 3.x všechny Win16 aplikace retro: smartphones Windows Metro RAM 2. aplikace 3. aplikace 1. aplikace Windows DOS
30.11.2016 vjj 41 novověk 32-bitů virtual memory
30.11.2016 vjj 42 Intel 1. logická adresa: offset a (impl./expl.) registr registr = selektor = index do tabulky deskriptorů deskriptor: bázová adresa a limit segmentu 2. lineární/virtuální adresa = ( báze + offset ) 32 bitů => virtuální adresový prostor 4 GB 3. fyzická adresa: tabulky stránek
30.11.2016 vjj 43 selektor (16 bitů) segmentové registry: CS, DS, ES, SS, FS, GS 1. - logická adresa offset (32 bitů)
30.11.2016 vjj 45 tabulky deskriptorů standardní deskriptor segmentu začátek segmentu ve virtuální paměti velikost segmentu granularita (1 byte vs. 4 kb) Descriptor Privilege Level
30.11.2016 vjj 46 tabulky deskriptorů GDT LDT IDT globální jediná pro celý systém, informace o segmentech obsahujících TSS, LDT, IDT,... lokální jedna pro každý proces, informace o jednotlivých segmentech procesu Interrupt Descriptor Table
30.11.2016 vjj 47 oddělení kódu a dat,... segmentace GDT IDT Virtuální paměť tabulky deskriptorů segment 1 segment 2
30.11.2016 vjj 49 virtuální paměť disk pgm modul 1 Virtuální paměť pgm modul 1 Virtuální paměť pgm modul 2 RAM pgm modul 2 data modul 1 data modul 1 data modul 2 pgm modul 2 sys modul 1 sys modul 2 data modul 1 sys data sys modul 1 data modul 2 sys data sys modul 1 pgm modul 1 data modul 2 sys modul 1 sys data sys modul 2 sys modul 2 sys modul 2
30.11.2016 vjj 50 Windows 95, 98, Me 2 GB privátního virtuálního prostoru obsahuje moduly aplikace (EXE, DLL) další 2 GB přístupné pouze pro systém: 1 GB sdíleného virtuálního prostoru (změny provedené jedním procesem se ihned projeví ve všech ostatních procesech) obsahuje systémové moduly!!! 1 GB systém (ring 0)
30.11.2016 vjj 51
30.11.2016 vjj 52 NT, W2K, XP, W2K3, Vista, W7 2 GB privátního virtuálního prostoru moduly aplikace (EXE, DLL) systémové moduly (copy-on-write) sdílená paměť 2 GB systém (ring 0) - přístupné pouze pro systém W2K a W2K3 mají možnost dělení 3:1 DataServer používá toto rozdělení standardně
Virtual Address Desctriptors 30.11.2016 vjj 56
30.11.2016 vjj 57 3. - fyzická adresa Lineární adresa rozdělena na 3 části: bity 31-22 adresář tabulek stránek (1024 tabulek) bity 21-12 tabulka stránek (1024 stránek) bity 11-0 offset (12 bitů -> stránka = 4 kb) ---------------------------------------------------- 1024 x 1024 x 4 kb = 4 GB
30.11.2016 vjj 58 stránkování virtuální adresy obsahují index (indexy) do tabulky (tabulek) stránek a offset transformace adres pomocí tabulek stránek Virtuální paměť process tabulka stránek RAM adresář tabulek stránek tabulka stránek tabulka stránek
stránkování 30.11.2016 vjj 59
30.11.2016 vjj 61 virtuální paměť disk pgm modul 1 Virtuální paměť pgm modul 1 Virtuální paměť pgm modul 2 RAM pgm modul 2 data modul 1 data modul 1 data modul 2 data modul 1 data modul 2 pgm modul 1 pgm modul 2 sys modul 1 sys modul 2 tabulky stránek tabulky stránek data modul 2 page directory 1 page directory 2 sys modul 1 sys modul 1 sys modul 1 sys modul 2 sys modul 2 sys modul 2
30.11.2016 vjj 62 rozdělení úkolů HW - procesor při provádění instrukce vyhledá podle tabulek stránek v RAM obsah adresy uvedené v instrukci pokud podle tabulek stránek není stránka v paměti přítomna - interrupt - výpadek stránky SW - operační systém při alokaci paměti vyhledá podle VAD vhodné místo ve virtuální paměti a podle toho upraví záznamy v tabulkách stránek, v tabulkách souborů a ve VAD pokud to je nutné, vybere nejdřív oběť podle příznaků určí, jestli je nutné stránku zapsat zpět na disk podle údajů v tabulkách souborů určuje kam a odkud se mají stránky zapisovat nebo číst
30.11.2016 vjj 65 Page Table Entry 0 P Present 1 W Write (writable on MP system) 2 O Owner (U/S) 3 Wt Write through 4 Cd Cache disabled 5 A Accessed 6 D Dirty 7 PDE large page 8 Gl Global 9... reserved 10... reserved 11... reserved (writable on MP system) 12-31 PFN Page Frame Number
TLB 30.11.2016 vjj 67
30.11.2016 vjj 68 Nonpaged pool System Memory Pool části systémového virtuálního prostoru stále v RAM přístup k nim nemůže způsobit výpadek stránky nutné při zpracování přerušení Paged pool části systémového virtuálního prostoru mohou být vystránkovány
30.11.2016 vjj 70 Working Set množina virtuálních stránek každého procesu a Systému přítomných v RAM private x shared paged pool x nonpaged pool size trimming
30.11.2016 vjj 71 Windows při HW výpadku stránky je načten rovnou celý "cluster" stránek: data - 4 stránky kód - 8 stránek výběr oběti: local NUR (clock algorithm) NT, W2K on multiprocessor systems: local FIFO
memory queues - trimming Active 1 3 4 5 Modified Standby Free Zeroed process 2 process process system system 1. dirty page removed from working set 2. clean page removed from working set 3. modified page writer 4. page deallocated 5. Zero-page thread clears page
memory queues - Page Fault Active 1 Modified Standby Free Zeroed process process 2 process 3 system 4 system 1. "soft" page fault 2. "soft" page fault 3. page read from disk or kernel allocations 4. demand zero page fault