Virtuálna pamäť je spôsob správy pamäte, ktorý umožňuje programom pracovať so súvislým blokom adries, a to bez ohľadu na to, kde sa skutočné dáta nachádzajú v hardvéri. Tento mechanizmus dnes beží ako kombinácia hardvéru a softvéru: na hardvéri (fyzickej časti počítača, ako je procesor alebo grafická karta) sa vykonáva kód (softvér), ktorý potrebuje pamäť počítača. Moderné systémy často spúšťajú viac programov naraz (multiprocesing), pričom všetky bežiace aplikácie zdieľajú dostupné prostriedky — nemajú každý vlastný samostatný kus RAM alebo procesor.
Základný princíp
Myšlienka virtuálnej pamäte je taká, že aplikácia vidí veľký, súvislý priestor adries (virtuálnu adresu). Tento priestor je virtuálny, pretože fyzické údaje môžu byť roztrúsené medzi hlavnú pamäť (RAM) a sekundárne úložisko (napríklad pevný disk alebo SSD). Preklad medzi virtuálnymi adresami, ktoré používa aplikácia, a fyzickými adresami v RAM vykonáva špecializovaný hardvér nazývaný MMU (Memory Management Unit) spolu s pomocou operačného systému (operačné systémy.)
Stránkovanie (paging)
Najčastejší spôsob implementácie virtuálnej pamäte je stránkovanie. Pamäť je rozdelená na pevné bloky nazývané stránky (pages). Proces dostane svoj virtuálny priestor rozdelený na stránky; systém udržiava mapovanie (tabuľku stránok) medzi virtuálnymi stránkami a fyzickými rámcami pamäte.
Keď program pristúpi k adrese, MMU preloží virtuálnu adresu na fyzickú pomocou page table (tabuľky stránok). Ak daná stránka nie je v RAM, vznikne page fault (chýbajúca stránka) a systém musí stránku načítať z disku do RAM — tento postup sa často nazýva demand paging (na požiadanie).
Čo sa deje pri page fault (zjednodušený postup)
- Procesor deteguje, že požadovaná virtuálna adresa nemá priradenú fyzickú stránku.
- Vznikne výnimka (page fault), kontrolu prevziať operačný systém (operačné systémy.).
- OS nájde stránku na disku a prípadne uvoľní miesto v RAM (napríklad zapísaním/modifikovanou stránkou na disk).
- Stránka sa načíta do voľného rámca v RAM, tabuľka stránok sa aktualizuje a proces pokračuje od bodu, kde skončil.
Kľúčové komponenty a mechanizmy
- Tabuľky stránok — udržiavajú mapovanie medzi virtuálnymi a fyzickými stranami.
- TLB (Translation Lookaside Buffer) — rýchla vyrovnávacia pamäť v MMU, ktorá uskladňuje nedávne preklady adries a znižuje latenciu prekladu.
- Swapping — presun celých procesov alebo stránok medzi RAM a diskom, keď je pamäť nedostatková.
- Copy-on-write — optimalizácia, pri ktorej sa pamäťové bloky zdieľajú medzi procesmi, kým nie je potrebné ich upraviť (potom sa vytvorí kópia).
Výhody virtuálnej pamäte
- Izolácia procesov: každý proces má svoj vlastný virtuálny priestor, čo zvyšuje bezpečnosť a stabilitu.
- Jednoduchšia správa pamäte: programy pracujú so súvislými adresami, systém sa stará o fyzickú alokáciu.
- Umožňuje spúšťanie väčších programov, než by sa zmestili do fyzickej RAM (vďaka využitiu disku).
- Efektívne zdieľanie kódu a dát medzi procesmi (napríklad knižnice v pamäti).
Nevýhody a riziká
- Prístup do disku je oveľa pomalší než do RAM — časté page faulty môžu výrazne zhoršiť výkon (fenomén thrashing).
- Ťažšia predikovateľnosť časových odoziev, čo je problém pre vstavané systémy alebo reálne časové aplikácie, ktoré potrebujú konzistentnú latenciu.
- Režijné náklady: správa tabuľky stránok, TLB missy, swapovanie a pod.
Virtuálna pamäť vo vstavaných a reálnych časových systémoch
Niektoré počítačové systémy, najmä vstavané systémy alebo systémy reálneho času, nepoužívajú virtuálnu pamäť, pretože potrebujú veľmi rýchlu a predvídateľnú odozvu. Keď stránka musí byť načítaná z disku, čas odozvy sa môže výrazne líšiť, čo je neprijateľné pre kritické aplikácie. Preto sa v týchto prostrediach často používa pevná, statická správa pamäte alebo iné mechanizmy bez stránkovania.
Ďalšie koncepty
- Veľkosť stránky — ovplyvňuje vnútornú fragmentáciu a výkon; menšie stránky znižujú fragmentáciu, väčšie zlepšujú nároky na I/O pri presune.
- Segmentácia vs. stránkovanie — segmentácia rozdeľuje pamäť podľa logických častí (kód, dáta, zásobník), zatiaľ čo stránkovanie rozdeľuje na pevné bloky; niektoré systémy kombinujú oba prístupy.
- Veľké stránky (huge pages) — používané na zníženie režie TLB a zvýšenie výkonu pri veľkých adresných priestoroch.
Zhrnutie
Virtuálna pamäť je základný mechanizmus moderných počítačových systémov, ktorý umožňuje efektívne a bezpečné využívanie pamäťových zdrojov. Stránkovanie, TLB, tabuľky stránok a swapping sú jadrá tohto konceptu. Hoci prináša množstvo výhod (izolácia, flexibilita, možnosť bežať väčších programov), má aj nevýhody, najmä v podobe nepredvídateľnej latencie, čo obmedzuje jeho použitie v niektorých špeciálnych prostrediach, ako sú vstavané systémy.

