Čtyřicet let existence architektury 386: revoluce přinesla Doom a Linux

7. 10. 2025
Doba čtení: 36 minut

Sdílet

Intel i386 procesor CPU
Autor: Oligopolism, podle licence: Public Domain CC0
Před čtyřiceti lety vznikl Intel 80386, jenž způsobil revoluci v oblasti PC. Umožnil vznik nových operačních systémů (Linux, OS/2), prodloužil životnost aplikací pro DOS a způsobil vznik konkurence na poli x86.

Obsah

1. Čtyřicet let existence architektury 386

2. Vznik konceptu mikroprocesoru

3. První generace mikroprocesorů firmy Intel: od čipu 4004 k 8080 (BOBO)

4. Mikroprocesory Intel 8086 a Intel 8088 – vznik nové platformy

5. Stručný popis programátorského modelu mikroprocesorů Intel 8086

6. Od čipu Intel 8086 k mikroprocesorům 80386

7. Změna v politice výroby Intel 80386

8. Války klonů

9. Efektivnější vykonávání instrukcí v modernějších generacích mikroprocesorů Intel

10. Rozšíření bitové šířky registrů mikroprocesorů Intel 80386

11. Nové segmentové registry u mikroprocesorů Intel 80386

12. Programátorský model mikroprocesoru 80386

13. Nové instrukce pro přenosy a konverze dat dostupné u mikroprocesorů Intel 80386

14. „Bitový procesor“ a instrukce pro nastavení výsledku na základě příznakových bitů

15. Nové možnosti provádění podmíněných a nepodmíněných skoků

16. Chráněný režim 80386

17. Virtuální režim 8086 a podpora stránkování

18. Vznik nových operačních systémů využívajících vlastností mikroprocesoru 80386

19. Prodloužení života DOSových aplikací

20. Odkazy na Internetu

1. Čtyřicet let existence architektury 386

V říjnu roku 1985, tedy prakticky přesně před čtyřiceti lety, byl oficiálně představen 32bitový mikroprocesor pojmenovaný Intel 80386. Jednalo se o čip, který sice do značné míry navazoval na původní mikroprocesory Intel 8086 (resp. pro úplnost: ve světě osobních mikropočítačů IBM PC se spíše jednalo o čip Intel 8088) i na Intel 80286, ovšem současně nabízel i poměrně velké množství dalších vlastností, které mj. zjednodušovaly provozování sofistikovanějších operačních systémů.

Architektura 386 (oficiálně se označovala IA-32 – Intel Architecture, 32-bit), resp. možná přesněji řečeno módy činnosti, sada registrů a instrukční sada mikroprocesorů Intel 80386, byla po komerční stránce velmi úspěšná a vlastně do jisté míry přetrvala dodnes, protože se stále vydává software, který tuto architekturu podporuje (i když jsou k dispozici mnohem pokročilejší 64bitové architektury, a to jak CISCové, tak i RISCové).

Mikroprocesor Intel 80386

Obrázek 1: Mikroprocesor Intel 80386

Autor: Konstantin Lanzet, podle licence: Rights Managed

Z pohledu společnosti Intel, která tento mikroprocesor vyvinula a současně i vyráběla (to dnes již není zcela samozřejmá kombinace), se jednalo o velmi dobrý produkt, který navíc na trh přišel ve správný čas – vznik 386ky totiž bylo možné vnímat i jako poměrně důraznou odpověď na počítače postavené okolo konkurenčních mikroprocesorů Motorola 68k (zejména Atari ST, Amiga, Macintosh a Sun-1 – všechny byly vydány ještě před oficiálním představením Intelu 80386). Architektura původních mikroprocesorů 8086/8088 i 80286 (a tím pádem i platformy PC) byla totiž v porovnání s počítači postavenými na Motorole 68k, poměrně zastaralá.

Konkurenční mikroprocesor Motorola řady 68000

Obrázek 2: Konkurenční mikroprocesor Motorola řady 68000

Autor: tisnik, podle licence: Rights Managed
Poznámka: mohlo by se zdát, že rozšíření architektury 386 bude pro společnost Intel jednoznačnou výhrou. Na jednu stranu tomu tak skutečně bylo, na stranu druhou se však jednalo o určitou formu pasti, protože ani firma Intel nedokázala později přijít (resp. uspět) s odlišnou architekturou. Všechny takové snahy, například architektury Intel 860 či Itanium, musely konkurovat právě čipům s architekturou 386 a mj. taktéž s velkým množstvím SW vyrobených pro tuto řadu mikroprocesorů.

V dnešním článku si připomeneme nejvýznamnější vlastnosti mikroprocesorů řady Intel 80386, které zahájily éru architektury 386.

Konkurenční mikroprocesor Motorola řady 68000

Obrázek 3: Konkurenční mikroprocesor Motorola řady 68000

Autor: tisnik, podle licence: Rights Managed

2. Vznik konceptu mikroprocesoru

V roce 1970 se začal v rámci projektu CADC (Central Air Data Computer) vytvářet systém, který je některými historiky považován za první skutečný mikroprocesor. Jednalo se o procesor nazývaný MP944, jež byl určený pro stíhačky F-14 Tomcat amerického námořnictva. Z důvodu vojenského utajení (probíhala studená válka) se odborná veřejnost dozvěděla technické podrobnosti o tomto procesoru až v roce 1998, tj. skoro třicet let po vytvoření této technologie. Ve skutečnosti se nejednalo o mikroprocesor v pravém slova smyslu, spíše o čipovou sadu, jejíž jednotlivé čipy byly propojena s využitím rychlé sériové linky (což je ovšem nadčasový design).

Aritmeticko-logická jednotka zpracovávala dvacetibitová slova (tato značná bitová šířka byla vyžadována kvůli přesnosti některých senzorů) sériovým způsobem, tj. do jednotky vcházelo nové slovo, které bylo bit po bitu zpracováváno, zatímco na výstupu se postupně vysunoval výsledek předchozí operace. Vzhledem k oddělení ALU od řídicích obvodů se tedy opravdu nejedná o skutečný mikroprocesor, jak ho chápeme dnes (tedy o čip, který integruje ALU s řadičem i s pracovními registry).

Pro vznik a vývoj mikroprocesorů byla nejdůležitější právě sedmdesátá léta minulého století, tedy období, kdy se již poměrně velké množství lidí mohlo seznámit s takzvanými minipočítači (ty se začaly rozšiřovat na university, ale i do běžných podniků). Rychlost vývoje integrovaných obvodů se v tomto období tak prudce zvýšila, že na začátku sedmdesátých let jen několik lidí na světě vůbec dokázalo předvídat strategický význam těchto elektronických součástek.

Na konci sedmdesátých let (tedy za pouhé jedno desetiletí) již byly celé dvě generace mikroprocesorů na ústupu, mikroprocesory si našly cestu do průmyslu i domácností, a začala bitva několika firem o místo na trhu s šestnáctibitovými a třicetidvoubitovými mikroprocesory.

Na stránkách Roota jsme si již některé milníky ve vývoji mikroprocesorů popsali, včetně dnes již legendárních čipů MOS 6502, Zilog Z80 a Motorola 6809. Zajímavé je, že například mikroprocesory řady MOS 6502 se (i když v modifikované podobě) stále před několika lety vyráběly, v mnoha modemech jsme se mohli setkat s rozšířenou variantou mikroprocesoru Zilog Z80 atd. To zajisté svědčí o nadčasovém designu a kvalitě jejich tvůrců (v těchto případech se konkrétně jedná o Federica Faggina a Chucka Peddleho).

Ovšem jen jedna řada čipů přežila – i když ve značně modifikované podobě – i v mainstreamových počítačích. Jedná se právě o řadu Intel 8086, která je dnes neodmyslitelně spjata právě s vývojem platformy PC. Do této řady patří i Intel 386.

