X86-64

A Programozás Wiki wikiből

Az x86-64 a x86-os architektúra 64 bites leszármazottja. Az x86-64 utasításkészlet támogatja Intel x86-os architektúráját, és az Advanced Micro Devices (AMD) tervezte, majd átnevezte AMD64-re. Ezt az architektúrát az Intel lemásolta és Intel 64-nek nevezte el (régebben Yamhill, Clackamas Technológia, CT, IA-32e és EM64T neveken volt ismert).<ref name="ewmppa">Extending the World's Most Popular Processor Architecture</ref> Ez vezetett a hétköznapi nyelvben az x86-64 vagy x64 elnevezések használatához, mint gyártó-független fogalmakhoz, amikor a két közel azonos kivitelezésű architektúrára hivatkozunk.

Az x86-64-et nem szabad összekeverni az IA-64-gyel, ami az Intel Itanium sorozatba tartozó processzorainak architektúrája. Ez utóbbinak az utasításkészlete nem kompatibilis a régebbi, 32-bites x86-os processzorokkal.

Az AMD64 története[szerkesztés]

Az AMD64 az AMD alternatívájaként született Intel és a Hewlett-Packard radikálisan különböző IA-64-es architektúrájára. Eredetileg "x86-64" néven lett bejelentve 2000 augusztusában. Az AMD célja az új architektúrával az volt, hogy a 64-bites számítási lehetőségeket hozzáadja a már létező x86-os architektúra képességeihez, szemben az Intel hozzáállásával, ami egy teljesen új 64-bites architektúrát szeretett volna megalkotni az IA-64-gyel. Az AMD 64 platform márkaneve és az AMD64 logó egy 4 tagú, Hals Speed, Simon Solotko, Christian Zdebel és Tom Kingből álló marketing-stratégia csoport munkájaként született.

Az első AMD64-en alapuló processzor, az Opteron, 2003 áprilisában jelent meg.

Az architektúra jellegzetességei[szerkesztés]

