x86 - x86

x86
Návrhář Intel , AMD
Bity 16bitové , 32bitové a 64bitové
Představeno 1978 (16bitový), 1985 (32bitový), 2003 (64bitový)
Design CISC
Typ Registrace - paměť
Kódování Proměnná (1 až 15 bajtů)
Větvení Kód podmínky
Endianness Málo
Velikost stránky 8086 - i286 : Žádný
i386 , i486 : 4 KB stránky
P5 Pentium : přidány 4 MB stránky
(Legacy PAE : 4 KB → 2 MB)
x86-64 : přidáno 1 GB stránek
Rozšíření x87 , IA-32 , x86-64 , MMX , 3DNow! , SSE , MCA , ACPI , SSE2 , bit NX , SSE3 , SSSE3 , SSE4 , SSE4.2 , AES-NI , CLMUL , RDRAND , SHA , MPX , SME , SGX , XOP , F16C , ADX , BMI , FMA , AVX , AVX2 , AVX512 , VT-x , VT-d , AMD-V , AMD-Vi , TSX , ASF , TXT
Otevřeno Částečně. U některých pokročilých funkcí může x86 vyžadovat licenci od společnosti Intel; x86-64 může vyžadovat dodatečnou licenci od AMD. Procesor 80486 je na trhu více než 30 let, a proto na něj nelze vznést patentové nároky. Podmnožina architektury x86 před 586 je tedy plně otevřená.
Registry
Obecný účel
  • 16bitové: 6 částečně vyhrazených registrů, BP a SP nejsou obecné
  • 32bitové: 8 GPR, včetně EBP a ESP
  • 64bitové: 16 GPR, včetně RBP a RSP
Plovoucí bod
  • 16bitový: volitelný samostatný x87 FPU
  • 32bitový: volitelný samostatný nebo integrovaný x87 FPU, integrované jednotky SSE v pozdějších procesorech
  • 64bitové: integrované jednotky x87 a SSE2 , pozdější implementace rozšířeny na AVX2 a AVX512
Architektury x86 byly založeny na mikroprocesorovém čipu Intel 8086, původně vydaném v roce 1978.
Intel Core 2 Duo, příklad 64bitového vícejádrového procesoru kompatibilního s x86
AMD Athlon (starší verze), technicky odlišná, ale plně kompatibilní implementace x86

x86 je rodina architektur instrukčních sad původně vyvinutých společností Intel na základě mikroprocesoru Intel 8086 a jeho varianty 8088 . 8086 byl představen v roce 1978 jako plně 16bitové rozšíření 8bitového mikroprocesoru Intel 8080 s segmentací paměti jako řešením pro adresování více paměti, než je možné pokrýt prostou 16bitovou adresou. Termín „x86“ vznikl, protože jména několika nástupců procesoru Intel 8086 končí na „86“, včetně procesorů 80186 , 80286 , 80386 a 80486 .

V průběhu let bylo do sady instrukcí x86 přidáno mnoho dodatků a rozšíření, téměř konzistentně s plnou zpětnou kompatibilitou . Architektura byla implementována do procesorů Intel, Cyrix , AMD , VIA Technologies a mnoha dalších společností; existují také otevřené implementace, například platforma Zet SoC (aktuálně neaktivní). Přesto z nich pouze Intel, AMD, VIA Technologies a DM&P Electronics vlastní architektonické licence x86 a z nich pouze první dva aktivně vyrábějí moderní 64bitové designy.

Tento výraz není synonymem pro kompatibilitu IBM PC , protože to znamená mnoho dalšího počítačového hardwaru ; vestavěné systémy a počítače pro všeobecné použití používaly před zahájením trhu kompatibilního s PC čipy x86 , některé z nich ještě před debutem IBM PC (1981).

Od roku 2021 je většina prodaných osobních počítačů , notebooků a herních konzolí založena na architektuře x86, zatímco mobilním kategoriím, jako jsou smartphony nebo tablety, dominuje ARM ; na špičkové úrovni x86 nadále dominuje segmentům pracovních stanic a cloudových počítačů náročných na výpočetní výkon, zatímco nejrychlejší superpočítač je založený na ARM a top 4 již nejsou založené na x86.

Přehled

V osmdesátých a na začátku devadesátých let, kdy byly 8088 a 80286 ještě běžně používané, termín x86 obvykle představoval jakýkoli procesor kompatibilní s 8086. Dnes však x86 obvykle implikuje binární kompatibilitu také s 32bitovou instrukční sadou 80386. Je to dáno skutečností, že tato instrukční sada se stala něčím jako nejnižší společný jmenovatel pro mnoho moderních operačních systémů a pravděpodobně také proto, že Termín se stal běžným po zavedení 80386 v roce 1985.

Několik let po představení 8086 a 8088 přidala společnost Intel do svého schématu pojmenování a terminologie určitou složitost, protože „iAPX“ ambiciózního, ale nešťastného procesoru Intel iAPX 432 byl vyzkoušen na úspěšnější řadě čipů 8086, jako druh předpony na úrovni systému. 8086 systém , včetně koprocesory , například 8087 a 8089 , a jednodušší Intel specifické systémové čipy, tím byla popsána jako iAPX 86 systému . Existovaly také výrazy iRMX (pro operační systémy), iSBC (pro jednodeskové počítače) a iSBX (pro vícemodulové desky založené na architektuře 8086), vše dohromady pod hlavičkou Microsystem 80 . Toto schéma pojmenování však bylo celkem dočasné, na začátku 80. let trvalo několik let.

Ačkoli 8086 byl primárně vyvinut pro vestavěné systémy a malé počítače pro více uživatelů nebo pro jednoho uživatele, převážně jako reakce na úspěšný Zilog Z80 kompatibilní s 8080 , řada x86 brzy rostla ve funkcích a výpočetním výkonu. Dnes je x86 všudypřítomný ve stacionárních i přenosných osobních počítačích a používá se také v počítačích střední třídy , pracovních stanicích , serverech a většině nových superpočítačových klastrů seznamu TOP500 . Velké množství softwaru , včetně velkého seznamu operačních systémů x86, používá hardware založený na x86.

Moderní x86 je však u vestavěných systémů relativně neobvyklý a malé aplikace s nízkým výkonem (pomocí malých baterií) a levné mikroprocesorové trhy, jako jsou domácí spotřebiče a hračky, postrádají významnou přítomnost x86. Jednoduché 8- a 16-bitové architektury založené jsou běžné tady, ačkoli x86 kompatibilní VIA C7 , VIA Nano , AMD je Geode , Athlon Neo a Intel Atom jsou příklady 32- a 64-bitových vzorů používaných v některých relativně nízkým energetické a nízkonákladové segmenty.

Došlo k několika pokusům, včetně společnosti Intel, ukončit dominanci „neelegantní“ architektury x86 na trhu navržené přímo z prvních jednoduchých 8bitových mikroprocesorů. Příkladem jsou iAPX 432 (projekt původně pojmenovaný Intel 8800 ), Intel 960 , Intel 860 a architektura Intel/Hewlett-Packard Itanium . Neustálé zdokonalování mikroarchitektur x86 , výroby obvodů a polovodičů by však v mnoha segmentech ztěžovalo nahrazení x86. 64bitové rozšíření x86 od AMD (na které Intel nakonec reagoval kompatibilním designem) a škálovatelnost čipů x86 v podobě moderních vícejádrových procesorů zdůrazňuje x86 jako příklad toho, jak lze odolávat neustálému zdokonalování zavedených průmyslových standardů konkurence zcela nových architektur.

Chronologie

Níže uvedená tabulka uvádí modely procesorů a modelové řady implementující variace instrukční sady x86 v chronologickém pořadí. Každá řádková položka se vyznačuje výrazně vylepšenými nebo komerčně úspěšnými návrhy mikroarchitektury procesorů .