faggin

Obrázek 4: Detailní pohled na iniciály Federica Faggina na masce i4004.

3. První generace mikroprocesorů firmy Intel: od čipu 4004 k 8080 (BOBO)

Za první skutečný mikroprocesor na světě je všeobecně považován čip nazvaný Intel 4004, jehož duchovním tvůrcem je známý Federico Faggin. Společnost Intel měla v roce 1970, kdy začal vývoj 4004, pouhých 150 zaměstnanců a soustředila se převážně na výrobu polovodičových pamětí – velmi úspěšná byla například paměť 1103 s kapacitou 1024 bitů a s pouhými třemi tranzistory na jednu buňku.

Samotný nadřízený Faggina, kterým nebyl nikdo jiný než Andy Groove, v mikroprocesorech neviděl žádnou velkou budoucnost a prý ani neexistoval dlouhodobější plán pro komerční využití mikroprocesorů. Pouze pro potřeby výrobců kalkulaček (ovšem těch stolních, ne kapesních :-) však Intel začal s vývojem čipu, který byl – na návrh Faggina – pojmenován 4004. Ostatní podpůrné součástky (specializované integrované obvody) taktéž začínaly číslicemi 400. Faggin se jakožto hlavní tvůrce dokonce „podepsal“ do výrobní masky čipu, takže každý mikroprocesor Intel 4004 nese jeho iniciály – viz oba obrázky uvedené v předchozí kapitole i pod tímto odstavcem.

4004

Obrázek 5: Všech pět vrstev mikroprocesoru Intel 4004.

Z dnešního pohledu jsou parametry tohoto mikroprocesoru až směšné. Jednalo se o čtyřbitový mikroprocesor, který však ve své instrukční sadě obsahoval i operace s osmibitovými operandy (číslice byly uloženy v kódu BCD, takže čtyřbitová ALU dávala v tomto kontextu smysl). Celkem bylo programátorovi dostupných 46 instrukcí, jejichž sémantika i syntaxe zápisu byla inspirována (možná i více než pouze inspirována) instrukční sadou Datapoint terminal CPU firmy Computer Terminal Corp. I v dnešních procesorech řady x86 se s velmi podobnou instrukční sadou setkáme, proto je termín „Intelí syntaxe“ poněkud nepřesný, protože jde o syntaxi starší než samotné mikroprocesory. Intel 4004 je tedy skutečný pradědeček dnešní platformy x86, i když s ní není ve striktním slova smyslu kompatibilní.

Poznámka: při zpětném pohledu by se mohlo zdát, že vznik mikroprocesoru ve firmě Intel byl vlastně logickým důsledkem celkového vývoje elektroniky (stále pokračující integrace většího množství obvodů na jediný čip). Ovšem v době, kdy se rozhodovalo, zda pokračovat ve vývoji mikroprocesoru Intel 4004, se ozývaly hlasy, že by bylo výhodnější investovat spíše do dalšího vývoje a rozšiřování kapacity výroby dynamických RAM (DRAM). Zazněla totiž myšlenka „do každého mikropočítače dokážeme prodat maximálně jeden čip s mikroprocesorem, ovšem mnohem více čipů s dynamickými RAM“ (což je skutečně do určité míry pravda).

Ve skutečnosti nebyl mikroprocesor Intel 4004 komerčně moc úspěšný, ale firma Intel se začala tímto odvětvím průmyslu intenzivněji zabývat, což jí vydrželo až do dneška (píše se ovšem rok 2025 a budoucnost je nejistá). V roce 1972, tj. pouhých pět měsíců po uvedení Intel 4004 (to se nám to zrychluje) představila společnost Intel jeho osmibitového nástupce. Jednalo se o mikroprocesor 8008. V jeho instrukční sadě se již mnoho programátorů bez problému vyzná, protože po rozšíření se s ní můžeme setkat i v 8080 a Zilog Z80. Tento čip již při použití stejné desetimikronové technologie obsahoval 3500 tranzistorů, pracoval na frekvenci 800 kHz a mohl adresovat již 16 kB paměti. Samotný výpočetní výkon byl oproti 4004 skoro dvojnásobný, především však byla použita osmibitová sběrnice a řada podpůrných obvodů, se kterými se můžeme setkat i u pozdějších procesorů.

Za dva roky poté, tj. v roce 1974, společnost Intel uvedla další mikroprocesor nazvaný Intel 8080. Ten již pracoval s hodinovou frekvencí 2 MHz, obsahoval cca 4500 tranzistorů a mohl adresovat až 64 kB paměti. Jednou z předností tohoto procesoru bylo použití nové třímikronové technologie výroby. Intel 8080 byl použit v mnoha počítačích (Altair 8800, ale například i tuzemské domácí mikropočítače), i když ke své práci potřeboval kromě standardního pětivoltového napájení ještě jedno vyšší napětí (pro oscilátory) a také dva podpůrné obvody – Intel 8224 a Intel 8228. Jednou ze zajímavostí je, že se tento mikroprocesor vyráběl i v naší Tesle pod označením MHB 8080A (dlužno říci, že to bylo v době, kdy se ve světě přecházelo na šestnáctibitové a třicetidvoubitové mikroprocesory).

Posledním čistě osmibitovým procesorem firmy Intel byl čip Intel 8085 vytvořený v roce 1976. Jednalo se v podstatě o vylepšený Intel 8080, který pracoval na 5 MHz, obsahoval cca 6500 tranzistorů, měl přímo na čipu některé další obvody (sériová linka apod.) a především nepotřeboval nestandardní napětí, takže se jeho zařazení do počítačů a dalších zařízení zjednodušilo. Tento mikroprocesor ovšem přišel až v době, kdy na trhu kralovaly mikroprocesory jiných firem, Zilog a MOS Technologies.

pc105_a

Obrázek 5: První verze školního počítače IQ-151 postaveného na mikroprocesoru 8080. Povšimněte si kulatých tlačítek, které jsou pro tento počítač typické a taktéž klávesy RESET. Ta nebyla od ostatních kláves nijak oddělena, pravděpodobně proto, aby se studenti naučili dávat si pozor, kterou klávesu mačkají :-) (už se asi nikdy nedozvíme, kolik programů bylo „díky“ vhodně umístěné klávese RESET ztraceno). Skříň počítače byla vyrobena z oranžově nalakovaného plechu, jehož milou vlastností byl přenos tepla z chladiče umístěného v zadní části počítače (žebra chladiče jsou částečně vidět i na této fotografii) na celou jeho plochu, což mj. znamenalo, že se televizor nemohl stavět přímo na počítač, ale musely se používat různé dřevěné špalíky a podobné hi-tech řešení.

Programátorský model 8080:

# Typ registrů Počet registrů Bitová šířka registru Názvy registrů
1 Akumulátor 1 8 bitů A
2 Univerzální registry 6 8 bitů B, C, D, E, H, L
3 Ukazatel zásobníku 1 16 bitů SP
4 Příznakový registr 1 5/8 bitů FLAGS
5 Programový čítač 1 16 bitů PC

Některé registry se pro provedení určitých operací (adresování atd.) spojovaly v šestnáctibitové registrové páry:

Označení Pár
PSW A+Flags
BC B+C
DE D+E
HL (M) H+L

4. Mikroprocesory Intel 8086 a Intel 8088 – vznik nové platformy

