Chránený režim

História

8086, predchodca 286, bol pôvodne navrhnutý s 20-bitovou pamäťovou adresovou zbernicou. Toto dovoľovalo procesoru prístup 2²⁰ bajtov pamäte, ekvivalentné k 1 mebibajtov. V tej dobe bol 1 mebibajt považovaný za relatívne veľké množstvo pamäte, a tak návrhári z IBM Personal Computer rezervovali prvých 640 kilobajtov pre aplikácie a použitie operačného systému a zvyšných 384 kilobajtov bolo rezervovaných pre základný vstupno-výstupný systém (BIOS) a pamäť pre prídavné zariadenia.
Ako plynul čas, cena pamäti sa nepretržite znižovala a využitie sa zväčšovalo. Limitovanie 1MB sa nakoniec stalo významným problémom. Intel zamýšľal riešit tuto limitáciu spolu s inými vydaním 286.

286

Prvotný chránený režim, vydaný s 286, sa nedočkal širšieho využitia. Bránili tomu nedostatky, ako neschopnosť prístupu k BIOS-u a neschopnosť prepnúť späť do reálneho režimu bez resetovania procesoru. Toto bolo brzdené faktom, že 286 dovoľovala prístup k pamäti v 16 bitoch, 2¹⁶ bajtov, ekvivalent k 64 kilobajtom, prístupných v čase.
Spätná kompatibilita s predchodcami 8086 bola zachovaná tým, že pri štarte sa inicializoval reálny režim. Reálny režimu umožňoval starším programom bežať bez modifikácie na novších 286. Pre prístup k doplňujúcim funkciám 286, operačný systém nastavoval procesor do chráneného režimu. Toto umožnilo 24 bitovú adresáciu, ktorá dovoľovala procesoru pristupovať k 2²⁴ bajtov pamäti, teda 16 megabajtov.

386

S vydaním 386 v roku 1985, mnoho problémov zabránilo rozsiahlemu prijatiu predchádzajúceho chráneného režimu.
386 vydali s adresovou zbernicou veľkosti 32 bitov, ktorá dovoľuje prístup do 2³¹ bajtov pamäti, ekvivalent ku 4 gigabajtom. Pre zmapovanie segmentov pamäte využíva procesor Global Descriptor Table (GDT) alebo Local Descriptor Table (LDT), sú v nich obsiahnuté 64 bitové (8 bajtové) záznamy v ktorých je zapísaný typ, pozícia, limit segmentu a prístupové práva (Protection Rings). Do segmentových registrov sa presúva len ofset záznamu od začiatku tabuľky. Po presunutí hodnoty do seg. registra procesor automaticky načíta záznam z GDT/LDT do neviditeľnej časti segmentového registra (base, limit). Ak je popisovač chybný, alebo ak sa aplikácia vo väčšom ochrannom kruhu snaží pristúpiť k segmentu s nižším procesor aktivuje prerušenie 10 (Invalid TSS), 11 (Segment Not Present), 12 (Stack-segment fault) alebo 13 (General Protection Fault). Navyše k zvýšeniu veľkosti adresovej zbernice a segmentom registrov, mnoho iných nových rysov bolo pridaných so zámerom väčšej operačnej bezpečnosti a stability. PAE PSE NX bit 
Chránený režim je teraz využívaný doslova vo všetkých moderných operačných systémov, ktoré fungujú na x86 architektúre, napr. Microsoft Windows, Linux, a mnoho iných.

Vstupy a výstupy chráneného režimu

Až do vydania 386, chránený režim neposkytoval priamu metódu na vrátenie sa do reálneho režimu hneď ako už raz bol prepnutý do chráneného režimu. IBM vytvorilo obkľučku, ktorá zahrňovala resetovanie CPU a ukladanie systémových registrov, ukazovateľ zásobníka a často aj masku prerušení v real-time hodinách čipu RAM. Toto dovoľovalo BIOS-u navrátiť CPU do rovnakého stavu a začať vykonávať kód pred resetom.
Pre vojdenie do chráneného režimu, musela byť vytvorená globálna tabuľka deskritporov (GDT) s minimálne troma záznamami: nulový deskriptor, kódový segmentový deskriptor a dátový segmentový deskriptor. 20. adresový riadok (A20 riadok) taktiež musel dovoľovať použitie všetkých adresových riadkov takže CPU mohol pristupovať za 1MB pamäti (iba prvých 20. bolo povolených použivať až po spustení kvôli garantovaniu kompatibility so starším softvérom). Po uskutočnení týchto dvoch krokov, PE bit musel byť nastavený v CR0 registri a druhý skok sa musel uskutočniť k vyčisteniu vstupnej fronty.
; nastav PE bit
mov eax, cr0
or eax, 1
mov cr0, eax

