x86

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

x86 je v informatice označení několika rodin instrukčních sad pro procesory navazující na 16bitový procesor Intel 8086. Označení x86 též definuje hardwarovou počítačovou platformu (architekturu) označovanou jako IBM PC kompatibilní. Protože byl termín „x86“ zaveden až po uvedení procesoru Intel 80386, typicky se při použití označení „x86“ předpokládá, že daný procesor je alespoň 32bitový (tj. 80386 nebo novější, protože tyto procesory jsou schopné zpracovávat strojové instrukce původního 16bitového režimu pro zajištění zpětné kompatibility). Aby byla tato skutečnost zdůrazněna, používá se též označení x86-32 (resp. IA-32) a pro současné 64bitové procesory pak x86-64 (též „x64“). V současné době proto „x86“ označuje tři architektury s třemi různými sadami strojových instrukcí, přičemž novější procesory jsou schopné pracovat v režimech, které za jistých podmínek dovolují zpracovávat strojový kód předchozích architektur.

IBM PC[editovat | editovat zdroj]

Architektura IBM PC byla použita v osobních počítačích od firmy IBM, které doznaly širokého rozšíření. Politika IBM v době, kdy uvažovalo o použití této architektury (konkrétně procesoru 8088) v IBM PC, vyžadovala alespoň dva zdroje čipů, proto v roce 1982 AMD podepsalo kontrakt s Intelem a stalo se licencovaným druhým výrobcem procesorů 8086 a 8088. Později pod stejným kontraktem vyrábělo 80286. Intel ovšem smlouvu v roce 1986 vypověděl a odmítl předat AMD technické detaily 80386.

Registry x86[editovat | editovat zdroj]

Architektura x86 se vyznačují až extrémní asymetrií architektury: z jeho osmi aritmetických registrů nejsou žádné dva zcela zaměnitelné.

  • aritmetické
    • AX – akumulátor (řada instrukcí ho má jako implicitní operand)
    • BX – bázový registr (tj. určený pro adresaci)
    • CX – čítač (tj. určený pro počítání cyklů)
    • DX – rozšíření akumulátoru (někdy nazýván data register)
    • SI – source index – index pro zdroj (tj. pro čtení)
    • DI – destination index – index pro cíl (tj. pro zápis)
    • BP – base pointer – určen jako ukazatel na záznam aktivní procedury na zásobníku (tím, že se implicitně spojoval s SS)
    • SP – stack pointer – ukazatel vrcholu zásobníku
  • segmentové
    • CS – segment kódu
    • DS – datový segment
    • ES – extra segment
    • SS – zásobníkový (stack) segment
  • registr IP (instrukční pointer neboli čítač instrukcí), vždy odkazovaný implicitně
  • registr FLAGS (příznaky)

Všechny registry mají šířku 16 bitů. Kromě toho šlo přistupovat k registrům AX-DX po částech, tj. jen k dolním (AL-DL) a horním (AH-DH) osmi bitům. Architektura x86 má i skupinu instrukcí pro práci s řetězci, kde jednotlivé instrukce zahrnují čtení nebo zápis z/do dohodnutých dvojic registrů (segmentu a indexu) – čtení většinou z DS:SI a zápis do ES:DI.

Podrobněji viz Intel 8086, pro popis registrů u článků Intel 80386 či IA-32, kde můžete vidět jak byly rozšířeny.

Režimy procesoru[editovat | editovat zdroj]

Reálný režim[editovat | editovat zdroj]

Reálný režim (někdy také nazývaný jako režim reálných adres) je používán u procesorů 8086 a pozdějších x86 kompatibilních procesorů. Ty jsou v tomto režimu s procesory 8086 plně kompatibilní. V tomto režimu je pro tvorbu adresy používáno 20 bitů. Maximálně tak lze adresovat paměť o velikosti 1 MiB. Paměťový prostor není přístupný jako jeden blok, ale je rozčleněn na čtyři segmenty: CS (code segment) pro paměť programu, DS (data segment) pro paměť dat, SS (stack segment) pro data zásobníku a vyhrazený ES (extra segment). Přístup ke všem částem operační paměti a periferiím je neomezený. Reálný režim neposkytuje hardwarovou podporu pro ochranu paměti či multitasking. Všechny procesory od 80286 výše používají reálný režim při startu počítače. Starší typy procesorů používají pouze jeden režim, který je s reálným režimem novějších procesorů prakticky identický.