Jak jsme si již řekli v úvodní kapitole, byl mikroprocesor Intel 80386 navržen takovým způsobem, aby byl zpětně kompatibilní s mikroprocesory Intel 8086 a Intel 8088, takže se alespoň ve stručnosti o těchto dvou mikroprocesorech zmiňme, protože jsou nedílnou součástí historie IT. Dnes se pochopitelně jedná o historické čipy, které byly na trh uvedeny již v letech 1978 a 1979. O přibližně dva roky později použila společnost IBM mikroprocesor Intel 8088 jako základní prvek osobního mikropočítače IBM PC, z něhož se postupně vyvinula celá platforma PC, jež se dodnes vyvíjí a používá (se všemi výhodami a zápornými vlastnostmi tohoto vývoje).

Základní deska z IBM PC

Obrázek 6: Motherboard IBM PC s mikroprocesorem Intel 8088..

V srpnu roku 1981, tedy před 44 lety, se začal prodávat šestnáctibitový osobní mikropočítač IBM PC. Z dnešního pohledu se sice jednalo o velmi málo výkonný stroj, ovšem v době vzniku IBM PC patřil tento mikropočítač v oblasti osobních mikropočítačů mezi špičku, alespoň co se týká hrubého výpočetního výkonu. Obsahoval šestnáctibitový mikroprocesor Intel 8088 (s vnější sběrnicí zúženou na osm bitů) taktovaný na 4,77 MHz. Kapacita operační paměti se pohybovala od 16 kB do 256 kB (takže se ani zdaleka nedotýkala tehdy teoretické hranice 640 kB, na kterou se narazilo sice později, ale o to tvrději). Pro vykreslování grafiky se používala grafická karta CGA, pro profesionální textové aplikace pak karta MDA s odlišným monitorem. Zvukový výstup obstarával nechvalně známý PC Speaker.

Důležité byly přitom dva fakty – IBM PC vyráběla společnost IBM, která byla pro mnoho korporací známým a dlouhodobým partnerem (a určitě byla vnímána zcela jinak, než například „herně neseriózní“ společnost Atari). A navíc IBM PC byla do určité míry otevřená architektura se standardizovanou sběrnicí umožňující modulární design (což se ukázalo již na možnosti výběru video karty – obě nabízené karty sice byly špatné, ale ne stejně špatné, takže si uživatel mohl vybírat menší zlo).

pc-02-3

Obrázek 7: Hra Alley Cat v podání karty CGA.

Osobní mikropočítače IBM PC byly oficiálně postaveny na mikroprocesorové architektuře Intel 8086, díky čemž je tato architektura vlastně stále živá (16bitový reálný režim zde totiž stále existuje resp. donedávna existoval kvůli bootstrapingu). Jednalo se o plně šestnáctibitovou architekturu, která však ideově navazovala na předchozí dvě generace osmibitových mikroprocesorů společnosti Intel, tj. na již výše zmíněnou řadu Intel 8008 a především pak úspěšný Intel 8080, který se na určitou dobu stal průmyslovým standardem.

Nicméně samotné IBM PC (tedy vůbec první počítač z této rodiny) nepoužívalo mikroprocesor Intel 8086, ale jeho „osekanou“ a levnější variantu nazvanou Intel 8088. Ona osmička na konci číselného označení čipu naznačuje, že i když se interně jednalo o šestnáctibitový mikroprocesor, externí datová sběrnice byla pouze osmibitová. Interně byl ovšem Intel 8088 prakticky totožný s Intelem 8086, a to včetně aritmeticko-logické jednotky (ALU) i execution unit (EU). Odlišovala se jen jediná komponenta, a to konkrétně bus interface unit (BIU).

Otázkou zůstává, jak se na mikroprocesor Intel 8088 dívat – jedná se o osmibitový či šestnáctibitový čip? Z pohledu aritmeticko-logické jednotky a interní datové sběrnice jde o šestnáctibitový čip, z pohledu externího pak o čip osmibitový. A programátoři vlastně ani nerozliší mezi plnohodnotným čipem Intel 8086 a jeho „skrouhnutou“ variantou Intel 8088 (až na pomalejší běh programů).

5. Stručný popis programátorského modelu mikroprocesorů Intel 8086

Programátorský model mikroprocesoru Intel 8086 (naprosto stejné je to ovšem i pro Intel 8088) do určité míry vychází z jeho předchůdců, tedy z čipů 8080 a 8085. Došlo ovšem k rozšíření sady pracovních i specializovaných registrů, k určité unifikaci jejich role (což zjednodušilo instrukční sadu – to může znít paradoxně, ale je tomu tak) a k rozšíření pracovních registrů na šířku šestnácti bitů. Navíc se rozšířily i adresovací režimy a při adresování se kromě základní šestnáctibitové adresy počítá i adresa segmentu získaná z takzvaných segmentových registrů CS, DS, ES či SS. Oproti mikroprocesoru Intel 8080 se tedy jedná o poměrně výrazný skok vpřed, ovšem v porovnání s dalšími mikroprocesory této éry patří 8086 spíše mezi jednodušší mikroprocesory (což ovšem nemusí být vždy špatně).

Poznámka: porovnejte s programátorským modelem Intel 8080 ve třetí kapitole.

Pracovat je možné s těmito čtrnácti pracovními, adresovými, segmentovými a specializovanými registry:

# Typ registrů Počet registrů Bitová šířka registru Názvy registrů
1 Univerzální registry 4 16 bitů AX, BX, CX, DX
2 Indexové registry 2 16 bitů SI, DI
3 Bázové registry 2 16 bitů BP, SP
4 Segmentové registry 4 16 bitů CS, DS, ES, SS
5 Příznakový registr 1 16 bitů FLAGS
6 Programový čítač 1 16 bitů IP

První čtyři registry jsou sice nazvány univerzální, ovšem jejich role není v praxi zcela zaměnitelná. Každý z těchto registrů má totiž kromě své základní role ještě další roli/role a vystupuje jako implicitní operand u mnoha instrukcí. Instrukční sada není v žádném případě ortogonální, naopak se jedná o snad nejméně ortogonální sadu v oblasti šestnáctibitových čipů, se všemi výhodami, ale i mnoha nevýhodami, které to přinášelo jak programátorům, tak i výrobcům překladačů:

Různé role „univerzálních“ pracovních registrů:

Registr Rozdělení Význam
AX AH/AL akumulátor
BX BH/BL bázová adresa
CX CH/CL čítač (counter)
DX DH/DL data, rozšíření akumulátoru

Dnešní čipy řady x86 a x86–64 obsahují tisíce instrukcí, ovšem původní čip 8086 podporoval pouze cca 120 instrukcí, které jsou vypsány v následující tabulce:

AAA      CMPSB     JA        JNC     LAHF      MUL      REP     SCASB
AAD      CMPSW     JAE       JNE     LDS       NEG      REPE    SCASW
AAM      CWD       JB        JNG     LEA       NOP      REPNE   SHL
AAS      DAA       JBE       JNGE    LES       NOT      REPNZ   SHR
ADC      DAS       JC        JNL     LODSB     OR       REPZ    STC
ADD      DEC       JCXZ      JNLE    LODSW     OUT      RET     STD
AND      DIV       JE        JNO     LOOP      POP      RETF    STI
CALL     HLT       JG        JNP     LOOPE     POPA     ROL     STOSB
CBW      IDIV      JGE       JNS     LOOPNE    POPF     ROR     STOSW
CLC      IMUL      JL        JNZ     LOOPNZ    PUSH     SAHF    SUB
CLD      IN        JLE       JO      LOOPZ     PUSHA    SAL     TEST
CLI      INC       JMP       JP      MOV       PUSHF    SAR     XCHG
CMC      INT       JNA       JPE     MOVSB     RCL      SBB     XLATB
CMP      INTO      JNAE      JPO     MOVSW     RCR              XOR
         IRET      JNB       JS
                   JNBE      JZ

6. Od čipu Intel 8086 k mikroprocesorům 80386