Chronologie procesorů x86
Generace Úvod Prominentní modely CPU Adresní prostor Pozoruhodné vlastnosti
Lineární Virtuální Fyzický
x86 1. 1978 Intel 8086 , Intel 8088 (1979) 16bitové NA 20bitové 16bitový ISA , IBM PC (8088), IBM PC/XT (8088)
1982 Intel 80186 , Intel 80188
NEC V20 /V30 (1983)
8086-2 ISA, vestavěný (80186/80188)
2 Intel 80286 a klony 30 bitů 24bitové chráněný režim , IBM PC/XT 286 , IBM PC/AT
3. ( IA-32 ) 1985 Intel 80386 , AMD Am386 (1991) 32bitové 46bitové 32bitové 32bitový ISA , stránkovací, IBM PS/2
4. (pipelining, cache) 1989 Intel 80486
Cyrix Cx486S , DLC (1992)
AMD Am486 (1993), Am5x86 (1995)
pipelining , on-die x87 FPU (486DX), on-die cache
5.
( Superscalar )
1993 Intel Pentium , Pentium MMX (1996) Superskalární , 64bitová databáze , rychlejší FPU, MMX (Pentium MMX), APIC , SMP
1994 NexGen Nx586
AMD 5k86 / K5 (1996)
Diskrétní mikroarchitektura (µ-op překlad)
1995 Cyrix Cx5x86
Cyrix 6x86 / MX (1997) / MII (1998)
dynamické provedení
6.
( PAE , µ-op překlad)
1995 Intel Pentium Pro 36bitový ( PAE ) µ-op překlad, instrukce podmíněného přesunu, dynamické provádění , spekulativní provádění , 3cestný x86 superskalární, superskalární FPU, PAE , mezipaměť L2 na čipu
1997 Intel Pentium II , Pentium III (1999)
Celeron (1998), Xeon (1998)
na balíčku (Pentium II) nebo on-die (Celeron) L2 Cache, SSE (Pentium III), SLOT 1 , Socket 370 nebo SLOT 2 (Xeon)
1997 AMD K6 / K6-2 (1998) / K6-III (1999) 32bitové 3DNow! , 3úrovňový mezipaměťový systém (K6-III)
Vylepšená platforma 1999 AMD Athlon
Athlon XP / MP (2001)
Duron (2000)
Sempron (2004)
36bitové MMX+, 3DNow!+, Dvoupumpovaný autobus, slot A nebo zásuvka A
2000 Transmeta Crusoe 32bitové CMS napájený procesor platformy x86, jádro VLIW -128, řadič paměti on-die, logika můstku on-die PCI
Intel Pentium 4 36bitové SSE2 , HTT (Northwood), NetBurst, čtyřpumpový autobus, Trace Cache, zásuvka 478
2003 Intel Pentium M
Intel Core (2006)
Pentium Dual-Core (2007)
µ-op fúze , XD bit (Dothan) (Intel Core „Yonah“)
Transmeta Efficeon CMS 6.0.4, VLIW -256, NX bit , HT
IA-64 64bitový přechod
1999-2005
2001 Intel Itanium (2001-2017) 52bitové 64bitová architektura EPIC , 128bitový instrukční balíček VLIW, hardwarový IA-32 H/W s možností instalace x86 OS a aplikace x86 (starší generace), software IA-32 EL umožňující aplikace x86 (Itanium 2), registrační soubory Itanium jsou přemapovány do registrů x86
x86-64 64bitové Rozšířeno
od roku 2001
x86-64 je 64bitová rozšířená architektura x86, její Legacy Mode zachovává celou a nezměněnou architekturu x86. Nativní architektura procesorů x86-64: sídlící v 64bitovém režimu, postrádá přístupový režim v segmentaci, což představuje 64bitový lineární adresový prostor s architektonickým povolením; přizpůsobená architektura IA-32 umístěná v režimu kompatibility vedle 64bitového režimu je k dispozici pro podporu většiny aplikací x86
2003 Athlon 64 / FX / X2 (2005), Opteron
Sempron (2004) / X2 (2008)
Turion 64 (2005) / X2 (2006)
40bitové AMD64 (kromě některých procesorů Sempron prezentovaných jako čistě x86 procesory), řadič paměti on-die, HyperTransport , dvoujádrový procesor on-die (X2), AMD-V (Athlon 64 Orleans), zásuvka 754 / 939 / 940 nebo AM2
2004 Pentium 4 (Prescott)
Celeron D , Pentium D (2005)
36bitové EM64T (povoleno na vybraných modelech Pentium 4 a Celeron D), SSE3 , 2. gen. NetBurst pipelining, dvoujádrový (on-die: Pentium D 8xx, on-chip: Pentium D 9xx), Intel VT (Pentium 4 6x2), socket LGA 775
2006
Dvoujádrový procesor Intel Core 2 Pentium (2007)
Celeron Dual-Core (2008)
Intel 64 (<< == EM64T), SSSE3 (65 nm), široké dynamické provedení, µ-op fúze, fúze makro op v 16bitovém a 32bitovém režimu, čtyřjádro na čipu (Core 2 Quad) „Inteligentní sdílená mezipaměť L2 (Intel Core 2„ Merom “)
2007 AMD Phenom / II (2008)
Athlon II (2009)
Turion II (2009)
48bitové Monolitické čtyřjádro (X4)/ tříjádro (X3), SSE4a , Rapid Virtualization Indexing (RVI), HyperTransport 3, AM2+ nebo AM3
2008 Intel Core 2 (45 nm) 40bitové SSE4.1
Intel Atom netbook nebo nízkoenergetický procesor chytrého zařízení, jádro P54C znovu použito
Intel Core i7
Core i5 (2009)
Core i3 (2010)
QuickPath, na čipu GMCH ( Clarkdale ), SSE4.2 , Extended Page Tables (EPT) pro virtualizaci, fúze makro operací v 64bitovém režimu, (Intel Xeon „Bloomfield“ s mikroarchitekturou Nehalem)
VIA Nano hardwarové šifrování ; adaptivní řízení spotřeby
2010 AMD FX 48bitové osmijádrový, CMT (Clustered Multi-Thread), FMA, OpenCL, AM3+
2011 Řady AMD APU A a E ( Llano ) 40bitové on-die GPGPU, PCI Express 2.0, Socket FM1
Řady AMD APU C, E a Z ( Bobcat ) 36bitové nízkoenergetické chytré zařízení APU
Intel Core i3 , Core i5 a Core i7
( Sandy Bridge / Ivy Bridge )
Interní kruhové připojení, dekódovaná mezipaměť µ-op, zásuvka LGA 1155
2012 AMD APU A Series ( Bulldozer, Trinity a novější) 48bitové AVX , APU na bázi buldozeru, Socket FM2 nebo Socket FM2+
Intel Xeon Phi (Knights Corner) Koprocesor přídavné karty PCI-E pro systém založený na XEON, Manycore Chip, P54C v pořadí , velmi široká VPU (512-bit SSE), instrukce LRBni (8 × 64-bit)
2013 AMD Jaguar
(Athlon, Sempron)
SoC , herní konzole a nízkoenergetický procesor chytrých zařízení
Intel Silvermont
(Atom, Celeron, Pentium)
36bitové SoC , procesor inteligentních zařízení s nízkým/ultra nízkým výkonem
Intel Core i3 , Core i5 a Core i7 ( Haswell / Broadwell ) 39bitové Pokyny AVX2 , FMA3 , TSX , BMI1 a BMI2 , zásuvka LGA 1150
2015 Intel Broadwell-U
( Intel Core i3 , Core i5 , Core i7 , Core M , Pentium , Celeron )
SoC, na čipu Broadwell-U PCH-LP (vícečipový modul)
2015-2020 Intel Skylake / Kaby Lake / Cannon Lake / Coffee Lake / Rocket Lake
(Intel Pentium / Celeron Gold, Core i3 , Core i5 , Core i7 , Core i9 )
46bitové AVX-512 (omezeno na varianty Cannon Lake-U a pracovní stanice/server Skylake)
2016 Intel Xeon Phi (Knights Landing) 48bitové Manycore CPU a koprocesor pro systémy Xeon, jádro na bázi Airmont (Atom)
2016 AMD Bristol Ridge
(AMD (Pro) A6/A8/A10/A12)
Integrovaný FCH na zápustce, SoC, zásuvka AM4
2017 Řady AMD Ryzen/AMD Epyc Series Implementace AMD SMT, vícenásobné matrice na čipu
2017 Zhaoxin WuDaoKou (KX-5000, KH-20000) Zhaoxin je první zbrusu nová architektura x86-64
2018-2021 Intel Sunny Cove (Ice Lake-U a Y), Cypress Cove (Rocket Lake) 57bitové První implementace AVX-512 od společnosti Intel pro spotřebitelský segment. Přidání pokynů pro vektorovou neuronovou síť (VNNI)
2020 Intel Willow Cove (Tiger Lake-Y/U/H) Propojovací architektura se dvěma kruhy, aktualizovaný Gaussian Neural Accelerator (GNA2), nové pokyny pro vektorovou křižovatku AVX-512, přidání technologie Control-Flow Enforcement Technology (CET)
Éra Uvolnění Modely CPU Fyzický adresní prostor Nové vlastnosti

Dějiny

Ostatní výrobci

Am386 , povolený AMD v roce 1991

