Memory Management 10.01.2018 vjj 1
10.01.2018 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
10.01.2018 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ěť
10.01.2018 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
10.01.2018 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
10.01.2018 vjj 6 pravěk srozumitelná jednoduchost
10.01.2018 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)
10.01.2018 vjj 8 RAM processor 20 28 control register address modul 30 32 SYSTEM
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 10.01.2018 vjj 9
10.01.2018 vjj 10 ranný starověk fixed number of partitions multitasking
10.01.2018 vjj 11 sekce free pgm 1 free pgm 2 free
10.01.2018 vjj 12 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
10.01.2018 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
10.01.2018 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
10.01.2018 vjj 15 rozvinutý starověk variable number of partitions -> dynamické sekce
10.01.2018 vjj 16 sekce free pgm 1 free pgm 2 free
10.01.2018 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í
10.01.2018 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
10.01.2018 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 10.01.2018 vjj 21
10.01.2018 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
10.01.2018 vjj 23 RAM processor 20 process 1 28 process 2 control register address modul 30 32 process 3 SYSTEM page table 2
10.01.2018 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
10.01.2018 vjj 25 stránkování pracovní stůl úředník tabulka 1 tabulka 2 tabulka 3 úkol 1 úkol 2 úkol 3
10.01.2018 vjj 26 stránkování na žádost knihovna sklad knihovník úředník tabulka 1 tabulka 2 tabulka 3 úkol 1 úkol 2 úkol 3
10.01.2018 vjj 27 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
10.01.2018 vjj 28 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
10.01.2018 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
10.01.2018 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
10.01.2018 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čů
10.01.2018 vjj 32 virtuální prostředky přehled
10.01.2018 vjj 33 procesor virtuální virtuální virtuální pgm 1 pgm 2 pgm 3 procesor procesor procesor správa procesů, Dispatcher, úklidové prostory procesů procesor
10.01.2018 vjj 34 tiskárna virtuální virtuální virtuální pgm 1 pgm 2 pgm 3 procesor tiskárna procesor tiskárna procesor tiskárna spooling, soubory na disku procesor tiskárna
10.01.2018 vjj 35 paměť virtuální virtuální virtuální pgm 1 pgm 2 pgm 3 procesor paměť procesor paměť procesor paměť Memory Manager, tabulky stránek procesor RAM
10.01.2018 vjj 36 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
10.01.2018 vjj 38 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
10.01.2018 vjj 39 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
10.01.2018 vjj 40 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
10.01.2018 vjj 41 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
10.01.2018 vjj 42 kouzla a čáry RAM 15 MB 16 MB 1 MB CPU 16 bitů 20/24 bitů memory 1024 kb 1024 0000 RAM 640 kb 64 kb HW 384 383 0000
10.01.2018 vjj 43 Windows 3.x jeden společný, reálný, adresový prostor pro DOS program Windows 3.x všechny Win16 aplikace free Windows RAM 1. data 3. data 2. data 2. aplikace 3. aplikace 1. aplikace DOS
10.01.2018 vjj 44 Windows 3.x nepreemptivní multitasking: Windows + všechny aplikace = jediný proces retro: smartphones Windows Metro vlastní správa paměti i programů hadle -> lock -> adresa -> unlock lock: zamknutí celého segmentu defragmentace
10.01.2018 vjj 45 novověk 32-bitů virtual memory
10.01.2018 vjj 46 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
10.01.2018 vjj 47 selektor (16 bitů) segmentové registry: CS, DS, ES, SS, FS, GS 1. - logická adresa offset (32 bitů)
10.01.2018 vjj 48 bity 15-3 Selektor index do tabulky deskriptorů, 13 bitů na indexování => 8192 deskriptorů bit 2 T I = 0 -> GDT = 1 -> LDT bity 1-0 RPL Requested Privilege Level index TI RPL
10.01.2018 vjj 49 tabulky deskriptorů standardní deskriptor segmentu začátek segmentu ve virtuální paměti velikost segmentu granularita (1 byte vs. 4 kb) Descriptor Privilege Level
10.01.2018 vjj 50 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
10.01.2018 vjj 51 oddělení kódu a dat,... segmentace GDT IDT Virtuální paměť tabulky deskriptorů segment 1 segment 2
10.01.2018 vjj 53 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)
10.01.2018 vjj 55
10.01.2018 vjj 56 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 10.01.2018 vjj 60
10.01.2018 vjj 61 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
10.01.2018 vjj 62 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í 10.01.2018 vjj 63
10.01.2018 vjj 66 program Virtual RAM Virtual program Memory Memory EXE 1 OS EXE 2 DLL 1 Page Tables Page Tables PGM 1 1 Page 2 PGM 2 Page Tables 1 OS DLL 2 Page Tables 1 Tables 2 DLL 1 EXE 2 DLL 2 Page Tables 2 OS EXE 1
10.01.2018 vjj 67 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
10.01.2018 vjj 70 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 10.01.2018 vjj 72
10.01.2018 vjj 74 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
10.01.2018 vjj 75 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
10.01.2018 vjj 76 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