Systém ochran v chráněném režimu,mikroprocesor 80286
Chráněný režim je základním prostředkem pro více úlohové zpracování. Abychom mohli bezpečně přepínat mezi úlohami, musí mít jednotlivé procesy přesně vymezen adresový prostor a toto musí být hlídáno v několika stupňové ochraně. Cílem tedy je zabránění zhroucení systému a poškození nebo zneužití dat pomocí izolace systému od uživatele a uživatelů navzájem.
Realizace:
- Způsob adresování, který respektuje samostatné adresové prostory, tabulky GDT a LDT
- Kontrola segmentu, jeho typu a offsetu
- Bity A, R, W, ED, C
- Úrovně oprávnění
Úrovně oprávnění:
DPL je uložen ve 2 bitech deskriptoru segmentu v slabice přístupových práv:
kde 0 je nevyšší – jádro operačního systému, 1 – služby oper.syst., 2 – systémové programy (knihovny), 3 – uživatelské aplikace
IOPL je uložen ve 2 bitech registru Flag, a je to úroveň oprávnění pro vstupní/výstupní operace
dále pak CPL, RPL, EPL
Přístup k datovému segmentu:
Je možný, je-li úroveň procesu, který se o přístup pokouší, stejná nebo vyšší než úroveň oprávnění datového segmentu
Přístup k instrukčnímu segmentu:
Je to vlastně jakýsi druh předání řízení a je možno ho realizovat těmito způsoby:
- uvnitř segmentu, krátký, blízký JMP, krátký CALL nebo blízký RET
- mezi segmenty stejné úrovně oprávnění bez brány, vzdálený JMP, CALL, RET
- mezi segmenty stejné úrovně oprávnění přes bránu, vzdálený JMP, CALL, RET
- volám-li podprogramy v segmentu na vyšší úrovni, než je volající program, pouze přes bránou
Brána pro předání řízení (Call Gate), definuje vždy jen 1 podprogram:
0 | 0 | P.p. | Hloubka | Selektor | Offset |
Princip:
Při volání brány (tj. deskriptoru brány v tabulce GDT) se z logické adresy uplatní pouze selektor, offset je ignorován. Z deskriptoru brány (call gate) se vybere selektor a offset. Tato nová hodnota selektoru určuje deskriptor (v tabulce LDT), ze kterého se převezme adresa začátku volaného segmentu a k této adrese se přičte hodnota offsetu z deskriptoru brány (call gate), čímž proces obdrží adresu volaného podprogramu.
Privilegované instrukce, 2 kategorie:
Privileged – uplatní se pouze s nejvyšší úrovní oprávnění 0
patří sem instrukce měnící obsah registrů, LLDT, CLTS, LMSW…
Trusted – uplatní se pouze na úrovni, jenž je lepší nebo stejná než IOPL
patří sem instrukce IN, INS, INSB, OUT, LOCK…
Mikroprocesor 80286
Je 16-bitový, pouzdro 64 vývodů, vznikl 1983, tvoří základ pro PC AT, má 2.režimy. První je reálný a je pokračovatelem 8086, druhý je pak chráněný-ovládání velké paměti a ochrana před „střetem zájmů“ mezi mP a uživatelem. Je asi 5x rychlejší (při stejném kmitočtu hodin) než 8086. Zavádí ochranu ve 4 úrovních, usnadňuje běh více úloh-multitasking a přepínání úloh-task switch. Pro chráněný režim přibyly nové instrukce. Adresová sběrnice má 24 vodičů, dokážeme tedy adresovat 16MB reálné paměti a až 1GB paměti virtuální (rozšířená paměť o kapacitu disku, data se přesouvají v segmentech automaticky podle potřeby). Obsahuje 4 základní funkční jednotky (lepší zřetězení práce procesoru):
AU
Adress unit Adresovací Tvorba fyzické adresy, správa paměti, kontrola oprávnění |
BU
Bus unit Sběrnicová Načítání instrukcí, ukládání operandů, fronta 6 slabik |
EU
Execution unit Prováděcí ALU, registry, nevypočítává EA |
IU
Instruction unit Instrukční Odebírá instrukce z fronty v BU, dekóduje je a vytváří frontu 3 dekódovaných instrukcí |
Registry:
Obecné: obdoba 8086-AX, BX, CX, DX, SP, BP, SI, DI
Segmentové CS, DS, SS, ES mají tento tvar:
Selektor, 16b | P.p, 8b | Báze segmentu, 24b | Limit, 16b |
Viditelná část Neviditelná část
Systémových adres: LDTR, GDTR, IDTR, TR
Flag je 16b a má takovýto tvar:
0 | NT | IOPL | OF | DF | IF | TF | SF | ZF | 0 | AF | 0 | EF | 1 | CF |
NT – souvisí s návratem z přerušení, 0-běžný návrat IRET, 1-proces se přepne dle zpětného ukazatele v TSS
IOPL – čím vyšší hodnota, tím nižší úroveň oprávnění
MSW, nový registr, 16b, využity pouze 4b:
PE – protected mode enable, volba chráněného režimu
EM – emulace koprocesoru, programové nahrazení
MP – monitoruje přítomnost koprocesoru
TS – task switch, přepínání úloh, když má procesor něco rozdělaného, aby neodevzdal výsledek jiné úloze