Ochrana pamäte

Ochrana pamäte je spôsob kontroly používania pamäte na počítači a zároveň je jadrom na virtualizáciu každého operačného systému. Hlavným účelom ochrany pamäte je ochrániť proces bežiaci na operačnom systéme od sprístupnenia inej pamäte ako tej, ktorá mu bola pridelená. Toto zamedzí chybe v rámci procesu, aby ovplyvnila iné procesy a zároveň zabráni nežiaducemu softvéru od získavania neautorizovaného prístupu do systému.

Metódy

Existujú dva rozličné spôsoby ako dosiahnuť ochranu pamäte. Tieto zahrňujú:

Segmentácia

Segmentácia spočíva v rozdelení pamäte počítača do tzv. segmentov. Spôsobuje, že sa nevyužije celá kapacita diskety, napr. ak píšeme 513 slov, zaplníme celý 1 sektor + 13 slov, ale do toho druhého sektoru už viac nič neuložíme (inak – sú zvyšky voľného priestoru v určitej rozdelenej časti)
Architektúra x86 má viaceré funkcie na segmentáciu, ktoré sú užitočné pre tých, ktorí chcú využiť možnosť chránenej pamäte, ktorú ponúka táto architektúra. V x86 architektúre, Globálna Tabuľka Deskriptorov a Lokálne Tabuľky Deskriptorov môžu byť použité na referencovanie segmentov v pamäti počítača. Ukazovatele na segmenty pamäte na x86 procesoroch môžu byť taktiež uchovávané v procesorovom registri segmentov. Pôvodne x86 procesory mali 4 segmentové registre: CS, SS, DS and ES; neskôr boli pridané ďalšie dva segmentové registre – FS a GS.

Stránkovanie

V stránkovaní, adresný priestor pamäte je rozdelený do rovnako malých častí, nazývaných stránky. Používaním mechanizmu virtuálnej pamäte,  každá stránka môže byť vytvorená tak, aby bola umiestnená v ľubovolnej časti fyzickej pamäte, 
alebo aby bola označená ako chránená. Virtuálna pamäť umožňuje mať lineárny adresný priestor virtuálnej pamäti a využiť ho na prístup ku blokom roztrieštených po  celom adresnom priestore fyzickej pamäti.
Väčšina počítačových architektúr založených na stránkovaní, zväčša teda x86 architektúry, používa stránkovanie, ako spôsob na ochranu pamäte.
Tabuľka stránok sa používa na mapovanie virtuálnej pamäte do fyzickej. Táto tabuľka je obvykle pre proces neviditeľná. Tabuľka stránok uľahčuje alokovanie novej pamäte, keďže každá nová stránka môže byť alokovaná z ľubovolného miesta vo fyzickej pamäti.
Týmto dizajnom sa znemožní aplikáciam prístup ku stránkam, ktoré neboli explicitne stanovené pre nich a to jednoducho preto, že žiadna pamäťová adresa, dokonca ani len kompletne náhodná, ktorú sa aplikácia môže rozhodnúť použiť, buď odkáže na stanovenú stránku, alebo vygeneruje chybu o poruche stránky (page fault – PF). Nealokované stránky jednoducho nemajú z pohľadu aplikácie žiadne adresy.
Ako poznámku na okraj poznamenajme, že PF nemôže byť fatálnou chybou. PF nie je používaná iba na ochranu pamäte, ale aj iným zaujímavým spôsobom: OS môže zachytiť PF a načítať stránku, ktorá bola predtým odswapovaná na disk a vrátiť aplikácií, s tým, že sa vyskytla porucha stránky. Týmto spôsobom, aplikácia prijíma stránky pamäte ako je potrebné. Táto schéma, známa aj ako swapovanie, umožňuje, aby dáta v pamäti, ktoré niesu momentálne používané mohli byť premiestnené na disk a následne vrátené naspäť, spôsobom "neviditeľným" pre aplikácie, aby zvýšila celkovú kapacitu pamäte.

Ochranné kľúče

