Co znamená procesor x86? X86 nebo x64: Co to znamená? Kód a data: základní princip procesoru

V dnešním článku zjistíme, která platforma je pro váš počítač lepší: x64 nebo x86(x32)? Mnoho lidí si totiž klade otázku: co je lepší? 32 nebo 64bitová verze operačního systému je na vás, ale myslím, že je lepší vědět, jak se správně rozhodnout!

Vzhledem k tomu, že pravděpodobně již máte nainstalovaný operační systém, můžete snadno.

Nebudu zabíhat do „divokosti“ evoluce procesorů a „vycpávání“, ale pokusím se vysvětlit hlavní body.

Pojďme nejprve zjistit, odkud všechny tyto architektury a bitové hloubky pocházejí?

32bitová architektura x86 (mikroprocesory kompatibilní s 286, 386, 486) jsou pojmenovány po jejich -86 konec. A x32 a x64 už je kapacita procesoru. Proto je správné rozlišovat dva hlavní typy architektur: x86 a x64 (x32 je nesprávný název pro x86).

Jaký je tedy mezi nimi rozdíl?

Jedná se o spotřebu hardwarových prostředků počítače. Faktem je, že některé Intel a procesory AMD není určeno pro x64.
Kromě toho je x64 určen pro alespoň 4 GB RAM na vašem PC. Vlastně k tomu byl vyvinut.
A do třetice, jakou zátěž počítač při provozu zažívá? Pokud jste designér, designér rozložení nebo člověk, který používá velmi výkonné aplikace od Adobe a dalších multimediálních gigantů, pak bude x64 vaší prioritou. Pokud máte 4

Co byste si tedy měli vybrat?

Při výběru architektury mikroprocesoru proto vždy reálně posuďte výkon a možnosti vašeho počítače. Také pro x64 bitové systémy potřebují své vlastní (!) jiné ovladače než x32. Ano, x64 může pracovat rychleji, ale s vlastními aplikacemi. A dvaatřicet bitů zase fungovalo a bude fungovat, ať je to cokoliv.

Hodně štěstí!

Podobné novinky:


Smíšený

V současné době existují dvě nejoblíbenější architektury procesorů. Jedná se o x86, který byl vyvinut již v 80. letech a používá se v osobních počítačích a ARM - modernějším, díky kterému jsou procesory menší a ekonomičtější. Používá se ve většině mobilních zařízení nebo tabletů.

Obě architektury mají svá pro a proti, stejně jako oblasti použití, ale jsou zde i společné rysy. Mnoho odborníků říká, že ARM je budoucnost, ale stále má některé nevýhody, které x86 nemá. V našem dnešním článku se podíváme na to, jak se architektura ramen liší od x86. Podívejme se na základní rozdíly mezi ARM a x86 a také se pokusíme určit, co je lepší.

Procesor je hlavní součástí jakéhokoli výpočetního zařízení, ať už je to chytrý telefon nebo počítač. Jeho výkon určuje, jak rychle bude zařízení fungovat a jak dlouho vydrží na baterii. Jednoduše řečeno, architektura procesoru je soubor instrukcí, které lze použít ke skládání programů a které jsou hardwarově implementovány pomocí určitých kombinací procesorových tranzistorů. Umožňují programům interakci s hardwarem a určují, jak budou data přenášena do paměti a čtena z paměti.

Na tento moment Existují dva typy architektur: CISC (Complex Instruction Set Computing) a RISC (Reduced Instruction Set Computing). První předpokládá, že procesor bude implementovat instrukce pro všechny příležitosti, druhý, RISC, dává vývojářům za úkol vytvořit procesor se sadou minimálních instrukcí nutných pro provoz. RISC instrukce mají menší velikost a jednodušší.

architektura x86

Architektura procesoru x86 byla vyvinuta v roce 1978 a poprvé se objevila v procesorech Intel a je typu CISC. Jeho název je převzat z modelu prvního procesoru s touto architekturou – Intel 8086. Postupem času se pro nedostatek nejlepší alternativa Tuto architekturu začali podporovat i další výrobci procesorů, například AMD. Nyní je to standard pro stolní počítače, notebooky, netbooky, servery a další podobná zařízení. Občas se ale v tabletech používají procesory x86, to je celkem běžná praxe.

První procesor Intel 8086 měl 16bitovou kapacitu, v roce 2000 pak vyšel procesor s 32bitovou architekturou a ještě později se objevila architektura 64bitová. Tomu jsme se podrobně věnovali v samostatném článku. Během této doby se architektura velmi vyvinula a byly přidány nové sady instrukcí a rozšíření, které mohou výrazně zvýšit výkon procesoru.

x86 má několik významných nevýhod. Za prvé je to složitost příkazů, jejich zmatenost, která vznikla díky dlouhé historii vývoje. Za druhé, takové procesory kvůli tomu spotřebovávají příliš mnoho energie a generují hodně tepla. Inženýři x86 se zpočátku vydali cestou získání maximálního výkonu a rychlost vyžaduje zdroje. Než se podíváme na rozdíly mezi arm x86, promluvme si o architektuře ARM.

architektura ARM

Tato architektura byla představena o něco později po x86 - v roce 1985. Byla vyvinuta slavnou britskou společností Acorn, poté se tato architektura jmenovala Arcon Risk Machine a patřila k typu RISC, ale poté byla vydána její vylepšená verze Advanted RISC Machine, která je nyní známá jako ARM.

Při vývoji této architektury si inženýři dali za cíl odstranit všechny nedostatky x86 a vytvořit zcela novou a nejefektivnější architekturu. Čipy ARM získaly minimální spotřebu a nízkou cenu, ale měly nízký výkon ve srovnání s x86, takže zpočátku nezískaly velkou oblibu na osobních počítačích.

Na rozdíl od x86 se vývojáři zpočátku snažili dosáhnout minimálních nákladů na zdroje, mají méně instrukcí procesoru, méně tranzistorů, ale také méně další funkce. V posledních letech se ale výkon ARM procesorů zlepšuje. Vzhledem k tomu a nízké spotřebě energie se začaly velmi široce používat mobilní zařízení, jako jsou tablety a chytré telefony.