Společnosti jako IBM , VIA , NEC , AMD , TI , STM , Fujitsu , OKI , Siemens , Cyrix , Intersil , C&T , NexGen , UMC a DM&P začaly v různých dobách navrhovat nebo vyrábět x86 procesory (CPU) určené pro osobní účely. počítače a vestavěné systémy. Takové x86 implementace jsou zřídka jednoduché kopie, ale často využívají různé interní mikroarchitektury a různá řešení na elektronické a fyzické úrovni. Zcela přirozeně byly časně kompatibilní mikroprocesory 16bitové, zatímco 32bitové designy byly vyvinuty mnohem později. Na trhu osobních počítačů se kolem roku 1990 začala objevovat skutečná množství s procesory kompatibilními s i386 a i486 , často pojmenovanými podobně jako původní čipy společnosti Intel. Mezi další společnosti, které navrhovaly nebo vyráběly procesory x86 nebo x87 , patří ITT Corporation , National Semiconductor , ULSI System Technology a Weitek .

V návaznosti na plně pipeline i486 , Intel představil Pentium značku (který, na rozdíl od čísel mohlo být ochrannou známkou ) pro jejich novou sadu superskalární vzorů x86. S režimem x86 pojmenování nyní právně zrušeno, jiní dodavatelé X86 musel vybrat různá jména pro své výrobky x86 kompatibilní, a zpočátku někteří se rozhodli pokračovat s variací schématu číslování: IBM spolupracuje s Cyrix produkovat 5x86 a následně velmi efektivní Řady 6x86 (M1) a 6x86 MX ( MII ) konstrukcí Cyrix, což byly první x86 mikroprocesory implementující přejmenování registru umožňující spekulativní provádění . AMD mezitím navrhla a vyrobila pokročilý, ale zpožděný 5k86 ( K5 ), který interně úzce vycházel z dřívějšího designu AMD 29K RISC ; podobně jako NexGen je Nx586 , že používá strategii tak, aby vyhrazené potrubí stádia dekódovat x86 instrukcí do uniformy a snadno zvládnutelné mikro-operace , což je metoda, která zůstává základem pro většinu x86 návrhů až do dnešního dne.

Některé rané verze těchto mikroprocesorů měly problémy s odvodem tepla. 6x86 byl také ovlivněn několika drobnými problémy s kompatibilitou, Nx586 postrádal jednotku s plovoucí desetinnou čárkou (FPU) a (tehdy zásadní) kompatibilitu pinů, zatímco K5 měl poněkud (při) zavedení poněkud neuspokojivý výkon. Neznalost zákazníků o alternativách k řadě Pentium dále přispěla k tomu, že tyto návrhy byly poměrně neúspěšné, a to navzdory skutečnosti, že K5 měl velmi dobrou kompatibilitu s Pentiem a 6x86 byl výrazně rychlejší než Pentium na celočíselném kódu. AMD později dokázalo růst na vážného uchazeče se sadou procesorů K6 , které ustoupily velmi úspěšnému Athlonu a Opteronu . Existovali také další uchazeči, například Centaur Technology (dříve IDT ), Rise Technology a Transmeta . Energeticky účinné procesory C3 a C7 společnosti VIA Technologies , které byly navrženy společností Centaur , se prodávají již mnoho let. Nejnovější design Centaur, VIA Nano , je jejich prvním procesorem se superskalárním a spekulativním provedením . Byl představen přibližně ve stejnou dobu jako první procesor Intel „v pořadí“ od P5 Pentium , Intel Atom .

Rozšíření velikosti slova

Architektura instrukční sady byla dvakrát rozšířena na větší velikost slova . V roce 1985 Intel vydal 32bitový 80386 (později známý jako i386), který v následujících letech postupně nahradil dřívější 16bitové čipy v počítačích (i když obvykle ne ve vestavěných systémech ); tento rozšířený programovací model byl původně označován jako architektura i386 (jako jeho první implementace), ale Intel jej později nazval IA-32 při zavádění své (nesouvisející) architektury IA-64 .

V letech 1999–2003 AMD rozšířila tuto 32bitovou architekturu na 64 bitů a v raných dokumentech ji označovala jako x86-64 a později jako AMD64 . Intel brzy přijal architektonická rozšíření AMD pod názvem IA-32e, později pod názvem EM64T a nakonec pomocí Intel 64. Microsoft a Sun Microsystems / Oracle také používají termín „x64“, zatímco mnoho distribucí Linuxu a BSD také používají „amd64 "termín. Microsoft Windows například označuje své 32bitové verze jako „x86“ a 64bitové verze jako „x64“, zatímco instalační soubory 64bitových verzí systému Windows je nutné umístit do adresáře s názvem „AMD64“.

Základní vlastnosti architektury

Architektura x86 je proměnná délka instrukce, primárně design „ CISC “ s důrazem na zpětnou kompatibilitu . Sada instrukcí však není typickým CISC, ale v podstatě rozšířenou verzí jednoduchých osmibitových architektur 8008 a 8080 . Je povoleno adresování bajtů a slova jsou ukládána do paměti s bajtovým pořadím typu endian . Přístup do paměti k nezarovnaným adresám je povolen téměř pro všechny pokyny. Největší nativní velikost pro celočíselné aritmetické a paměťové adresy (nebo offsety ) je 16, 32 nebo 64 bitů v závislosti na generování architektury (novější procesory zahrnují přímou podporu i pro menší celá čísla). Více skalárních hodnot lze zpracovávat současně prostřednictvím jednotky SIMD přítomné v pozdějších generacích, jak je popsáno níže. Offsety okamžitých adres a okamžitá data mohou být vyjádřeny jako 8bitové veličiny pro často se vyskytující případy nebo kontexty, kde stačí rozsah -128..127. Typické pokyny jsou proto 2 nebo 3 bajty dlouhé (i když některé jsou mnohem delší a některé jednobajtové).

Aby se dále šetřilo kódovací místo, většina registrů je vyjádřena v operačních kódech pomocí tří nebo čtyř bitů, přičemž poslední registry jsou předponou operačního kódu v 64bitovém režimu, přičemž nejvýše jedním operandem instrukce může být paměťové místo. Tento operand paměti však může být také cíl (nebo kombinovaný zdroj a cíl), zatímco druhý operand, zdroj , může být registrovaný nebo okamžitý . Mimo jiné to přispívá k velikosti kódu, která konkuruje osmibitovým počítačům a umožňuje efektivní využití mezipaměti instrukcí. Relativně malý počet obecných registrů (rovněž zděděných od jeho 8bitových předchůdců) učinilo adresářově relativní adresování (pomocí malých okamžitých offsetů) důležitou metodou přístupu k operandům, zejména v zásobníku. Velká část práce byla proto investována do vytváření takových přístupů tak rychlých, jako jsou přístupy registrované-tj. Jednokruhová propustnost instrukcí, ve většině případů, kdy jsou přístupná data dostupná v mezipaměti nejvyšší úrovně.

Plovoucí desetinná čárka a SIMD

Vyhrazený plovoucí desetinnou čárkou procesor s 80-bitovými vnitřních rejstříky, 8087 , byl vyvinut pro původní 8086 . Tento mikroprocesor se následně vyvinul do rozšířeného 80387 a pozdější procesory začleňovaly zpětně kompatibilní verzi této funkce na stejný mikroprocesor jako hlavní procesor. Kromě toho moderní x86 designy také obsahují SIMD -unit (viz SSE níže), kde instrukce mohou pracovat souběžně na (jednom nebo dvou) 128bitových slovech, z nichž každé obsahuje dvě nebo čtyři čísla s plovoucí desetinnou čárkou (každé 64 nebo 32 široký počet bitů), nebo alternativně 2, 4, 8 nebo 16 celých čísel (každé 64, 32, 16 nebo 8 bitů, v daném pořadí).

Přítomnost širokých registrů SIMD znamená, že stávající procesory x86 mohou načíst nebo uložit až 128 bitů paměťových dat v rámci jedné instrukce a také provádět bitové operace (i když ne celočíselné aritmetické) paralelně s plnými 128bitovými veličinami. Procesory Intel Sandy Bridge přidaly pokyny Advanced Vector Extensions (AVX) a rozšířily registry SIMD na 256 bitů. Intel Initial Many Core Instructions implementované procesory Knights Corner Xeon Phi a instrukce AVX-512 implementované procesory Knights Landing Xeon Phi a procesory Skylake-X používají 512bitové SIMD registry.

Aktuální implementace

Během provádění současné procesory x86 používají několik dalších dekódovacích kroků k rozdělení většiny instrukcí na menší části nazývané mikrooperace. Ty jsou poté předány řídicí jednotce, která je ukládá do vyrovnávací paměti a plánuje je v souladu s x86-sémantikou, takže je lze provádět, částečně paralelně, jednou z několika (více či méně specializovaných) prováděcích jednotek . Tyto moderní designy x86 jsou tedy propojeny , superskalární a také schopné mimo provoz a spekulativní provádění (pomocí předpovědi větví , přejmenování registru a predikce závislosti na paměti ), což znamená, že mohou provádět více (částečných nebo úplných) instrukcí x86 současně a ne nutně ve stejném pořadí, jak je uvedeno v proudu instrukcí. Některé procesory Intel ( Xeon Foster MP , některé Pentium 4 a některé procesory Nehalem a novější Intel Core ) a procesory AMD (počínaje Zenem ) jsou také schopné simultánního vícevláknového zpracování se dvěma vlákny na jádro ( Xeon Phi má čtyři vlákna na jádro). Některé procesory Intel podporují transakční paměť ( TSX ).