Mechanizmus ochranných kľúčov rozdeľuje fyzickú pamäť do blokov špecifickej veľkosti (napr. 2KB), kde každý z týchto blokov má pridelenú číselnú hodnotu nazývanú ochranný kľúč. Taktiež každý proces má hodnotu ochranného kľúču, s ním asociovanú. Pri vstupe do pamäte hardvér kontroluje, či sa ochranný kľúč súčasného procesu zhoduje s hodnotou pridelenou bloku pamäte, ku ktorému sa pristupuje; pokiaľ nie, nastane výnimka. Tento mechanizmus bol používaný v architektúre System/360.
Ochranné kľúče System/360, ktoré boli vyššie popísané sú priradené ku fyzickým adresám.
Tieto by nemali byť pomýlené s mechanizmom ochranných kľúčov používaným procesormi ako napríklad Intel Itanium a HP Precision Architecture (HP/PA, tiež známa ako PA-RISC), ktoré sú priraďované virtuálnym adresám a ktoré umožňujú viacnásobné kľúče na jeden proces.
V počítačových architektúrach Itanium a PA, majú preklady (TLB položky) „kľúče“ (Itanium) alebo „prístupové id“ (PA), ktoré sú s k nim priradené. Bežiaci proces má zopár registrov s ochrannými kľúčmi – 16 pre Itanium, 4 pre HP PA. Preklad vybraný virtuálnou adresou má jej kľúč porovnaný s každou hodnotou kľúča v registri. Pokiaľ niektorí z nich pasuje (plus ďalšie možné overenia), vstup je povolený. Pokiaľ žiadny z nich nepasuje je následne vygenerovaná chyba alebo výnimka. Softvérový obsluhovač chýb môže, pokiaľ by bolo žiadané, skontrolovať chýbajúci kľúč vzhľadom na väčší zoznam kľúčov uchovávaný softvérom; tak teda, registre ochranných kľúčov, ktoré sa nachádzajú v procesore, môžu byť spracované ako softvérovo riadená cache s väčším zoznamom kľúčov prislúchajúcich k procesu.
V PA má kľúč veľkosť 15 – 18 bitov; Itanium mu prideľuje prinajmenšom 18. Kľúče sú obvykle priradené ku „ochranným doménam“, rovnako ako knižnice, moduly, a pod.

Simulovaná segmentácia

Simulácia je používanie monitorovacieho programu na interpretovanie inštrukcií strojového kódu počítača. Takýto simulátor môže poskytovať ochranu pamäte použitím segmentovej schémy a overením cieľovej adresy a dĺžky každej inštrukcie v reálnom čase, predtým ako ich skutočne vykoná. Simulátor musí prepočítať cieľovú adresu a dĺžku a porovnať ich so zoznamom platných adresových intervalov, ktoré udržiava vzhľadom na prostredie vlákna, tak ako každá dynamická pamäť blokuje nadobudnuté since the thread's inception plus any valid shared static memory slots. Význam slova "platný" sa môže meniť počas životu vlákna vzhˇľadom na kontext: občas môže byť dovolené zmeniť statický blok úložného priestoru a občas nie, vzhľadom na súčasný spôsob realizácie, ktorý môže alebo nemusí závisieť na kľúči úložného priestoru alebo stave kontrolóra.
Vo všeobecnosti nie je vhodné používať túto metódu ochrany pamäte tam, kde na CPU existuje adekvátne prostriedky, keďže výpočtová sila vyplýva z počítača a tak môže byť táto ochrana považovaná za "znovuobjavením kolesa".

Adresácia založená na spôsobilosti

Adresácia založená na spôsobilosti je zaujímavý návrh ochrany pamäte, aj keď v moderných počítačoch nepoužívaný. V tomto návrhu sú smerníky nahradené chránenými objektami (nazývané schopnosti), ktoré môžu byť vytvorené iba prostredníctvom používania privilegovaných inštrukcií, ktoré môžu byť vykonané iba jadrom (alebo nejakým iným procesom, ktorý má právomoci na ich vykonanie). Toto efektívne umožňuje jadru kontrolovať, ktoré procesy môžu pritúpiť ku ktorým objektom v pamäti bez toho, aby potreboval použiť separovaný adresný priestor a kontextové prepínače.

Vyjadrenie úrovne ochrany

Vhodné vyjadrenie úrovne ochrany konkrétnej implementácie je odmerať, ako tesne je táto implementácia prepojená na zásadu milimálneho privilégia.