Doba, ve které vznikaly první tři generace mikroprocesorů řady 80×86, se vyznačovala překotným vývojem mj. i právě v oblasti mikroprocesorové techniky. Již jsme se zmínili o konkurenčních čipech Motorola 68000, které byly oproti původní dvojici Intel 8086/8088 sofistikovanější i výkonnější; i proto se ostatně prosadily v prakticky všech ostatních typech osobních mikropočítačů (jedinou výjimkou bylo právě IBM PC).

Ovšem postupně se vyvíjely i mikroprocesory odvozené od původního poměrně primitivního Intelu 8086 (resp. jeho ořezané varianty Intel 8088). Rozšiřovala se instrukční sada o nové instrukce a adresovací režimy, přidávaly se nové pracovní registry, rozšiřovala se bitová šířka pracovních registrů, přidávaly se nové režimy činnosti mikroprocesoru (chráněný režim 286, odlišný chráněný režim 386, virtuální režim 386) atd.

Ovšem současně se kromě těchto kvantitativních změn vylepšovala i interní architektura mikroprocesorů, což například vedlo k urychlení instrukcí. U řady instrukcí jsme tak postupně došli od jejich vykonání v několika desítkách strojových cyklů například na jediný strojový cyklus a poté na možnost dokončit v jednom cyklu více souběžně prováděných instrukcí.

V následující tabulce je shrnut vývoj mikroprocesorů platformy 80×86 od prvních čipů uvedených firmou Intel až po 80386. Povšimněte si postupně rostoucích hodinových frekvencí i zvyšujícího se počtu tranzistorů (za deset let vzrostl počet tranzistorů o celý řád):

Mikroprocesor Rok uvedení Frekvence (MHz) Tranzistorů Poznámka
8086 1978 5, 8, 10 29000 praotec celé rodiny 80×86
8088 1979 4,77 a 8 29000 byl použit v původním IBM PC
80186 1982 6 55000 využíván jako mikrořadič, nikoli jako procesor v počítačích
80188 1982 6 55000 varianta 80186 s osmibitovou vnější sběrnicí
80286 1982 6, 8, 12,5, 16, 20, 25 134000 použit v PC AT
80386DX 1985 16, 20, 25, 33 275000 první 32bitový čip z rodiny 80×86
80386SX 1988 16, 20, 25, 33 275000 varianta 80386DX se šestnáctibitovou datovou sběrnicí
80386SL 1990 20, 25 855000 obsahuje i cache a řadiče sběrnice a paměti
Poznámka: použitá označení jsou platná pro originální mikroprocesory vyráběné společností Intel. Kromě toho ovšem byly prodávány i více či méně kompatibilní mikroprocesory řady 8086 vyráběné jinými firmami – AMD, NEC, Fujitsu, Harris (Intersil), OKI, Siemens, Texas Instruments, Mitsubishi, Panasonic (Matsushita), pozdější 80286 vyráběl Intel, IBM, AMD, Harris, Siemens a Fujitsu.

doom
Obrázek 7: Výkon 80386 umožnil vznik nových her, které plně využívaly hrubé výpočetní síly tohoto čipu. Platforma PC se kvůli absenci zákaznických čipů musela na tuto hrubou výpočetní sílu spoléhat, na rozdíl od konkurence (Atari ST a mnohem více Amiga).

7. Změna v politice výroby Intel 80386

Vraťme se ještě k seznamu výrobců, které jsme uvedli v předchozí kapitole. V dobách čipů 8086 a 80286 bylo zvykem, že společnost Intel prodávala licence na výrobu mikroprocesorů i dalším firmám (tím se mj. i zaplatil vývoj). To bylo výhodné pro všechny strany a zejména zákazníci měli jistotu, že i kdyby primární dodavatel (Intel) neměl dostatečnou výrobní kapacitu, mohli by ho nahradit další dodavatelé (což byl mj. i požadavek společnosti IBM pro to, aby původní IBM PC postavili na platformě Intelu). Tento systém po relativně dlouhou dobu fungoval ke všeobecné spokojenosti a jednou z firem, které takto s Intelem spolupracovaly, byla i společnost AMD (ostatně tato spolupráce se datuje až k osmibitovým čipům 8085).

Tento status quo se ovšem změnil v roce 1984, protože tehdy firma IBM (mj. výrobce čipů 80286) představila osobní mikropočítač IBM PC model 5170, který je známý pod označením PC AT. Tento počítač byl postaven na mikroprocesoru 80286. Firma IBM se tehdy plně soustředila na PC AT a tím pádem i na 80286 a neměla velký zájem na (spolu)výrobě tehdy vlastně ještě oficiálně nedokončených čipů 80386.

Společnost Intel tento stav viděla jako příležitost změnit celý koncept licencování čipů 80×86. Byla tedy připravena (a podepsána) smlouva, že se IBM bude soustředit na výrobu 80286 (a Intel bude pouze doplňovat případné výpadky ve výrobě), zatímco Intel si ponechá plná práva na 80386. A kvůli tomu se vlastně ani firma AMD nechtěla ve výrobě 80386 angažovat (bez podpory IBM to vypadalo jako mrtvá větev vývoje). I s AMD tedy byla nakonec podepsána nová smlouva, která vedla k tomu, že Intel zůstal jedinou firmou, která mohla (minimálně oficiálně) 80386 vyrábět a prodávat – ostatní výrobci k tomu neměli potřebnou licenci.

doom Obrázek 8: Další screenshot ze slavné hry Doom, která využívala hrubou výpočetní sílu mikroprocesorů Intel 80386 a později i Am386, které byly ještě rychlejší.

8. Války klonů

A big milestone [in the history of the personal computer industry] was that the folks at IBM didn't trust the 386. They didn't think it would get done. So we encouraged Compaq to go ahead and just do a 386 machine. That was the first time people started to get a sense that it wasn't just IBM setting the standards, that this industry had a life of its own, and that companies like Compaq and Intel were in there doing new things that people should pay attention to.“
Bill Gates

Jednou z nejdůležitějších vlastností platformy IBM PC je její modulární uspořádání a taktéž fakt, že v ní nejsou použity žádné zákaznické obvody. To vlastně znamená, že bylo možné navrhnout klon IBM PC, a to bez nutnosti napodobovat původní zákaznické čipy atd. – naprostá většina součástek byla „komoditní“ – tedy až do chvíle, kde 80386 vyráběla jen jediná firma (stačilo „jen“ z licenčního pohledu čistě vytvořit BIOS).

Nicméně nastala zajímavá situace – kromě běžných klonů IBM PC byl v roce 1986 (pouhý rok po uvedení 80386 do výroby) zahájen prodej osobního počítače Compaq Deskpro 386. Jednalo se o (ve své době) absolutně nejvýkonnější PC, ovšem hlavní bylo, že se ukázalo, že budoucnost PC již není v rukách IBM, ale jiných firem.

Poznámka: možná právě v tento okamžik došlo ke změně poměru sil v celém světě IBM PC (nyní vlastně již jen PC – bez IBM). Výrobu mikroprocesorů totiž ovládla jediná společnost a i trh s operačními systémy se ustálil na jediném dodavateli – společnosti Microsoft. To znamená, že okolo roků 1985 a 1986 tedy vzniká mnohými sice neoblíbená, ovšem nepochybně komerčně úspěšná „platforma Wintel“.

Čip Intel 80386 se nakonec stal úspěšným mikroprocesorem a současně firma AMD neměla licenci na jejich výrobu, což AMD stavělo do dosti nevýhodné pozice. Inženýři z firmy AMD tedy navrhli svůj vlastní čip Am386 plně kompatibilní s původním čipem 80386 (což není nic jednoduchého – bavíme se o integrovaných obvodech se čtvrt milionem tranzistorů). To mohlo být chápáno jako porušení obchodních práv jediného výrobce původních 80386.