Když byla tato metoda v polovině devadesátých let uvedena, byla někdy označována jako „jádro RISC“ nebo „překlad RISC“, částečně z marketingových důvodů, ale také proto, že tyto mikrooperace sdílejí určité vlastnosti s určitými typy instrukcí RISC. Nicméně, tradiční mikrokód (používaný od roku 1950) i ve své podstatě sdílí mnoho stejných vlastností; nová metoda se liší hlavně tím, že překlad k mikrooperacím nyní probíhá asynchronně. Není nutné synchronizovat prováděcí jednotky s dekódovacími kroky, což otevírá možnosti další analýzy toku (vyrovnávací paměti) kódu, a proto umožňuje detekci operací, které lze provádět souběžně, a současně napájet více než jednu prováděcí jednotku.

Nejnovější procesory také dělají v případě potřeby opak; kombinují určité sekvence x86 (například porovnání s následným podmíněným skokem) do složitější mikrooperace, která lépe vyhovuje modelu provádění, a lze ji tedy provést rychleji nebo s méně zapojenými strojními prostředky.

Dalším způsobem, jak se pokusit zlepšit výkon, je uložit do mezipaměti dekódované mikrooperace, aby procesor mohl přímo přistupovat k dekódovaným mikrooperacím ze speciální mezipaměti, místo aby je znovu dekódoval. Společnost Intel tento přístup zvolila s funkcí Execution Trace Cache ve své mikroarchitektuře NetBurst (pro procesory Pentium 4) a později v dekódované vyrovnávací paměti streamů (pro procesory značky Core od Sandy Bridge).

Transmeta použila ve svých CPU kompatibilních s Crusoe x86 úplně jinou metodu . K převodu instrukcí x86 na nativní instrukční sadu VLIW procesoru použili překlad just-in-time . Transmeta tvrdil, že jejich přístup umožňuje energeticky účinnější návrhy, protože CPU se může vzdát komplikovaného kroku dekódování tradičnějších implementací x86.

Segmentace

Minipočítače koncem sedmdesátých let narážely na limit 16bitové adresy 64 kB , protože paměť zlevnila. Některé minipočítače, jako je PDP-11, používaly složitá schémata přepínání bank nebo v případě VAX společnosti Digital přepracovaly mnohem dražší procesory, které by mohly přímo zpracovávat 32bitové adresování a data. Původní 8086, vyvinutý z jednoduchého mikroprocesoru 8080 a primárně zaměřený na velmi malé a levné počítače a další specializovaná zařízení, místo toho přijal jednoduché segmentové registry, které zvýšily šířku adresy paměti pouze o 4 bity. Vynásobením adresy 64 kB číslem 16 by 20bitová adresa mohla adresovat celkem jeden megabajt (1 048 576 bajtů), což bylo v té době pro malý počítač poměrně velké množství. Koncept segmentových registrů nebyl nový pro mnoho sálových počítačů, které používaly segmentové registry k rychlému přechodu na různé úkoly. V praxi to byla (je) velmi kritizovaná implementace, která značně komplikovala mnoho běžných programovacích úloh a překladačů. Architektura však brzy umožnila lineární 32bitové adresování (počínaje 80386 na konci roku 1985), ale hlavním aktérům (například Microsoftu ) trvalo několik let, než převedli své 16bitové systémy. 80386 (a 80486) byl proto z velké části používán jako rychlý (ale stále 16bitový) 8086 po mnoho let.

Data a kód bylo možné spravovat v „blízkých“ 16bitových segmentech v rámci 64 kB částí z celkového 1  MB adresního prostoru, nebo kompilátor mohl pracovat v „vzdáleném“ režimu pomocí 32bitových segment:offsetpárů dosahujících (pouze) 1 MB. Přestože se to v polovině osmdesátých let také ukázalo jako docela omezující, fungovalo to na rozvíjejícím se trhu s PC a velmi usnadnilo překlad softwaru ze starších 8008 , 8080 , 8085 a Z80 do novějšího procesoru. V průběhu roku 1985 byl 16bitový segmentový model adresování efektivně zohledněn zavedením 32bitových ofsetových registrů v designu 386 .

V reálném režimu je segmentace dosaženo posunutím adresy segmentu doleva o 4 bity a přidáním offsetu za účelem získání konečné 20bitové adresy. Pokud je například DS A000h a SI je 5677h, DS: SI bude ukazovat na absolutní adresu DS × 10h + SI = A5677h. Celkový adresní prostor v reálném režimu je tedy 2 20 bajtů nebo 1 MB , což je působivý údaj pro rok 1978. Všechny adresy paměti se skládají ze segmentu i ofsetu; ke každému typu přístupu (kód, data nebo zásobník) je přiřazen výchozí segmentový registr (u dat je registr obvykle DS, u kódu CS a pro zásobník SS). Pro přístup k datům může být registr segmentů explicitně specifikován (pomocí předpony přepsání segmentu) pro použití kteréhokoli ze čtyř registrů segmentů.

V tomto schématu mohou dva různé páry segmentů/ofsetů ukazovat na jedno absolutní umístění. Pokud tedy DS je A111h a SI je 4567h, DS: SI bude ukazovat na stejnou A5677h jako výše. Toto schéma znemožňuje použít více než čtyři segmenty najednou. CS a SS jsou životně důležité pro správné fungování programu, takže k nasměrování na datové segmenty mimo program (nebo přesněji mimo aktuálně provádějící segment programu) nebo zásobník lze použít pouze DS a ES.

V chráněném režimu , zavedeném v 80286, registr segmentů již neobsahuje fyzickou adresu začátku segmentu, ale obsahuje „selektor“, který ukazuje na strukturu na úrovni systému nazývanou deskriptor segmentu . Popisovač segmentu obsahuje fyzickou adresu začátku segmentu, délku segmentu a přístupová oprávnění k tomuto segmentu. Offset se kontroluje proti délce segmentu, přičemž offsety odkazují na umístění mimo segment způsobující výjimku. Offsety odkazující na umístění uvnitř segmentu jsou kombinovány s fyzickou adresou začátku segmentu, aby se získala fyzická adresa odpovídající tomuto offsetu.

Segmentovaná povaha může ztížit programování a návrh kompilátoru, protože použití blízkých a vzdálených ukazatelů ovlivňuje výkon.

Režimy adresování

Režimy adresování pro režimy 16bitových procesorů lze shrnout podle vzorce:

Režimy adresování pro 32bitové režimy procesoru x86 lze shrnout podle vzorce:

Režimy adresování pro režim 64bitového procesoru lze shrnout podle vzorce:

Relativní adresování instrukcí v 64bitovém kódu (posunutí RIP +, kde RIP je registr ukazatele instrukce ) zjednodušuje implementaci kódu nezávislého na poloze (jak se používá ve sdílených knihovnách v některých operačních systémech).

8086 měl 64 kB osmibitové (nebo alternativně32 K-slovo 16bitových ) I/O prostoru a a64 kB (jeden segment) zásobník v paměti podporovaný počítačovým hardwarem . Do zásobníku lze odeslat pouze slova (dva bajty). Zásobník roste směrem k numericky nižším adresám, přičemž SS: SP ukazuje na naposledy zaslanou položku. Existuje 256 přerušení , která lze vyvolat jak hardwarem, tak softwarem. Přerušení se mohou kaskádovat pomocí zásobníku pro uložení zpáteční adresy .

registry x86

16bitové

Původní Intel 8086 a 8088 mají čtrnáct 16- bitové registry. Čtyři z nich (AX, BX, CX, DX) jsou obecné registry (GPR), ačkoli každý může mít další účel; například jako počitadlo s instrukcí smyčky lze použít pouze CX . Ke každému lze přistupovat jako ke dvěma samostatným bytům (tedy k vysokému bytu BX lze přistupovat jako k BH a k dolnímu bytu jako BL). Dva registry ukazatelů mají speciální role: SP (ukazatel zásobníku) ukazuje na „vrchol“ zásobníku a BP (základní ukazatel) se často používá k ukazování na jiné místo v zásobníku, obvykle nad místní proměnné (viz ukazatel rámce) ). Registry SI, DI, BX a BP jsou registry adres a mohou být také použity pro indexování pole.

