🧠 Správa paměti a virtuální paměť

Pracovní stůl

O čem to je

Když se učíš, máš na stole jen sešity, které právě potřebuješ. Ostatní jsou v knihovně. Stůl je malý, ale rychle se k němu sáhne. Knihovna je velká, ale pro knihu musíš dojít.

V počítači je stolem operační paměť (RAM) a knihovnou disk. Operační systém rozhoduje, co leží na stole, a když se stůl zaplní, odnáší málo používané věci do knihovny. Díky tomu pochopíš, proč počítač s málo RAM zpomalí a co dělá soubor pagefile.sys.

Nové pojmy

Operační paměť (RAM)Rychlá paměť, ve které jsou právě spuštěné programy a jejich data. Po vypnutí počítače se vymaže.16 GB RAM v notebooku
AdresaČíslo místa v paměti. Paměť je jako dlouhá řada očíslovaných přihrádek po 1 bajtu.bajt na adrese 4096
Virtuální paměťTrik OS: každý proces vidí svou vlastní souvislou paměť od adresy 0. OS a procesor ji za běhu převádějí na skutečná místa v RAM nebo na disku.
StránkaKousek virtuální paměti pevné velikosti, obvykle 4 KiB. OS paměť přiděluje a přesouvá po stránkách.
Odkládací prostor (swap, stránkovací soubor)Místo na disku, kam OS odloží stránky, na které teď nikdo nesahá, když RAM nestačí. Windows: soubor pagefile.sys, Linux: swap oddíl nebo soubor.

Proč je paměť rozdělená do úrovní

ÚroveňVelikost (příklad)Rychlost
registry procesorubajtynejrychlejší
cache procesorujednotky až desítky MBvelmi rychlá
RAMjednotky až desítky GBrychlá
SSDstovky GB až jednotky TBpomalejší
HDDjednotky až desítky TBnejpomalejší

Čím rychlejší paměť, tím je dražší a menší. RAM je oproti SSD řádově rychlejší, proto odkládání na disk počítač zpomalí.

Co OS dělá s pamětí

  • Přiděluje procesům paměť a po skončení ji uvolní.
  • Chrání procesy: jeden nesmí číst ani přepsat paměť druhého. Pokus skončí chybou (Linux: segmentation fault).
  • Pomocí virtuální paměti umí spustit víc programů, než by se vešlo do RAM.
Máš 8 GB RAM a otevřeš programy, které chtějí dohromady 11 GB. Co se stane?
Spustí se všechny. OS odloží asi 3 GB málo používaných stránek do stránkovacího souboru na disku. Když se pak přepneš do odloženého programu, chvíli se načítá z disku a počítač se zpomalí.
Program potřebuje 10 KiB paměti a stránka má 4 KiB. Kolik stránek dostane a kolik místa se nevyužije?
10 / 4 = 2,5 → potřebuje 3 stránky = 12 KiB. Nevyužité zůstanou 12 − 10 = 2 KiB v poslední stránce (tzv. vnitřní fragmentace).
✗Stránkovací soubor je zbytečný, když mám hodně RAM. Smažu ho a počítač zrychlí.
✓Stránkovací soubor nech, ať ho spravuje systém (výchozí nastavení).

Některé programy s ním počítají, systém do něj ukládá výpis paměti při pádu a bez něj může program při nedostatku paměti nečekaně spadnout.

RAM je rychlá a malá, disk velký a pomalý. Virtuální paměť dává každému procesu vlastní adresový prostor, dělí ho na stránky (4 KiB) a při nedostatku RAM je odkládá na disk (pagefile.sys, swap). OS také chrání paměť procesů navzájem.

Překlad adres

O čem to je

Každý program si myslí, že má paměť od nuly a celou pro sebe. Přitom jich běží stovky. Jak to, že si nepřepíšou data? Odpověď je překlad adres po stránkách. Pochopíš ho na jednoduchém výpočtu, jaký se objevuje i v testech.

Nové pojmy

Fyzická adresaSkutečné místo v čipech RAM.
Virtuální (logická) adresaAdresa, se kterou pracuje program. Neví, kde data fyzicky leží.
Stránka a rámecVirtuální paměť se dělí na stránky, fyzická RAM na stejně velké rámce. Stránka se uloží do libovolného volného rámce.stránka 4 KiB = 4096 B
Tabulka stránekTabulka, kterou OS vede pro každý proces: která stránka leží ve kterém rámci, nebo že je odložená na disku.
MMUJednotka správy paměti v procesoru. Při každém přístupu přeloží virtuální adresu na fyzickou podle tabulky stránek.
Výpadek stránky (page fault)Program sáhne na stránku, která není v RAM. OS ji načte z disku do volného rámce a program pokračuje.
KiB a kBKiB (kibibajt) = 1024 B, kB (kilobajt) = 1000 B. Paměť se počítá v mocninách dvou, proto KiB, MiB, GiB.

Postup překladu

Vyděl virtuální adresu velikostí stránky.
Celá část = číslo stránky, zbytek = posun uvnitř stránky.
V tabulce stránek najdi rámec pro tuto stránku.
Fyzická adresa = číslo rámce · velikost stránky + posun.
Velikost stránky je 4096 B. Virtuální adresa 8200. Tabulka: stránka 0 → rámec 3, stránka 1 → rámec 7, stránka 2 → rámec 5. Jaká je fyzická adresa?
8200 : 4096 = 2 zbytek 8 → stránka 2, posun 8. Stránka 2 je v rámci 5. Fyzická adresa = 5 · 4096 + 8 = 20 480 + 8 = 20 488.
Kolik bitů adresy zabere posun při stránce 4 KiB?
4 KiB = 4096 = 2¹². Posun potřebuje 12 bitů. Zbytek adresy je číslo stránky.
Virtuální adresaStránkaPosun
1000100
410014
12 28830

Když paměť nestačí

Thrashing (zahlcení)Stav, kdy RAM chybí tolik, že OS jen přenáší stránky mezi RAM a diskem a na skutečnou práci nezbývá čas. Disk pořád pracuje, počítač skoro stojí.

Řešení thrashingu: zavřít programy, nebo přidat RAM. Rychlejší SSD pomůže jen trochu.

  • Stránka – kousek virtuální paměti, typicky 4 KiB
  • Rámec – kousek fyzické RAM velikosti stránky
  • Tabulka stránek – stránka → rámec, pro každý proces
  • Page fault – stránka není v RAM, OS ji načte
  • Thrashing – neustálé odkládání, počítač stojí
✗Výpadek stránky je chyba, která shodí program.
✓Výpadek stránky je běžná událost. OS stránku načte a program pokračuje.

Program spadne jen při přístupu na adresu, která mu nepatří (neplatný přístup), ne při výpadku platné stránky.

Virtuální adresa = stránka + posun. Tabulka stránek určí rámec, MMU spočítá fyzickou adresu: rámec · velikost stránky + posun. Chybějící stránku OS načte z disku (page fault); při velkém nedostatku RAM nastane thrashing.