x86-64 on 64-bittisten prosessoreiden sarjan ja niihin liittyvän käskykanta-arkkitehtuurin yleisnimi. Nämä prosessorit ovat yhteensopivia vanhojen x86-ohjelmistojen kanssa.

AMD ja Intel ovat tärkeimmät valmistajat, ja myös VIA tuki sitä VIA Nano -prosessoreilla. Ne kutsuvat omia 64-bittisiä prosessoreitaan AMD64-, Intel64- ja VIA x86-64 -prosessoreiksi. Pelikonsolit, kuten Microsoft Xbox One ja Sony PlayStation 4, käyttävät omia puoliksi räätälöityjä AMD64-pohjaisia APU:ita pääprosessoreina.

x64 on toinen nimitys, jota käytetään viittaamaan 64-bittisiin laajennettuihin järjestelmiin, jotka perustuvat tällaisiin prosessoreihin. Usein x64:llä viitataan siihen liittyvään käskykanta-arkkitehtuuriin ja prosessoriin.

Periaatteet ja keskeiset erot 32-bittiseen x86:een

x86-64 laajentaa perinteisen x86-arkkitehtuurin 64-bittiseksi. Keskeisiä muutoksia ovat:

  • 64-bittiset yleiskäyttöiset rekisterit (esimerkiksi RAX, RBX, RCX, RDX ja uudet R8–R15), jotka vähentävät muistisiirtoja ja rekisterien ylivuotoa.
  • laajempi osoiteavaruus: teoreettinen osoiteavaruus on 2^64, mutta käytännössä nykyiset toteutukset käyttävät osittaista osoiteavaruuden laajennusta (esim. 48 tai 57 bittiä), jotta osoitteet pysyvät "kanonisina".
  • pitkä tila (long mode), joka sisältää 64-bittisen tilan ja yhteensopivuustilan (eli mahdollisuuden ajaa 32-bittisiä sovelluksia 64-bittisessä käyttöjärjestelmässä).
  • parannukset muistin hallintaan, kuten NX (no-execute) -bitin tuki sivutauluissa, joka parantaa suojausta koodin suorittamista vastaan muistialueilta.

Käyttöjärjestelmät, yhteensopivuus ja ohjelmistot

Useimmat nykyaikaiset käyttöjärjestelmät tukevat x86-64:ää: Linux, Windows, macOS sekä useat BSD-toteutukset ja Solaris. 64-bittinen käyttöjärjestelmä voi yleensä ajaa 32-bittisiä sovelluksia yhteensopivuustilan tai emulaation avulla (esimerkiksi Windowsin WoW64), kunhan käyttöjärjestelmä sisältää tarvittavat kirjastot ja tuki on paikallaan.

Kääntäjät ja työkaluputket käyttävät eri nimeämisiä kohdentamaan 64-bittistä x86-koodia (yleisesti x86_64 tai amd64). Ohjelmiston siirtämisessä 32-bitisestä 64-bittiseen on huomioitava mm. osoitteiden ja osoitinkokojen kasvu sekä tietorakenteiden (struct) muuttuminen, mikä voi aiheuttaa yhteensopivuusongelmia binäärirajapinnoissa.

Suorituskyky ja rajoitukset

64-bittinen arkkitehtuuri tarjoaa usein suorituskykyetuja, kuten enemmän rekistereitä ja mahdollisuuden käsitellä suuria lukuja sekä suurempia muistiavaruuksia. Toisaalta 64-bittiset osoitteet ja laajennetut pointer-muodot lisäävät muistin kulutusta ja voivat kasvattaa välimuistin kuormitusta, mikä joissakin tapauksissa heikentää suorituskykyä verrattuna 32-bittiseen versioon.

Kutsukonventiot ja järjestelmäkutsut

On olemassa eri kutsumiskäytännöt (calling conventions) 64-bittiselle x86:lle. Tunnetuimmat ovat System V AMD64 -kutsukäytäntö (käytössä useimmissa Unixin-kaltaisissa järjestelmissä) ja Microsoft x64 -kutsukäytäntö Windowsissa. Ne eroavat muun muassa siinä, mitkä parametrit välitetään rekistereissä ja mitkä pinotaan pinoon, sekä siitä, kuka vapauttaa pinon.

Laitevalmistajien nimitykset ja historia

AMD kehitti alkuperäisen 64-bittisen laajennuksen nimellä AMD64, ja Intel lisäsi myöhemmin oman toteutuksensa nimillä kuten Intel64 (aiemmin markkinoitiin myös EM64T). Näitä laajennuksia kutsutaan yleisesti myös x86-64:ksi tai lyhyemmin x64:ksi.

Lisäominaisuudet ja laajennukset

  • SSE/AVX-ominaisuudet ja muut SIMD-laajennukset suorituskyvyn parantamiseksi multimedia- ja laskentatehtävissä.
  • virtualisointituki laitteistotasolla (esim. Intel VT-x, AMD-V), joka helpottaa virtuaalikoneiden suorittamista.
  • sivutaulutasoinen suojaus, NX-bit ja muut muistiin liittyvät turvaominaisuudet.

Yhteenveto

x86-64 (x64) on nykyaikainen ja laajasti käytetty 64-bittinen laajennus perinteiselle x86-arkkitehtuurille. Se yhdistää taaksepäin yhteensopivuuden vanhojen 32-bittisten ohjelmien kanssa sekä uusia mahdollisuuksia laajemmalle osoiteavaruudelle, lisääntyneille rekistereille ja suorituskyvylle. Siirtymä 32-bitisestä 64-bittiseen tuo mukanaan sekä hyötyjä että huomioon otettavia käytännön seikkoja ohjelmistoille ja järjestelmänrakentajille.