Jak se dalo čekat, následovala obžaloba a soud, ovšem AMD nakonec kauzu vyhrála. Tím došlo ke druhému významnému posunu ve světě PC (Wintelu), protože se AMD mohla zcela legálně stát konkurentem firmy Intel (možná jsem naivní, ale mám pocit, že to nakonec pomohlo i společnosti Intel ve výrobě mikroprocesorů dalších generací – konkurence jí neumožnila usnout na vavřínech, minimálně dalších dvacet let, takže nakonec platforma x86 převálcovala ostatní architektury).

9. Efektivnější vykonávání instrukcí v modernějších generacích mikroprocesorů Intel

Po krátké odbočce se vraťme zpět k technologii mikroprocesorů Intel 80386.

Postupně rostoucí počet tranzistorů (viz tabulku uvedenou v šesté kapitole) sám o sobě ovšem nic nevypovídá o skutečné rychlosti mikroprocesoru, protože do značné míry záleží na tom, jakým způsobem jsou tyto tranzistory využity. Postupně rostoucí kvalita implementace instrukcí (například přidáním nové specializované sčítačky pro výpočty adres, přidání fronty instrukcí, možnost takzvaného prefetchingu instrukcí, implementace RISCové pipeline atd.) vedla k tomu, že se postupně snižoval počet cyklů nutných pro dokončení jednotlivých strojových instrukcí.

To tedy znamená, že i když mohl být jak mikroprocesor Intel 8086, tak i Intel 80286 provozován na stejné frekvenci 8MHz, bude 80286 ve skutečnosti rychlejší. Ukažme si to například na základní instrukci součtu dvou osmibitových nebo šestnáctibitových hodnot – ADD. Délka výpočtů se odlišuje podle typů operandů a taktéž podle typu mikroprocesoru (čím menší číslo je v tabulce uvedeno, tím lépe):

Operandy 8086/88 186 286 386 486 Pentium
reg, reg 3 3 2 2 1 1
mem, reg 24+EA 10 7 7 3 3
reg, mem 13+EA 10 7 6 2 2
reg, imm 4 4 3 2 1 1
mem, imm 23+EA 16 7 7 3 3
acc, imm 4 4 3 2 1 1

Přičemž u čipů 8086/8088 se přidává několik cyklů pro EA neboli pro výpočet efektivní adresy (effective address):

Adresování Počet cyklů EA
reg+offset 5
přímá adresa 6
BP+DI nebo BX+SI 7
BX+DI nebo BP+SI 8
BP+DI+disp nebo BX+SI+disp 11
BX+DI+disp nebo BP+SI+disp 12

Navíc, pokud se mění (explicitně specifikuje) segmentový registr, je nutné přičíst další dva hodinové cykly.

Poznámka: už u čipu 80186 byla přidána samostatná sčítačka pro výpočty adresy, takže se nemusela používat universální ALU. Díky tomu už výpočet efektivní adresy nebyl tak pomalý.

10. Rozšíření bitové šířky registrů mikroprocesorů Intel 80386

Bylo by ovšem chybou chápat mikroprocesor Intel 80386 pouze jako rychlejší variantu 80286. Tyto čipy sice byly kompatibilní, ovšem 80386 nabízel mnohé další režimy (virtuální a chráněný 386), více registrů, větší paměťový rozsah, rozšiřující instrukce v instrukční sadě atd. Jednalo se o velký skok od šestnáctibitové platformy určené pro běh jednoúlohových operačních systémů k 32bitové platformě nativně podporující víceúlohové systémy s rozsáhlou virtuální pamětí.

Mikroprocesory 80386 a 80486 jsou nazývány 32bitovými čipy mj. i z toho důvodu, že se u nich rozšířila aritmeticko-logická jednotka takovým způsobem, aby bylo možné plnohodnotně pracovat s 32bitovými operandy. A tomu se musela přizpůsobit i sada pracovních registrů. Společnost Intel se rozhodla, že namísto „párování“ dvou šestnáctibitových registrů do registrů 32bitových rozšíří původní registry ze šestnácti bitů na plných 32 bitů.

Týká se to všech čtyř pracovních registrů AX, BX, CX, DX, indexových registrů SI, DI, bázových registrů SP, BP i ukazatele na instrukci IP. Tyto registry byly rozšířeny o horních šestnáct bitů, přičemž stále bylo možné adresovat (vybírat) spodních šestnáct bitů původními jmény registrů a/nebo (pouze u pracovních registrů) použít jejich horních a spodních osm bitů zvlášť (AX=AH+AL atd.). V assembleru se 32bitové registry poznají podle toho, že začínají písmenem E a jejich jména jsou tříznaková:

32bitový registr Spodních 16 bitů Rozdělení horní/dolní bajt Funkce registru
EAX AX AH/AL akumulátor
EBX BX BH/BL bázový registr
ECX CX CH/CL čítač
EDX DX DH/DL datový registr
       
ESP SP   ukazatel na vrchol zásobníku
EBP BP   báze zásobníkového rámce
ESI SI   indexový registr pro zdroj dat
EDI DI   indexový registr pro cíl dat
       
EIP IP   ukazatel na prováděnou instrukci
Poznámka: zachování přístupu k šestnáctibitovým (spodním) polovinám pracovních i dalších registrů a dokonce k nejnižšímu bajtu a bajtu nad ním sice může vypadat zvláštně, ovšem tento koncept umožnil relativně dobrou práci s řetězci, což je například u klasických čistě RISCových procesorů sice možné (díky specializovaným instrukcím LOAD a STORE), ale ne plně efektivní. Dokonce by bylo možné říci, že právě tento bezproblémový „upgrade“ umožnil adaptaci 80386 v oblasti PC.

11. Nové segmentové registry u mikroprocesorů Intel 80386

Mikroprocesory 80386 mají k dispozici taktéž dva nové segmentové registry pojmenované jednoduše FS a GS (jednoduše proto, že jejich jména abecedně navazují na CS, DS a ES). Tyto segmentové registry je možné použít pro adresování libovolného segmentu operační paměti a nemají žádný další speciální význam, na rozdíl od původní čtveřice segmentových registrů CS (kódový segment), DS (datový segment), SS (segment se zásobníkem) a ES (použit u řetězcových a blokových operací). Ovšem pochopitelně u složitějších aplikací mohou být další dva segmentové registry užitečné a mohou je využívat i překladače vyšších programovacích jazyků. S těmito novými registry se z pohledu programátora pracuje stejně, jako s původní čtveřicí.

Poznámka: pochopitelně je otázkou, zda by nebylo lepší spíše přidat více pracovních registrů, to však původní schéma kódování instrukcí neumožňuje, takže jsme si museli počkat až na 64bitovou architekturu x86–64, která je od původní x86 značně odlišná.

12. Programátorský model mikroprocesoru 80386

Nyní již máme k dispozici všechny informace pro uvedení programátorského modelu mikroprocesoru Intel 80386, který vypadá následovně:

# Typ registrů Počet registrů Bitová šířka registru Názvy registrů
1 Univerzální registry 4 32 bitů EAX, EBX, ECX, EDX
2 Indexové registry 2 32 bitů ESI, EDI
3 Bázové registry 2 32 bitů EBP, ESP
4 Segmentové registry 6 16 bitů CS, DS, ES, FS, GS, SS
5 Příznakový registr 1 32 bitů EFLAGS
6 Programový čítač 1 32 bitů EIP

Porovnejte s původním „šestnáctibitovým“ programátorským modelem, který je odlišný, ale z logického pohledu vlastně stále prakticky totožný:

# Typ registrů Počet registrů Bitová šířka registru Názvy registrů
1 Univerzální registry 4 16 bitů AX, BX, CX, DX
2 Indexové registry 2 16 bitů SI, DI
3 Bázové registry 2 16 bitů BP, SP
4 Segmentové registry 4 16 bitů CS, DS, ES, SS
5 Příznakový registr 1 16 bitů FLAGS
6 Programový čítač 1 16 bitů IP