; druhý skok (cs = selektor časti kódu)
jmp cs:@pm

@pm:
; teraz sme v chránenom režime.
Vydaním 386 mohol chránený režim vyjsť načítaním segmentových registrov s hodnotami reálneho režimu, vyradením A20 riadku a čistením PE bitu v CR0 registra, bez potreby vykonávať počiatočné nastavovacie kroky ako v 286.

Črty

Chránený režim má množstvo nových čŕt navrhnutých k zlepšeniu kontroly operačného systému nad aplikačným softwarom, aby zväčšil bezpečnosť a stabilitu systému. Tieto bonusy dovoľujú operačnému systému fungovať spôsobom, ktorý by inak bol významne ťažší alebo dokonca nemožný bez poriadnej hardwarovej podpory.

Privilegované úrovne

V chránenom režime existujú 4 privilegované úrovne alebo prstence, začínajú od 0 po 3, kde prstenec 0 je najprivilegovanejší a 3 najmenej privilegovaný. Používanie prstencov dovoľuje programovému vybaveniu obmedziť úlohy z prístupneních dát, volacie brány alebo vykonávať privilegované inštrukcie.
Vo väčšine prostredí, operačné systémy a niektoré ovládače zariadení bežia v prstenci 0 a aplikácie bežia v prstenci 3.

Operačné systémy

Operačné systémy ako OS/2 1.x sa pokúšajú prepínať procesor medzi chránenými a skutočnými režimami. Oboje je pomalé a nebezpečné, pretože program reálneho režimu môže rýchlo spadnúť. OS/2 1.x definuje obmedzujúce programovacie pravidla dovolením Rodiny API alebo veľkým skokom. Tým pádom program môže bežať buď v reálnom alebo chránenom režime.
Niektoré skoršie Unix operačné systémy, OS/2 1.x a Windows používali tento režim. Windows 3.0 bol schopný spúšťať v reálnom režime programy v 16-bitovom chránenom režime. Windows 3.0, keď prepína na chránený režim, udržiava jedinú privilegovanú úroveň modelu, ktorý bol používaný v reálnom režime, ktorý je dôvodom prečo windowsové aplikácie a knižnice DLL môžu zaháknuť prerušenie a urobiť priamy hardwarový prístup. To trvalo až po Windows 9x sériu. Ak je Windows 1.x alebo 2.x program písaný vhodne a vyhýba sa aritmetickému segmentu, bude fungovať rovnako v obidvoch režimoch. Windows programy sa obecne vyhýbajú aritmetickému segmentu, pretože Windows implementuje software virtuálnej pamäťovej schémy, pohyblivý kód programu a dát v pamäti, keď programy nebežia, takže manipulácia absolútnej adresy je nebezpečná; programy by sa mali len pridržiavať kľučky k blokom pamäti, keď nebežia. Spúšťanie starého programu pokým Windows 3.0 beží je ošetrené v chránených režimoch spustením upozornenia, navrhne buď spustenie Windows v reálnom režime alebo aktualizovanie na novú verziu aplikácie. Nie je možné aby niektoré GUI programy bežali v 16-ti bitovom chránenom režime a iný GUI program bežal v reálnom režime. Vo Windows 3.1 reálny režim zmizol.
Dnes, 16-ti bitový chránený režim je ešte využívaný na spustenie dedičných aplikácií, napr. DPMI kompatibilný s DOS rozširovacími programami (cez virtuálne DOS stroje) alebo Windows 3.x aplikácie (cez Windows na Windows podsystém) a isté triedy ovládačov zariadení v OS/2 2.0 a neskoršie, všetky pod kontrolou 32 bitového jadra.