Chráněný režim[editovat | editovat zdroj]

Schéma překladu adres.

Chráněný režim poprvé zavádí procesor 80286 a rozšiřuje velikost adresy na 24 bitů, což umožňuje adresovat až 16 MiB paměti. Od procesoru 80386 je velikost šířky adresní sběrnice 32 bitů a je tak možné adresovat až 4 GiB. Hlavním rysem chráněného režimu je ochrana paměti, která procesům zabraňuje ovlivňování jim nepříslušejících částí paměti, což je řešeno pomocí segmentace paměti. Adresa je rozdělena na segment a offset. Segment je však pouze odkazem do tabulky selektorů. V té je každému segmentu přidělena bázová adresa (24 bitů), úroveň oprávnění (8 bitů) a maximální velikost segmentů (16 bitů).

Pro přístup do paměti je u procesorů 80386 a vyšších ještě navíc v tomto režimu dostupné stránkování. Pomocí tohoto procesu je lineární adresa získaná po segmentaci ještě dále převáděna na fyzickou adresu (viz obrázek).

Virtuální 8086 režim[editovat | editovat zdroj]

Podrežimem chráněného 32bitového režimu je virtuální 8086 režim. Jedná se o hybridní režim, který umožňuje spouštět programy, které jsou určeny pro běh v reálném režimu při zachování výhod chráněného režimu (zejména ochrany paměti před ostatními procesy). Virtuální 8086 režim neexistuje pro 16bitový chráněný režim ani pro režim long. Paměť je přístupná pomocí segmentace, stejně jako v případě reálného režimu.

64bitové režimy[editovat | editovat zdroj]

Od roku 2002 je totiž zřejmé, že 32bitový adresní prostor architektury x86 omezuje výkon aplikací, které vyžadují přenos či zpracování velkých datových souborů. 32bitový adresní prostor totiž umožňuje adresovat přímo pouze 4 GiB dat (pro data procesu na platformě Windows NT to reálně znamená kvůli dalším omezením a designovým rozhodnutím pouze necelý 1 GiB prostoru), což aplikace pro zpracování obrazu či databázové systémy dnes hravě překonají. Při použití 64bitové adresy, je možné přímo obsloužit 16 777 216 TiB (nebo také 16 000 000 000 GiB) dat, i když většina 64bitových systémů neumožňuje přístup do celého 64bitového adresního prostoru (například AMD64 podporuje aktuálně pouze 48 bitů, navíc rozdělených do čtyř úrovní).

Společnost AMD proto vyvinula novou 64bitovou instrukční sadu jako rozšíření stávající 32bitové (tj. x86) architektury. Původní označení bylo AMD64, později bylo označení kvůli neutrálnosti přejmenováno na x86-64 (instrukční sadu převzala i forma Intel). Tuto 64bitovou architekturu používaly rodiny procesorů Opteron, Athlon 64, Turion 64 a později i Sempron. Úspěch procesorů řady AMD64 společně s neúspěchem firmy Intel prosadit architekturu IA-64 přiměl firmu Intel k tomu, aby převzal instrukční sadu AMD64 (x86-64) do svých vlastních procesorů.

64bitový režim long[editovat | editovat zdroj]

Režim long rozšiřuje šířku adresní sběrnice na 64 bitů. V tomto režimu běží jádro 64bitového operačního systému.

64bitový režim kompability[editovat | editovat zdroj]

Pro zpětnou kompatibilitu s 32bitovými systémy disponují moderní 64bitové procesory ještě takzvaným 64bitovým kompatibilním režimem. V tomto režimu je pod 64bitovým operačním systémem možné spouštět programy vytvořené pro 32bitový procesor. Ne všechny programy mají totiž svou 64bitovou verzi a bez tohoto režimu by je nebylo možné v 64bitovém operačním systému vůbec spouštět. V tomto režimu však už nelze spouštět 16bitové programy v reálném režimu či režimu virtuální 8086, ty pod 64bitovým operačním systémem nelze spouštět přímo, v případě potřeby je nutné využít virtualizaci.

Legacy mode[editovat | editovat zdroj]

64bitové procesory mohou také běžet ve zcela zpětně kompatibilním režimu, kdy na procesoru běží 32bitový nebo 16bitový operační systém a 32bitové či 16bitové programy. V takovém případě však nelze spouštět 64bitové programy.

Výrobci[editovat | editovat zdroj]

Související články[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]