K vytvoření adresy paměti jsou použity čtyři segmentové registry (CS, DS, SS a ES). Registr FLAGS obsahuje příznaky , jako příznak přenosu , přetečení vlajka a příznak nuly . Nakonec ukazatel instrukce (IP) ukazuje na další instrukci, která bude načtena z paměti a poté provedena; k tomuto registru nelze přímo přistupovat (číst ani zapisovat) pomocí programu.

The Intel 80186 a 80188 jsou v podstatě vylepšená 8086 nebo 8088 CPU, v tomto pořadí, se přidá na čipu periferní zařízení, a mají stejné registry CPU jako 8086 a 8088 (kromě registrů rozhraní pro periferní zařízení).

8086, 8088, 80186 a 80188 mohou používat volitelný koprocesor s plovoucí desetinnou čárkou 8087 . Programátor 8080 se jeví jako součást CPU a přidává osm 80bitových širokých registrů, st (0) do st (7), z nichž každý může obsahovat číselná data v jednom ze sedmi formátů: 32-, 64- nebo 80bitové plovoucí čárky, 16-, 32- nebo 64bitové (binární) celé číslo a 80bitové zabalené desetinné číslo. Má také vlastní 16bitový stavový registr přístupný pomocí instrukce fntsw a je běžné jednoduše použít některé z jeho bitů pro větvení zkopírováním do normálních FLAGS.

V Intel 80286 podporují chráněný režim tři speciální registry adresy tabulky deskriptorů (GDTR, LDTR, IDTR ) a čtvrtý registr úkolů (TR) se používá pro přepínání úkolů. 80287 je plovoucí desetinnou čárkou koprocesor pro 80286 a má stejné registry jako 8087 se stejnými formáty dat.

32bitové

Registry jsou k dispozici v sadě instrukcí x86-64

S příchodem 32bitového procesoru 80386 byly 16bitové obecné registry, základní registry, indexové registry, ukazatele instrukcí a registry FLAGS , ale nikoli registry segmentů, rozšířeny na 32 bitů. Názvosloví to reprezentovalo předponou „ E “ (pro „rozšířené“) k názvům registrů v jazyce sestavení x86 . Registr AX tedy odpovídá nejnižším 16 bitům nového 32bitového registru EAX, SI odpovídá nejnižším 16 bitům ESI atd. Univerzální registry, základní registry a rejstříky registrů lze použít jako základ v režimech adresování a všechny tyto registry kromě ukazatele zásobníku lze použít jako index v režimech adresování.

Byly přidány dva nové segmentové registry (FS a GS). S větším počtem registrů, instrukcí a operandů byl rozšířen formát strojového kódu . Aby byla zajištěna zpětná kompatibilita, segmenty se spustitelným kódem mohou být označeny jako obsahující buď 16bitové, nebo 32bitové instrukce. Speciální předpony umožňují zahrnutí 32bitových instrukcí do 16bitového segmentu nebo naopak .

80386 měl volitelný koprocesor s plovoucí desetinnou čárkou, 80387 ; mělo osm 80bitových širokých registrů: st (0) až st (7), jako 8087 a 80287. 80386 mohl také použít koprocesor 80287. U 80486 a všech následujících modelů x86 je procesorová jednotka s pohyblivou řádovou čárkou (FPU) integrována na čipu.

Pentium MMX přidán osm 64-bitové celé číslo MMX registrů (MMX0 na MMX7, které sdílejí nižší bity s 80-bitové celé FPU zásobníku). S Pentiem III přidal Intel 32bitový řídicí/stavový registr Streaming SIMD Extensions (SSE) (MXCSR) a osm 128bitových registrů s plovoucí desetinnou čárkou SSE (XMM0 až XMM7).

64bitové

Počínaje procesorem AMD Opteron architektura x86 rozšířila 32bitové registry na 64bitové registry podobným způsobem, jakým došlo k rozšíření o 16 až 32 bitů. Předpona R (pro „registr“) identifikuje 64bitové registry (RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, RFLAGS, RIP) a osm dalších 64bitových obecných registrů (R8-R15 ) byly také zavedeny při vytváření x86-64 . Tato rozšíření jsou však použitelná pouze v 64bitovém režimu, což je jeden ze dvou režimů dostupných pouze v dlouhém režimu . Režimy adresování se z 32bitového režimu nijak dramaticky nezměnily, kromě toho, že adresování bylo rozšířeno na 64 bitů, virtuální adresy jsou nyní rozšířeny na 64 bitů (aby se ve virtuálních adresách nepovolilo bitů režimu) a další detaily voliče se dramaticky zmenšily . Kromě toho byl přidán režim adresování, který umožňuje odkazy na paměť vzhledem k RIP ( ukazatel instrukce ), aby se usnadnila implementace kódu nezávislého na poloze , který se používá ve sdílených knihovnách v některých operačních systémech.

128bitové

SIMD registruje XMM0 – XMM15.

256 bitů

SIMD registruje YMM0 – YMM15.

512 bitů

SIMD registruje ZMM0 – ZMM31.

Různé/speciální účel

Procesory x86, které mají chráněný režim , tj. procesory 80286 a novější, mají také tři registry deskriptorů (GDTR, LDTR, IDTR ) a registr úkolů (TR).

32bitové procesory x86 (počínaje 80386) také obsahují různé speciální/různé registry, jako jsou řídicí registry (CR0 až 4, CR8 pouze pro 64bitové), ladicí registry (DR0 až 3, plus 6 a 7), testovací registry (Pouze TR3 až 7; pouze 80486) a registry specifické pro model (MSR, objevující se u Pentia).

AVX-512 má osm dalších 64bitových registrů masky pro výběr prvků v ZMM.

Účel

Přestože hlavní registry (s výjimkou ukazatele instrukcí) jsou v 32bitové a 64bitové verzi sady instrukcí „obecné“ a lze je použít k čemukoli, původně se předpokládalo, že budou použity pro následující účely:

  • AL/AH/AX/EAX/RAX: Akumulátor
  • BL/BH/BX/EBX/RBX: Základní index (pro použití s ​​poli)
  • CL/CH/CX/ECX/RCX: Counter (pro použití se smyčkami a řetězci)
  • DL/DH/DX/EDX/RDX: Rozšíření přesnosti akumulátoru (např. Kombinace 32bitových EAX a EDX pro 64bitové celočíselné operace v 32bitovém kódu)
  • SI/ESI/RSI: Zdrojový index pro řetězcové operace.
  • DI/EDI/RDI: Cílový index pro řetězcové operace.
  • SP/ESP/RSP: Ukazatel zásobníku pro horní adresu zásobníku.
  • BP/EBP/RBP: Stack base pointer for holding the address of the current stack frame .
  • IP/EIP/RIP: Ukazatel instrukce. Drží čítač programu , adresu další instrukce.

Segmentové registry:

  • CS: Kód
  • DS: Data
  • SS: Zásobník
  • ES: Extra data
  • FS: Extra data #2
  • GS: Extra data #3

Pro dalších 8 registrů dostupných pouze v 64bitovém režimu nebyly předpokládány žádné konkrétní účely.

Některé instrukce se kompilují a provádějí efektivněji při použití těchto registrů k jejich určenému účelu. Například při použití AL jako akumulátor a přidat okamžitou hodnotu bajtu na vytváří účinnou přidat do AL opcode o 04h, zatímco pomocí BL registr vytváří obecný a delší přidat registrovat operační kód z 80C3h. Dalším příkladem je dělení a násobení s dvojitou přesností, které funguje konkrétně s registry AX a DX.

Moderní překladače těžily ze zavedení bajtu sib (byte -scale-base byte ), který umožňuje jednotné zpracování registrů ( podobné minipočítačům ). Univerzální použití bajtu sib však není optimální, protože produkuje delší kódování, než jen jeho selektivní použití v případě potřeby. (Hlavní výhodou sib byte je ortogonalita a výkonnější režimy adresování, které poskytuje, což umožňuje ukládat instrukce a používat registry pro výpočty adres, jako je škálování indexu.) Některé speciální instrukce ztratily prioritu v hardwarovém designu a stal se pomalejší než ekvivalentní malé kódové sekvence. Pozoruhodným příkladem je instrukce LODSW.

Struktura

Registry pro všeobecné použití (A, B, C a D)
64 56 48 40 32 24 16 8
R? X
E? X
?X
? H ? L
Univerzální registry pouze pro 64bitový režim (R8, R9, R10, R11, R12, R13, R14, R15)
64 56 48 40 32 24 16 8
?
? D
? W.
? B
Segmentové registry (C, D, S, E, F a G)
16 8
? S
Registry ukazatelů (S a B)
64 56 48 40 32 24 16 8
R? P
E? P
P
? PL

Poznámka: Registry? PL jsou k dispozici pouze v 64bitovém režimu.

Rejstříkové registry (S a D)
64 56 48 40 32 24 16 8
R.?
E? Já
? Já
? IL