13. Nové instrukce pro přenosy a konverze dat dostupné u mikroprocesorů Intel 80386

Mikroprocesory patřící do třetí generace čipů 80×86 (80386 a kvůli zpětné kompatibilitě i všechny navazující čipy) mají rozšířenou sadu instrukcí. Mezi první rozšíření patří instrukce určené pro konverze dat. Vypišme si všechny instrukce, které do této skupiny patří, tj. včetně instrukcí, které byly zavedeny již pro Intel 8086/8088. To, zda se jedná o nové instrukce či nikoli, je patrné z obsahu druhého sloupce:

Instrukce Kompatibilita Stručný popis instrukce
CBW 8086 znaménkové rozšíření AL→AX
CWD 8086 znaménkové rozšíření AX→DX:AX
CWDE 80386 znaménkové rozšíření AX→EAX
CDQ 80386 znaménkové rozšíření EAX→EDX:EAX

Tyto instrukce původní osmibitovou, 16bitovou či 32bitovou hodnotu rozšíří na dvojnásobnou bitovou šířku, přičemž berou v úvahu znaménko (nejedná se tedy o pouhé vynulování horních bitů registru či dvojice registrů). V rámci čipů 80386 byly přidány instrukce CWDE a CDQ. Zajímavé je, že tyto instrukce trvají dva cykly, zatímco instrukce původní (jednodušší) trvají cykly tři.

Instrukce uvedené v předchozí tabulce pracují pouze s akumulátorem popř. s dvojicí registrů D:A (DX:AX nebo EDX:EAX). Čipy 80386 jsou ale doplněny i obecnějšími instrukcemi určenými pro rozšíření hodnoty při přenosu dat z/do jiných registrů nebo z operační paměti. Jedná se tedy o variantu obecné přenosové instrukce MOV nazvanou MOVZX, ovšem s tím, že se horních osm bitů resp. šestnáct bitů vynuluje:

Instrukce Operandy Stručný popis instrukce
MOVZX reg16, reg8 přenos z osmibitového registru do registru 16bitového s vynulováním horních osmi bitů
MOVZX reg32, reg16 přenos z 16bitového registru do registru 32bitového s vynulováním horních šestnácti bitů
MOVZX reg16, mem přenos osmi bitů z operační paměti s vynulováním horních osmi bitů
MOVZX reg32, mem přenos šestnácti bitů z operační paměti s vynulováním horních šestnácti bitů
Poznámka: další adresovací režimy podporované instrukcí MOV nejsou u MOVZX podporovány. Z tohoto pohledu tedy není instrukční sada ortogonální, což bylo platformě 80×86 vyčítáno prakticky od začátku její existence.

K dispozici je i instrukce nazvaná MOVSX umožňující přenosy dat se znaménkovým rozšířením. Pro kladné hodnoty (nejvyšší bit je nulový) je tato instrukce totožná s výše uvedenou MOVZX, pro hodnoty záporné (nejvyšší bit nastaven na jedničku) se pak vyšší polovina cílového registru taktéž nastaví na jedničku:

Instrukce Operandy Stručný popis instrukce
MOVSX reg16, reg8 přenos z osmibitového registru do registru 16bitového se znaménkovým rozšířením do horních osmi bitů
MOVSX reg32, reg16 přenos z 16bitového registru do registru 32bitového se znaménkovým rozšířením do horních šestnácti bitů
MOVSX reg16, mem přenos osmi bitů z operační paměti se znaménkovým rozšířením do horních osmi bitů
MOVSX reg32, mem přenos šestnácti bitů z operační paměti se znaménkovým rozšířením do horních šestnácti bitů

14. „Bitový procesor“ a instrukce pro nastavení výsledku na základě příznakových bitů

Mikroprocesory 80386 měly nově k dispozici i specializované instrukce sloužící pro provádění různých bitových operací. Jedná se velmi užitečné nízkoúrovňové operace a podobné instrukce nalezneme například v mnoha mikrořadičích:

Instrukce Operandy Stručný popis instrukce
BT src, n n-tý bit se zkopíruje do příznaku Carry
BTC src, n negace n-tého bitu se zkopíruje do příznaku Carry
BTR src, n jako instrukce BT, ale bit se poté vynuluje
BTS src, n jako instrukce BT, ale bit se poté nastaví na 1
     
BSF dest, src hledá první nenulový bit od bitu nejnižšího
BSR dest, src hledá první nenulový bit od bitu nejvyššího

Další sada nových instrukcí přidaných v rámci 80386 slouží pro nastavení hodnoty 0 nebo 1 do zvoleného osmibitového registru nebo do adresy v operační paměti. To, jaká hodnota se zapíše, záleží na vyhodnocení podmínky, přičemž samotné podmínky jsou naprosto stejné, jako u podmíněných skoků. Nastavením 0/1 se vlastně instrukční sada mikroprocesorů řady 80386 přibližuje požadavkům vyšších programovacích jazyků, zejména pak klasického céčka – a překladače tyto instrukce skutečně využívají. V následující tabulce jsou uvedeny všechny jmenné aliasy instrukcí (mnohé instrukce tedy mají stejný význam, pouze odlišné jméno):

Instrukce Operandy Stručný popis instrukce
SETO Set to 1 if Overflow OF = 1
SETNO Set to 1 if Not Overflow OF = 0
SETS Set to 1 if Sign SF = 1
SETNS Set to 1 if Not Sign SF = 0
SETE Set to 1 if Equal ZF = 1
SETZ Set to 1 if Zero ZF = 1
SETNE Set to 1 if Not Equal ZF = 0
SETNZ Set to 1 if Not Zero ZF = 0
SETB Set to 1 if Below CF = 1
SETNAE Set to 1 if Not Above or Equal CF = 1
SETC Set to 1 if Carry CF = 1
SETNB Set to 1 if Not Below CF = 0
SETAE Set to 1 if Above or Equal CF = 0
SETNC Set to 1 if Not Carry CF = 0
SETBE Set to 1 if Below or Equal CF = 1 | ZF = 1
SETNA Set to 1 if Not Above CF = 1 | ZF = 1
SETA Set to 1 if Above CF = 0 & ZF = 0
SETNBE Set to 1 if Not Below or Equal CF = 0 & ZF = 0
SETL Set to 1 if Less SF <> OF
SETNGE Set to 1 if Not Greater or Equal SF <> OF
SETGE Set to 1 if Greater or Equal SF = OF
SETNL Set to 1 if Not Less SF = OF
SETLE Set to 1 if Less or Equal ZF = 1 | SF <> OF
SETNG Set to 1 if Not Greater ZF = 1 | SF <> OF
SETG Set to 1 if Greater ZF = 0 & SF = OF
SETNLE Set to 1 if Not Less or Equal ZF = 0 & SF = OF
SETP Set to 1 if Parity PF = 1
SETPE Set to 1 if Parity Even PF = 1
SETNP Set to 1 if Not Parity PF = 0
SETPO Set to 1 if Parity Odd PF = 0

15. Nové možnosti provádění podmíněných a nepodmíněných skoků

V instrukčním souboru mikroprocesorů řady Intel 80386 došlo i k rozšíření instrukcí pro nepodmíněné a podmíněné skoky. Z hlediska relativně malých programů (tedy i programů typu COM v době kralování DOSu) je důležité především rozšíření původně pouze lokálních (krátkých) skoků na takzvané „blízké“ (near) skoky, což se týká především podmíněných skoků. Připomeňme si, že původně byly cílové adresy těchto skoků omezeny na relativní rozsah –128 až 127 od aktuální hodnoty registru IP. To vyhovuje spíše pro malé subrutiny, ovšem zejména při překladu programů z vyšších programovacích jazyků do strojového kódu může být tento rozsah nedostatečný. Blízké skoky tento problém řeší, protože skok je možné provést na libovolnou adresu v aktuálně nastaveném kódovém segmentu (CS). Proto se někdy tyto skoky nazývají intrasegment jump. A konečně je nově možné provést i dlouhé skoky (far jump) mimo aktuální segment. Tyto skoky se z tohoto důvodu nazývají intersegment jump.