Rozdíly mezi ARM a x86

A nyní, když jsme se podívali na historii vývoje těchto architektur a jejich zásadní rozdíly, pojďme provést podrobné srovnání ARM a x86 na základě jejich různých charakteristik, abychom určili, která je lepší, a přesněji pochopili, jaké jsou jejich rozdíly.

Výroba

Výroba x86 vs arm je jiná. Procesory x86 vyrábějí pouze dvě společnosti: Intel a AMD. Zpočátku to byla jedna společnost, ale to je úplně jiný příběh. Pouze tyto společnosti mají právo vyrábět takové procesory, což znamená, že pouze ony budou řídit směr rozvoje infrastruktury.

ARM funguje velmi odlišně. Společnost, která vyvíjí ARM, nic nevydává. Jednoduše vydají povolení k vývoji procesorů této architektury a výrobci si mohou dělat, co potřebují, například vyrábět konkrétní čipy s moduly, které potřebují.

Počet instrukcí

Toto jsou hlavní rozdíly mezi architekturou arm a x86. Procesory x86 se rychle vyvíjely jako výkonnější a produktivnější. Vývojáři dodali velký počet instrukce procesoru a zde není jen základní sada, ale poměrně hodně příkazů, od kterých by se dalo upustit. Zpočátku to bylo děláno pro snížení množství paměti obsazené programy na disku. Bylo také vyvinuto mnoho možností ochrany a virtualizace, optimalizace a mnoho dalšího. To vše vyžaduje další tranzistory a energii.

ARM je jednodušší. Instrukcí procesoru je zde mnohem méně, pouze těch, které operační systém potřebuje a jsou skutečně využívány. Pokud porovnáme x86, tak tam je použito jen 30% všech možné pokyny. Snadněji se učí, pokud se rozhodnete psát programy ručně, a také vyžadují méně tranzistorů k implementaci.

Spotřeba energie

Další závěr vyplývá z předchozího odstavce. Čím více tranzistorů na desce, tím větší je její plocha a spotřeba energie a platí to i obráceně.

Procesory x86 spotřebují mnohem více energie než ARM. Spotřebu energie ale ovlivňuje i velikost samotného tranzistoru. Například procesor Intel i7 spotřebovává 47 wattů a jakýkoli procesor smartphonu ARM nespotřebovává více než 3 watty. Dříve se vyráběly desky s velikostí jednoho prvku 80 nm, Intel pak dosáhl snížení na 22 nm a letos vědci dokázali vytvořit desku s velikostí prvku 1 nanometr. To výrazně sníží spotřebu energie bez ztráty výkonu.

V posledních letech se energetická náročnost procesorů x86 velmi snížila, například nově procesory Intel Haswell vydrží na baterii déle. Nyní rozdíl mezi arm vs x86 postupně mizí.

Odvod tepla

Počet tranzistorů ovlivňuje další parametr – tvorbu tepla. Moderní zařízení nemůže přeměnit veškerou energii na účinnou činnost; její část se rozptýlí ve formě tepla. Účinnost desek je stejná, to znamená, že čím méně tranzistorů a čím menší jejich velikost, tím méně tepla bude procesor generovat. Zde již nevyvstává otázka, zda bude méně tepla generovat ARM nebo x86.

Výkon procesoru

ARMy nebyly původně navrženy pro maximální výkon, tady x86 exceluje. To je částečně způsobeno menším počtem tranzistorů. Ale v poslední době výkon procesor ARM ov roste a lze je již plně využít v noteboocích nebo serverech.

závěry

V tomto článku jsme se podívali na to, jak se ARM liší od x86. Rozdíly jsou docela vážné. V poslední době se ale hranice mezi oběma architekturami stírá. Procesory ARM jsou stále produktivnější a rychlejší a procesory x86 díky zmenšení konstrukčního prvku desky začnou spotřebovávat méně energie a generovat méně tepla. Procesory ARM již najdete na serverech a noteboocích a x86 na tabletech a chytrých telefonech.

Co si myslíte o těchto x86 a ARM? Jaká technologie je podle vás budoucností? Pište do komentářů! Mimochodem, .

Na závěr videa o vývoji architektury ARM:

Mnoho uživatelů je při instalaci operačního systému Windows na svůj osobní počítač upřímně zmateno, kterou verzi platformy si vybrat - x64 nebo x86? A vůbec, co tyto zkratky vlastně znamenají?

Programy s x64 nebo x86: je rozdíl

Jak již bylo zmíněno výše, jsou obvykle doprovázeny podivnými zkratkami. Můžete je však vidět i při stahování různých programů, které také často dávají uživateli právo vybrat si verzi x64 nebo x86. Zkusme společně vyluštit všechny číselné hádanky. Začněme tím, že ve světě počítačů existují Různé typy procesory s různou architekturou. Výraz o pohybu mílovými kroky dokonale vyhovuje průmyslu počítačových čipů, ale procesory se začaly vyvíjet a zlepšovat obzvláště rychle v posledním desetiletí.

odkud se to vzalo?

Kdysi, na začátku jejich cesty, výpočetní čipy umožňovaly uživateli pracovat
s operačními systémy a programy na 16bitové bázi jim později přišly na pomoc pokročilejší 32bitové analogy, ale nyní se pokrok již dokázal dotknout 64bitových architektur a dokonce je vážně rozšířil po celém světě.
Vy, milí čtenáři, dnes pravděpodobně nenajdete počítače, které podporují 16bitové programy, a nové počítače se obvykle vydávají s nejmodernější architekturou a jsou dodávány s 64bitovými operačními systémy.

AMD je považováno za průkopníka ve vývoji 64bitových počítačových čipů. Proto vývojáři software zobecnit podobné procesory pod obecným názvem "Amd64". Je důležité pochopit, že toto označení neznamená, že hry, jejichž charakteristika naznačuje amd64, nepoběží na počítačích s 64bitovými procesory od Intelu.

