Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Operační systémy 11. Správa paměti
Obsah: historie, rozdělení a typy pamětí organizace paměti procesu metody přidělování paměti ochrana paměti virtualizace paměti segmentace, stránkování © Milan Keršláger
2
Historie pamětí děrné štítky, děrné pásky
mechanický zápis, mechanické nebo optické čtení feritové paměti využití elektromagnetické indukce obnovování informace (dynamická paměť) zpožďovací smyčka využívá omezené (též snížené) rychlosti šíření el. rtuť, cívka, piezoelektrický krystal na výstup dat bylo nutno počkat → sériový přístup využití jako paměť (periodický zápis), v TV přístroji
3
Rozdělení pamětí (1) podle materiálu a fyzikálních vlastností
magnetické, optické, polovodičové, zpožďovací smyčka... metoda uchování informace statické používají klopný obvod, jsou dražší, rychlejší → cache dynamické periodické obnovování obsahu (refresh) → RAM závislost na napájení volatilní → udržení informace závislé na napájení nevolatilní → udržení informace nezávislé na napájení
4
Rozdělení pamětí (2) podle přístupu k uloženým informacím
sekvenční – např. magnetická páska asociativní – adresace obsahem (klíč) sériový – posuvný registr FIFO RAM (Random Access Memory) s libovolným přístupem (náhodný je nesmysl) přímý přístup k datům podle zvolené adresy přibližně mu odpovídá i pevný disk
5
Rozdělení pamětí (3) podle schopnosti čtení a zápisu
RWM – Read Write Memory pro čtení i zápis, používáme pro ně označení RAM ROM – Read Only Memory PROM – uživatelsky programovatelná EPROM – smazatelná PROM (UV záření) EEPROM – elektricky smazatelná EPROM Flash EPROM – rychlé mazání po větších blocích
6
Rozdělení paměti (4) podle určení vnitřní paměť primární
registry CPU, cache, paměť RAM v přímém dosahu z CPU vnější paměť sekundární paměť pevný disk využívána jako virtuální paměť mimo přímý dosah CPU – odděleno řadičem terciální paměť CD, DVD, magnetické pásky využívána pro zálohování (vyměnitelné médium)
7
Výběr adekvátní paměti
rychlost statické jsou nejrychlejší, ale nejdražší dynamické jsou pomalejší, ale laciné cena za jednotku uchované informace terciální je nejlevnější sekundární je snadno a relativně rychle přístupná primární je nejdražší, ale odpovídá rychlosti CPU podle uchování informací nevolatilní pro uchování dat volatilní pro běh procesu
8
DDR SDRAM Double Data Rate Synchronous Dynamic RAM
běžně používaný typ pro operační paměť volatilní → po odpojení napájení se obsah ztratí pro udržení informace je nutný refresh periodické obnovování náboje na parazitní kapacitě čtení je destruktivní → po přečtení obratem znovu zápis je to nejlacinější typ RAM paměti různé typy: DDR, DDR2, DDR3, různé frekvence nejrychlejší je čtení sousedních buněk (řádků) čtení ze vzdálenějšího řádku → čekací prodleva vyšší frekvence → delší prodlevy → rychlost neroste lineárně
9
Flash nevolatilní paměť pro udržení obsahu nepotřebuje napájení
omezená životnost pro zápisové cykly podle typu 10 až 100 tisíc přepsání FTL (Flash Translation Layer) → rozkládání zápisů kvůli úspoře na řídících obvodech: práce s velkými bloky dat (stovky kB až MB) USB flash disk → skrze řadič USB portu SSD (Solid State Drive) → náhrada za HDD rychlejší čtení/zápis, ale vysoká režie při běžném užívání řádově zhruba pětinásobné zrychlení čtení proti HDD
10
Pevný disk elekromagnetické uložení dat
přístup skrze řadič (PATA, SATA, SCSI, …) práce s bloky dat (klasicky 512 B, nově 4 KiB) rotační plotna, hlavičky čtení/zápis sekvenčně kolem 100 MB/s, náhodně 20 MB/s průměrná přístupová doba 10 ms (0,01 sekundy) z hlediska CPU extrémně pomalé zařízení 10 ms, 2 GHz procesor → 20 miliónů tiků vnitřních hodin CPU čtení z disku → přesun procesu do fronty blokovaných v podstatě neomezená životnost zápisových cyklů používání jako virtuální paměti → „rozšíření RAM“ zvyšuje výkon a použitelnost počítače (i přes pomalost)
11
Operační paměť vnitřní paměť počítače
pro uchování programu, dat, mezivýsledků přímo adresovatelná procesorem připojena pomocí sběrnice (adresní, datová, řídící) uchovávány bity, adresace po bajtech (slovech) přístup pomocí strojových instrukcí adresa je v registru přenos dat mezi registrem a pamětí využití cache
12
Přístup k operační paměti
přímo adresovatelná adresní registr (v CPU) → omezení velikosti IA-32 → 32 bitů = 4 GiB x86_64 → dnes 48 bitů = 256 TiB nepřímo adresovatelná různé triky (pomocné registry, I/O) PAE, XMS, EMS, paměťové banky u Didaktiku… virtualizace paměti rozdělení na virtuální a fyzické adresy část adresního prostoru v RAM a část na disku
13
Správa operační paměti
v procesoru MMU anglicky Memory Managment Unit řízení přístupu k operační paměti (řízení sběrnic) řízení cache překlad virtuálních adres na fyzické a zpět řešení nepřímé adresace v jádře operačního systému MM (Memory Manager) řízení chodu MMU rozvržení operační paměti přidělování paměti procesům
14
Organizace paměti organizace paměti procesu
text → jen pro čtení (kód programu, konstanty) halda → dynamicky alokovaná data – new() zásobník → volání funkcí, lokální proměnné organizace paměti v operačním systému v paměti je jádro a (běžící) proces(y) v IA-32 je málo místa (4 GiB) využívání triků → PAE x86_64 problém řeší, ale jen pro 64bitové OS
15
32bitový Linux → 3+1 v adresním prostoru proces i jádro
→ syscall nevyžaduje remapování části adresního prostoru: kernel (jádro systému) stack (zásobník) mmap knihovny, mapované soubory heap (halda, hromada) dynamicky alokovaná paměť text (jen pro čtení) program, konstanty rezervovaná oblast (černě)
16
32bitové Windows → 2+2 standardní mapování pro 32bitová jádra
jednoduchá kontrola (jádro vs. userspace) rozlišení nejvyšším bitem adresy buňky v paměti proces maximálně 2 GiB oblast nad 2 GiB lze využít jako cache alternativa 3+1 parametr jádra při startu jen pro speciálně kompilované aplikace MS SQL server, Exchange normální aplikace větší prostor využít nemohou
17
32bitový Linux → 4+4 jádro i proces vlastní adresní prostor
proces má k dispozici celé 4 GiB víc, než 4GiB není na 32bitové platformě možné není to úplně pravda, protože: proces může skrze jádro ovládat PAE není to jednoduché, programátor to musí naprogramovat ve Windows speciální rozhraní (knihovní funkce) syscall vyžaduje přemapování paměti PAE má měřitelnou režii (řádově procenta) v některých případech to nevadí programy, které hlavně počítají a nedělají syscally
18
Metody přidělování paměti
procesům přiděluje paměť jádro systému: přidělování veškeré volné paměti nejjednodušší (CP/M, DOS) → jen jeden běžící proces přidělování pevných bloků paměti paměť rozdělena předem → umí už multitasking program umístěn tam, kam se „vejde“ přidělování proměnných bloků paměti při startu dle požadavků spouštěného programu přidělování bloků na žádost přidělování (a uvolňování) i za běhu procesu
19
Přidělování veškeré volné paměti
ochrana paměti → mezní registr možné jen v případě, že to podporuje procesor i jádro OS CP/M (1973) jádro na konci paměti problém → různé množství RAM v různých počítačích při umístění na jinou adresu strojový kód nefunguje absolutní skoky nebo adresace dat neodpovídá skutečnosti pro každou velikost RAM jiná verze jádra (32, 48, 64 KiB) nebo relokace ISIS II. (Intel 1977) nejprve jádro OS, pak program → relokace programu DOS (1979 jako QDOS) jako IIS, navíc specialita → rezidentní programy
20
Paměť CP/M jádro OS program a data ochrana paměti multitasking
64 KiB ochrana paměti procesor typicky bez HW podpory bez ochrany paměti jinak mezní registr hranici nelze překročit CPU → vnitřní přerušení skok na ISR uvnitř jádra OS ISR program ukončí vyžaduje privilegovaný režim program nemůže hranici měnit multitasking jedině celý proces nahrát na disk a pak zpět → časově náročné jádro OS program a data 100H systémová oblast
21
Mezní registr nejjednodušší ochrana paměti
nutná hardwarová podpora v CPU jeden (pro CP/M) nebo dva registry (pro MFT) vyžaduje privilegovaný režim nastavení registru je privilegovaná instrukce proces → neprivilegovaný stav CPU pokus o přístup do paměti za mezním registrem → → vyvolání vnitřního přerušení obsluha přerušení (ISR) je v jádře OS jádro OS úlohu ukončí (chyba „porušení ochrany paměti“)
22
Umístění kódu v RAM strojový kód používá absolutní adresy
absolutní adresa se používá při: při čtení dat z paměti do registru, skoky v programu překladač určí správné adresy v kódu program musí být do RAM umístěn vždy stejně tj. na adresu, kterou předpokládal překladač při umístění na jinou adresu v RAM je nutná korekce absolutních adres → relokace relokace jádra systému (ISIS) relokace programu (DOS, Windows, knihovny)
23
Relokace přizpůsobení kódu konkrétnímu umístění
strojový kód používá absolutní adresy při nahrání kódu na jinou adresu by nefungovalo modifikace absolutních adres podle relokační tabulky nebo vyřešení symbolů relokační tabulka je součástí spustitelného souboru adresy tak, jako by byl program od adresy 0 lokátor připočte k adrese bázovou adresu tj. při umístění na adresu 100 se přičte všude 100 přičtení jen k adresám, které jsou v relokační tabulce
24
Přidělování pevných bloků paměti
multitasking vyžaduje více procesů v RAM 1967 – IBM rozšíření MFT pro OS/360 MFT → Multiprograming with Fixed number of Tasks paměť je při startu pevně rozdělena na bloky 1 MB např. na 256 kB pro OS a dále bloky pro procesy (1×256, 2×128, 3×64 a 2×32 KiB), jiné dělení → restart výhoda: jednoduché nevýhody: program musí deklarovat předem své požadavky plýtvání pamětí (velikost > proces) fragmentace → v součtu paměť je, ale nelze spustit ochrana paměti: mezní registry
25
Strategie výběru bloku
při požadavku na paměť musí jádro rozhodnout, který blok bude procesu přidělen strategie rozhodnutí ovlivňuje fragmentaci first fit přidělíme první nalezený vyhovující blok (či jeho část) last fit přidělíme poslední vyhovující blok (či jeho část) výsledek závisí na aktuální situaci fragmentace volného místa worst fit přidělíme největší blok → také snaha o zmenšení fragmentace bere ohled na další požadavky, které mohou přijít best fit přidělíme nejvhodnější blok
26
Přidělování bloků proměnné velikosti
1967 – IBM rozšíření MVT pro OS/360 Multiprograming with Variable number of Tasks nástupce za jednodušší MFT nejlepší tehdejší varianta, ale složité, problematické proces žádá o paměť při svém startu i za běhu je možné žádat nebo vracet další paměť po skončení je paměť procesu uvolněna → fragmentace součet nároků nemůže překročit dostupné množství ochrana paměti → mezní registry jeden proces vlastní jeden souvislý úsek paměti nebo 1 mezní registr + maximální offset (segmentace)
27
Přidělování bloků na žádost
proces žádá jádro OS o další úsek paměti jádro vytvoří blok požadované velikosti ze kterého volného úseku bude blok přidělen? → viz předchozí stránka „Strategie výběru bloku“ proces dostane ukazatel na začátek volného místa proces nesmí použít nepřidělenou paměť ochrana paměti mezní registry jsou nedostatečné paměť procesu je v blocích → není souvislá ochrana paměti metodou zámků a klíčů je používáno všemi dnešními moderními systémy
28
Metoda zámků a klíčů ochrana nesouvislých úseků paměti
paměť je rozdělena na stránky (např. 4kB) každé stránce je přiděleno číslo (tj. zámek) procesor má speciální registr (tj. klíč) procesor smí použít jen paměť, kde klíč=zámek jádro používá univerzální klíč 0 (není omezení) změna registru (klíče) je privilegovaná instrukce proces běží v neprivilegovaném stavu zámky jsou v paměti, kam proces nemůže nepovolený přístup → vnitřní přerušení → ISR v OS
29
Uvolňování bloků paměti
průběžné uvolňování nemusí být podporováno například Mac OS 9 v 90. letech 20. století vznikl velký problém u webových prohlížečů → paměť zabraná procesem se jen zvětšuje po skončení programu je uvolněna všechna paměť dnešní systémy uvolňování podporují ochrana paměti se musí průběžně adaptovat → metoda zámků a klíčů
30
Fragmentace (volné) paměti
při průběžné alokaci a uvolňování paměti vznikají izolované úseky volné paměti časem je volná paměť čím dál více rozdrobena lze omezit volbou vhodné strategie výběru bloku paradoxně je lepší přidělovat paměť z největšího bloku podobně i fragmentace souborů a volného místa na disku po čase je nemožné alokovat větší úsek paměti volné místo je rozdrobeno do menších bloků není možné volné úseky spojit do jednoho řeší se pomocí virtualizace paměti rozlišujeme virtuální adresy procesu a fyzické adresy v RAM
31
DOS rozdělení paměti: na začátku jádro, buffery, proměnné
dále místo pro program až do 640 kiB do konce paměti rezervovaný prostor pro paměť rozšiřujících karet BIOS, VGA RAM, RAM síťové karty, BIOS pro VGA a řadič... později též využito (i 64 kiB nad 1 MiB jako HIGH) v paměti i více programů, ale běží vždy jen jeden DOS byl bez podpory multitaskingu paměť se přiděluje na požádání při startu, i za běhu, paměť lze i vracet, ochrana není (!!!)
32
Rezidentní program specialita DOSu TSR → Teminate and Stay Resident
program se ukončí, ale zůstane v paměti náhrada absence podpory multitaskingu v DOSu DOS neposkytuje ochranu paměti → žádná ochrana TSR se váže na přerušení či služby DOSu aktivace při stisku klávesy, tiku časovače, zápisu na disk... jádro DOSu není reentrantní jen jeden proces může volat službu DOSu TSR musí čekat (naštěstí je to možné detekovat) velmi rozšířené obsluha myši, národní klávesnice, ale i VIRY
33
Linux, Windows NT používají přidělování paměti na žádost
alokace paměti při startu programu za běhu je možné paměť alokovat i vracet viz malloc() je podporována ochrana paměti používá se metoda zámků a klíčů (a virtuální paměť) porušení ochrany paměti je řešeno ukončením procesu ukončením je veškerá alokovaná paměť vrácena vzniká problém OOM (Out Of Memory) proces žádá o paměť, ale nelze vyhovět řešení je na programátorovi (ukončením procesu?)
34
malloc() proces může požádat za běhu jádro o paměť
proces při volání malloc() sdělí velikost jádro sdělí procesu adresu, kde místo začíná proces nesmí psát do místa, které přiděleno nebylo nehlídá se však, když proces přepisuje vlastní paměť paměť je interně hlídána po blocích → metoda zámků a klíčů pro odhalení špatné práce s pamětí → Valgrind apod. překrytí funkce jádra knihovní funkcí požadavky na paměť se sdružují do větších celků knihovna požádá o více paměti, než deklaroval proces další požadavek pak nevyžaduje volání jádra sníží se tím režie → volání jádra trvá déle
35
free() uvolnění paměti (proces vrátí alokovanou paměť)
proces sdělí adresu začátku bloku, který už nepotřebuje paměť lze pak přidělit jinému procesu opět překrytí knihovní funkcí snaha o zvýšení efektivity paměť je spravována ve stránkách (4 KiB blok) nemá smysl řešit (de)alokaci jednoho bajtu skrze jádro proces nesmí uvolnit paměť, která mu nepatří chyby při správě paměti jsou časté využívají se různé ladící knihovny (např. Valgrind) Java → garbage collector → automatizovaná správa
36
Virtualizace paměti proces vidí jiné uspořádání, než je skutečnost
odstranění fragmentace umožňuje zvětšit dostupnou paměť pro podporu multitaskingu rozlišuje dvě různé adresy logická adresa pracují s ní strojové instrukce (proces) fyzická adresa získána převodem z logické (v MMU) adresa paměti v RAM nebo na pevném disku
37
Využití virtualizace multitasking
každý proces má vlastní logický adresní prostor není nutné používat relokaci nebo relativní adresy efektivnější využití paměti nepoužívané části paměti jsou odsunuty na disk zvětší se místo pro diskovou cache zakázání odkládacího souboru paradoxně horší rozšíření adresního prostoru místo na pevném disku je lacinější, než RAM
38
Adresace virtuální paměti
segmentace fyzická adresa = segment + offset proces pracuje jen s offsetem segment spravuje operační systém u počítačů PC k dispozici od začátku, ale omezeně (8086+) obtížné řešení fragmentace volného místa stránkování virtuální adresa → tabulka stránek → fyzická adresa poměrně komplikovaný systém (nutná podpora v CPU) u počítačů PC vyžaduje procesor i386 nebo novější (i386+) dnes majoritně používán (Windows, Linux) řeší fragmentaci, lepší optimalizace (RAM × disk)
39
Segmentace paměti – 1 fyzická = segment + offset
převod zajišťuje MMU → typicky uvnitř CPU segment i offset uloženy ve speciálních registrech CPU offset používá proces (strojové instrukce) každý proces má adresní prostor začínající od nuly offset je virtuální adresa, kterou používají stroj. instrukce segment nastavuje jádro OS je to privilegovaná instrukce jeden proces může mít i více segmentů pro kód programu, data, zásobník, halda, … data jsou logicky roztříděna vyžaduje více segment a offset registrů v CPU
40
Segmentace paměti – 2 ochrana paměti: privilegovaný režim (segment)
mezní registr (offset) fragmentace volného místa řeší se setřásáním segmentů segmenty se v paměti překopírují k sobě nelze dělat moc často → velmi náročné na čas jádro opraví segment registry, proces nic nepozná sdílená paměť mezi procesy se sdílí celý segment data knihovny musí být uložena v privátním segm.
41
Segmentace paměti – 3 registrace segmentů pro procesy
proces má v PCB umístěnu tabulku změna kontextu → změny registrů zajišťuje jádro OS zvětšování segmentu za běhu procesu je možné, ale za segmentem musí být prostor odkládání na disk umožňuje mít více virtuální paměti, než je fyzické na disk se odkládají celé segmenty → swapování
42
Stránkování paměti virtuální → tabulka stránek → fyzická adresa
převod zajišťuje MMU → typicky uvnitř CPU tabulka stránek je v RAM, řízeno speciálními registry proces používá výhradně virtuální adresy každý proces má adresní prostor začínající od nuly každý proces má jen jeden virtuální adresní prostor tabulka vytváří souvislý prostor z více částí (stránky) tabulku stránek sestavuje jádro OS běžný proces do ní nemůže zasahovat ochrana paměti: metoda zámků a klíčů
43
Tabulka stránek paměť rozdělena na stránky stejné velikosti
stránky mají typicky 4 KiB (8 KiB atp.) byla-li by příliš velká → vnitřní fragmentace někdy používány rámce (frames), jinak frame = stránka na offset uvnitř stránky je 12 bitů (212 = 4 KiB) vyšší bity adresy jsou číslo stránky podle tabulky se převádí jen číslo stránky číslo stránky logické adresy → č. stránky fyzické adresy potřebujeme jen vrchní bity adresy (ne offset ve stránce) číslo stránky je tedy index v tabulce stránek ušetřených 12 bitů lze využít na příznaky
44
Stránkování na žádost anglicky: demand paging
proces nevyužívá celou namapovanou paměť využívá jisté části, které se časem mění pomalu nevyužívané části (stránky) odsuneme na disk → odstránkování (soubor, oddíl, vyhrazený disk) zvětšení dostupné paměti o místo na disku do tabulky stránek přidáme příznak „paged“ je-li stránka v paměti, převod na fyzickou jako obvykle při pokusu o přístup do odstránkované stránky → vnitřní přerušení „výpadek stránky“ (page fault)
45
Výpadek stránky vnitřní přerušení
obsluha uvnitř jádra OS → nalezení volné stránky opravíme tabulku stránek zopakujeme instrukci, která výpadek způsobila není-li v paměti volná stránka výběr stránky, kterou nejprve odsuneme na disk nejlépe takovou, která bude nejdéle nepoužita nemáme křišťálovou kouli můžeme ale usuzovat podle dosavadního vývoje → různé algoritmy výběru stránky
46
Výběr stránky FIFO vyhodíme stránku, která je v paměti nejdéle
může to však být intenzivně využívaná stránka FIFO anomálie → více paměti, více výpadků LRU – Least Recently Used podle času posledního použití stránky (ale i fronta) HW příliš náročné NUR – Not Used Recently zjednodušení LRU → jednobitový příznak použití jádro OS příznaky periodicky zpracovává a nuluje
47
Zahazování stránek zápis na disk je pomalý
některé stránky na disku již jsou → kód programu, obsah souboru výhodné při mapování souborů do paměti stránku prostě zrušíme a při výpadku obnovíme ušetříme zápis identického obsahu při odstránkování při obnovení nahráváme obsah ze souborového systému v tabulce stránek speciální příznak + identifikace stránkovací soubor je vždy výhodný jeho vypnutí způsobí paradoxně zpomalení → odstránkovaná paměť se použije na cache
48
Mapování souborů do paměti
využívá se mechanismu výpadku stránky speciální systémová služba → mmap() obsah souboru se namapuje do paměti → jako zahozené stránky (viz výše) při pokusu o čtení dojde k výpadku stránky obsluha je silně optimalizovaná na rychlost pro čtení ze souboru se využívá existující postup výhodné ve specifických případech čtení části souboru, periodické čtení atp. silný tlak na paměťový prostor (4 resp. 2 GiB je málo)
49
Garbage collector správa paměti procesu
součást běhového prostředí procesu usnadňuje programování ale složitější ladění zpomaluje běh programu uvolňování nepoužívané paměti probíhá automaticky za běhu programu typicky po určité době, využití generací sledují se reference na objekt (data) vytvoření počitadla odkazů na objekt vlastně sleduje úniky paměti (memory leak)
50
Copy on Write využíváno při vzniku nových procesů
v unixových systémech volání fork() vznikne nový proces, který je kopií původního
51
Sdílená paměť
52
Negativní projevy OOM – Out Of Memory
dojde-li paměť (i virtuální) → velký problém jádro typicky vybere oběť → ukončí nějaký proces memory trashing cyklické odkládání stránek a jejich obnovování může vyřadit systém z provozu (DoS) page storm nastane vždy při nedostatku paměti po chvíli stránkování je nalezeno nové optimum
53
Memory leak únik paměti proces alokuje paměť, ale neumí ji využít
např. zapomene adresu, na které volný prostor je periodické zapomínání může vést k vyčerpání paměti následně OOM, pád aplikace apod. paměť pak nemůže být využita ani uvolněna malloc(), write, read, free() velmi často u komplikovaných programů webové prohlížeče, překladače, databázové servery, …
54
IA-32 a PAE rozšíření adresovatelnosti na 64 GiB
platí jen pro celkovou dostupnou paměť využívání stránek 4kiB nebo 2MiB limit pro 4 GiB zůstává zachován nemění se velikost adresy → zachována kompatibilitu možnost využití NX bitu (je-li implementován) nevýhody záznamu v tabulce stránek 64 bitů (pův. 32) markantní zvýšení režie tabulky stránek řešeno pomocí použití 3 úrovní tabulek místo 2 zvýšení režie změny kontextu
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.