Procesory 4. generace
Procesor 80286
Procesor vývojově navazuje na procesor Intel Vylepšení spočívá hlavně v nové správě paměti. Procesor umožňuje privilegovaný přístup k paměti, čímž se umožnilo zpracování několika procesů. Současně se rozšířila možnost adresace paměti z 1 MB na 16 MB (24 bitů) pro fyzickou paměť a na 1GB pro virtuální režim adresace paměti (32 bitů). Datová sběrnice je 16bitová, hodinová frekvence je 10 MHz a trvání cyklu sběrnice 200 ns. Počet řídících signálů je oproti procesoru 8086 snížen, protože procesor není určen pro malé systémy a vlastní počítač je pak vybaven obvodovým systémovým řadičem.
Procesor byl uveden na trh v roce O rok později byl předveden počítač IBM PC/AT s tímto procesorem. Jde o 16bitový procesor s pokročilou architekturou podporující práci ve dvou režimech : reálném (REAL) chráněném (PROTECTED)
Procesor I80286 včetně vnitřní struktury
Reálný režim V reálném režimu je procesor slučitelný s procesorem 8086 a tak lze zpracovávat programy původně určené pro procesor Procesor pracuje jen jako rychlejší varianta procesoru 8086.
Chráněný režim Chráněný režim byl nazván podle způsobu práce s pamětí. V tomto režimu má procesor vlastnosti směřující k víceúlohovému zpracování. Pro takovéto zpracování je však požadována rekompilace (opětné přeložení) či úprava programů. Přechody mezi režimy jsou složité.
Procesor umí spolupracovat s matematickým koprocesorem a je vybaven tak, že je umožněna současná práce procesoru a koprocesoru. Komunikaci mezi procesory a zajišťuje speciální způsob řízení (handshaking). Koprocesor čte současně instrukce s procesorem. Rozpozná-li známou instrukci, pak převezme řízení od procesoru a provede žádanou operaci. V případě, že není koprocesor nainstalován, je vyvolán stav neznámé instrukce CPU. Pak požadovanou matematickou operaci provede procesor a nahradí tak koprocesor. Je však mnohem pomalejší.
Procesor je složen ze 4 paralelně pracujících částí umožňujících proudové zpracování. Struktura umožňuje provádět paralelně instrukci i x, dekódovat instrukci i x+1 a z paměti vybírat instrukci i x+2. Jednotlivé části CPU jsou:
Sběrnicová jednotka Sběrnicová jednotka (Bus Unit - BU) zabezpečuje čtení a zápis do fyzické paměti. Z paměti čte byty, které ukládá do fronty předvýběru 6 bytů čekajících na zpracování. Obsahuje registry a budiče datové i adresové sběrnice, obvody generování řídících signálů sběrnice včetně jejího řízení, obvody pro komunikaci mezi procesorem a koprocesorem
Instrukční jednotka Instrukční jednotka (Instruction Unit - IU) odebírá z fronty instrukce, dekóduje je a ukládá je tentokrát do fronty maximálně 3 instrukcí pro zpracování prováděcí jednotkou (ve formě makroinstrukcí). Tím je zrychlena činnost celého procesoru, protože odpadá část nezbytného dekódování instrukce při zahájení jejich provádění.
Prováděcí jednotka Prováděcí jednotka (Execution Unit - EU) provádí dekódované instrukce. Sběrnicové jednotky používá pro přístup k paměti a operace I/O. Je to jediná část procesoru, která odpovídá EU procesoru 8086.
Adresovací jednotka Adresovací jednotka (Addres Unit - AU) spravuje paměť a zajišťuje ochranu paměti před neoprávněnými přístupy. Poskytuje prostředky pro 4úrovňovou ochranu paměti proti neoprávněným přístupům a dovoluje adresovat 16 MB fyzické paměti a 1GB virtuální paměti (v chráněném režimu). Přepočítává virtuální adresy na fyzické během 1 periody hodinové frekvence.
Jednotka obsahuje : 1. Čtyři 64bitové segmentové registry. Každý z těchto registrů obsahuje selektor (16 bitů) a popisovač segmentu (deskriptor - 48 bitů) aktuálního segmentu. V reálném režimu obsahuje selektor bázovou adresu segmentu. V chráněném režimu (virtuální paměť) představuje jen index v tabulce popisovačů segmentů, která je pro daný úkol uložena v operační paměti. Každý úkol má pak možnost přístupu až k segmentům. Procesor pak podle selektoru přepisuje popisovač segmentu z operační paměti do segmentového registru využívaného pro tvorbu adresy a operace ochrany paměti.
2. Tři registry ukazující do 3 tabulek popisovačů segmentů (globální, lokální a přerušení). 3. Registr úkolu ukazující na segment určený pro popis stavu aktuálního úkolu.
Signály procesoru 80286, které nejsou u procesoru 8086 či mají jiný význam: D0 – D15 - Obousměrná datová 16bitová sběrnice. A0 – A23 - adresová 24bitová sběrnice, při operacích I/O jsou využity jen signály A0 – A15. COD/INTA - Čtení kódu instrukce nebo potvrzení přijetí žádosti o přerušení. PEREQ - Požadavek koprocesoru na obsluhu. PEACK - Signál potvrzení požadavku koprocesoru CAP - Vývod pro připojení korekčního kondenzátoru pro vyhlazení nežádoucích zákmitů. ERROR - Chyba koprocesoru.
BUSY - Signál oznamující, že koprocesor provádí výpočet. Signál je testován instrukcí WAIT
Registry Struktura registrů je obdobná jako u procesoru Registr příznaků F je rozšířen o 3 bity uplatňující se jen v chráněném režimu. Tyto bity určují režim práce : NT - Nested Task. Návrat z přerušení. Je-li NT=0, jedná se o běžný návrat z přerušení IRET Je-li NT=1, přepne se proces dle stavu zpětného ukazatele TSS (segment stavu procesu). IOPL - I/O Privilege Level. Úroveň oprávnění, kde 2 bity určují úroveň oprávnění, při kterém lze ještě provádět instrukci I/O. Čím vyšší hodnota, tím nižší úroveň oprávnění.
Oproti procesoru 8086 je zde ještě jeden 16bitový registr strojového stavového slova MSW (Machine Status Word), kde se uplatňují 4 nejnižší bity. Jak je vidět na dalším obrázku, jsou to bity : PE - Protected Mode Enable. Volí se jím chráněný režim procesoru, návrat do reálného režimu lze provést jen pomocí signálu RESET. MP - Monitor Procesor Extension. Indikuje přítomnost koprocesoru. EM - Emulate Procesor Extension. Volí se jím programové nahrazení koprocesoru, pokud není tento přítomen. TS - Task Switch. Indikuje přepnutí procesu.
Registry procesoru 80286
Virtuální adresa Adresa v reálném i chráněném režimu je složena ze dvou 16bitových složek. Část adresy (Offset) je u obou režimů stejná. Druhých 16 bitů v chráněném režimu se nazývá selektor segmentu (Segment Selector) Celá adresa v chráněném režimu se nazývá virtuální adresa. Selektor segmentu obsahuje 13 bitů z 16bitového slova, což reprezentuje 8192 indexů z tabulky popisovačů lokálního či globálního adresového prostoru.
Tabulky popisovačů segmentů Selektor (část virtuální adresy) ukazuje do tabulky popisovačů segmentů globálního či lokálního adresového prostoru. Pro lokální prostory jsou používány tabulky LTD (Local Descriptor Table). Jsou určeny pro jediný proces. Pro globální prostory jsou používány tabulky GDT (Global Descriptor Table). Jsou určeny pro všechny procesy zpracovávané v CPU(například překladač). Tabulky jsou uloženy v paměti na pevných adresách (rezidentně) a podle jejich obsahu se transformují 32bitové virtuální adresy na 24bitové reálné adresy.
Každý z 8192 indexů má délku 8 bytů obsahující tyto informace: báze segmentu (adresa počátku segmentu 24 bitů) délka segmentu (16 bitů, nejvyšší adresa uvnitř segmentu) přístupová práva (8 bitů) 2 byty jsou rezervovány pro použití v procesoru 80386
Podle typu segmentu jsou definovány 4 základní třídy popisovačů segmentů a to : 1. datový segment - obsahuje data 2. instrukční segment - obsahuje instrukce 3. systémový segment - obsahuje instrukce pro systém 4. bránový segment - popisovač brány (nikoliv I/O)
Datový segment Popisovač datového segmentu ukazuje na segment v paměti obsahující data nebo zásobník. Že jde o ten který popisovač, pozná procesor podle obsahu bytu přístupová práva, a to podle nastavení bitů 3 a 4.
Instrukční segment Instrukční segment obsahuje instrukce určené ke spuštění. Liší se od datového segmentu jen bytem přístupových práv.
Systémový segment Systémový segment obsahuje informace určené procesoru a operačnímu systému. Od předchozích segmentů se liší opět bytem přístupových práv. Do tohoto segmentu smí zapisovat jen procesor.
Segmentové registry V chráněném režimu procesoru jsou 4 registry, a to registry CS, DS, ES a SS složeny ze dvou částí. Jedná se o viditelnou 16bitovou část (viditelnou programátorovi) a 48bitovou neviditelnou část registrů.
Obsah viditelné části registrů CS, DS a ES se nastavuje instrukcemi typu MOV, LDS atd. Registr CS se plní instrukcemi skoků, volání podprogramů a návratů. Při změně některé viditelné části těchto registrů používá procesor jeho hodnotu k výběru odpovídající položky z tabulky popisovačů, při čemž naplní neviditelnou část příslušnými hodnotami, které se použijí při každém přístupu do paměti. Při každé změně selektoru se automaticky kontroluje úroveň oprávnění.
Registr GDTR (Global Descriptor Table Registr) obsahuje adresu uložení tabulky popisovačů globálního adresového prostoru. Skládá se z 16 bitů délky segmentu a 24 bitů báze segmentu. Registr LDTR (Local Descriptor Table Registr) se skládá z viditelného 16bitového selektoru a neviditelné 40bitové části skládající se z báze segmentu a velikosti segmentu LDT (Local Descriptor Table - lokální tabulka popisovačů segmentů).
Adresace paměti v chráněném režimu Nejprve si nadefinujeme pojem adresový prostor. Adresový prostor jsou všechny možné adresy systému a lze ho rozdělit na adresový prostor fyzický a adresový prostor logický. Adresový prostor fyzický jsou všechny reálně dostupné adresy systému. Adresový prostor logický jsou všechny využitelné adresy systému. V reálném režimu je činnost procesoru obdobná činnosti procesoru 8086.
V chráněném režimu je adresování však jiné, protože programy nepracují s fyzickou adresou, ale s adresou virtuální. Segmentové registry určují jeden z segmentů o velikosti až 64 kB virtuálního adresového prostoru. Segment je vždy definován těmito parametry : bází segmentu (adresa počátku segmentu), limitem segmentu (též délkou segmentu zmenšenou o 1), přístupovými právy a typem segmentu.
V segmentu se pohybujeme pomocí 16bitového ofsetu. Reálná adresa se pak určí součtem tohoto offsetu s bází. Virtuální adresový prostor je segmentován obdobně jako reálný adresový prostor. Registry SI, DI, SP a BP se používají pro uložení offsetu. Celá logická adresa se ukládá například pro zásobník SP:SP, kde v stack segmentu (SS) je uložena segmentová část a ve stack pointru (SP) pak offset.
Správa 16 MB reálného adresového prostoru se provádí pomocí skupiny tabulek popisovačů segmentů, které definují virtuální adresový prostor pro každý úkol v systému. V chráněném režimu procesor umožňuje vytvoření lokálního adresového prostoru (Local Address Space) pro každý úkol a globálního adresového prostoru (Global Address Space) pro programy a data potřebná pro všechny úkoly systému. Do lokálního adresového prostoru umísťuje procesor vlastní data a proměnné pro daný úkol. Do globálního adresového prostoru může být umístěn program spouštěný více uživateli (překladač atd.).
Řada operací určených pro virtuální adresování a převod virtuální adresy na reálnou je řešena hardwarově tabulkou popisovačů segmentu a tak se podstatně zjednodušuje operační systém.
Systém ochran Jedná se zásadně o ochrany v chráněném režimu procesoru. Mechanismus ochrany paměti musí chránit programy a data před neoprávněnými zásahy a všechny úlohy vzájemně izolovat. Systém ochrany musí přidělit různým úkolům různou prioritu. Z toho vyplývá, že např. operační systém musí mít větší prioritu než uživatelský program. Též každá instrukce musí být ověřována a kontrolována dříve než se vykoná. Tím se předchází přepsání programu a dat.
Systém ochrany zajišťuje : oddělení uživatelského a systémového programového vybavení vzájemné oddělení jednotlivých uživatelů či procesů včetně kontroly typů dat a jejich užití (na př. nelze spustit data, či upravit program) Segmentace slouží hlavně pro snadnou přemístitelnost programů a zkrácení adres ale i přesto ji lze označit jako první stupeň ochrany paměti, která zabrání v přístupu mimo segment. Nechrání ale před chybným umístěním segmentu v paměti, ani chybám uvnitř segmentu.
Hardwarová ochrana paměti a správa paměti (AU) v procesoru umožňují rozdělit virtuální adresový prostor na části pro jednotlivé uživatelské programy. Současně existuje jediný společný adresový prostor pro všechny úkoly (globální adresový prostor) umožňující použití jediné instrukce pro volání jak operačního systému, tak i podprogramů, a to instrukci CALL. K ochraně operačního systému před uživatelskými programy se používají 4 úrovně oprávnění ve virtuálním adresovém prostoru každého uživatele. Operační systém, ačkoliv se nachází v adresovém prostoru uživatelského programu, je ale tímto systémem ochrany aktivně chráněn.
Procesor rozeznává 4 typy segmentů pro účely jejich ochrany : segmenty, které lze jen provádět, segmenty, které lze jen číst, segmenty, které lze jen číst nebo provádět, segmenty, do kterých lze jen zapisovat nebo z nich číst.
Pomocí příznakových bitů je ošetřován datový, instrukční, systémový segment včetně popisovače brány. Mimo to procesor povoluje programově volit 4stupňovou ochranu virtuální paměti. Úroveň oprávnění každého segmentu je v popisovači segmentu. Jsou chráněny více privilegované úrovně a program má proto přístup jen k datům stejné nebo nižší úrovně. Pro každou úroveň je použit zvláštní zásobník a ukazatel zásobníku, což umožňuje ochranu před poškozením a nevhodnými zásahy.
Úrovně oprávnění (RPL) jsou : úroveň 0 - má nejvyšší oprávnění, což má "jádro" (kernel) operačního systému (řízení procesoru), úroveň 1 - mají služby poskytované operačnímu systému jako je organizace I/O či přidělování prostředků, úroveň 2 - mají systémové programy a podprogramy knihoven, úroveň 3 - mají uživatelské aplikace. Přístup k datům v datovém segmentu je povolen, jen je-li úroveň oprávnění procesu alespoň rovna úrovni oprávnění zpřístupňovaného datového segmentu. Tato kontrola se provádí vždy je-li naplněn segmentový registr.
Předání řízení do instrukčního segmentu může procesor bez použití dalších prostředků předat jen segmentu se stejnou úrovní oprávnění. To lze uskutečnit instrukcemi skok, volání podprogramu či návrat z podprogramu. Předání řízení do instrukčního segmentu se uskutečňuje pomocí speciálního systémového segmentu - brány (nikoliv tedy brány I/O).
Brány jsou 4 a to : brána pro předání řízení do segmentu vyšší úrovně oprávnění, brána pro nemaskovatelná přerušení, brána pro maskovatelná přerušení, brána zpřístupňující segment stavu procesoru. Další popis přesahuje rámec výkladu.
Instrukce, které je možno provádět jen na nejvyšší úrovni oprávnění, patří do skupiny privilegovaných instrukcí. Pokus o provedení těchto instrukcí na jiné úrovni způsobí vnitřní přerušení. V chráněném režimu pak rozlišujeme ještě jeden typ privilegovaných instrukcí, a to instrukce, které se nesmějí vykonávat na nižší úrovni oprávnění, než je úroveň oprávnění v příznakovém režimu.
Přepínání procesů V chráněném režimu procesoru lze současně uložit více procesů a v průběhu práce mezi nimi přepínat. Vždy však může být prováděn jen jediný proces. Přepínání zajišťuje sám procesor bez speciálních instrukcí. Informace o každém procesu jsou uloženy ve speciálním segmentu stavu procesu. Segment se nazývá segmentem stavu procesu TSS (Task State Segment). Tento popisovač smí být uložen jen v GTD. Jeho adresa je uložena ve speciálním registru TR (Task Registr) a skládá se ze 2 částí: viditelné 16bitové obsahující selektor ukazující do GDT, neviditelné obsahující 24bitovou bázi segmentu a 16bitovou velikost segmentu ukazující skutečný TSS.
Přepnutí procesu může být způsobeno vzdáleným skokem, voláním podprogramu či návratem z podprogramu. Zprostředkovává se pomocí brány. Vzhledem k vysokému stupni ochrany paměti lze dosáhnout velmi rychlého přepnutí jednotlivých úkolů. Skoro všechny instrukce (výjimkou je práce se zásobníkem a načtení segmentového registru) jsou restartovatelné. Restartovatelnost instrukcí zjednodušuje programy a zajišťuje rychlou obsluhu programových výpadků při častých výpadcích práce s virtuální pamětí, kdy je třeba obsloužit výpadek chybějícího segmentu, jak ukazují následující příklady.
Každý výpočetní systém realizuje přenos programů a dat mezi operační pamětí a záložní pamětí (pevný disk). Jestliže se zjistí, že virtuální adresa použitá v instrukci není v operační paměti, musí systém realizovat přesun informace ze záložní paměti
Předpokládejme, že cílový segment je umístěn v operační paměti. Když systém zjistí, že segment v paměti není, dojde k výpadku segmentu a operační systém se ho snaží do operační paměti umístit. Pokud nenajde volné místo pro uložení požadovaného segmentu z virtuální paměti, musí se některé segmenty z operační paměti nahradit. Procesor si používané segmenty označuje. Po nalezení segmentů, které nebyly používány, je lze přesunout do záložní paměti. Zjistí se zda byly jejich segmenty modifikovány, či nikoliv. Pokud nebyly, lze je přepsat, protože jejich zdrojové verze jsou v záložní paměti.
Navíc operační systém označí v tabulce popisovačů segmentů tyto segmenty jako nepřítomné. Uvolní-li operační systém dostatečně velký paměťový prostor v operační paměti, přenese cílový systém ze záložní paměti do operační paměti potřebné segmenty. Potom operační systém v tabulce popisovačů segmentů označí, že jsou příslušné segmenty v operační paměti a adresovou informaci pro tyto segmenty uloží do příslušných popisovačů segmentů. V tomto okamžiku operační systém restartuje instrukci, která příslušné segmenty požadovala.
Právě uvedené sekvence činností ještě jednou přehledně popíšeme : program požaduje přístup k segmentu uloženému v záložní paměti, procesor kontroluje dostupnost segmentu v tabulce popisovačů segmentu, dostává nazpět příznak nepřítomnosti segmentu, vyvolá se program operačního systému pro obsluhu výpadku segmentu, operační systém zajistí čtení ze záložní paměti procesorem, procesor aktivuje I/O hardware záložní paměti,
procesor povoluje řadiči DMA přenos ze záložní paměti do volné části operační paměti, operační systém modifikuje tabulku popisovačů segmentu, operační systém vrátí řízení přerušené instrukci. V případě, že dochází k přeplnění zásobníku, je obnova jednoduchá. Výpadek zásobníku vyvolá proceduru, která zvýší velikost segmentu zásobníku a znovu spustí instrukci zapříčiňující výpadek.
Přerušení Systém přerušení je tvořen vnějšími signály INTR, NMI, ERROR a vnitřními signály INTn a chybou při běhu programu. Signály INTR a NMI působí stejně jako u procesoru Signálem ERROR je generováno přerušení dané chybou koprocesoru. V chráněném režimu je přerušení realizováno jiným způsobem než v reálném režimu. Tabulka vektorů přerušení je nahrazena tabulkou podobnou tabulce popisovačů globálního adresového prostoru - tabulkou popisovačů segmentu obsluhy přerušení IDT (Interrupt Descriptor Table), která má až 256 ukazatelů na programy obsluhy přerušení. Adresa IDT je uložena ve speciálním registru IDTR (Interrupt Descriptor Table Registr).
Registr obsahuje 24bitovou bázi a 16bitovou velikost segmentu. Přerušení se provádí přes 2 typy brány, které jsou pro maskovatelné a nemaskovatelné přerušení. Ty se od sebe liší jen příznakem přerušení. Při maskovatelném přerušení lze zakázat další přerušení.
Rezervovaná přerušení generované procesorem pro ilustraci jsou tato 0-dělení dvojnásobný výpadek segmentu 1-krokovací režim 9-překročení segmentu koprocesoru 2-nemaskovatelná přerušení 10-chybný TSS 3-ladící program 11-výpadek segmentu 4-přetečení 12-výpadek segmentu se zásobníkem 5-kontrola mezí 13-obecná chyba ochrany 6-chybný operační kód 16-chyby koprocesoru 7-nedostupnost koprocesoru
Pořadí priorit při současném příchodu několika žádostí o přerušení je následující : přerušení generované procesorem a INTn, krokovací režim, NMI, překročení segmentu koprocesorem, INTR.
Rezervovaná přerušení lze rozdělit do 3 skupin : TRAP - Jde o přerušení buď vnitřní či hardwarové a instrukce byla úspěšně vykonána. Do zásobníku se ukládá návratová adresa (adresa následující za adresou, která přerušení způsobila) – CS:IP. FAULT - Vnitřní přerušení, které nebylo úspěšně dokončeno. Pak se do zásobníku ukládá adresa instrukce, která přerušení způsobila – CS:IP. ABORT - Přerušení způsobí, že v programu nelze dále pokračovat a činnost procesoru musí být násilně přerušena. Neukládá se žádná návratová adresa.
V reálném režimu pracuje systém přerušení procesoru stejně jako u procesoru Oproti procesoru 8086 využívá ještě rezervovaných přerušení typu 5 - 7, 9 a 16. Informace o tom, kde se nacházejí obslužné programy jednotlivých přerušení, je v tabulce vektorů přerušení. Počáteční adresa tabulky je H a má délku 1 kB. Další rozvádění tématu je již mimo rámec této publikace.
Multiprocesorový systém Procesor je též vybaven prostředky pro multiprocesorovou součinnost s arbitrem sběrnice Je to opět signál LOCK, kterým pokud má úroveň H, je sběrnice chráněna před požadavky přístupu dalších procesů systému. Zajišťuje se tím celistvý přenos dat mezi procesory se společným adresovým prostorem.
Procesor Je to prvý 32bitový procesor firmy Intel a byl uveden na trh v roce Pracuje s 32bitovými daty i adresou z čehož vyplývá, že může pracovat až se 4 GB fyzické či 64 TB virtuální paměti. Může však pracovat i s 16bitovou adresovou sběrnicí při využití speciálního signálu. Procesor s označením 80386SX je sice plně kompatibilní s procesorem 80386DX (dále jen 80386), ale vnější strukturu má 16bitovou. To znamená, že vnější datová sběrnice je 16bitová a adresová sběrnice 24bitová. Při zpracování 16bitových programů je rychlost obou verzí stejná. Při zpracování 32bitových programů je však menší, protože 32bitová data musí procesor 80386SX přenášet ve dvou krocích.
Procesor I80386
K procesoru je navržen a dodáván 32bitový matematický koprocesor s označením (pro 80386SX koprocesor 80387SX). Procesor umí spolupracovat i s koprocesorem 80287, ale musí programově vědět, který koprocesor je vlastně připojen. Procesor pracuje ve 3 režimech práce : reálném, chráněném, virtuální 8086 (V86).
Reálný režim je slučitelný s reálným režimem procesoru 8086 obdobně jako u procesoru Adresová sběrnice používá jen bity A2 - A19. Po nulování je procesor automaticky nastaven do reálného režimu. Chráněný režim je slučitelný s chráněným režimem procesoru Adresová sběrnice je využita v plné šíři, nemá však vyvedeny bity A0 a A1, které jsou dekódovány v procesoru spolu s informací o velikosti dat.
V režimu virtuální 8086 (V86) se procesor chová, jakoby procesor byl procesorem 8086 s virtuální pamětí, adresním prostorem a registry. To znamená, že proces vyžadující procesor 8086 má procesor přidělen, ale jen zdánlivě. Zdánlivost je realizována adresací paměťového prostoru. Paměť je rozdělena na jednotlivé bloky. Každému procesu je pak vyhrazena jistá část paměti nepřekrývající se s bloky jiných procesů. Přitom jsou popisovače segmentů (deskriptory) pro každý proces naplněny tak, aby proces nemohl identifikovat fyzickou adresu svých bloků paměti.
U procesoru se rozlišují 3 druhy adres a to : Logická adresa (nazývá se též virtuální adresa) se skládá z 16bitového selektoru a 32bitového offsetu. Lineární adresa je 32bitová adresa. Pokud není v činnosti stránkovací jednotka, pak tato adresa ukazuje přímo do fyzické paměti Fyzická adresa je 32bitová a je převedena pomocí stránkovací jednotky z lineární adresy. Pokud není v činnosti stránkovací jednotka, pak je fyzická adresa shodná s lineární adresou
Sběrnicová jednotka Procesor se skládá z 6 paralelně pracujících jednotek, a to : Sběrnicová jednotka (Bus Interface Unit - BIU) organizuje styk obvodů procesoru s okolím a též činnost sběrnic. To znamená, že organizuje přenos dat mezi procesorem, pamětí, sběrnicemi I/O a koprocesorem. Dále přijímá požadavky na čtení instrukcí a přenos dat, které provádí podle priority. Pracuje zásadně s fyzickými adresami a pomocí jednotek segmentace a stránkování se musí adresa převést na adresu fyzickou.
Blokové schéma procesoru 80386
Jednotka předvýběru instrukcí Jednotka předvýběru instrukcí (Instruction Prefecht Unit - IPU) pracuje v době, kdy je volná sběrnice a pomocí sběrnicové jednotky vybírá z paměti byty tvořící další instrukce a ukládá je do fronty 16 bytů. Doplnění fronty je realizováno tehdy, jsou-li vybrány alespoň 4 byty z fronty předvybraných instrukcí. V případě větvení programu, návratu z podprogramu či přerušení se fronta vyprázdní, čtou se nová místa z paměti, která jsou okamžitě zpracována a předána dále ke zpracování. V procesoru byla tato jednotka součástí BIU.
Instrukční jednotka Instrukční jednotka (Instruction Decode Unit - IDU) vybírá z fronty předvýběru byty a převádí je na mikroinstrukce, které ukládá do nové fronty až 3 dekódovaných instrukcí. Z prvého bytu instrukce se rozpoznává délka celé instrukce (až 16 bytů). Tato jednotka též signalizuje BIU, zda instrukce obsahuje odkaz na komunikaci s okolím procesoru prostřednictvím BIU.
Prováděcí jednotka Prováděcí jednotka (Execution Unit - EU) zpracovává mikroinstrukce. Vyžaduje však ke své činnosti spolupráci dalších jednotek. Obsahuje posuvný registr, 32bitovou sčítačku a odečítačku, 8bitovou násobičku a děličku, univerzální registry, blok barrel schifter umožňující realizovat posun o více bitů během jediné periody hodinového signálu (pro zrychlení násobení, dělení, posunu a generování indexových adres) a další potřebné obvody.
Segmentační jednotka Segmentační jednotka (Segmentation Unit - SU) provádí převod logické adresy na lineární podle požadavků prováděcí jednotky. Slouží hlavně v módu chráněné virtuální paměti, při které převádí virtuální adresu na adresu lineární. V módu reálných adres provádí výpočet fyzické adresy z adresy segmentu a offsetu. Pak převádí lineární adresu na adresu fyzickou.
Stránkovací jednotka Stránkovací jednotka (Paging Unit - PU) přebírá lineární adresu, která tuto adresu převádí na adresu fyzickou se skutečným ukazatelem do fyzické paměti. Do této paměti jsou data ukládána po stránkách o 4 kB.
Signály, které nejsou u procesoru nebo mají jiný význam: D0 – D31 - Datová 32bitová sběrnice. A2 – A31 - Adresová 32bitová sběrnice pro adresaci 32bitových slov. BE0 – BE3 - Určuje přenášené byty v 32bitovém slově. BS16 - Volba 16bitového přenosu. NA - Vyvolává prodloužení času pro dekódování (Next Address). D/C - Určuje, zda se bude jednat o data či řídící signály.
ADS - Určuje, kdy je určená skupina signálů platná (Address Status). W/R - Určuje směr toku dat. BUSY - Rozhoduje o autonomním testu. CLK2 - Hodinový signál s 2násobnou frekvencí, než je frekvence procesoru. Uvnitř procesoru je tato frekvence dělena 2.
U SX jsou to navíc signály : BLE/A0 - Povolení přenosu sudého bytu (dolního bytu slova), nebo nejnižší bit adresy. BHE - Povolení přenosu lichého bytu (horního bytu slova).
Přenos dat je řízen systémovým řadičem, pro který procesor generuje kódované signály W/R, D/C a M/IO určující typ cyklu sběrnice. Z jejich kombinací jsou generovány systémovým řadičem signály z nichž některé jsou již známé z procesorového systému s Jedná se o signály : INTA, HALT, MEMR, MEMW, IDLE (klidový stav procesoru bez přenosu dat),
IORD (čtení dat z periferních zařízení), IOWR (zápis dat do periferních zařízení), FETCH (čtení kódu instrukce z paměti).
Typy dat Protože se jedná o 32bitový procesor, musí zpracovávat dvojslova. Toto dvojslovo začíná na zcela libovolném bytu. Stejně jako se ukládá do paměti 16bitové slovo, ukládá se i 32bitové dvojslovo. Zde se též obrací pořadí bytů ve slově. Navíc tento procesor pracuje s bitovými poli a řetězci.
Formáty 8, 16 a 32bitového slova v paměti Procesor může přenášet informace po bytu, slově (16 bitů) či v plné šíři 32 bitů. O který přenos se jedná, pak určují generované signály BE0 - BE3.
Registry Registry procesoru jsou 32bitové a nazývají se EAX, EBX atd. Lze je použít též jako 16bitové (AX, BX,..) či 8bitové (AH, AL,..). Registr příznaků Eflags je též 32bitový a je doplněn jen proti procesoru o tyto příznakové bity : VM - Zapínání režimu virtuální Má význam jen v chráněném režimu. RF - Maskování opakování ladícího přerušení. Pokud dojde při odlaďování programu k ladícímu přerušení, pak po ukončení obslužného programu se provede návrat k instrukci, která přerušení způsobila.
Dále je zde skupina segmentových registrů sloužících pro uložení selektoru, kde se viditelná část registru nezměnila, ale podstatně se zvětšila neviditelná část, vzhledem na rozšíření o 16 bitů. Tyto segmentové registry obsahují v reálném režimu adresu příslušného segmentu a v chráněném režimu selektor segmentu. V chráněném režimu adresa počátku segmentu, délka segmentu a přístupová práva jsou procesorem automaticky zapsána do nepřístupné části segmentového registru. Tyto segmenty mají užití jako u procesorů 8086 a Navíc jsou zde segmenty FS a GS, které je možno používat jako univerzální segmentové registry pro datové segmenty s výjimkou pro práci s bloky dat.
Následují registry tabulek procesů a to TR, LDTR, GDTR a IDTR. Mají však význam jen v chráněném režimu. Další skupinou jsou řídící registry CR0 - CR3. Registr CR0 je využíván v reálném režimu, kde jeho nižší bity jsou označovány též jako MSW (srovnej s 80286). Jednotlivé bity pak slouží pro následující činnosti : PE - mód činnosti (Protect Mode Enable) Jeho nastavením na hodnotu H se převádí procesor do chráněného režimu. Nulováním opět do reálného režimu. Přepnutí není jednoduché.
MP - přítomnost koprocesoru (Monitor Coprocessor) Je-li bit nastaven na hodnotu H, pak instrukce pro koprocesor jsou koprocesoru předávány ke zpracování. V opačném případě, je při příchodu instrukce pro koprocesor generováno přerušení typu 6 či 7. EM - emulace koprocesoru (Emulate Math Coprocessor) Je ve významovém stavu jen při MP = 0. Pokud je bit nastaven na hodnotu H a je-li v programu instrukce pro koprocesor, pak je generováno vnitřní přerušení typu 7 a obslužný program emuluje instrukce matematického koprocesoru programovými prostředky. TS - přepnutí úlohy (Task Switched). Nastavuje se při přepnutí úlohy automaticky.
ET - typ koprocesoru (Extension Type) Je-li ET = 1, pak procesor očekává spolupráci koprocesoru a pracuje jako 32bitový procesor. Je-li ET = 0, pak očekává spolupráci s koprocesorem s 16bitovou komunikací. PG - stránkování (PaGing) Má význam jen v chráněném režimu, když aktivuje stránkování paměti. Je-li PG=0, pak procesor používá segmentování paměti.
Registr CR1 není využíván a je rezervován pro použití u vyšších procesorů firmy Intel. Registr CR2 se používá pro spuštění stránkování. Při výpadku stránky je do tohoto registru uložena lineární adresa, která způsobila výpadek. Registr CR3 se používá pro aktivaci stránkování. Je v něm uložena fyzická adresa adresáře stránek právě aktivního procesu. Slouží jako rychlá paměť pro přístup procesoru k adresáři. Adresář stránek musí začínat na hranici 4 kB, a proto nejnižších 11 bitů musí být nulových.
Testovací registry Testovací registry (Test Registers) TR6 a TR7 se používají k testování 4cestné asociativní paměti TLB (Translation Lookaside Buffer). Tato paměť slouží k rychlému provádění stránkování. Je to vlastně rychlá vyrovnávací paměť (Cache) s kapacitou asi 1,5 kB. Pomocí registrů TR6 a TR7 je možno tuto paměť TLB plnit a prohledávat.
Ladící a testovací registry
Ladící registry Ladící registry (Debug Register) DR0 - DR7 rozšiřují možnosti generování ladících přerušení. Lineární adresy v chráněném režimu jsou uloženy v registrech DR0 - DR3. Registry DR4 a DR5 slouží opět jako rezerva pro vyšší typ procesoru. Registr DR6 je stavový ladící registr sloužící k indikaci příčin vedoucích ke generování ladícího přerušení. Registr DR7 je příkazový registr ladícího systému procesoru. Další popis přesahuje rámec publikace.
Reálný režim Reálný režim má oproti 8086 následující nejdůležitější rozšíření: může pracovat s 32bitovými registry (všeobecné, řídící, ladící) lze používat segmentové registry FS a GS přestože je adresa 32bitová, maximálně může adresa dosáhnout hodnoty 10FFEF (1 MB). Do tohoto režimu přechází procesor automaticky po nulování. Některé z registrů pozbývají význam, nebo je jejich význam redukován. Registr EIP využívá jen 16 spodních bitů (IP) a obdobně je tomu s registrem příznaků. Jako pomocné registry, jen pro odkládání operandů, slouží registry IDTR, GDTR, CR0 - CR3, TR6 a TR7. Zcela nepřístupné pak zůstávají registry TR a LDTR.
Adresování Adresový prostor je 1 MB a procesor při tom může pracovat s bytem, slovem (16 bitů) a dvojslovem (32 bitů). Pro efektivní využití je třeba, aby byla data ukládána tak, že slova začínají na sudých adresách a dvojslova začínají na adresách dělitelných 4. První kB paměti je rezervován pro tabulku vektorů přerušení. Paměť však není aktivní celá, protože je rozdělena na segmenty o velikosti 64 kB. Každý segment je určen bázovou adresou ležící na adrese dělitelné 16 a tu určuje počátek segmentu (nejnižší adresa). Vzhledem k tomu, že je 6 segmentů (CS, SS, DS, ES, FS, GS) po 64 kB paměti, může být aktivní jen paměť o velikosti 384 kB, a to 64 kB pro program, 64 kB pro zásobník a 256 kB pro data.
Logická adresa se skládá z 16 bitů báze segmentu a 16 bitů offsetu. Například z registru CS (báze) a IP (offset). Používá označení CS:IP. Fyzická adresa se pak vypočítá stejným způsobem jako u procesoru U některých operací se jako offset používá tzv. efektivní adresa EA (Effective Address), která se určuje různými způsoby : Registrové adresování operandu. Operand je určen jako obsah některého z registrů a to jak univerzálního tak segmentového.
Přímý operand. Je součástí instrukce. U této instrukce se používají dva operandy, z nichž jeden je cílový a druhý zdrojový. Přímý operand však nemůže vystupovat jako cílový. Musí jít vždy o 16bitovou hodnotu.
Efektivní adresa může být vytvořena následovně : EA = báze + (index * faktor) + doplněk Efektivní adresa musí obsahovat alespoň jeden prvek. Jako báze může být použit obsah libovolného univerzálního registru, totéž platí o indexu s výjimkou registru SP. Faktor je 1, 2, 4 či 8 a odpovídá velikosti jedné položky datové struktury. Doplněk je přímo součástí instrukce.
Bázové adresování U bázového adresování je efektivní adresa určena jako obsah jednoho z univerzálních registrů použitého jako bázový registr. Bázová adresa se též kombinuje s doplňkem, který je součástí instrukce. Bázový registr ukazuje na počátek datové struktury a přímá hodnota je pak ofsetem uvnitř datové struktury. Příklad : MOV BH,[EBP + adresa].
Indexové adresování Jako indexový registr nelze použít registr SP. Obsah indexového registru je možno vynásobit faktorem. Toto adresování lze kombinovat s doplňkem. V tom případě doplněk ukazuje na počátek datové struktury a index je indexem uvnitř datové struktury. Příklad : MOV BH,[adresa + ESI * 2].
Kombinované adresování U kombinovaného adresování se kombinuje bázové a indexové adresování s další kombinací - doplňkem. Pak většinou bázový registr ukazuje na počátek datové struktury, indexový registr je indexem položky v datové struktuře a faktor je velikostí položky datové struktury. Příklad : MOV BH,[adresa + EBX + EDI].
Zásobník Zásobník je organizován stejně jako u procesoru 8086.
Přerušení Procesor má 256 typů přerušení. Pro každý typ je definován obslužný program. Procesor obsahuje tabulku rezervovaných přerušení (typ ), dále blok rezervovaný pro další použití firmou Intel (typ ) a blok přerušení, které jsou k dispozici uživateli (typ ). Tabulka začíná na adrese 00000H a její délka je 1 kB. V tabulce jsou uloženy počáteční adresy obslužných programů. Umístění a velikost tabulky lze změnit pomocí v registru IDTR. Přerušovací systém tvoří dále vnější signály NMI, INTR a ERROR. Přerušení INTR může vést k typům přerušení Opět je možno toto přerušení povolit či zakázat pomocí příznaku IF.
Po přijetí žádosti o přerušení se provádí činnosti v následujícím pořadí : 1. do zásobníku je uložen registr příznaků, 2. provede se vynulování příznaků IF a TF, 3. do zásobníku je uložen registr CS, 4. registr CS je naplněn 16bitovým obsahem adresy, 5. do zásobníku je uložen registr IP ukazující na neprovedenou instrukci, 6. registr IP je naplněn 16 b obsahem adresy.
Návrat do procesu je proveden instrukcí IRET, která provede následující činnost : 1. ze zásobníku obnoví registr IP, 2. ze zásobníku obnoví registr CS, 3. ze zásobníku obnoví registr příznaků.
Pro adresy ukládané do zásobníku mohou opět nastat 3 případy : TRAP - Jde o přerušení buď vnitřní či hardwarové a instrukce byla úspěšně vykonána. Do zásobníku se ukládá návratová adresa (adresa následující za adresou, která přerušení způsobila) - CS:IP. FAULT - Vnitřní přerušení, které nebylo úspěšně dokončeno. Pak se do zásobníku ukládá adresa instrukce, která přerušení způsobila - CS:IP. ABORT - Přerušení způsobí, že v procesu nelze dále pokračovat a musí být násilně přerušen. Neukládá se žádná návratová adresa.
Vstupní a výstupní zařízení Vstupní a výstupní zařízení mohou pracovat buď v izolovaném nebo mapovaném paměťovém prostoru. V izolovaném paměťovém prostoru je výhodou nezmenšený adresový prostor. Pro I/O zařízení je adresový prostor 64 kB. Z toho vyplývá 16bitová adresa a též přímá fyzická adresace. Používají se ale jen přímé 8bitové adresy pro 256 I/O zařízení. Pro plnou adresaci v rozsahu 64 kB se používá adresování nepřímé, kdy je 16bitová adresa uložena v některém univerzálním registru. Veškeré I/O operace realizují přenos dat jen mezi periferií a registrem AL, AX či EAX.
V případě mapovaného paměťového prostoru lze se vstupními a výstupními zařízeními pracovat jako s pamětí, ale je třeba z paměti vyjmout blok adres (např. 64 kB) na nějž jsou tato zařízení napojena.
Chráněný režim Chráněný režim je vlastní procesoru a je plně slučitelný s chráněným režimem 80286, takže lze programy provozovat bez změny. Přepnutí do tohoto režimu z režimu reálného je složitější. Je třeba připravit příslušné tabulky, zavést lineární adresy atd. Mimo signálu RESET se přepnutí provádí nastavením příznaku PE v registru CR0, protože CR0 obsahuje informace o celém systému.
Oproti procesoru obsahuje registr CR0 navíc bity PE, ET a PG: PE - Protected Mode Enable - zapíná chráněný režim, po RESETování je nastaven reálný režim. ET - Extension Type - detekuje instalovaný koprocesor. ET = 0 → 80287, ET = 1 → Z toho vyplývá buď 16ti nebo 32bitový protokol komunikace. PG - Paging - zapíná stránkovou jednotku pro provedení převodu z lineárních na fyzické adresy.
Přepnutí do chráněného režimu má za následek práci s virtuální adresací (používá se též název logická adresace), stránkováním, ochranou paměti, rozšířenou vnitřní strukturou a multitaskingem. Virtuální adresa dosahuje velikosti 64 TB při adresaci 46 bity (32 bitů offset, 13 bitů index, 1 bit adresový prostor). Správa paměti provádí převod virtuální adresy na adresu fyzickou 2 způsoby : segmentací segmentací se stránkováním
Virtuální adresa se skládá ze selektoru segmentu (2 byty) a offsetu (4 byty). Offset o délce 4 bytů odpovídá offsetu v segmentu. Z toho pak vyplývá, že segment má velikost až 4 GB oproti běžným 64 kB v reálném režimu. Selektor vybírá jeden ze segmentů virtuálního adresového prostoru (8192 GDT a 8182 LDT). Maximální velikost je tedy možná až 64 TB.
Převod z adresy virtuální na adresu fyzickou Vlastní mechanismus převodu z virtuální adresy na adresu fyzickou se děje následovně (obr. 157). Nejprve se provede převod z adresy virtuální na adresu lineární. V případě, že není navoleno stránkování, pak lineární adresa je přímo adresou fyzickou. V případě, že stránkování je navoleno, získá se z lineární adresy adresa fyzická pomocí metody převodu stránek.
Převod virtuální adresy na adresu fyzickou
V průběhu převodu se provádí kontrola přítomnosti stránky či segmentu v reálné paměti. Pokud se tam stránka či segment nenachází, generuje se přerušení označované jako výpadek stránky či segmentu. Operační systém pak musí zabezpečit natažení stránky či segmentu z vnější paměti do paměti fyzické. Poté se vrátí řízení instrukci, která výpadek způsobila.
Převod virtuální adresy na adresu lineární Není-li navoleno stránkování, má virtuální adresa délku 6 bytů a skládá se ze 4 bytů offsetu a 2 bytů segmentu selektoru. Opět jsou zde 4 úrovně oprávnění. Selektor ukazuje do tabulky popisovačů segmentu (GDT či LDT), jichž může být až 8192 s délkou 8 bytů. Pomocí těchto tabulek se logická adresa transformuje na lineární adresu. Na rozdíl od reálného režimu je možné segment umístit na libovolné počáteční adrese.
Převod virtuální adresy na adresu lineární
V tabulce popisovače segmentů je několik bitů, které znamenají : G - Granularity – velikost - je-li G = 0, pak délka v popisovači je v B je-li G = 1, pak délka v popisovači je v násobcích 4 kB. AVL - Available for Programmer Use - operační systém ho může používat dle potřeby. x - Bit s různým významem podle typu popisovače. DPL - Úroveň privilegovanosti popisovače segmentu. P - Hodnota 1 signalizuje přítomnost segmentu ve fyzické paměti. S - Rozlišuje, zda se jedná o systémový nebo uživatelský segment.
C/D - Rozlišuje, zda se jedná o programový nebo datový segment. W/R - V datovém segmentu určuje, jde-li provádět jen zápis nebo zápis i čtení. V programovém segmentu určuje, jde-li číst nebo provádět vlastní činnost. ED/C - V datovém segmentu určuje směr rozšiřování; směrem dolů - zásobník, směrem nahoru - ostatní segmenty. V programovém segmentu je určen pro předání řízení. A - Nastavuje se na hodnotu 1 při zápisu do segmentu a určuje, zda se segment uloží do záložní paměti či se rovnou přepíše.
Převod lineární adresy na adresu fyzickou Pro případ, že je navoleno stránkování, je fyzický adresový prostor rozdělen na 1M stránek (1024 adresářů stránek krát 1024 stránek) o velikosti 4 kB (celkem 4 GB). Stránkování se používá jen v chráněném režimu a je to jiný způsob práce s pamětí na rozdíl od segmentování. Stránkováním se programy a data rozdělí do stránek o pevných velikostech. Segmentováním se programy a data dělí na různě velké segmenty podle struktury programu. Pokud se však kombinují obě metody a stránkování pracuje pod segmentováním, pak adresy vytvořené segmentováním se dále zpracovávají stránkováním.
Procesor pracuje se 2 úrovněmi transformací. Ve vyšší úrovni je virtuální adresa (segmentační jednotka - selektor ukazuje na GTD či LTD) převedena na lineární adresu. V nižší úrovni je lineární adresa stránkováním převedena na fyzickou adresu ukazující přímo do paměťových obvodů. Stránkovací jednotka realizuje virtuální paměť, která umožňuje programům používat větší paměťovou kapacitu skutečné paměti než je instalovaná.
Mechanismus je takový, že celá kapacita virtuální paměti je uložena po stránkách, např. na harddisku (externí paměť). Tato fyzická paměť se používá pro dočasné uložení stránek virtuální paměti po rámcích. Při tom jsou si rámec i stránka co do paměťové kapacity rovny. Stránkovací jednotka pak provádí převod lineární adresy na číslo rámce, kde je stránka ve fyzické paměti umístěna. Segmentování je povinnou částí zpracování adresy a stránkování je volitelné.
Vstupní 32bitová lineární adresa se dělí do 3 částí : 1) Adresář (10 nejvyšších bitů) ukazuje do tabulky zvané stránkový adresář (Page Directory). Ten může však začínat jen na adrese dělitelné 4k. Fyzická adresa začátku stránkového adresáře (fazsa) je v registru CR3. 2) Vybraná položka stránkového adresáře ukazuje na počátek stránkové tabulky (Page Table - 0 až 1023). Ty opět mohou být pouze na adresách dělitelných 4k. Položka stránkové tabulky vybraná částí lineární adresy nazvanou tabulka ukazuje na počátek 4 kB rámce ve fyzické paměti. 3) Ukazatelem ve vybraném rámci je offset, což je 12bitová část lineární adresy.
Mechanismus převodu je pomalý z důvodu trojnásobného přístupu do paměti. Z toho důvodu se používá vyrovnávací paměť TLB, která obsahuje fyzické adresy paměti pro 32 stránek paměti.
Převod lineární adresy na adresu fyzickou
Práce s periferními zařízeními Adresace v obou režimech, reálném i chráněném je stejná. U chráněného režimu se však objevuje oprávnění instrucí I/O a zakázání či povolení požadavku přerušení IOPL z registru příznaků. Tento příznak (2bity) určuje, s jakým oprávněním lze provádět příslušné instrukce. Oprávnění musí být stejné nebo vyšší než je zapsáno v IOPL.
Bitová mapa periferních zařízení provádí další stupeň ochrany I/O zařízení a to tak, že každé adrese I/O zařízení je přiřazen 1 bit (pro 64 kB segment má velikost 8 kB). V těch případech, kdy je aktuální oprávnění menší než je nastavení v IOPL se kontroluje bit příslušné adresy I/O adresového prostoru v bitové mapě periferních zařízení. Je- li bit nulový, je operace povolena. Takto je možno obejít zablokování I/O operace při nižším aktuálním oprávnění.
Systém přerušení Základní principy systému přerušení jsou shodné se systémem přerušení procesoru (obr. 156b). V IDT mohou být uloženy tyto popisovače : brána pro maskující přerušení, brána pro nemaskující přerušení, brána zpřístupňující segment stavu procesu (TSS). Oproti všem předchozím rezervovaným přerušením má navíc typ 14. Aplikace některých dalších typů mají pak různé odchylky.
Přerušení typu 14 - výpadek stránky Přerušení generuje stránkovací jednotka (PG = 1), jestliže při převodu z lineární adresy na adresu fyzickou dojde k tomu, že : aktuální proces nemá potřebnou úroveň oprávnění pro přístup k požadované stránce, požadovaná stránka není v paměti (to oznamuje položka některé z převodních tabulek).
Jestliže nastane některá z obou výše jmenovaných událostí, uloží se do CR2 lineární adresa, která způsobila přerušení. Do zásobníku je uložen byte, který signalizuje jednu z obou příčin, zda šlo o uživatelský nebo privilegovaný přístup a zda chybná operace byla čtení či zápis. Jde o přerušení typu FAULT, to znamená, že po natažení chybějící stránky z vnější paměti do fyzické paměti (operační paměti), je řízení vráceno instrukci, která způsobila toto přerušení.
Režim V86 Režim V86 (virtuální 8086) umožňuje v rámci chráněného režimu spouštět programy určené pro procesory 8086/88 a pro reálné režimy procesorů a 80386, aniž by bylo třeba modifikovat kód. Režim V86 umožňuje provozovat jeden či více virtuálních procesů 8086 uvnitř jednoho procesoru Režim V86 se zapíná pro konkrétní úlohu, ale vylučuje se tím možnost víceúlohového zpracování. Má zvláštní ochrany, to proto, aby více procesů, které jsou v paměti, bylo od sebe isolováno. Obdobně to platí pro přerušení, stránkování atd.
Při adresaci paměti pracuje V86 s lineární adresou, která je tvořena : lineární adresa = (segment * 16) + offset Pokud není stránkování zapnuto (PG = 0 v CR0), pak jsou lineární a fyzické adresy totožné a je možné adresovat jen první 1 MB fyzické paměti. Smí být spuštěn jen jeden proces V86. Pokud je zapnuto stránkování (PG = 1 v CRO) je možno stránkováním převést lineární adresu na adresu fyzickou. V tomto případě lze provádět více procesů (každý s délkou 1 MB) a adresový prostor může být stránkován v celém rozsahu fyzické paměti.
Přestože procesor má 32bitovou adresovou logiku, lze “přeplnit adresovou logiku“ a provést adresování paměti na 1 MB + 64 kB, ačkoliv je lineární adresa omezena na 1 MB. Tento způsob se využívá v některých programech, které by jinak nepracovaly.
Mikroprocesor Procesor má 32bitovou architekturu a je 3 - 5x rychlejší než procesor Na čipu je zároveň s procesorem jednotka správy paměti, jednotka operací v pohyblivé řádové čárce (Floating-Point Unit), což je vlastně koprocesor a jednotka rychlé vyrovnávací paměti (Cache). Rozdíl mezi řadou a řadou 80486SX je v tom, že verze SX nemá na čipu jednotku pohyblivé řádové čárky, ale lze ji nahradit obvodem 80487SX. Všechny programy vytvořené pro procesor včetně těch, které pracují s jednotkou správy paměti a koprocesorem, jsou zcela funkční v systému bez omezení.
Procesor I80486 v provedení DX2-80
Důležitou novinkou je schopnost vykonat instrukci v jednom hodinovém cyklu a tak zdvojnásobit pracovní rychlost. Lze říci, že i při nižší frekvenci je procesor rychlejší než Další pokrok ve vývoji CPU umožnil půlení hodinových impulsů (vlastně dvojnásobné zrychlení). Procesory pracují na frekvencích 25/50 MHz a 33/66 MHz. Problémy nastávají při návrhu systémů pracujících s frekvencí větší než 50 MHz. Firmy vyrábějící základní desky počítačů tyto frekvence nezvládaly a proto se "jen" zdvojnásobila frekvence procesoru na 66 MHz a externí frekvence s níž pracuje “ostatní systém” je 33 MHz.
Takto pracuje případně CPU s označením 486 DX2/66. Toto řešení umožňuje používat stávající základní desky vyráběné pro nižší frekvence. Jsou též k dispozici procesory s označením 486DX4/100.
Oproti procesoru má procesor obousměrnou adresovou sběrnici. Výhodou obousměrné adresové sběrnice je, že může nejen adresy generovat, ale i číst externí adresy. Pracuje s bity A2 až A31 a 4 řídícími signály sběrnic BE0 až BE3. Procesor může pracovat s 8, 16, 24 nebo 32bitovým formátem dat. Řízení formátu se provádí vstupy BS8, BS16, případně jejich logickým součinem BS8.BS16. Adresování sběrnice je organizováno tak, že bez dalšího dekódování specifikuje datové byty, které jsou aktivní v určitém cyklu sběrnice.
Aby bylo možno zvýšit výkonnost procesoru, byla jeho vnitřní struktura obohacena o některé rysy architektury RISC : 1) fronta připravených instrukcí byla prodloužena z 16 na 32 bytů; 2) přímo na čipu byla vytvořena rychlá vyrovnávací paměť 8 kB redukující opakující se přístupy k operační paměti. Jsou 2 typy vyrovnávací paměti : interní vyrovnávací paměť (IVP), která je přímo na čipu, externí vyrovnávací paměť (EVP), která je v počítači tvořena dalšími dodatečně osazovanými obvody, které jsou nejrůznějších typů, rychlostí a ovládání
Řízení formátu prostřednictvím BS8 a BS16
Vyrovnávací paměť je umístěna mezi procesorem a fyzickou pamětí. Vyznačuje se malou paměťovou kapacitou a vysokou rychlostí. V této paměti jsou uloženy obsahy posledně zpřístupněných paměťových objektů. Předpokládá se, že tyto posledně zpřístupňované objekty budou procesorem v nejbližším časovém intervalu znovu čteny, čímž se informace předá z vyrovnávací paměti do procesoru velmi rychle.
Blokové schéma procesoru 80486
Před každým čtením paměti se zkoumá adresa, není-li shodná s adresou ve vyrovnávací paměti. Pokud je tomu tak, pak se předá tento obsah. Pokud tomu tak není, přečte se obsah fyzické paměti a uloží se jednak do vyrovnávací paměti a též se předá do procesoru. Uvádí se, že tento systém je u systému MS-DOS úspěšný v 96% a u systému UNIX v 92%, což výrazně zvyšuje výkon procesoru.
Signály, které nejsou u procesoru 80386, nebo jsou s jiným významem : A20M - Blokování adres nad 1 MB (Address bit 20 Memory Disable). BOFF - Uvolnění sběrnice (Bus OFF). BRDY - Platná informace na sběrnici ((Bus ReadY). BREQ - Žádost o přidělení sběrnice (Bus Request) BS8 - Požadavek 8bitové operace (Bus Size 8 bits). BS16 - Požadavek 16 bitové operace (Bus Size 16 bits).
CEN - Povolení činnosti vnitřní vyrovnávací paměti (Cache Enable). DP0-DP3 - Parita jednotlivých bytů dat. FERR - Chyba matematického procesoru (Floating Processor Error). FLUSH - Povel k vyprázdnění vnitřní vyrovnávací paměti (Cache Flush). IGNNE - Ignorování chyb matematického procesoru (Ignore Numeric processor Error). PCD - Blokování modifikace obsahu vnitřní vyrovnávací paměti (Page Cache Disabled).
PCHK - Chyba parity dat (Parity Check). PWT - Zápis je prováděn pomocí vnitřní vyrovnávací pamětí (Page Write Throuhg).
Registr příznaků Registr je oproti registru u doplněn o jeden příznakový bit AC (18 bit), který indikuje chybu v případě, že data, která mají být čtena z paměti nejsou správně zarovnána. Například, když je slovo (2 byty) uloženo na liché adrese, nebo dvojslovo (4 byty) na adrese, která není dělitelné 4.
Řídící registry CR Jsou opět 3, a to CR0, CR2 a CR3. Registr CR0 obsahuje 5 nových bitů a to: CD - Cache Disable - blokování vyrovnávací paměti, zapíná či vypíná interní vyrovnávací paměť (dále jen IVP). Zapnutí má další podmínky. NW - Not Write-Trough - nezapisovat. Pokud nabývá hodnoty L, pak všechny zápisy do paměti jejichž položka je v IVP, jsou zapisovány jak do IVP tak i do paměti. Ostatní položky jsou zapisovány jen do fyzické paměti. Pokud nabývá hodnoty H, je blokována vyrovnávací paměť pro zápis.
WP - Write Protect - ochrana proti zápisu. Pokud nabývá hodnoty H, pak zakazuje zápis do některých stránek. AM - Alignment Mask - maska kontroly zarovnání. Provádí maskování náhodného nastavení příznaků. Při nastavení příznaků na hodnotu L blokuje funkci nového příznaku AC. Zajišťuje tím kompatibilitu s procesorem NE - Numeric Exception - povolení přerušení matematické jednotky procesoru. Provádí řízení oznamování chyb zjištěných v jednotce pohyblivé řádové čárky. Nabývá-li hodnoty H, je při nemaskované chybě matematické jednotky procesoru generováno přerušení 16, nabývá-li hodnoty L je chyba ignorována.
Registry procesoru u nichž nastala změna oproti procesoru Registr CR3 obsahuje 2 bity a to : PCD, PWT - jsou užívány k řízení činnosti externí vyrovnávací paměti (EVP - cache L2) systému.
Interní vyrovnávací paměť (IVP) Paměť IVP podstatně zvyšuje výkonnost procesoru. Její velikost je 8 kB a je spolu s procesorem na čipu. Je společná jak pro data, tak i pro instrukce. Buňky jsou označeny svými fyzickými adresami. Jedná se o 4cestnou asociativní paměť, která má 4*128 klíčů o délce 21 bitů. Je to nejvyšších 21 bitů z 32bitové fyzické adresy. Ke každému klíči je přiřazeno 16 bytů (to je celkem 4*128*16 = 8 kB).
Prvý byte z 16bytové položky musí ležet na adrese dělitelné 16. Navíc ke každému : klíči je přiřazen bit označující platnost obsahu, řádku jsou přiřazeny 3 bity (LRU – nejdéle nepoužívaná) jejichž pomocí lze na řádku určit nejdéle nepoužitý klíč. Vlastní řízení paměti IVP se provádí bity CD a NW v registru CR0. Jejich kombinací se volí jeden ze 4 režimů práce IVP.
Tabulka kombinace bitů CD, NW a jejich funkce
Do paměti IVP lze umístit libovolnou část fyzického adresového prostoru. Do paměti IVP se zapisuje jen při čtení z operační paměti a to vždy celý řádek (16 bytů). Při zápisu z procesoru do operační paměti se provádí zápis též do paměti IVP jen v případě, že tam byly původní informace. Jestliže se má paměť IVP naplnit obsahem fyzické adresy, pak se testuje neplatnost některého z klíčů na určeném řádku, který je pak použit pro zápis. Pokud není nalezen, pak je vyhledána nejdéle nepoužitá položka, do které se provede uložení. Vyprázdnění se provádí tak, že se vynulují bity klíčů IVP.
Jednotka operací v pohyblivé řádové čárce (FPU) Jednotka FPU obdobně jako jednotka IVP je na jednom čipu spolu s procesorem. Označuje se FPU (Floating-Point Unit). Je to matematický koprocesor, t.j. obdoba koprocesoru FPU může pracovat se 7 typy dat. Prvé dva typy jsou shodné pro procesory 80486SX (bez FPU) tak i 80486DX (s FPU). Typy dat jsou 16bitové celé číslo se znaménkem (Word Integer) je uloženo v doplňkovém kódu (znaménko je uloženo v bitu nejvyššího řádu), 32bitové celé číslo se znaménkem (Short Integer) je uloženo v doplňkovém kódu,
64bitové celé číslo se znaménkem (Long Integer) je uloženo v doplňkovém kódu, Zhuštěné číslo v BCD kódu (Packed BCD) tvoří 18 číslic v BCD kódu se znaménkem, které je uloženo v bitu nejvyššího řádu, 32bitové reálné číslo (v mantise se vypouští nejvyšší 1), 64bitové reálné číslo (v mantise se vypouští nejvyšší 1), 80bitové reálné číslo (v mantise jsou všechny 1). Reálná čísla musí být zapsána podle pravidel IEEE.
Jednotka FPU je schopna vnitřně zpracovávat jen 80bitová reálná čísla. Proto jsou jiné typy dat na vstupu či výstupu jednotky do tohoto tvaru převáděna. Číslo je zapsáno ve tvaru mantisa * 2 exponent = 1.xxxxxxx *2 exponent
Aby byla mantisa co nejvíce využita, ukládá se v normalizovaném tvaru. To znamená, že nejvyšší nenulová číslice je umístěna v nejvyšším bitu - s výjimkou čísla 0. Exponent může být číslo kladné nebo záporné, ale není ve dvojkovém doplňkovém kódu, ale v kódu s posunutou nulou (tab. 21). Jestliže je takovéto číslo přečteno, musí se od něj nejprve odečíst příslušná hodnota : single precision - 7FH, double precision - 3FFH extended precision - 3FFFH.
Výhodou tohoto ukládání čísel je snadné porovnání dvou reálných čísel a rozpoznání kladného a záporného čísla bez ohledu na jejich délku. První dvojice neshodných bitů sdělí, které z čísel je větší. Příklady různých čísel jsou v tabulce 22.
Typy dat
Ukázka kódu s posunutou nulou
Příklady různých čísel - single precision
Příklady různých čísel - extended precision
Zvláštní symboly Následujícím symbolům se říká zvláštní (výsadní) symboly : Nula - může být kladná či záporná, ale její znaménko je bez významu; Nekonečno - Infinity – může být kladné či záporné, ale při porovnávání je kladné nekonečno větší než záporné; Nenormalizované číslo- je připuštěno jen v případě, že je třeba zapsat menší číslo v absolutní hodnotě než je schopen exponent zobrazit;
Nečíselné hodnoty - Not a Number - jsou uváděna pod zkratkou NaN při čemž jsou to všechny kombinace bitů čísla, které nejsou povoleny standardem IEEE. Jednotka FPU takováto vstupní data odmítne zpracovat. Data se dělí na : ohlášené (Signaling) s mantisou od 100…01 do 101…11 neohlášené Quiet) od do 111…11, obě jsou s exponentem 110…0. Neurčitá hodnota - Indefinite - je určena pro různé typy čísla. Tato neurčitá hodnota je představována největším záporným číslem v absolutní hodnotě tj. exponentem bez jediné nuly a mantisou
Přerušení FPU Při detekci chyby při výpočtu je vyvoláno přerušení INT 16. Konkrétní chyba je nastavena příznakem ve stavovém registru FPU a to jako : chybná operace (NaN, 0*∞, 0/0, (∞) + (-∞)), nenormalizovaný výsledek, dělení nulou (je-li dělitel nulový a dělenec není 0 nebo ∞), přeplnění (přetečení), nenaplnění (podtečení), nepřesný výsledek (nastává tehdy, pokud výsledek není možné spočítat se zadanou přesností).
Registry FPU Jednotka FPU se skládá z osmi 80bitových datových registrů a tří 16bitových pomocných registrů, které jsou: 1. řídící, 2. stavový, 3. doplňující. Datové registry mají indexy ST0 - ST7 a slouží pro uložení zpracovávaného čísla v libovolném formátu. A to buď jako zásobník, kdy se "ukládá na vrchol" a vybírá se z vrcholu, nebo jako adresovatelné registry.
Řídící registr nastavuje některé parametry pro výpočty : druh zaokrouhlování výsledků (3), přesnost výsledků (3), maskování přerušení různých druhů (6). Stavový registr obsahuje záznamy druhů chyb vyvolávajících přerušení. Doplňující registr obsahuje doplňující informace o všech datových registrech (pro každý z 8 registrů 2 bity).
Komunikace FPU s procesorem Instrukce jak pro procesor, tak i FPU jsou v jedné frontě instrukcí. V okamžiku, kdy procesor rozpozná, že se jedná o instrukci pro FPU, předá instrukci přes bránu I/O do FPU a pokračuje ve zpracovávání dalších instrukcí. Pokud potřebuje FPU další informace, pak si je vyžádá od procesoru signálem PEREQ (Procesor Extension Request). Přenos dat realizuje FPU přes datovou bránu I/O. Po dobu vykonávání instrukce je nastaven aktivní signál BUSY informující procesor o tom, že FPU vykonává operace a nepřijímá další instrukce. Procesor pak čeká na ukončení činnosti FPU.