A legfontosabb jellemzői az AMD64-nek, a 64-bites általános célú regiszterek támogatása, 64-bites egészekkel történő aritmetikai és logikai műveletek elvégzése, és a 64-bites virtuális címek. A tervezők természetesen megragadták az alkalmat egyéb fejlesztések végrehajtására is. A legfontosabb változtatások például:

  • A 64-bites egész típus teljes támogatása: Mindegyik általános felhasználású regiszter 32-bitesről 64-bitesre lett növelve, mindegyik aritmetikai és logikai művelet, a memóriából regiszterbe és regiszterből memóriába típusú műveletek, mind közvetlenül támogatják a 64-bites egészeket.
  • További regiszterek: Az általános célú regiszterek méretének növelése mellett, az x86-32-ben lévő névvel ellátott, általános-célú regiszterek (eax,ebx,ecx,edx,ebp,esp,esi,edi) száma 8-ról 16-ra növekedett,az új regiszterek neve R8, R9, ... R15. Ezáltal lehetővé vált a lokális változók a verem helyett a regiszterekben történo tárolása, valamint a gyakran használt konstansok is helyet kaphatnak a regiszterekben. A gyors és kis méretu szub-rutinok argumentumainak tárolására is nagyobb tárhely áll rendelkezésre. A több regiszter használatának hátránya, hogy magával hozza a több regiszter-mentést és visszaállítást. Az AMD64-nek még így is kevesebb regisztere van, mint a legtöbb átlagos RISC processzornak (amelyeknek általában 32-64 regisztere van), vagy mint a VLIW-típusú gépeknek, mint például az IA-64, amelynek 128 regisztere van.
  • További XMM (SSE) regiszterek: Hasonlóan, a 128-bites XMM regiszterek (Streaming SIMD(SSE)-utasítások) tárolására használatos) száma is 8-ról 16-ra növekedett.
  • Nagyobb virtuális címtér: Az AMD64 architektúrára épülő jelenlegi processzor modellek legfeljebb 256 tebibájt (248 bájt) virtuális címteret tudnak megcímezni. Ez a határ a későbbi megvalósítások során 16 exibájtra (264 bájt ) növekedhet. A 32-bites x86-os ezzel szemben csak 4 gibibájtot tud kezelni. Ez azt jelenti, hogy lehetőség nyílik nagyon nagy fájlok kezelésére is oly módon, hogy az egész fájlt leképezzük a folyamat (eljárás) címterébe (ami általában gyorsabb, mint fájl írás/olvasás hívásokkal dolgozni), és nem kell a fájl részleteit külön-külön be- és kiírni a címtérbe.
  • Nagyobb fizikai címtér: Az AMD64 architektúrára épülő jelenlegi processzorok legfeljebb 1 tebibájt (240 bájt) RAM-memóriát tudnak megcímezni; az architektúra engedélyezi ennek kiterjesztését 4 pebibájtra (252 bájt) a jövőben. Emulált módban, a Fizikai Cím Kiterjesztés (Physical Address Extension (PAE)) támogatva van, ez támogatva van a legújabb 32-bites x86-os processzorokban is, engedélyezve a legfeljebb 64 gibibájthoz való hozzáférést.
  • Utasítás mutató relatív adat hozzáférés: Az utasítások hivatkozhatnak adattól függően az utasítás pointerre (Relative Instruction Pointer - RIP regiszter). Ez pozíció független kódot eredményez , ami gyakran használatos megosztott könyvtárakban, és hatékony valós időben történő kód-betöltésre.
  • SSE utasítások: Az eredeti AMD64 architektúra átvette az Inteltől az SSE és az SSE2 utasításkészleteket. Az SSE3 utasítások 2005 áprilisában lettek hozzáadva. Az SSE2 helyettesíti az x87-es utasításkészlet IEEE 80-bites számítási pontosságát, az IEEE 32 és 64 bites lebegőpontos számítási pontosságának választási lehetőségével. Ez lehetővé teszi a lebegőpontos számítások kompatibilitását más modern CPU-kal. Az SSE és az SSE2 utasításokat is kiegészítették, hogy támogassák a 8 új XMM regisztert.
  • A No-eXecutute bit: Az NX bit (a 63. bitje a lap táblázatnak) lehetővé teszi az operációs rendszer számára, hogy meghatározza, hogy a virtuális címtér mely részei tartalmazhatnak végrehajtható kódot, és melyek nem. Amennyiben olyan területről történik kód végrehajtási kísérlet, ahol ez nem engedélyezett, akkor memória hozzáférési hiba keletkezik, olyan, mint ami akkor keletkezik, ha például egy csak olvasható helyre akarnánk írni. Ez megnehezíteni hivatott a rosszindulatú kódoknak, hogy átvegyék a rendszer feletti uralmat “puffer-túlcsordulás” típusú támadásokkal. Szegmens leíró tulajdonságként ehhez hasonló védelem van az x86-os processzorokban is a 80286-os óta. Ez a típusú védelem csak akkor működik, ha egy egész szegmensre vonatkoztatjuk. Az AMD volt az első, aki az x86-os processzorokban használta a no-execute bit-et lineáris a címzési módnál. Ez a tulajdonság elérhető AMD64 processzorokban is emulált üzemmódban, és a jelenlegi Intel x86 processzorokban is, ha a PAE használatban van.
  • A régi tulajdonságok eltávolítása: Számos “rendszer programozó” tulajdonsága az x86-os architektúrának nincs használatban a modern operációs rendszerekben, és nem elérhető az AMD64-en long (64 bites) üzemmódban. Ezek közé tartozik például a szegmentált címzés (habár az FS és a GS szegmensregiszter megmaradt a Windows-kóddal való kompatibilitás érdekében), a feladatállapot-váltás, és a virtuális 8086-mód. Ezek a szolgáltatások természetesen megmaradtak az emulált-módban, ez lehetővé teszi e processzoroknak, hogy 32 bites és 16 bites operációs rendszereket futtassanak módosítás nélkül.