U mikroprocesorů řady 80386 (a vyšších) lze použít i takzvané blízké skoky neboli near jumps, které umožňují provedení skoku na libovolné místo v kódovém segmentu. Adresa takového skoku je pochopitelně šestnáctibitová a díky tomu, že platí v rámci segmentu, není nutné provádět žádné testy, zda skok náhodou neporušuje izolaci programu (což se týká chráněného režimu). Blízké skoky dokáže assembler generovat automaticky ve chvíli, kdy je cíl skoku vzdálenější než relativní offset –128 až 127. Ovšem blízký skok si můžeme i vynutit modifikátorem near. Ve vyšších programovacích jazycích si může překladač zvolit jak krátký, tak i dlouhý skok.

Provádět je možné i takzvané dlouhé skoky, tj. skoky, při nichž se mění jak hodnota registru EIP (ano i tento registr je nyní 32bitový), tak i hodnota CS (kódový segment). Adresa cíle skoku nyní musí obsahovat plný ukazatel (tj. segment+16bitový offset nebo dokonce segment+32bitový offset) a může být zadána buď skutečně jako absolutní adresa, nebo jako adresa na ukazatel obsahující vlastní adresu cíle skoku. V prvním případě je pochopitelně adresa součástí instrukčního slova (4 bajty nebo šest bajtů), ve druhém případě se jedná o čtyřbajtovou nebo šestibajtovou adresu ukazatele.

16. Chráněný režim 80386

Již předchůdce 80386, konkrétně mikroprocesor 80286, podporoval přepnutí mikroprocesoru do takzvaného chráněného režimu (protected mode), v němž se dosti podstatným způsobem změnily možnosti adresace paměti, ovšem současně se zpřístupnil celý fyzicky dostupný paměťový rozsah – teoreticky tedy až 16MB RAM. To však není vše, protože jednotlivé části operační paměti mohly být různým způsobem chráněny – proti přepisu, proti možnosti spuštění kódu v této oblasti (skok do ní) atd. Navíc mohl být omezen (řízen) přístup k I/O portům a tím pádem i přístup k hardware (časovače, zvukové karty, klávesnice atd.)

Chráněný režim byl navržen takovým způsobem, aby umožnil vznik operačních systémů s multitaskingem a ochrannými prvky mezi jednotlivými aplikacemi resp. mezi aplikací a operačním systémem. Problém byl jediný – DOSovské aplikace obecně tuto ochranu porušovaly (a musely porušovat): přistupovaly přímo k HW, zapisovaly do kódových segmentů, spouštěly kód z nekódových segmentů, používaly segmenty, které se překrývaly a dokonce si takové aplikace dovolovaly volat služby DOSu a BIOSu (oba tyto systémy jsou totiž psány pro reálný režim). Chráněný režim tedy bylo možné používat (a mnohé aplikace ho i používaly), ale potřebovaly se buď přepínat zpět do reálného režimu (na 286 složité a zdlouhavé) nebo využívaly takzvaných extenderů, které se snažily zpřístupnit služby DOSu i z chráněného režimu (mnohdy taktéž přepnutím do reálného režimu).

Mikroprocesory 80386 možnosti chráněného režimu dále rozšířily. Zejména se zvětšil počet bitů pro bázovou adresu segmentu, a to na plných 32 bitů (rozsah 4GB oproti původním 16MB). A taktéž se zvětšil počet bitů pro limit, a to z původních 16 bitů (maximální limit 0×ffff) na 20 bitů, ovšem s tím, že se namísto bajtů může limit nastavit i v celých stránkách (to se přepíná dalším bitem). To umožnilo jak vznik velkých aplikací (nemusely řešit problém malých segmentů), tak i aplikací, které potřebovaly (na svou dobu) obrovské bloky paměti pro uložení dat.

Dalším vylepšením je možnost přechodu z chráněného režimu do režimu reálného, což na čipu 80286 vyžadovalo použití HW obvodu (PC) nebo později triku nazvaného Triple Fault.

17. Virtuální režim 8086 a podpora stránkování

Zásadní vlastností mikroprocesorů Intel 80386 byla jejich podpora takzvaného virtuálního režimu (virtual mode), který je známý i pod zkratkami V86 resp. VM86. Pokud je nějaký proces spuštěn v tomto režimu, má k dispozici zdánlivý (virtuální) mikroprocesor s vlastním blokem operační paměti, s možností pracovat s I/O zařízeními, přistupovat ke „své“ video RAM atd. Ovšem ve skutečnosti jsou tyto prostředky poskytovány operačním systémem, který může v jeden okamžik spustit více takových úloh, současně provozovat úlohy běžící v chráněném režimu atd. Virtuální režim 86 používal po velmi dlouhou dobu (ve Windows pro spouštění DOSových aplikací, podobně pracuje i DOSEMU pro Linux). Navíc se s příchodem Pentia možnosti virtuálního režimu rozšířily (Virtual-8086 mode extensions: VME).

Dále se zmiňme o stránkování. Celý paměťový rozsah mikroprocesoru Intel 80386 (32bitů adresy = 4GB) je rozdělen do stránek o velikosti 4kB. Těchto stránek je celkem 1024×1024 = 1048576, přičemž u každé stránky lze nastavit, zda je určena pro čtení a/nebo zápis, zda je stránka dostupná, dále určit přístupová práva (user/supervisor) a navíc samotný HW nastavuje bit dirty v případě, že byla stránka modifikována, tj. pokud se změnil alespoň jeden její bit.

Informace o stránkách nejsou uloženy v jediném bloku s 1048576 záznamy (to by totiž znamenalo, že by se muselo alokovat 4MB jen pro tyto účely). Namísto toho je použit koncept dvou úrovní tabulek. První tabulka má maximálně 1024 záznamů a obsahuje adresy tabulek na druhé úrovni (těch může být maximálně 1024, ale typicky jich bývá méně). A až v těchto tabulkách druhé úrovně jsou uloženy informace o jednotlivých stránkách. V praxi mají tedy tabulky stránek dohromady menší velikost, než ony 4MB.

Poznámka: to, že je velikost stránky rovna 4kB, není náhoda. Je to praktická hodnota, protože stránky nejsou ani příliš malé (bylo by jich mnoho), ale ani příliš velké (potom by byla granularita pro některé účely příliš velká). Navíc 4kB znamenají dvanáct bitů offsetu, což poměrně elegantně umožňuje rozdělit lineární adresu na trojici bitových polí.

Podpora stránkování je jednou z nejlepších technologií, které byly do čipů Intel 80386 přidány. Díky stránkování je totiž možné relativně snadno implementovat systém podporující větší množství úloh (v86), mezi kterými se lze přepínat. Navíc je možné realizovat (typicky na úrovni operačního systému nebo i jedné monolitické aplikace) virtuální paměť, přičemž vlastní RAM vlastně slouží jako rychlá cache ke stránkám ukládaným na pevný disk (swap). Systém (či monolitická aplikace) si v případě potřeby stránku, ke které se přistupuje, „dotáhne“ z disku popř. naopak uloží na disk v případě, že dojde ke změně jejího obsahu (je nastaven bit dirty).

Poznámka: stránkování lze kombinovat se systémem selektor+deskriptor (chráněný režim), nebo se chráněný režim použije bez podpory stránkování – vše závisí na volbě vývojáře operačního systému nebo aplikace, která si sama systém spravuje.