Poznámka: Registry? IL jsou k dispozici pouze v 64bitovém režimu.

Registrace ukazatele instrukce (I)
64 56 48 40 32 24 16 8
RIP
EIP
IP

Provozní režimy

Skutečný režim

Režim reálné adresy, běžně nazývaný skutečný režim, je provozní režim procesorů kompatibilních s procesory 8086 a novějšími x86 . Skutečný režim je charakterizován 20bitovým segmentovaným paměťovým adresním prostorem (což znamená, že lze adresovat jen o málo více než 1 MiB paměti), přímým softwarovým přístupem k perifernímu hardwaru a bez koncepce ochrany paměti nebo multitaskingu na hardwarové úrovni. Všechny procesory x86 řady 80286 a novější se spouští v reálném režimu při zapnutí; 80186 CPU a starší měly pouze jeden operační režim, který je ekvivalentní skutečnému režimu v pozdějších čipech. (Na platformě IBM PC je přímý softwarový přístup k rutinám systému IBM BIOS k dispozici pouze v reálném režimu, protože BIOS je napsán pro reálný režim. Nejde však o vlastnost procesoru x86, ale o návrh systému IBM BIOS.)

Aby bylo možné použít více než 64 kB paměti, je nutné použít registry segmentů. To způsobilo velké komplikace implementátorům kompilátoru, kteří zavedli režimy lichého ukazatele, jako jsou „blízké“, „vzdálené“ a „obrovské“, aby v různých stupních využily implicitní povahu segmentované architektury, přičemž některé ukazatele obsahovaly 16bitové offsety v implikovaných segmentech a další ukazatele obsahující adresy segmentů a odsazení v rámci segmentů. Technicky je možné použít až 256 kB paměti pro kód a data, až 64 kB pro kód, nastavením všech čtyř segmentových registrů jednou a poté pouze pomocí 16bitových offsetů (volitelně s předponami přepsání výchozích segmentů) na paměť adres, ale to klade podstatná omezení na způsob adresování dat a kombinování operandů paměti a porušuje to architektonický záměr konstruktérů společnosti Intel, kterým jsou samostatné datové položky (např. pole, struktury, kódové jednotky). obsažené v samostatných segmentech a adresované jejich vlastními adresami segmentů, v nových programech, které nejsou portovány z dřívějších 8bitových procesorů se 16bitovými adresními prostory.

Neskutečný režim

Nereálný režim používají některé 16bitové operační systémy a některé 32bitové zavaděče .

Režim správy systému

Režim správy systému (SMM) používá pouze firmware systému ( BIOS / UEFI ), nikoli operační systémy a aplikační software. V SMRAM je spuštěn kód SMM.

Chráněný režim

Kromě skutečného režimu podporuje Intel 80286 chráněný režim, rozšiřuje adresovatelnou fyzickou paměť na 16 MB a adresovatelnou virtuální paměť na 1  GB a poskytuje chráněnou paměť , která zabraňuje vzájemnému poškozování programů. To se provádí pomocí segmentových registrů pouze pro ukládání indexu do tabulky deskriptorů, která je uložena v paměti. Existují dvě takové tabulky, Global Descriptor Table (GDT) a Local Descriptor Table (LDT), z nichž každá obsahuje až 8192 segmentových deskriptorů, přičemž každý segment poskytuje přístup k 64 KB paměti. V 80286 segmentový deskriptor poskytuje 24bitovou základní adresu a tato základní adresa je přidána k 16bitovému offsetu, aby se vytvořila absolutní adresa. Základní adresa z tabulky plní stejnou roli, jakou plní doslovná hodnota registru segmentů v reálném režimu; segmentové registry byly převedeny z přímých registrů na nepřímé registry. Ke každému segmentu lze přiřadit jednu ze čtyř úrovní vyzvánění používaných pro hardwarové zabezpečení počítače . Každý deskriptor segmentu také obsahuje pole omezení segmentu, které určuje maximální posun, který lze se segmentem použít. Protože offsety jsou 16 bitů, segmenty jsou v chráněném režimu 80286 stále omezeny na 64 kB.

Při každém načtení registru segmentů v chráněném režimu musí 80286 načíst 6bajtový deskriptor segmentu z paměti do sady skrytých interních registrů. Načítání registrů segmentů je tedy v chráněném režimu mnohem pomalejší než v reálném režimu a je třeba se vyhnout velmi častým změnám segmentů. Skutečné operace paměti pomocí segmentů v chráněném režimu nejsou příliš zpomaleny, protože 80286 a novější mají hardware ke kontrole posunu vůči limitu segmentu souběžně s prováděním instrukcí.

Tyto Intel 80386 rozšířené posuny a také limit pole segmentu v každém segmentu deskriptoru na 32 bitů, což umožňuje segment pokrývají celý paměti. Rovněž zavedl podporu v chráněném režimu pro stránkování , což je mechanismus umožňující používat stránkovanou virtuální paměť (s velikostí stránky 4 kB). Stránkování umožňuje CPU namapovat libovolnou stránku virtuálního paměťového prostoru na libovolnou stránku fyzického paměťového prostoru. K tomu používá další mapovací tabulky v paměti, které se nazývají tabulky stránek. Chráněný režim na 80386 může pracovat s povoleným nebo zakázaným stránkováním; mechanismus segmentace je vždy aktivní a generuje virtuální adresy, které jsou pak mapovány mechanismem stránkování, pokud je povolen. Mechanismus segmentace lze také účinně deaktivovat nastavením všech segmentů na základní adresu 0 a limit velikosti rovný celému adresnímu prostoru; to také vyžaduje tabulku deskriptorů segmentů minimální velikosti pouze ze čtyř deskriptorů (protože segmenty FS a GS nemusí být použity).

Stránkování je hojně využíváno moderními víceúlohovými operačními systémy. Linux , 386BSD a Windows NT byly vyvinuty pro 386, protože to byl první procesor architektury Intel podporující stránkovací a 32bitové segmentové offsety. Architektura 386 se stala základem veškerého dalšího vývoje v řadě x86.

Procesory x86, které podporují chráněný režim, se spouští do reálného režimu pro zpětnou kompatibilitu se staršími procesory třídy 8086. Po zapnutí (aka bootování ) se procesor inicializuje v reálném režimu a poté začne vykonávat pokyny. Zaváděcí kód operačního systému, který může být uložen v paměti ROM , může umístit procesor do chráněného režimu a umožnit stránkování a další funkce. Instrukce nastavená v chráněném režimu je podobná instrukci používané v reálném režimu. V chráněném režimu však neplatí určitá omezení, která platí pro reálný režim (například nemožnost použít při adresování ax, cx, dx). Naopak segmentová aritmetika, běžná praxe v kódu reálného režimu, není v chráněném režimu povolena.

Virtuální režim 8086

K dispozici je také podrežim provozu v 32bitovém chráněném režimu (aka chráněný režim 80386) nazývaný virtuální režim 8086 , známý také jako režim V86 . Jedná se v podstatě o speciální hybridní provozní režim, který umožňuje spouštění programů a operačních systémů v reálném režimu pod kontrolou operačního systému supervizora v chráněném režimu. To umožňuje velkou flexibilitu při současném spouštění programů v chráněném i reálném režimu. Tento režim je k dispozici výhradně pro 32bitovou verzi chráněného režimu; neexistuje v 16bitové verzi chráněného režimu ani v dlouhém režimu.

Dlouhý režim

V polovině devadesátých let bylo zřejmé, že 32bitový adresní prostor architektury x86 omezuje svůj výkon v aplikacích vyžadujících velké datové sady. 32bitový adresní prostor by procesoru umožnil přímo adresovat pouze 4 GB dat, což je velikost překonaná aplikacemi, jako je zpracování videa a databázové stroje . Pomocí 64bitových adres je možné přímo adresovat 16  EiB dat, ačkoli většina 64bitových architektur přístup k plnému 64bitovému adresnímu prostoru nepodporuje; například AMD64 podporuje pouze 48 bitů ze 64bitové adresy, rozdělené do čtyř úrovní stránkování.

V roce 1999 AMD publikovalo (téměř) úplnou specifikaci pro 64bitové rozšíření architektury x86, které nazývali x86-64 s deklarovanými záměry vyrábět. Tento design je v současné době používán téměř ve všech procesorech x86, s některými výjimkami určenými pro vestavěné systémy .

Hromadně vyráběné čipy x86-64 pro obecný trh byly k dispozici o čtyři roky později, v roce 2003, poté, co byl čas věnován testování prototypů a jejich zdokonalování; přibližně ve stejnou dobu byl původní název x86-64 změněn na AMD64 . Úspěch řady procesorů AMD64 spojený s vlažným příjmem architektury IA-64 přinutil Intel vydat vlastní implementaci instrukční sady AMD64. Intel dříve implementoval podporu AMD64, ale rozhodl se ji nepovolit v naději, že AMD nepřinese AMD64 na trh dříve, než bude široce přijata nová instrukční sada IA-64 společnosti Itanium. Svou implementaci AMD64 označil jako EM64T a později ji přejmenoval na Intel 64 .