V popisovaném případě hovoříme o obyčejném zobecnění, které se podařilo v praxi pevně usadit. Samotné zkratky x64 nebo x86 přesně odpovídají různým architekturám procesorů – 64, respektive 32. Pokud mluvíme o aplikaci těchto označení na moderní operační systémy, pak označují bitovou hloubku.

Jak zjistit, zda je na počítači nainstalován operační systém x64 nebo x86?

Uživatelé se často snaží zjistit, v jaké bitové bitvě nebo jinými slovy typu operačního systému je na jejich počítači nainstalováno v současné době. Chcete-li tento problém vyřešit, musíte přesunout kurzor myši na ikonu „Počítač“ na ploše (standardní pro Windows) a jednou na ni kliknout pravým tlačítkem.

Další v otevřeném kontextová nabídka měli byste vybrat "Vlastnosti". Po dokončení kroků by se před vámi mělo otevřít okno s úplný seznam vlastnosti vašeho počítače a také nainstalovaný operační systém. Budete tedy moci vidět jednu z několika možností: 32bitový operační systém nebo 64bitový operační systém.

Tímto jednoduchým způsobem jsme přišli na to, jak zkontrolovat, zda mají být nainstalovány programy x86 nebo x64. Dále je třeba říci, že zvláštnost 64bitových programů spočívá v jejich neuvěřitelném výkonu, ale na druhou stranu jsou příliš náročné na paměť. Tady je, potvrzení pravidla, že všeho dobrého s mírou: instalovat 64bitový operační systém na slabý notebook s pár gigabajty RAM a 32bitovým klasickým procesorem je chyba, na druhou stranu 32bitové programy a systémy nejsou schopny vidět více než 3 GB RAM. Pokud máte osobní počítač se 4 nebo více gigabajty paměti RAM, můžete bezpečně nainstalovat 64bitovou platformu Windows, programy musí být také 64bitové. Programy tohoto typu využívají zdroje dostupné v počítači na maximum. skutečná otázka otázka, která je lepší - Windows x86 nebo x64, není formulována zcela správně, protože obě platformy jsou dobré a výběr té potřebné je určen konfigurací jednotlivého počítače.



Windows x64: úskalí

V současné době se vzhledem k nevyřešenosti některých problémů, se kterými se vývojáři a inženýři po celém světě potýkají, ukazuje, že nejpokročilejší platformy Windows x64, kromě mnoha nepopiratelných výhod, o kterých jsme mluvili
výše, existuje řada nevýhod, na které by se také nemělo zapomínat. Začněme tím, že pokud svůj počítač používáte již delší dobu a máte řadu komponent, které vás nezklamaly řadu let, existuje možnost, že přechodem na 64bitovou verzi operačního systému, může být nalezení ovladačů pro tato zařízení značně problematické. Faktem je, že vývojáři všech druhů gadgetů nejsou příliš ochotni vydávat aktualizace pro produkty, které byly ukončeny, a tím se snaží povzbudit zákazníky k nákupu nového vybavení. A tady jen málokdo vyslechne argument, že váš skener nebo tiskárna je nejlepší na světě.

Již jsme poznamenali, že Windows x64 spotřebovává více prostředků, ale je třeba říci, že všechny programy pro 64bitové prostředí také začínají „chtít víc“. A konečně, pokud se rozhodnete nainstalovat nepodepsané, bude to vyžadovat řadu dalších kroků.

Na druhé straně stupnice leží přístup ke všem zdrojům paměti RAM nainstalované v počítači. Pokud máte Windows x64, mohou i některé 32bitové programy využít přístup ke 4 GB RAM, například hry „Stalker“ a „Gothic“. Pro srovnání: v 32bitovém operačním systému mají hry a programy přístup k 2 GB paměti a ve velmi vzácných případech - 3 GB.

Někteří autoři tvrdí, že bez ohledu na to, jakou platformu – x64 nebo x86 – uživatel zvolí, výkon programů zůstane na stejné úrovni. Je velmi obtížné tento názor zcela vyvrátit, protože ukazatele výkonu závisí na řadě okolností a faktorů, ale praxe prokázala, že programy pro zpracování zvuku a obrazu, stejně jako archivátory a řada profesionální programy Začnou se chovat mnohem aktivněji.

Pokud jste se s dilematem „x86 nebo x64: co nainstalovat“ nakonec rozhodli pro to druhé, ale nechcete se loučit se starými dobrými programy, měli byste vědět, že 99 procent 32bitových aplikací běží v 64bitové prostředí bez poklesu výkonu nebo jakýchkoliv problémů. Co se týče herního výkonu, ten primárně závisí na výkonu vašeho grafického ovladače.


P.S: vše, co nebylo uvedeno výše

Jak přesně určit x86 nebo x64 už víme, ale stále je tu řada drobností, které také stojí za zmínku. Například o bitové hloubce jsme se již naučili téměř vše, kromě definice tohoto pojmu, takže podotýkáme, že bitová kapacita je schopnost současně zpracovávat určité množství informací, které se měří v bitech.


Nedosažitelná hranice

Zajímavé je, že 64bitová architektura má také své limity, pokud jde o vnímání paměť s náhodným přístupem: x64 nevidí více než 192 GB RAM. Další zajímavý bod: přirozený objem 64bitových aplikací, jako je
obvykle o 20–40 % více než jejich 32bitové protějšky, ale neusilujte okamžitě o nový pevný disk, protože toto pravidlo se nevztahuje na zábavní materiály, jako jsou videa (filmy) nebo hudba.



Počet pochybností - 4

O osudu PC se 4 GB RAM by se mělo mluvit samostatně. Jde o to: na jedné straně 32bitové operační systémy vidí pouze 3 GB paměti a volba ve prospěch 64x se zdá být zřejmá, ale nezapomeňte, že Windows x64 bude vyžadovat dvakrát tolik RAM, aby sám fungoval 32 -bit „sestra“ a vítězství se v tomto případě zdá velmi nejednoznačné. V takových podmínkách by výběr neměl být určen matematickými výpočty, ale vašimi potřebami a úkoly, které hodláte počítači nastavit. A externí efekty nečekejte, protože z hlediska designu 32 a 64bit OS identické.

Novinky od Adobe