18. Vznik nových operačních systémů využívajících vlastností mikroprocesoru 80386

Podpora až 4GB virtuální paměti a stránkování, kterou mikroprocesor 80386 nabízel, společně s možností využití 32bitových adres, vedly k tomu, že vznikly nové operační systémy, které ke své činnosti vyžadovaly právě 80386 nebo novější čipy s ním kompatibilní. Mezi tyto nové operační systémy patří Xenix System V/386, OS/2, Minix a taktéž Windows NT, které byly naprogramovány jako čistě 32bitové operační systémy (a platilo to i pro ovladače, aplikace atd.). Na stránkách Roota samozřejmě nesmíme zapomenout ani na Linux, jenž původně vznikl právě pro architekturu ia32 (a procesory 80386 podporoval až přibližně do roku 2013, poté již „jen“ 686).

Do určité míry byl 80386 podporován i ve Windows 3.0 a Windows 3.1, což byly šestnáctibitové systémy. Ovšem ve Windows for Workgroups 3.11 se objevila podpora pro 32bitové ovladače, což mj. vedlo k urychlení práce se souborovými systémy.

Xenix

Obrázek 9: Operační systém Xenix byl upraven pro procesory 80386

Autor: N/A, podle licence: Rights Managed

19. Prodloužení života DOSových aplikací

Vraťme se ještě k výše zmíněné podpoře virtuálního režimu v86. Díky existenci tohoto režimu bylo možné i v (tehdy) moderních operačních systémech s podporou většího množství úloh provozovat „staré dobré“ aplikace naprogramované pro systém DOS, a to včetně podpory tisku, síťové komunikace (což vyžadovalo určitou podporu) atd. Díky tomu bylo možné tyto aplikace provozovat i v době, kdy samotný DOS přestal být podporován i prodáván.

Zpětná podpora DOSovských aplikací zjednodušila adaptaci na nové operační systémy, které (pochopitelně) zpočátku neobsahovaly všechny potřebné aplikace, nemluvě o specializovaných aplikacích, které vlastně nebyly přepsány nikdy a stále se používaly/používají jejich původní DOSovské verze.

20. Odkazy na Internetu

  1. The Intel 8088 Architecture and Instruction Set
    https://people.ece.ubc.ca/~ed­c/464/lectures/lec4.pdf
  2. x86 Opcode Structure and Instruction Overview
    https://pnx.tf/files/x86_op­code_structure_and_instruc­tion_overview.pdf
  3. x86 instruction listings (Wikipedia)
    https://en.wikipedia.org/wi­ki/X86_instruction_listin­gs
  4. x86 assembly language (Wikipedia)
    https://en.wikipedia.org/wi­ki/X86_assembly_language
  5. Intel Assembler (Cheat sheet)
    http://www.jegerlehner.ch/in­tel/IntelCodeTable.pdf
  6. 25 Microchips That Shook the World
    https://spectrum.ieee.org/tech-history/silicon-revolution/25-microchips-that-shook-the-world
  7. Chip Hall of Fame: Intel 8088 Microprocessor
    https://spectrum.ieee.org/tech-history/silicon-revolution/chip-hall-of-fame-intel-8088-microprocessor
  8. Jak se zrodil procesor?
    https://www.root.cz/clanky/jak-se-zrodil-procesor/
  9. The 8086/8088 Primer
    https://www.stevemorse.or­g/8086/index.html
  10. flat assembler: Assembly language resources
    https://flatassembler.net/
  11. FASM na Wikipedii
    https://en.wikipedia.org/wiki/FASM
  12. Fresh IDE FASM inside
    https://fresh.flatassembler.net/
  13. MS-DOS Version 4.0 Programmer's Reference
    https://www.pcjs.org/docu­ments/books/mspl13/msdos/dos­ref40/
  14. DOS API (Wikipedia)
    https://en.wikipedia.org/wiki/DOS_API
  15. Bit banging
    https://en.wikipedia.org/wi­ki/Bit_banging
  16. IBM Basic assembly language and successors (Wikipedia)
    https://en.wikipedia.org/wi­ki/IBM_Basic_assembly_lan­guage_and_successors
  17. X86 Assembly/Bootloaders
    https://en.wikibooks.org/wi­ki/X86_Assembly/Bootloaders
  18. Complete 8086 instruction set
    https://content.ctcd.edu/cou­rses/cosc2325/m22/docs/emu8086in­s.pdf
  19. Complete 8086 instruction set
    https://yassinebridi.github.io/asm-docs/8086_instruction_set.html
  20. 8088 MPH by Hornet + CRTC + DESiRE (final version)
    https://www.youtube.com/wat­ch?v=hNRO7lno_DM
  21. Area 5150 by CRTC & Hornet (Party Version) / IBM PC+CGA Demo, Hardware Capture
    https://www.youtube.com/wat­ch?v=fWDxdoRTZPc
  22. 80×86 Integer Instruction Set Timings (8088 – Pentium)
    http://aturing.umcs.maine­.edu/~meadow/courses/cos335/80×86-Integer-Instruction-Set-Clocks.pdf
  23. Colour Graphics Adapter: Notes
    https://www.seasip.info/Vin­tagePC/cga.html
  24. Demoing An 8088
    https://hackaday.com/2015/04/10/de­moing-an-8088/
  25. Interrupts in 8086 microprocessor
    https://www.geeksforgeeks­.org/interrupts-in-8086-microprocessor/
  26. Interrupt Structure of 8086
    https://www.eeeguide.com/interrupt-structure-of-8086/
  27. List of Intel CPU microarchitectures
    https://en.wikipedia.org/wi­ki/List_of_Intel_CPU_micro­architectures
  28. IBM PC slaví 40 let: otevřená architektura změnila svět
    https://www.root.cz/clanky/ibm-pc-slavi-40-let-otevrena-architektura-zmenila-svet/
  29. Jak se zrodil procesor?
    https://www.root.cz/clanky/jak-se-zrodil-procesor/
  30. All About Computers – 386 processor
    https://shinesystems.blog­spot.com/2009/06/386-processor.html
  31. Legendární školní mikropočítač IQ-151
    https://www.root.cz/clanky/legendarni-skolni-mikropocitac-iq-151/
  32. Vývoj her a grafických dem pro oslavovanou i nenáviděnou platformu PC (první kroky)
    https://www.root.cz/clanky/vyvoj-her-a-grafickych-dem-pro-oslavovanou-i-nenavidenou-platformu-pc-prvni-kroky/
  33. AMD Am386 DXL-25
    https://hw-museum.cz/cpu/129/amd-am386-dxl-25
  34. AMD Am386 SX-40
    https://hw-museum.cz/cpu/490/amd-am386-sx-40
  35. Intel i386 DX-33
    https://hw-museum.cz/cpu/493/intel-i386-dx-33
  36. Intel i387SX-25
    https://hw-museum.cz/cpu/438/intel-i387sx-25
  37. Intel 80386, a revolutionary CPU
    https://www.xtof.info/intel80386.html
  38. Intel 80386, a Revolutionary CPU
    https://news.ycombinator.com/i­tem?id=38156486
  39. LINUX's History
    https://www.cs.cmu.edu/~aw­b/linux.history.html
  40. Legacy of the 386: The Enduring Impact of Backward Compatibility in Modern Processors
    https://lngfrm.net/legacy-of-the-386-the-enduring-impact-of-backward-compatibility-in-modern-processors/
Neutrální ikona do widgetu na odběr článků ze seriálů

Zajímá vás toto téma? Chcete se o něm dozvědět víc?

Objednejte si upozornění na nově vydané články do vašeho mailu. Žádný článek vám tak neuteče.


Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.