Microsoft a Sun ve své literatuře a názvech verzí produktů označují AMD64/Intel 64 souhrnně jako x64 v operačních systémech Windows a Solaris . Distribuce Linuxu jej označují buď jako „x86-64“, jeho varianta „x86_64“ nebo „amd64“. Systémy BSD používají „amd64“, zatímco macOS používá „x86_64“.

Dlouhý režim je většinou rozšířením 32bitové sady instrukcí, ale na rozdíl od přechodu 16 na 32 bitů bylo v 64bitovém režimu zrušeno mnoho instrukcí. To neovlivní skutečnou binární zpětnou kompatibilitu (která by spustila starší kód v jiných režimech, které si zachovávají podporu pro tyto instrukce), ale mění způsob, jakým musí fungovat assembler a kompilátory pro nový kód.

Bylo to poprvé, kdy hlavní rozšíření architektury x86 inicioval a vznikl jiný výrobce než Intel. Bylo to také poprvé, kdy Intel přijal technologii tohoto druhu z vnějšího zdroje.

Rozšíření

Jednotka s plovoucí desetinnou čárkou

Dřívější procesory x86 bylo možné rozšířit o hardware s plovoucí desetinnou čárkou v podobě řady numerických koprocesorů s plovoucí desetinnou čárkou s názvy jako 8087 , 80287 a 80387, zkráceně x87. Toto bylo také známé jako NPX ( Numeric Processor eXtension ). Až na velmi málo výjimek pak procesory 80486 a následující x86 integrovaly tuto funkci x87 na čip, což z instrukcí x87 učinilo de facto nedílnou součást instrukční sady x86.

Každý registr x87, známý jako ST (0) až ST (7), je široký 80 bitů a ukládá čísla ve standardním formátu IEEE s dvojitou rozšířenou přesností s plovoucí desetinnou čárkou . Tyto registry jsou organizovány jako zásobník s ST (0) jako vrcholem. To bylo provedeno za účelem úspory prostoru opcode, a registry jsou proto náhodně přístupné pouze pro jeden operand v instrukci registr k registru; ST0 musí být vždy jeden ze dvou operandů, zdroj nebo cíl, bez ohledu na to, zda je druhým operandem ST (x) nebo paměťový operand. Náhodný přístup k zásobníkovým registrům je však možné získat pomocí instrukce, která vyměňuje jakýkoli určený ST (x) za ST (0).

Operace zahrnují aritmetické a transcendentální funkce, včetně goniometrických a exponenciálních funkcí, a instrukce, které načítají běžné konstanty (například 0; 1; e, základ přirozeného logaritmu; log2 (10); a log10 (2)) do jedné z zásobník se registruje. Zatímco schopnost celého čísla je často přehlížena, x87 může pracovat na větších celých číslech s jedinou instrukcí než 8086, 80286, 80386 nebo jakýkoli procesor x86 bez 64bitových rozšíření a opakované celočíselné výpočty i na malých hodnotách (např. 16bitové) lze urychlit souběžným prováděním celočíselných pokynů na procesoru x86 a x87. (CPU x86 běží, zatímco koprocesor x87 počítá, a x87 nastaví signál x86, když je dokončen, nebo přeruší x86, pokud potřebuje pozornost kvůli chybě.)

MMX

MMX je instrukční sada SIMD navržená společností Intel a zavedená v roce 1997 pro mikroprocesor Pentium MMX . Instrukční sada MMX byla vyvinuta z podobného konceptu, který byl poprvé použit na Intel i860 . Je podporován na většině následujících procesorů IA-32 společností Intel a dalšími dodavateli. MMX se obvykle používá pro zpracování videa (například v multimediálních aplikacích).

MMX přidal do architektury 8 nových registrů , známých jako MM0 až MM7 (dále jen MMn ). Ve skutečnosti byly tyto nové registry pouze aliasy pro existující x87 FPU stack registry. Cokoli, co bylo provedeno v zásobníku s plovoucí desetinnou čárkou, by tedy také ovlivnilo registry MMX. Na rozdíl od zásobníku FP byly tyto registry MMn pevné, nikoli relativní, a proto byly náhodně přístupné. Sada instrukcí nepřijala sémantiku podobnou stacku, takže stávající operační systémy mohly při multitaskingu bez úprav stále správně ukládat a obnovovat stav registru.

Každý z registrů MMn je 64bitová celá čísla. Jedním z hlavních konceptů instrukční sady MMX je však koncept sbalených datových typů , což znamená, že namísto použití celého registru pro jedno 64bitové celé číslo ( quadword ) jej lze použít k uložení dvou 32bitových celých čísel ( doubleword ), čtyři 16bitová celá čísla ( slovo ) nebo osm 8bitových celých čísel ( byte ). Vzhledem k tomu, že 64bitové registry MMn MMX jsou aliasovány k zásobníku FPU a každý z registrů s plovoucí desetinnou čárkou je široký 80 bitů, není v MMX použito horních 16 bitů registrů s plovoucí desetinnou čárkou. Tyto bity jsou nastaveny na všechny libovolnou instrukcí MMX, která odpovídá reprezentaci NaN nebo nekonečna s plovoucí desetinnou čárkou .

3DNow!

V roce 1997 AMD představilo 3DNow !. Zavedení této technologie se časově shodovalo s nástupem 3D zábavních aplikací a bylo navrženo tak, aby zlepšilo výkon vektorového zpracování CPU graficky náročných aplikací. Vývojáři 3D videoher a prodejci 3D grafického hardwaru používají 3DNow! zvýšit jejich výkon na procesorech AMD řady K6 a Athlon .

3DNow! byl navržen tak, aby byl přirozeným vývojem MMX od celých čísel k plovoucí desetinné čárce. Jako takový používá přesně stejnou konvenci pojmenování registrů jako MMX, tj. MM0 až MM7. Jediným rozdílem je, že místo balení celých čísel do těchto registrů jsou do každého registru zabalena dvě čísla s plovoucí desetinnou čárkou s jednoduchou přesností . Výhodou aliasingu registrů FPU je, že stejné instrukční a datové struktury použité k uložení stavu registrů FPU lze také použít k uložení 3DNow! registrovat státy. Není tedy nutné provádět žádné speciální úpravy operačních systémů, které by o nich jinak nevěděly.

SSE a AVX

V roce 1999 Intel představil instrukční sadu Streaming SIMD Extensions (SSE) , v roce 2000 následoval SSE2. První přídavek umožnil vyložení základních operací s plovoucí desetinnou čárkou ze zásobníku x87 a druhý způsobil, že MMX byl téměř zastaralý a umožnil, aby byly pokyny realisticky zaměřeny konvenčními překladači. SSE3, představený v roce 2004 spolu s revizí procesoru Pentium 4 Prescott , přidal specifické pokyny pro zpracování paměti a vláken, aby zvýšil výkon technologie Intel HyperThreading . AMD licencovala sadu instrukcí SSE3 a implementovala většinu instrukcí SSE3 pro své revize E a novější procesory Athlon 64. Athlon 64 nepodporuje HyperThreading a postrádá pokyny SSE3 používané pouze pro HyperThreading.

SSE zahodila všechna starší připojení k zásobníku FPU. To také znamenalo, že tato instrukční sada zahodila všechna starší připojení k předchozím generacím instrukčních sad SIMD, jako je MMX. Ale uvolnilo to konstruktéry a umožnilo jim používat větší registry, neomezené velikostí registrů FPU. Designéři vytvořili osm 128bitových registrů pojmenovaných XMM0 až XMM7. ( Poznámka : v AMD64 byl počet registrů SSE XMM zvýšen z 8 na 16.) Nevýhodou však bylo, že operační systémy musely mít povědomí o této nové sadě pokynů, aby mohly ukládat své stavy registrů . Společnost Intel proto vytvořila mírně upravenou verzi chráněného režimu, nazvanou vylepšený režim, který umožňuje použití pokynů SSE, zatímco v běžném chráněném režimu zůstávají deaktivovány. OS, který zná SSE, aktivuje rozšířený režim, zatímco nevědomý operační systém vstoupí pouze do tradičního chráněného režimu.