Pokud jste umělec nebo designér, můžete být zarmouceni nebo potěšeni nedávným oznámením společnosti Adobe, že vše je moderní aplikace Adobe CS5 se stane výhradně 64bitovým. Jinými slovy, Dreamweaver CS5, Photoshop CS5 a podobné slavné aplikace budou moci běžet výhradně na 64bitovém systému. 32bitová platforma je prostě nepozná.



Všechno se ukázalo být jednoduché

Takže jsme přišli na to, jak zjistit, zda je váš systém x64 nebo x86, a jakou možnost zvolit. Jak vidíte, ukázalo se, že vše nebylo příliš obtížné a zabralo vám to jen pár minut vašeho času. Je důležité pochopit, že v tomto případě jsou rozdíly výhradně vnitřní, a s maximální přesností určit, co přesně chcete osobní počítačže je pro vás pracovním nástrojem nebo přítelem, který vám poskytuje zábavu. Pokud je počítač nakonfigurován nejlepším možným způsobem, jeho schopnosti se změní.

x86 nebo x64: Co to znamená?

Tato označení jistě vedou mnoho lidí do slepé uličky a dnes se z ní dostaneme.

Ve skutečnosti x86, x64- pouze označení bitové hloubky operačního systému, měřená v bitech (32 a 64 bitů). Mimochodem, existuje 16 bitů - ale je docela obtížné najít procesory, které rozumí pouze této bitové hloubce. K tomu se musíme vrátit o 10 let zpět. V každém případě je „uveďte“. x86 nebo x64 systémy nebudou fungovat.

K čemu to všechno je?

To vše vám umožňuje určit bitovou hloubku čísel, se kterými se váš PC procesor bude zabývat. A z tohoto důvodu pod x86 nebo x64 systémy mají své vlastní verze programů, ovladačů a podobně.

Vyšší bitová hloubka (x64) umožňuje mimo jiné výrazně zlepšit přesnost výpočtů. Běžný uživatel ale takovou potřebu nemá a jediný důvod, proč by měl používat 64bitový systém, je, pokud je RAM v počítači přes 4 gigabajty.

Faktem je, že 32bitové systémy „nevidí“ více než 4 gigabajty paměti RAM.

Takže nakonec: x86 nebo x64?

Pokud máte 4 GB RAM nebo méně, bude vám stačit 32bitový (x86) systém. Jinak použijte x64.

x86-64 je 64bitové rozšíření pro architekturu x86 vyvinuté společností AMD, které umožňuje spouštění programů v 64bitovém režimu.

Příběh

Původní specifikace byla vyvinuta společností AMD v roce 2000. První procesor implementující architekturu byl AMD K8 (vydán v roce 2003).

V těchto letech (konec devadesátých let a začátek roku 2000) vyvinuly společnosti HP a Intel svou 64bitovou architekturu IA-64 (Intel Itanium). Byl však radikálně odlišný, byl založen na principu VLIW (velmi dlouhé instrukční slovo) a byl nekompatibilní s 32bitovou architekturou x86. Vzhledem k tomu, že na IA-64 nefungovalo velké množství dříve napsaného softwaru, tato architektura si nezískala popularitu. I když na konci roku 2001 byla pro IA-64 vydána speciální verze Windows XP 64-bit pro IA-64.

Architektura x86 pochází z roku 1978, začínala jako 16bitová a v roce 1985 se stala 32bitovou. Architektura má velké množství berle pro zpětnou kompatibilitu. Předpovídalo se, že zemře spolu s 32bitovými výpočty. Příchod x86-64 mu však dal nový život.

Pojmenování

Pro tuto technologii existuje několik různých názvů, což někdy vede k nejasnostem.

  • x86-64- originální verze. Právě pod tímto názvem AMD zveřejnilo první předběžnou specifikaci.
  • x64- oficiální název operačních verzí Systémy Windows, také používaný jako název architektury společnostmi Microsoft a Oracle.
  • AMD64- po vydání prvních procesorů Clawhammer a Sledgehammer se v názvu architektury objevilo jméno vývojářské společnosti AMD. Nyní oficiální pro implementaci AMD.
  • EM64T- první oficiální název implementace Intelu. To znamenalo Extended Memory 64 Technology.
  • Intel 64 je současný oficiální název architektury Intel.

Někdy zmínka o AMD uvádí uživatele v omyl až do té míry, že odmítají používat distribuce nativních verzí operačního systému s odkazem na skutečnost, že verze AMD nebude fungovat na jejich procesoru Intel. Ve skutečnosti distributoři softwaru používají název amd64 pouze proto, že AMD byla průkopníkem ve vývoji této technologie.

Uživatelé si často pletou architekturu x86-64 s architekturou IA-64. Abyste se vyhnuli takovým chybám, měli byste si uvědomit, že Intel 64 a IA-64 jsou zcela odlišné a vzájemně nekompatibilní architektury mikroprocesorů. V roce 2017 pravděpodobně nikde nenajdete procesor s architekturou IA-64 (Itanium).

Prevalence

Superpočítače

V žebříčku TOP-500 superpočítačů nahradila architektura x86-64 dříve oblíbené architektury RISC a 32bitové verze. Intel se snažil prosadit své Itanium (maximální podíl dosáhl v roce 2004), ale neúspěšně.

datová centra

Servery využívající čipy x86 si stále udržují více než 90procentní podíl na trhu. http://www.common.org/servers/x86-servers-data-center/

Všechna datová centra Google nyní používají procesory Intel se známou architekturou x86. Google však plánuje využít alternativní řešení. https://habrahabr.ru/company/ibm/blog/282820/

Algoritmy pro zpracování velkého množství informací jsou v roce 2017 v naprosté většině případů prováděny na architektuře x86-64, proto o ní uvažujeme v magisterském programu AiSOBOI.

Registry

Architektura x86-64 má:

  • 16 64bitových celočíselných registrů obecný účel(RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 - R15);
  • 8 80bitových registrů s pohyblivou řádovou čárkou (ST0 - ST7);
  • 8 64bitových MMX registrů (MM0 - MM7, sdílený prostor s registry ST0 - ST7);
  • 16 128bitových registrů SSE (XMM0 - XMM15);
  • 64bitový ukazatel RIP a 64bitový registr příznaků RFLAGS.