SSE je sada instrukcí SIMD, která funguje pouze na hodnotách s plovoucí desetinnou čárkou, jako je 3DNow !. Na rozdíl od 3DNow! přeruší veškeré starší připojení k zásobníku FPU. Protože má SSE větší registry než 3DNow!, SSE dokáže do svých registrů zabalit dvojnásobek počtu jednoduchých přesných plováků. Původní SSE byla omezena pouze na čísla s jednoduchou přesností, jako 3DNow !. SSE2 představil schopnost zabalit také čísla s dvojnásobnou přesností , což 3DNow! neměl žádnou možnost, protože číslo s dvojitou přesností má velikost 64 bitů, což by byla plná velikost jednoho 3DNow! MMn registr. U 128 bitů mohly registry SSE XMMn zabalit dva plováky s dvojitou přesností do jednoho registru. SSE2 je tedy pro vědecké výpočty mnohem vhodnější než SSE1 nebo 3DNow !, které byly omezeny pouze na jedinou přesnost. SSE3 nezavádí žádné další registry.

Advanced Vector Extensions (AVX) zdvojnásobila velikost registrů SSE na 256bitové registry YMM. Rovněž zavedlo schéma kódování VEX pro umístění větších registrů a několik pokynů k permutaci prvků. AVX2 nezavedl další registry, ale byl pozoruhodný přidáním pro maskování, shromažďování a míchání instrukcí.

AVX-512 nabízí ještě další rozšíření na 32 512bitových registrů ZMM a nové schéma EVEX. Na rozdíl od svých předchůdců s monolitickým rozšířením je rozdělen do mnoha podmnožin, které si konkrétní modely CPU mohou zvolit k implementaci.

Rozšíření fyzické adresy (PAE)

Rozšíření fyzické adresy neboli PAE bylo poprvé přidáno v procesorech Intel Pentium Pro a později AMD v procesorech Athlon, aby bylo možné adresovat až 64 GB RAM. Bez PAE je fyzická paměť RAM v 32bitovém chráněném režimu obvykle omezena na 4  GB . PAE definuje jinou strukturu tabulky stránek s širšími položkami tabulky stránek a třetí úrovní tabulky stránek, což umožňuje další bity fyzické adresy. Ačkoli počáteční implementace na 32bitových procesorech teoreticky podporovala až 64 GB RAM, omezení čipové sady a dalších platforem často omezovalo, co vlastně bylo možné použít. Procesory x86-64 definují struktury tabulky stránek, které teoreticky umožňují až 52 bitů fyzické adresy, přestože problém s čipovou sadou a další platformou (jako je počet dostupných slotů DIMM a maximální možná RAM na jeden modul DIMM) brání tak velké fyzické adrese prostor k realizaci. Na procesorech x86-64 musí být režim PAE aktivní před přepnutím do dlouhého režimu a musí zůstat aktivní, když je aktivní dlouhý režim , takže v dlouhém režimu neexistuje režim „bez PAE“. Režim PAE neovlivňuje šířku lineárních nebo virtuálních adres.

x86-64

V klastrech superpočítačů (sledovaných daty TOP 500 a vizualizovaných na výše uvedeném diagramu, poslední aktualizace 2013) umožnil vzhled 64bitových rozšíření pro architekturu x86 64bitové procesory x86 od AMD a Intel (šrafované a šrafované, v diagramu) nahradit většinu architektur procesorů RISC dříve používaných v takových systémech (včetně PA-RISC , SPARC , Alpha a dalších) a 32bitové x86 (zelené na diagramu), přestože se Intel zpočátku neúspěšně pokoušel nahraďte x86 novou nekompatibilní 64bitovou architekturou v procesoru Itanium . Hlavní architekturou bez x86, která se od roku 2014 stále používá v superpočítačových klastrech, je Power ISA používaná mikroprocesory IBM POWER (modrá s diamantovým obkladem v diagramu), přičemž SPARC je vzdálená sekunda.

Do roku 2000 byly omezení 32bitových procesorů x86 v adresování paměti překážkou pro jejich použití ve vysoce výkonných počítačových klastrech a výkonných stolních pracovních stanicích. 32bitový procesor x86 ve věku konkuroval mnohem pokročilejším 64bitovým architekturám RISC, které mohly řešit mnohem více paměti. Intel a celý ekosystém x86 potřebovali 64bitové adresování paměti, aby x86 přežilo éru 64bitových počítačů, protože pracovní stanice a desktopové softwarové aplikace brzy začnou překračovat limity adresování 32bitové paměti. Společnost Intel však cítila, že je správný čas udělat odvážný krok a použít přechod na 64bitové stolní počítače pro přechod od architektury x86 obecně, což je experiment, který nakonec selhal.

V roce 2001 se Intel pokusil zavést do svého procesoru Itanium 64bitovou architekturu, která není x86, s názvem IA-64 , původně se zaměřil na trh s vysoce výkonnými počítači a doufal, že nakonec nahradí 32bitovou x86. Zatímco IA-64 nebyl kompatibilní s x86, procesor Itanium poskytoval emulační schopnosti pro překlad instrukcí x86 do IA-64, ale to ovlivnilo výkon x86 programů tak špatně, že to bylo jen zřídka, pokud vůbec, skutečně užitečné pro uživatele: programátoři by měly přepsat x86 programy pro architekturu IA-64 nebo by jejich výkon na Itanium byl řádově horší než na skutečném procesoru x86. Trh odmítl procesor Itanium, protože narušil zpětnou kompatibilitu, a raději pokračoval v používání čipů x86 a jen velmi málo programů bylo přepsáno pro IA-64.

AMD se rozhodlo vydat jinou cestou směrem k adresování 64bitové paměti, aby zajistilo, že neutrpí zpětná kompatibilita. V dubnu 2003 společnost AMD uvedla na trh první procesor x86 se 64bitovými registry pro obecné účely Opteron , který je schopen adresovat mnohem více než 4  GB virtuální paměti pomocí nového rozšíření x86-64 (také známého jako AMD64 nebo x64). 64bitová rozšíření architektury x86 byla povolena pouze v nově zavedeném dlouhém režimu , takže 32bitové a 16bitové aplikace a operační systémy mohly jednoduše pokračovat v používání procesoru AMD64 v chráněných nebo jiných režimech, aniž by došlo k sebemenší oběti výkon a s plnou kompatibilitou zpět k původním instrukcím 16bitového procesoru Intel 8086. Trh reagoval kladně a přijal 64bitové procesory AMD pro vysoce výkonné aplikace i pro obchodní nebo domácí počítače.

Když Intel viděl trh odmítající nekompatibilní procesor Itanium a Microsoft podporující AMD64, Intel musel reagovat a v červenci 2004 představil svůj vlastní procesor x86-64, Prescott Pentium 4. Výsledkem je, že procesor Itanium s instrukční sadou IA-64 je používá se jen zřídka a x86 je díky své inkarnaci x86-64 stále dominantní architekturou CPU v neimplementovaných počítačích.

x86-64 také představil bit NX , který nabízí určitou ochranu před bezpečnostními chybami způsobenými přetečením vyrovnávací paměti .

V důsledku 64bitového příspěvku AMD na linii x86 a jeho následného přijetí společností Intel přestaly 64bitové architektury RISC představovat hrozbu pro ekosystém x86 a téměř zmizely z trhu pracovních stanic. x86-64 začal být používán ve výkonných superpočítačích (v jeho inkarnacích AMD Opteron a Intel Xeon ), trhu, který byl dříve přirozeným prostředím pro 64bitové RISC designy (jako jsou mikroprocesory IBM POWER nebo SPARC procesory). Velký skok směrem k 64bitovým výpočetním technologiím a zachování zpětné kompatibility s 32bitovým a 16bitovým softwarem umožnily architektuře x86 stát se dnes extrémně flexibilní platformou, přičemž čipy x86 jsou využívány z malých systémů s nízkým výkonem (např. Intel Quark a Intel Atom ) k rychlým herním stolním počítačům (například Intel Core i7 a AMD FX / Ryzen ) a dokonce dominují velkým superpočítačovým klastrům , takže efektivně ponechává pouze 32bitovou a 64bitovou architekturu RISC ARM jako konkurenta v trh se smartphony a tablety .

Virtualizace

Před rokem 2005 procesory architektury x86 nebyly schopny splnit požadavky Popek a Goldberg - specifikace pro virtualizaci vytvořenou v roce 1974 Geraldem J. Popekem a Robertem P. Goldbergem . Proprietární i open-source virtualizační hypervisorové produkty x86 však byly vyvinuty pomocí softwarové virtualizace . Mezi proprietární systémy patří Hyper-V , Parallels Workstation , VMware ESX , VMware Workstation , VMware Workstation Player a Windows Virtual PC , zatímco mezi bezplatné a open-source systémy patří QEMU , Kernel-based Virtual Machine , VirtualBox a Xen .

Zavedení instrukčních sad AMD-V a Intel VT-x v roce 2005 umožnilo procesorům x86 splnit požadavky na virtualizaci Popek a Goldberg.

AES

Viz také

Poznámky

Reference

Další čtení

externí odkazy