Operace na 64bitových registrech (sčítání, odčítání atd.) trvají stejně dlouho jako operace na 32bitových registrech.

Může se to zdát překvapivé, ale operace na spodních 32bitových polovinách registrů resetují vyšších 32 bitů. Například,

mov eax, ebx

automaticky resetuje nejvýznamnější bity v rax.

To se provádí pro optimalizaci. To umožňuje procesoru prolomit řetězce závislostí (není třeba čekat, až budou bity vyššího řádu vypočítány, aby mohly pokračovat v operacích s bity nižšího řádu, protože bity vyššího řádu téměř jistě nikdo nebude potřebovat).

Moderní procesor je velmi složitý. Model procesoru popsaný v manuálu k architektuře dostatečně nepopisuje skutečný pracovní mechanismus moderního jádra. Zejména koncept registrů procesoru není pravdivý v hardwaru neexistuje nic jako registr eax nebo rax. Koncept registrů procesorů je virtualizován. Tato technologie se nazývá přejmenování registrů(přejmenování registru). Instrukční dekodér přiděluje registr z velké banky registrů. Po dokončení instrukce je hodnota tohoto dynamicky alokovaného registru zapsána zpět do jakéhokoli registru, který aktuálně drží hodnotu, řekněme rax. Chcete-li tuto práci provádět efektivně a provádět více instrukcí současně, je velmi důležité, aby operace neměly žádné vzájemné závislosti. Je špatné, když hodnota registru závisí na jiných instrukcích.

Instrukce

x86-64 patří k typu CISC(výpočet komplexní instrukční sady). Je to téměř jediná moderní architektura CISC. Další populární architektury jsou založeny na principu RISC(počítač s redukovanou instrukční sadou).

Současně jsou moderní procesory x86, ačkoli jsou kompatibilní s CISC, procesory s jádrem RISC a ve formálním smyslu jsou považovány za hybridní. V takových hybridních procesorech CISC jsou instrukce CISC převedeny na sadu interních instrukcí RISC, zatímco jedna instrukce x86 může generovat několik instrukcí RISC a instrukce jsou prováděny na superskalárním potrubí několik najednou. Malé pokyny lze snadno sledovat najednou.

Instrukce jsou zakódovány jako sekvence bytů proměnné délky, v praxi od 1 do 15 bytů.

Vyřazené příležitosti

V x86-64 byly některé zastaralé instrukce odstraněny ve srovnání s x86. Jedná se o aritmetiku BCD a instrukce aam (ASCII upravit pro násobení). Většina zastaralých pokynů však zůstává.

Režimy

Procesory této architektury podporují dva provozní režimy: Long mode a Legacy mode (32bitový x86 režim kompatibility).

Dlouhý režim

Režim „Long“ je „nativní“ pro procesory x86-64. Tento režim vám umožňuje využívat všechny další výhody, které architektura poskytuje. Pro použití tohoto režimu je vyžadován 64bitový operační systém.

Tento režim umožňuje spouštět 64bitové programy; také (kvůli zpětné kompatibilitě) je poskytována podpora pro spouštění 32bitového kódu, jako jsou 32bitové aplikace, ačkoli 32bitové programy nebudou moci používat 64bitové systémové knihovny a naopak. K vyřešení tohoto problému poskytuje většina 64bitových operačních systémů dvě sady požadovaných systémové soubory: jeden je pro nativní 64bitové aplikace a druhý je pro 32bitové programy.

Starší režim

Tento „starší“ režim umožňuje procesoru provádět instrukce určené pro procesory x86 a poskytuje plnou kompatibilitu s 32bitovým kódem a operačními systémy. V tomto režimu se procesor chová přesně jako procesor x86, jako je Athlon nebo Pentium III, a doplňkové funkce ty, které poskytuje architektura x86-64 (jako jsou další registry), nejsou dostupné. V tomto režimu nebudou fungovat 64bitové programy a operační systémy.

Tento režim zahrnuje dílčí režimy:

  • Skutečný režim
  • Chráněný režim
  • Virtuální režim 8086

Reálný režim byl použit v MS-DOS, v reálném režimu se kód BIOSu spouštěl při startu počítače. Chráněný režim se používá v 32bitových verzích moderních multitaskingových operačních systémů. Virtuální režim 8086 je chráněný podrežim, určený zejména pro vytváření tzv. "virtuální DOS stroje". Pokud z 32-bit Verze Windows Pokud spustíte 16bitovou aplikaci pro DOS, pak je spuštěn emulátor NTVDM, který používá tento režim procesoru. Jiný emulátor, DOSBox, nepoužívá tento režim V86, ale provádí plnou emulaci.

Přepínání mezi režimy

Bez restartu nemůžete přejít z dlouhého režimu do skutečného nebo virtuálního režimu 8086. Proto NTVDM nefunguje v 64bitových verzích Windows a 16bitové programy nelze spustit.

Nejmodernější x86-64 procesor plně podporuje reálný režim. Pokud je bootování prováděno přes BIOS, pak je kód bootloaderu (ze sektoru #0) spuštěn v reálném režimu. Pokud se však místo BIOSu použije UEFI, pak k přechodu do Long režimu dojde ještě dříve a v reálném režimu se nespustí žádný kód. Můžeme předpokládat, že moderní počítač okamžitě začne pracovat v 64bitovém dlouhém režimu.

Překlad adres v paměti

Jednoduše řečeno, procesor přistupuje k paměti přes sběrnici. Adresy paměti vyměňované na sběrnici jsou fyzické adresy, to znamená nezpracovaná čísla od nuly do horní hranice dostupných fyzická paměť(například až 2 33, pokud máte nainstalovanou 8 GB RAM). Dříve byl severní můstek umístěn mezi procesorem a paměťovými čipy, ale v implementaci Intelu, počínaje Sandy Bridge, je integrován na matrici procesoru.

Fyzické adresy jsou specifické a konečné – žádný překlad, žádné swapování, žádná kontrola oprávnění. Posadíte je do autobusu a je to. Programy však používají adresy logické paměti, které je třeba před přístupem k paměti přeložit na fyzické adresy. Koncepčně vysílání vypadá takto:

Není fyzikální schéma, ale pouze popis procesu převodu adresy.

Překlad začíná, když CPU provede instrukci, která odkazuje na adresu paměti. Prvním krokem je převedení této logické adresy na lineární adresu. Vyvstává však otázka, proč to dělat namísto přímého použití lineárních adres v programu? To je výsledek evoluce. Abychom skutečně pochopili význam segmentace x86, musíme se vrátit do roku 1978.

Segmentace paměti v reálném režimu

16bitový procesor 8086 používal 16bitové registry a mohl přímo adresovat pouze 2 x 16 bajtů paměti. Inženýři přišli na to, jak zajistit, aby fungoval s velkým množstvím paměti, aniž by se rozšiřovala kapacita registrů.

Byly vynalezeny segmentové registry, které měly specifikovat, ke kterému 64kilobajtovému kusu paměti daná 16bitová adresa patří.

Řešení se zdá logické: nejprve nastavíte registr segmentů a v podstatě řeknete „dobře, chci pracovat s částí paměti začínající na adrese X“; pak je 16bitová adresa již použita jako offset v rámci tohoto bloku.

Celkem byly původně poskytnuty čtyři 16bitové segmentové registry, poté byly přidány další dva:

  • CS = Segment kódu
  • DS = datový segment
  • ES = Cílový segment
  • SS = Stack Segment

Pro výpočet lineární adresy paměťové buňky vypočítá procesor fyzickou adresu začátku segmentu - vynásobí segmentovou část virtuální adresy číslem 16 (nebo, což je stejné, posune ji doleva o 4 bitů) a poté přidá výsledné číslo s posunem od začátku segmentu. Segmenty se tedy částečně překrývaly a celkově bylo možné adresovat asi 1 MB fyzické paměti. Nabízí se otázka: proč rovnou nevynásobit hodnotu segmentového registru číslem 65536, protože pak by bylo možné adresovat 4 GB paměti. Pak to nebylo nutné a jen to prodražilo čip.

V reálném režimu neexistuje žádná ochrana paměti ani přístupová práva.

Programy byly malé, takže jejich zásobník a kód se zcela vešly do 64 KB, nebyly žádné problémy. V jazyce C těch dávných časů byl normální ukazatel 16bitový a ukazoval relativně k výchozímu segmentu, ale existovaly i vzdálené ukazatele, které zahrnovaly hodnotu registru segmentu.

#zahrnout int main() ( char far * p = (char far * ) 0x55550005 ; char far * q = (char far * ) 0x53332225 ; * p = 80 ; (* p)++; printf ("%d" ,* q ); vrátit 0;

Zde oba ukazatele ukazují na stejnou fyzickou adresu 0x55555.

Chráněný režim

V 32bitovém chráněném režimu se také používá model segmentované paměti, ale organizovaný podle jiného principu: uspořádání segmentů je popsáno speciálními strukturami (tabulkami deskriptorů) umístěnými v paměti RAM.

Segmenty paměti jsou také vybírány stejnými registry segmentů. Hodnota registru segmentu (selektor segmentu) již není nezpracovaná adresa, ale je to struktura podobná této:

Existují dva typy tabulek deskriptorů: globální (GDT) a místní (LDT). Globální tabulka popisuje segmenty operačního systému a sdílené datové struktury, každé jádro má své vlastní. Pro každý konkrétní úkol (proces) lze definovat lokální tabulku. Bit TI je 0 pro GDT a 1 pro LDT. Index určuje číslo deskriptoru v tabulce deskriptorů segmentu. Pole RPL znamená požadovanou úroveň oprávnění.

Samotná tabulka je jednoduše pole obsahující 8bajtové položky (deskriptory segmentů), kde každá položka popisuje jeden segment a vypadá takto:

Kromě základní adresy segmentu obsahují deskriptory velikost segmentu (přesněji maximální dostupný offset) a různé atributy segmentu používané k ochraně paměti a určování přístupových práv k segmentu pro různé programové moduly. Základní adresa je 32bitová lineární adresa ukazující na začátek segmentu a limit určuje, jak velký je segment. Přidáním základní adresy k adrese logické paměti vznikne lineární adresa (není již žádné násobení 16). DPL (Descriptor Privilege Level) - úroveň oprávnění deskriptoru; toto je číslo od 0 (nejprivilegovanější, režim jádra) do 3 (nejméně privilegovaný, uživatelský režim), které řídí přístup k segmentu.

Když je CPU v 32bitových režimech, registry a instrukce mohou adresovat celý lineární adresní prostor. Proč tedy nenastavit základní adresu na nulu a nechat logické adresy stejné jako lineární adresy? Intel tomu říká „plochý model“ a přesně to dělají moderní jádra x86. To je ekvivalentní deaktivaci segmentace.

Dlouhý režim

Na architektuře x86-64 dlouhý (64bitový) režim nepoužívá segmentaci. Čtyři segmentové registry (CS, SS, DS a ES) jsou nuceny mít základní adresu 0. Registry segmentů FS a GS mohou mít stále nenulovou základní adresu. To umožňuje OS používat je pro servisní účely.

Například, Microsoft Windows na x86-64 používá GS k ukázání na blok prostředí vlákna, malou strukturu pro každé vlákno, která obsahuje informace o zpracování výjimek, lokální proměnné vlákna a další informace pro vlákno. Podobně linuxové jádro používá segment GS k ukládání dat na CPU.

Cvičení: Prohlížení registrů

(gdb) info registry rax 0x40052d 4195629 rbx 0x0 0 rcx 0x0 0 rdx 0x7ffffffffde78 140737488346744 rsi 0x7ffffffde68 1407627rbff dd80 0x7ffffffdd80 rsp 0x7ffffffdd80 0x7ffffffdd80 r8 0x7ffff7dd4e80 140737351863936 r9 0x7ffff7dea700 140753735 01x721735 374883 46128 r11 0x7ffff7a32e50 140737348054608 r12 0x400440 4195392 r13 0x7ffffffde60 1407374883146720 0x0 0 r15 0x0 0 rip 0x400531 0x400531 vlajky 0x246 [ PF ZF IF ] cs 0x33 51 ss 0x2b 43 ds 0x0 0 es 0x0 0 fs 0x0 0 gs 0x0 0

Ochranné kroužky

Pravděpodobně intuitivně víte, že aplikace mají omezená oprávnění na počítačích Intel x86 a že určité úkoly může provádět pouze kód operačního systému. Jak to funguje? Úrovně oprávnění x86 jsou mechanismem, kterým OS a CPU omezují možnosti programů v uživatelském režimu. Existují čtyři úrovně oprávnění, od 0 (nejvíce privilegované) do 3 (nejméně privilegované), a tři hlavní prostředky: paměť, I/O porty a schopnost provádět specifické strojové instrukce. V každém okamžiku běží procesor x86 určitou úroveň privilegia, která určují, co kód může a co nemůže dělat. Tyto úrovně oprávnění jsou často popisovány jako ochranné kruhy, přičemž nejvnitřnější kruh odpovídá nejvyšším oprávněním. Většina moderních x86 jader používá pouze Ring 0 a Ring 3.

Virtuální adresní prostor

Přestože jsou virtuální adresy široké 64 bitů, současné implementace (a všechny čipy v návrhu) neumožňují využít celý virtuální adresní prostor o velikosti 2 64 bajtů (16 exabajtů). To by byl přibližně čtyřmiliardkrát větší prostor virtuálních adres na 32bitových počítačích. V dohledné budoucnosti nebude většina operačních systémů a aplikací vyžadovat tak velký adresní prostor, takže zavedení takto širokých virtuálních adres jednoduše zvýší složitost a náklady na překlad adres bez jakéhokoli skutečného přínosu. AMD se proto rozhodlo, že v prvních implementacích architektury bude při překladu adres skutečně použito pouze spodních 48 bitů virtuální adresy.

Specifikace AMD navíc vyžaduje, aby nejvýznamnějších 16 bitů jakékoli virtuální adresy, bity 48 až 63, byly kopiemi bitu 47 (s použitím principu rozšíření znaménka). Pokud tento požadavek není splněn, procesor vyvolá výjimku. Adresy, které se řídí tímto pravidlem, se nazývají „kanonická forma“. Kanonické adresy celkem 256 terabajtů použitelného virtuálního adresového prostoru. To je stále 65 536 krát větší než 4 GB virtuálního adresního prostoru 32bitových strojů.

Tato konvence umožňuje v případě potřeby škálovatelnost na skutečné 64bitové adresování. Mnoho operačních systémů (včetně řady Windows NT a GNU/Linux) zabírá horní polovinu adresního prostoru (prostor jádra) a ponechává nízkou polovinu (uživatelský prostor) pro kód aplikace, zásobník uživatelského režimu, haldu a další data. oblasti. Design „kanonické adresy“ zajišťuje, že každá implementace kompatibilní s AMD64 má v podstatě dvě poloviny paměti: spodní polovina „roste“, když je k dispozici více bitů virtuální adresy, a horní polovina naopak v horní části adresního prostoru a roste dolů. .

První x64 verze Windows ani nevyužívaly všech 256 TB; byly omezeny pouze na 8 TB uživatelského prostoru a 8 TB prostoru jádra. Celý 48bitový adresní prostor se stal podporován ve Windows 8.1, který byl vydán v říjnu 2013.

Struktura tabulky stránek

Místo dvouúrovňového systému tabulek stránek používaného 32bitovými systémy x86 používají systémy s dlouhým režimem čtyři úrovně tabulek stránek.

Možné velikosti stránek:

  • 4 KB (2 12 bajtů) – nejčastěji používané (stejné jako x86)
  • 2 MB (2 21 bajtů)
  • 1 GB (2 30 bajtů)

Kompletní 4KB hierarchie mapování stránek pro celý 48bitový prostor by zabrala něco málo přes 512 GB RAM (asi 0,195 % virtuálního prostoru 256 TB).

Cvičení: Jak brzy to padne?

Je jasné, že tento kód je podle standardu nesprávný, obsahuje Undefined Behavior a pokud ano, kompilátor může udělat cokoliv, například vůbec nespadnout. Ale přesto, pokud jej spustíte na x86-64, v určitém okamžiku spadne...

#zahrnout #zahrnout char buf[ 1 ] ; #define PAGE_SIZE 4096 int main() ( char * ptr = buf; for (;; ) ( int offset = (intptr_t ) ptr % PAGE_SIZE; printf ("%p: offset = %d \n", ptr, offset); * ptr = "a" ; // Očekává se chyba segmentace!++ptr; ) návrat 0 ; )

Organizace zásobníku a volání funkcí

V x86-64 oproti x86 znatelně vzrostl (zdvojnásobil) počet univerzálních registrů, což je dobrá zpráva. Proto lze k předávání argumentů funkcím použít více registrů a zároveň využívat méně paměti zásobníku, čímž se urychlí volání funkcí.

Zásobník v x86

Zásobník roste směrem dolů. Horní část zásobníku má ve skutečnosti nejnižší adresu.

Používá se speciální registr rsp (Stack Pointer).

Instrukce

Zatlačte rax

ekvivalent

Sub rsp, 8 mov, rax

Instrukce

ekvivalent

Mov rax, přidat rsp, 8

Konvence volání v Linuxu

Linux a další operační systémy používají konvenci System V AMD64 ABI.

Pro jednoduchost se omezíme na celočíselné argumenty a ukazatele.

Prvních šest argumentů prochází registry:

Pokud to nestačí, pak je sedmý argument již předán přes zásobník.

Pokud chce funkce používat registry rbx, rbp a r12–r15, musí je před ukončením vrátit do původního stavu.

Návratová hodnota do 64 bitů je uložena v rax, do 128 bitů - v rax a rdx.

Stack rám

Pro takovou funkci

long myfunc(dlouhé a, dlouhé b, dlouhé c, dlouhé d, dlouhé e, dlouhé f, dlouhé g, dlouhé h) ( dlouhé xx = a * b * c * d * e * f * g * h; dlouhé yy = a + b + c + d + e + f + g + h dlouhé zz = utilfunc(xx, yy, xx % yy) ;

Zásobník bude vypadat takto:

červená zóna

Oblast 128 bajtů za umístěním, na které ukazuje rsp, je považována za vyhrazenou a neměla by být upravována obsluhou signálu nebo přerušení. Funkce mohou tuto oblast používat pro dočasná data, která nejsou potřeba pro volání funkcí. Zejména listové funkce (ze kterých se nevolají žádné další funkce) mohou tuto oblast používat pro celý rámec zásobníku namísto změny ukazatele zásobníku rsp na začátku a na konci provádění.

Toto je optimalizace. Snížit a zvýšit rsp jsou již dva pokyny, lze je uložit.

Například:

long utilfunc(long a, long b, long c) ( long xx = a + 2; long yy = b + 3; long zz = c + 4; long sum = xx + yy + zz; return xx * yy * zz + součet)

Uložení základního ukazatele rámce

Ukazatel rbp (a jeho předchůdce ebp na x86), který je stabilní „kotvou“ na začátek rámce zásobníku během provádění funkce, je velmi vhodný pro ruční programování a pro ladění. Před časem však bylo zjištěno, že kód, který je generován kompilátorem, ve skutečnosti nepotřebuje rbp (překladač může snadno sledovat offsety z rsp).

To je důvod, proč některé kompilátory začaly přeskakovat základní ukazatel během agresivních optimalizací, čímž zkrátily prolog a epilog funkce a poskytly další registr pro obecné účely.

gcc zachovává výchozí základní ukazatel na x86, ale umožňuje optimalizaci s příznakem kompilace -fomit-frame-pointer.

Každopádně další „novou věcí“, kterou AMD64 ABI představilo, je, že základní ukazatel je výslovně volitelný. gcc se řídí tímto doporučením a ve výchozím nastavení vynechává ukazatel x64 rámce při kompilaci s optimalizací. Poskytuje možnost uložit ji zadáním parametru -fno-omit-frame-pointer.

Konvence volání systému Windows

Hurá, už žádné cdecl/stdcall/fastcall/thiscall/register/safecall, zbývá pouze jedna volací konvence! Ale ne, Microsot vyvinul vectorcall...

První čtyři argumenty procházejí registry: rcx, rdx, r8, r9.

Funkce musí vrátit registry rbx, rbp, rdi, rsi, rsp, r12, r13, r14 a r15 do původního stavu.

Cvičení: součet čísel 3 : c3 ret

Systémová volání

Mechanismy provádění systémových volání

C funkce

Když zavoláte jakoukoli systémovou funkci jako open() , write() , getpid() z kódu C, ve skutečnosti neprovádíte samotné systémové volání přímo. Nemůžete jednoduše přepnout do režimu jádra (kruh 0) z uživatelského režimu (kruh 3) voláním funkce. Volal normální funkce, implementované uvnitř standardní knihovny a uvnitř provádějí systémové volání pomocí jedné nebo druhé metody:

  • přes softwarové přerušení,
  • prostřednictvím instrukce syscall,
  • přes instrukce sysenter.

Softwarové přerušení

Přerušení jsou jako signál pro procesor, že je nutné přerušit provádění (proto se jim říkalo přerušení) aktuálního kódu a urychleně udělat to, co je specifikováno v handleru.

Přerušení oznamuje procesoru, že došlo k události s vysokou prioritou, která vyžaduje přerušení aktuálního kódu prováděného procesorem. Procesor zareaguje pozastavením své aktuální aktivity, uložením svého stavu a provedením funkce nazývané obsluha přerušení (nebo obsluha přerušení), která reaguje na událost a obsluhuje ji, a poté vrátí řízení přerušenému kódu.

Softwarové přerušení je synchronní přerušení, které může program implementovat pomocí speciální instrukce.

Na procesorech x86 je pro explicitní volání synchronního přerušení k dispozici instrukce int, jejímž argumentem je číslo přerušení (od 0 do 255). V chráněném a dlouhém režimu nemohou normální programy obsluhovat přerušení; tato funkce je dostupná pouze pro systémový kód (operační systém).

V OS Linux se k provádění systémových volání používá číslo přerušení 0x80. Obsluha přerušení 0x80 je linuxové jádro. Před provedením přerušení program umístí do registru eax číslo systémového volání, které se má provést. Když se řízení přesune na kruh 0, jádro přečte toto číslo a zavolá požadovanou funkci.

Tato metoda byla široce používána na 32bitových systémech na 64bitových systémech je považována za zastaralou a nepoužívá se, ale také funguje (příklad byl uveden v přednášce), i když s řadou omezení (například vy; nemůže předat 64bitový ukazatel jako parametr).

  • Zadejte číslo systémového volání do eax .
  • Umístěte argumenty do registrů ebx, ecx, edx, esi, edi, ebp.
  • Zavolejte instrukci int 0x80.
  • Získejte výsledek z eax .

Příklad implementace mygetpid() (získání PID aktuálního procesu) v jazyce symbolických instrukcí (číslo 20 se používá pro systémové volání getpid):

Intel_syntax noprefix . globl mygetpid .text mygetpid: mov eax , 20 int 0x80 ret

instrukce syscall

Jedná se o modernější metodu, která se používá v 64bitovém Linuxu a funguje rychleji.

  • Číslo systému je umístěno v rax .
  • Argumenty se zapisují do rdi, rsi, rdx, r10, r8 a r9.
  • Poté se zavolá syscall.
  • Výsledek je v rax .

Příklad implementace mygetpid() (získání PID aktuálního procesu) v assembleru (pro systémové volání getpid z tabulky se používá číslo 39):

Intel_syntax noprefix . globl mygetpid .text mygetpid: mov rax , 39 syscall ret

Sledování systémových hovorů

V systému Linux vám nástroj strace v uživatelském režimu umožňuje trasování systémová volání které tento program provádí.