[go: up one dir, main page]

Ugrás a tartalomhoz

64 bites architektúra

Ellenőrzött
A Wikipédiából, a szabad enciklopédiából
(64 bites szócikkből átirányítva)

Ez a szócikk a számítógép-architektúráról szól. Lásd még: deep color (64 bites) színmélység.

Bit
1 4 8 12 16 18 24 31 32 36 48 60 64 128 256 512
Alkalmazás
16 32 64
Lebegőpontos számítás pontossága
x1 x2 x4
Lebegőpontos számítás decimális pontossága
32 64 128

A számítógép-architektúrák területén 64 bites egészek, memóriacímek és más adategységek azok, melyek legfeljebb 64 biten (8 oktett) kifejezhetők, illetve ilyen szélesek. 64 bites mikroprocesszor-, illetve ALU-architektúrák továbbá azok, melyek ilyen méretű regisztereket, címsíneket és adatsíneket használnak. Szoftveres megközelítésben, a 64 bites számítástechnika 64 bites virtuális memóriacímzésű gépi kód használatát jelenti.

A számítógépek 64 bites generációja az az időszak, amelyben a 64 bites processzorok a megszokottak. A 64 bites gépi szóméret meghatározza a számítógép architektúráját, adat- és címsínjeit, processzorát, és végső soron a rajta futó szoftvert is. A 64 bites CPU-k először a szuperszámítógépekben jelentek meg az 1970-es években (Cray-1, 1975), ezt követték a RISC-alapú munkaállomások és kiszolgálók az 1990-es évek elején, méghozzá a DEC Alpha, a Sun UltraSPARC, a Fujitsu SPARC64 és az IBM PowerPC-AS. 2003-ban jelentek meg a (korábban 32 bites) személyi számítógépekben használható 64 bites CPU-k az x86-64 és a 64 bites PowerPC processzorarchitektúrák formájában, majd 2012-ben[1] a korábban inkább csak beágyazott rendszerek gyártójaként számon tartott ARM által bejelentett, az ARMv8-ban használt AArch64 processzorarchitektúra.

Egy 64 bites regiszter 264 (több mint 18 trillió) különböző értéket vehet fel. Egy 64 bites memóriacímzésű CPU közvetlenül címezhet 264 bájtnyi (=16 exbibyte[2]) bájtcímzésű memóriát.

Alapértelmezés szerint 64 bites architektúra alatt 64 bites adattípusokat és címeket lehetővé tevő 64 bites egész regisztereket és címzési regisztereket értünk. Egy processzor külső adatbuszai és címbuszai azonban a regiszterektől eltérő méretűek is lehetnek, akár nagyobbak is (a 32 bites Pentiumnak például 64 bites adatsínje volt). A 64 bites kifejezés utalhat az alkalmazott alacsony szintű adattípusokra is, pl. 64 bites lebegőpontos számokra.

Architekturális következmények

[szerkesztés]

A processzorok regisztereit különböző csoportokra szokás osztani: vannak „integer” – egész-, egészértékű, fixpontos (szinonimák) ill. általános célú, „lebegőpontos”, „SIMD”, „vezérlő-” (control) regiszterek, továbbá gyakoriak még a címzési aritmetikát kiszolgáló speciális regiszterek, amik változatos neveket viselnek, mint „cím-”, „index-” vagy „bázisregiszterek”. A modern rendszerekben ezeket a funkciókat gyakran az általánosabb célú, egész számos / fixpontos regiszterekre testálják. A legtöbb processzorban kizárólag az általános célú és/vagy címregiszterekkel lehet a memóriában lévő adatokat megcímezni, a többi fajta regiszterrel nem. Ezeknek a regisztereknek a mérete ezért korlátozza a közvetlen módon megcímezhető memória nagyságát, még akkor is, ha más regiszterek, pl. a lebegőpontos regiszterek szélesebbek náluk.

A legtöbb nagy teljesítményű 32 vagy 64 bites processzor (néhány régebbi vagy beágyazott ARM és 32 bites MIPS-architektúra kivételével) rendelkezik integrált lebegőpontos hardverrel, ami gyakran, de nem minden esetben, 64 bites adategységeken végez műveleteket. Az x86/x87 architektúra utasításai például 64 bites (és 32 bites) lebegőpontos értékeket olvasnak be vagy írnak ki a memóriából, a lebegőpontos számok belső tárolási formátuma azonban 80 bites, míg az általános célú regiszterek 32 bitesek. Ezzel ellentétben a 64 bites Alpha család 64 bites lebegőpontos regisztereket és ugyanekkora egész regisztereket használt.

Története

[szerkesztés]

A legtöbb processzort úgy tervezik, hogy egyetlen regiszterében elférjen a számítógép virtuális memóriájában lévő bármely adat címe. Így a virtuális memória címeinek számát – a számítógép munkaterületén tárolható adatmennyiséget – ezen regiszterek mérete határozza meg. Az 1960-as évekbeli IBM System/360-nal kezdődően (mely maga egy kivétel volt a szabály alól, lévén a gépi szó alsó 24 bitjét használta csak címzésre, ami 16 MiB-os címteret eredményezett), az 1970-es évek DEC VAX (és sok másféle) miniszámítógépével, majd az 1980-as évek közepén az Intel 80386-ossal kialakult az a de facto konszenzus, hogy a 32 bit egy jól használható regiszterméret. A 32 bites címregiszter azt jelenti, hogy 232 memóriacím, tehát 4 GiB RAM címezhető meg. Amikor ezeket az architektúrákat tervezték, 4 GiB memória messze meghaladta a realisztikusan szóba jövő memóriamennyiséget, hogy 4 MiB memória több mint elégnek tűnt egy tipikus számítógép számára. A 32 bittel elérhető kb. 4,29 milliárd címet más szempontból is megfelelő méretűnek tartották: a legtöbb adatbázisban vagy más alkalmazásokban ennyi különböző érték már elegendő egyedi hivatkozások létrehozására.

Egyes szuperszámítógép-architektúrák már az 1970-es, 1980-as években 64 bit széles regisztereket használtak. Az 1980-as évek közepén kezdődött meg az Intel i860[3] fejlesztése, a megjelenés egészen 1989-ig (a Windows NT számára[4] túl soká) húzódott. Azonban egészen az 1990-es évek elejéig a 32 bit maradt a norma – ekkorra a memória előállítási árának folyamatos csökkenése lehetővé tette a 4 GiB memóriaméretet megközelítő számítógépek építését, és egyes problémák kezelésére kívánatossá vált a 4 GiB-ot meghaladó virtuálismemória-méret. Az igényre válaszul a MIPS és a DEC kifejlesztették 64 bites mikroprocesszor-architektúráikat, kezdetben csúcskategóriás munkaállomások és szervergépek számára. Az 1990-es évek közepére a HAL Computer Systems, a Sun Microsystems, az IBM, a Silicon Graphics és a Hewlett-Packard is rendelkezett 64 bites architektúrájú munkaállomásokkal és kiszolgálókkal. Az IBM mainframe rendszerei szabályt erősítő kivételek voltak 32 bites adat- és 31 bites címzési méreteikkel; csak 2000-ben kaptak 64 bites processzort. Az 1990-es években több olcsó 64 bites mikroprocesszor volt használatban szórakoztató elektronikai és beágyazott alkalmazásokban. A Nintendo 64[5] és a PlayStation 2 konzolokba jóval a PC-s változatok megjelenése előtt már 64 bites mikroprocesszorokat szereltek. A csúcstechnológiás nyomtatókba és hálózati eszközökbe, továbbá az ipari számítógépekbe is kerültek 64 bites CPU-k, például a Quantum Effect Devices R5000-ese. A személyi számítógépek piacán 2003-tól kezdett lassan terjedni a 64 bites számítástechnika, amikor az Apple Macintosh termékvonala átállt a PowerPC 970 processzorokra (az Apple terminológiája szerint „G5”) és az AMD megjelentette első 64 bites, x86-64 processzorát.

A processzorok praktikus korlátai

[szerkesztés]

Elméletben egy 64 bites mikroprocesszor 16 exbibájt memóriát címezhet meg. A gyakorlatban ez általában jóval kevesebb.

Például az AMD64 architektúra 2011-ben 52 bitet tett elérhetővé a fizikai memória, 48 bitet a virtuális memória megcímzésére[6] (a virtuális memória 2013-ra 64 bites is lehet). Ezek a határok 4 PB-ot (4 × 10245 bájt), illetve 256 TB-ot (256 × 10244 bytes) jelentettek. Egy asztali számítógépbe jelenleg nem lehetséges 4 petabájt memóriát elhelyezni (már csak a memóriacsipek fizikai mérete miatt is), de az AMD hatalmas szerverekben, osztottmemória-fürtökben és a belátható jövőben esetleg megvalósuló egyéb felhasználási területekben gondolkozott, ezért alkalmazta az 52 bites korlátot, ami rengeteg teret ad a növekedésre, de nem építi be a csipek árába a teljes 64 bites címzési tartomány kezelésének költségeit. Hasonló okokból korlátozták a virtuális címméretet a 4 GiB-os korlát 65 536-szorosát jelentő 48 bitre.

64 bites processzorok kronológiája

[szerkesztés]
1961
Az IBM kihozza az IBM 7030 Stretch szuperszámítógépet, 64 bites adatszavakkal, 32/64 bites utasításszavakkal.
1974
A Control Data Corporation megjelenteti a CDC Star-100 vektor-szuperszámítógépet (a korábbi CDC-rendszerek 60 bites architektúrájúak voltak).
Az International Computers Limited ICL 2900 Series gépei 32/64/128 bites kettes komplemens kódolású egész; 64/128 bites lebegőpontos; 32/64/128 bites tömörített BCD és egy 128 bites akkumulátorregiszterrel. Az architektúra túlélte a következő generációs ICL és Fujitsu számítógépek térhódítását. Legutolsó példánya a Fujitsu Supernova, ami az eredeti környezetet 64 bites Intel processzorokon emulálja.
1976
A Cray Research kihozza az első, Cray-1 jelű szuperszámítógépét, ami 64 bites gépi szavas architektúrájú, és a későbbi Cray vektor-szuperszámítógépek alapjául szolgált.
1983
Az Elxsi megjelenteti az Elxsi 6400 párhuzamos mini-szuperszámítógépet (minisupercomputert). Az Elxsi architektúra 64 bites adatregisztereket, de 32 bites címteret használt.
1989
Az Intel bemutatja az Intel i860 RISC processzort. Bár „64 bites mikroprocesszor”-ként reklámozták, lényegében olyan 32 bites architektúra volt, amit kiegészítettek egy 64 bites egész műveletekre képes 3D grafikus egységgel.[7]
1991
A MIPS Technologies gyártja az első 64 bites mikroprocesszort, az R4000-est, ami a MIPS-architektúra harmadik revízióját, a MIPS III ISA utasításkészletet futtatta.[8] A CPU-t az SGI grafikus munkaállomásokban használták az IRIS Crimsonnal kezdve.
A Kendall Square Research megjelentette a KSR1 szuperszámítógépet, saját fejlesztésű, 64 bites VLIW RISC processzoron futó OSF/1 operációs rendszerrel.
1992
A Digital Equipment Corporation (DEC) bemutatja a tisztán 64 bites Alpha architektúrát (első képviselője az Alpha 21064), ami a PRISM projektből nőtte ki magát.[9]
1993
Az Atari kihozza az Atari Jaguar videójáték-konzolt, aminek architektúrája 64 bit széles adatutakat is tartalmazott.[10]
1994
Az Intel bejelenti terveit a Hewlett-Packarddal közösen fejlesztett 64 bites IA-64 architektúra létrehozására, amit a 32 bites IA-32 processzorok utódjának szánnak. A megjelenés céldátumát 1998 és 1999 közé teszik (végül csak 2001-ben jelent meg).
1995
A Sun kihozza 64 bites SPARC processzorát, az UltraSPARC-ot.[11] A Fujitsu által tulajdonolt HAL Computer Systems az általuk kifejlesztett első generációs SPARC64 64 bites processzor köré épített munkaállomásokat. Az IBM megjelentette a 64 bites PowerPC AS (Amazon) architektúrára épülő A10 és A30 mikroprocesszorokat.[12] Az IBM megjelentet egy 64 bites AS/400 rendszerfrissítést is, ami képes az operációs rendszer, az adatbázisok és az alkalmazások átkonvertálására.
1996
A Nintendo kihozza a Nintendo 64 videójáték-konzolt, ami a MIPS R4000-es olcsó változatára épült. A HP megjelenteti a PA-RISC processzorarchitektúrájának 64 bites, 2.0-s verzióját, a PA-8000 CPU-t.[13] Az IBM kihozta felső kategóriás, négyutas SMP, multicsipes processzorát Muskie kódnévvel, ami AS/400 rendszerekben A25 vagy A30 néven futott.
1997
Az IBM megjelenteti 64 bites PowerPC/PowerPC AS processzorainak RS64 termékvonalát.
1998
Az IBM megjelenteti teljesen 64 bites PowerPC/POWER processzorainak POWER3 termékvonalát.[14]
1999
Az Intel megjelenteti tervezett IA-64 architektúrájának utasításkészletét. Az AMD nyilvánosan közzéteszi az IA-32 utasításkészlet általa létrehozott 64 bites kiterjesztését, x86-64 néven (később AMD64).
2000
Az IBM árulni kezdi első 64 bites z/Architecture nagyszámítógépét, a zSeries z900-at. A z/Architecture a 64 bites továbbfejlesztése a 32 bites ESA/390 architektúrának, ami pedig a 32 bites System/360 architektúra leszármazottja.
2001
Az Intel végül megjelenteti az IA-64 processzor-termékvonal első képviselőit, miután éveket késett a piacra dobásukkal. A végül Itaniumnak keresztelt, felső kategóriás szerverekbe szánt CPU-k eladásai elmaradtak az elvárásoktól.
2003
Az AMD bemutatja Opteron és Athlon 64 processzor-termékvonalait, melyek az AMD64 architektúrára épülnek, és az első x86-alapú, 64 bites architektúrájú processzorok. Az Apple szintén kijön a 64 bites „G5” PowerPC 970 CPU-val, amit az IBM-mel gyártat. Az Intel kitart amellett, hogy kizárólag az Itanium családba tartozó 64 bites processzorokat fog megjelentetni.
2004
Az Intel, az AMD piaci sikerére reagálva elismeri, hogy dolgozik az AMD64 kiterjesztések klónján. A kiterjesztés Intel-terminológiában először az IA-32e, majd az EM64T, majd az Intel 64 nevet kapta. Az Intel megjelenteti az első, a Xeon és Pentium 4 CPU-családokba tartozó, 64 bites utasításkészletű processzorokat.
A VIA Technologies bejelenti az Isaiah 64 bites processzorát.[15]
2006
A Sony, az IBM és a Toshiba megkezdi a 64 bites, a PlayStation 3 mellett szerverekbe, munkaállomásokba és más eszközökbe szánt Cell processzor gyártását.
2011
Az ARM Holdings bejelentette az ARMv8-at, az ARM architektúra első 64 bites tagját.[16]

64 bites operációs rendszerek kronológiája

[szerkesztés]
1985
A Cray kiadja az UNICOS-t, a Unix operációs rendszer első 64 bites megvalósítását.[17]
1993
A DEC megjelenteti a 64 bites DEC OSF/1 AXP Unix-szerű operációs rendszerét (későbbi nevén a Tru64 UNIX-ot) az Alpha-architektúrájára.
1994
A Silicon Graphics kibővíti IRIX operációs rendszerét a 6.0-s verziótól kezdve a MIPS R8000 processzor támogatásával.
1995
A DEC kihozza az OpenVMS 7.0-t, az OpenVMS for Alpha első 64 bites változatát. Megjelenik az első 64 bites Linux-disztribúció az Alpha architektúrára.[18]
1996
A Silicon Graphics IRIX operációs rendszerének 6.2 verziójában megjelenik a MIPS R4x00 processzorok támogatása.
1998
A Sun kihozza a Solaris 7-et, teljes 64 bites UltraSPARC-támogatással.
2000
Az IBM megjelenteti a z/OS-t, ami az MVS-ből kifejlesztett 64 bites operációs rendszer, amit az új, 64 bites zSeries nagygépekhez szántak; a 64 bites Linux on zSeries-változat szinte azonnal követte.
2001
A Microsoft megjelenteti a Windows XP 64-Bit Editiont az Itanium IA-64 architektúrájára; 32 bites alkalmazásokat egy külön végrehajtási rétegen keresztül volt képes futtatni.
2001
A Linux az első kernel, ami képes az x86-64 teljes körű támogatására (csak szimulátorban, mivel ekkor még egyetlen x86-64 processzor sem volt a piacon.[19]
2003
Az Apple kihozza a Mac OS X 10.3 „Panther” operációs rendszert, ami képes natív 64 bites egész számos aritmetikára PowerPC 970 processzorokon.[20] Számos Linux-disztribúció jelenik meg AMD64-támogatással. A Microsoft bejelenti terveit az AMD64-et támogató Windows-verziók létrehozására, amik képesek lesznek 32 bites alkalmazások futtatására is. Megjelenik az AMD64-et támogató FreeBSD.
2005
Január 31-én a Sun Solaris 10-e már támogatja az AMD64/EM64T processzorokat. Április 29-én az Apple kihozza a Mac OS X 10.4 „Tiger” verziót, ami a PowerPC 970 processzorral rendelkező gépeken korlátozottan támogatja a 64 bites parancssori alkalmazásokat; a későbbi, Intel-alapú, EM64T utasításkészletű Macekhez kiadott verziók teljes körűen támogatják ezt. Április 30-án a Microsoft megjelenteti a Windows XP Professional x64 Editiont AMD64/EM64T processzorokra.
2006
Megjelenik a Microsoft Windows Vista, külön 64 bites változattal AMD64/EM64T processzorokra, 32 bites kompatibilitással. A 64 bites változatban valamennyi Windows-alkalmazás és -komponens 64 bites, bár közülük számosnak a 32 bites változatát is mellékelték a pluginekkel való kompatibilitás miatt.
2007
Az Apple megjelenteti a Mac OS X 10.5 „Leopard” verziót, ami teljes körűen támogatja a 64 bites alkalmazásokat mind PowerPC 970, mind EM64T processzorokon.
2009
Megjelenik a Microsoft Windows 7, aminek, a Vistához hasonlóan, 64 bites változata is kijön az AMD64/Intel 64 processzorokhoz; sok új számítógépet már alapértelmezetten a 64 bites változattal szállítanak. Kijon a Windows 7 kódbázisával együtt fejlesztett szerverváltozat, a Windows Server 2008 R2, ami az első, a Microsoft által kizárólag 64 biten kiadott operációs rendszer. Az Apple kihozza a Mac OS X 10.6 „Snow Leopard”-ot, ami 64 bites kernellel érkezik AMD64/Intel64 processzorokon, de csak egyes Apple-modelleken kapcsolják be a 64 bites kernelt alapértelmezetten. Ekkora a legtöbb, a Mac OS X 10.6-hoz adott alkalmazás is 64 bites.[20]
2011
Az Apple kihozza a Mac OS X 10.7 „Lion”-t, ami alapértelmezetten 64 bites kernelt futtat a támogatott gépeken. A régebbi, a 64 bites kernelt futtatni nem képes gépeken a kernel 32 bites módban fut, de a korábbiaknak megfelelően természetesen képes a 64 bites alkalmazások futtatására; a Lion egyáltalán nem támogatja a 32 bites processzorú gépeket. Ekkorra szinte minden, a Mac OS X 10.7-hez adott alkalmazás 64 bites, az iTunes-t is beleértve.
2013
Az Apple kihozza az iOS 7-et, ami az AArch64 processzoros eszközökön 64 bites kernellel 64 bites alkalmazásokat képes futtatni.
2014
A Google megjelenteti az Android Lollipopot, az Android operációs rendszer első, 64 bites működésre képes változatát.
2015
Michael Chourdakis elkészíti a DMMI névre hallgató DOS-extendert, amely 64-bites és többprocesszoros futtatási környezetet biztosít DOS operációs rendszeren, ezzel az MS kompatibilis DOS operációs rendszerek is belépnek a 64 bites világba. A DMMI alkalmazásával operációs rendszer 16 bitesként fut tovább az első processzor(mag)on, míg a kliensszoftver egy másik, 64 bites longmode-ba kapcsolt CPU-n fut és a DMMI-n keresztül kommunikál az operációs rendszerrel. A DOS önmagában nem élvezi közvetlenül a 64 bites hardver előnyeit, de az alkalmazás, utility, vagy egyéb kliensprogram igen, illetve megnyílik az út 64 bites driverek létrehozására is. Az extender legfrissebb verziója 2018-tól elérhető, ez már virtualizációs lehetőségeket is tartalmaz. 64 bites program önállóan, DMMI nélkül is, vagy más DOS-longmode interface-en keresztül is futhat DOS-on, így a CandyMan művésznéven publikáló fejlesztőtől a DOS Navigator 2018-as 64-bites verziója, amellyel statikusan linkelve érkezik a saját DPMI64 nevű extendere, illetve ugyancsak tőle az EMS64 - EMS 4.0 szimulátor a 64 bites DOS Navigator készítőjének másik 64 bites szoftvere egy DOS driver, amely képes elérni a csak 64 bites módban elérhető RAM-ot és az EMS specifikációnak megfelelően hozzáférhetővé teszi azt hagyományos DOS programok számára.

64 bites alkalmazások

[szerkesztés]

32 bit vs. 64 bit

[szerkesztés]

A 32 bites architektúráról 64 bitesre való átállás olyan alapvető változtatás, ami miatt a legtöbb operációs rendszert nagy mértékben át kell írni, hogy képes legyen az új architektúrát kiszolgálni – a rendszerszoftvernek kell ugyanis elsősorban közvetlenül kezelnie a tényleges memóriacímzéssel foglalkozó hardvert.[21] Más szoftvereket is át kell írni vagy át kell ültetni az új lehetőségek kihasználásához; a régebbi, 32 bites szoftverek támogatása megoldható „hardverkompatibilitási üzemmód” segítséggel, ahol az új processzorok támogatják az utasításkészlet régebbi, 32 bites változatát is a 64 bites mellett, szoftveres emulációval, vagy akár egy valódi 32 bites processzormag megvalósításával a 64 bites processzoron belül, ahogy azt az Intel tette az Itanium processzorcsaládban, melyek egy IA-32 processzormaggal futtatják a 32 bites x86-alkalmazásokat. A 32 bitesről 64 bitesre fejlesztett architektúrák operációs rendszerei általában támogatják mind 32, mind 64 bites alkalmazások futtatását.[22]

Egy jelentős kivétel ez alól az AS/400, melynek a szoftvere egy virtuális utasításkészleten, a TIMI-n (Technology Independent Machine Interface) fut, amit programindításkor egy alacsony szintű szoftver fordít le natív gépi kódra. Új platformra való átálláskor egyedül ezt az alacsony szintű fordítószoftvert kell módosítani ahhoz, hogy a teljes operációs rendszer és az alkalmazások működjenek az új platformon. Pontosan ezt tették, amikor az IBM áttért a korábbi 32/48 bites „IMPI” utasításkészletről a 64 bites PowerPC-AS utasításkészletre, az „Amazon”-ra (az IMPI utasításkészlet nagyon különböző volt a 32 bites PowerPC utasításkészlethez képest is, így ez komolyabb átállás volt, mintha csak egy processzorcsalád 32 bites utasításkészletéről álltak volna át 64 bitesre).

Az x86-64 (AMD64) 64 bites hardvereken a legtöbb 32 bites operációs rendszer és alkalmazás kompatibilitási problémák nélkül lefuttatható. Bár a 64 bites architektúrák nagyobb címtere megkönnyíti a nagy adatmennyiségekkel dolgozó alkalmazások (digitális videofeldolgozás, tudományos számítások, nagy adatbázisok kezelése) dolgát, komoly vita alakult ki arról, vajon más feladatokra a 32 bites kompatibilitási üzemmódok elérik vagy meghaladják-e majd a natívan 32 bites rendszerek teljesítményét.

Egy bájtkódra fordított Java program módosítás nélkül futtatható akár 32, akár 64 bites Java virtuális gépen. A beépített típusok hosszát és pontosságát a szabvány határozza meg, nem függ a kódot futtató architektúrától. A 64 bites Java virtuális gépen futó programok mindenesetre nagyobb címtérhez férhetnek hozzá.[23]

A sebesség nem az egyetlen szempont, ami a 32/64 bites processzorok összehasonlításánál felmerülhet. A multitasking – többfeladatosság, fürtözés, stressztesztelés – a nagy teljesítményű számítástechnika területén – feladataira a 64 bites architektúrák alkalmasabbak lehetnek.

Összegzés:

  • A 64 bites processzorok 64 bites szoftverrel érik el a legjobb teljesítményt.
  • A 64 bites processzorok visszafelé kompatibilisek és kezelni képesek a legtöbb 32 bites szoftvert.
  • A 32 bites processzorok nem kompatibilisek a 64 bites szoftverekkel.

Pro és kontra érvek

[szerkesztés]

Gyakori tévedés, hogy a 64 bites architektúrák csak 4 GB memóriaméret fölött lehetnek előnyösebbek a 32 biteseknél.[24] Ez nem teljesen igaz:

  • Egyes operációs rendszerek és egyes hardverkonfigurációk 3 GB-ra korlátozzák az IA-32 rendszerek fizikai memóriaterületét, mivel a 3–4 GB közötti régió nagy részét hardvercímzésre használják el – lásd 3 GB-os határ –; a 64 bites architektúrák 4 GB-nál jóval többet is képesek megcímezni. Az IA-32 processzorok a Pentium II-tól fölfelé képesek lehetnek a 36 bites fizikai címzésre a Physical Address Extension (PAE) funkción keresztül, ami 64 GB fizikai címteret biztosítana, melyből 62 GB hozzáférhető normál memóriacímzésre; a PAE-t támogató hardverek és operációs rendszerek kombinációja tehát nincs feltétlenül 4 GB memóriára korlátozva még IA-32 processzorokon sem. Az illesztőprogramok és más kernelmódú szoftverek azonban sok esetben nem kompatibilisek a PAE üzemmóddal.
  • Egyes operációs rendszerek a folyamatok címterének egy részét fenntartják az operációs rendszer használatára, ezzel lényegében csökkentve a felhasználói programok számára mappelhető címterületek méretét. Például a 32 bites Windows (a beállításoktól függően) 1 vagy 2 GB címteret tart fenn a kernel számára, így a felhasználói módú programoknak csak 3 vagy 2 GB marad meg. Ez a határ sokkal magasabb a 64 bites operációs rendszereken.
  • A memóriába leképezett fájlok (memory-mapped file) nehezebben megvalósíthatók 32 bites architektúrákon, mivel egyre gyakoribbak a 4 GB-os meghaladó méretű állományok; az ilyen nagy fájloknak egyszerre csak egy részét lehet a memóriába leképezni, a részeket a címtérből ki-be kell pakolni (swappelni) szükség szerint. Ez azért is probléma, mivel a memóriába való leképezés, ha az OS megfelelően implementálja, egyike a leghatékonyabb módja a lemezen lévő fájlok kezelésének.
  • Egyes 64 bites programok, például kódolók, dekódolók, titkosító szoftverek számára igen előnyös a 64 bites regiszterek elérhetősége, míg más szoftvereket, pl. 3D grafikai alkalmazásokat kevésbé érint a 64 bites környezetre váltás.
  • Egyes 64 bites architektúrák, köztük az x86-64, több általános célú regisztert támogatnak 32 bites párjuknál (ez nem kimondottan a szóhosszúság változása miatt van így). Ez a rövid ciklusok sebességét jelentősen megnövelheti, hiszen a processzornak nem kell a gyorsítótárhoz vagy a memóriához nyúlnia az adatokért, ha az elfér a regiszterekben is.
C nyelvű példa:
int a, b, c, d, e;
for (a=0; a<100; a++)
{
  b = a;
  c = b;
  d = c;
  e = d;
}
Ha a processzor csak két vagy három változót képes a regiszterekben tárolni, a ‘d’ és ‘e’ változók feldolgozásához a memória és a regiszterek között kell adatokat mozgatnia, ami számos CPU-órajelet felemészt. Ha az összes felhasznált érték és változó elfér a regiszterekben, a ciklus ideje alatt a processzornak nem kell adatokat mozgatnia a memória és a regiszterek között. Természetesen a gyorsulás eléréséhez a fordítóprogramnak kell megoldania, hogy a változók ténylegesen a regiszterekhez rendelődjenek.

A 64 bites architektúrák fő hátránya, hogy a 32 bites architektúrákhoz képest ugyanaz az adatmennyiség több helyet foglal a memóriában (a pointerek és esetleg más adattípusok nagyobb mérete, valamint a padding – szóhatárhoz igazítás – miatt). Ez megnöveli adott folyamat memóriaigényét, és a gyorsítótárazás hatékonyságát is csökkentheti. A probléma kezelésének az egyik, viszonylag jól használható módja a részleges 32 bites modell megengedése. Például az ezt az utat járó z/OS operációs rendszer megköveteli, hogy a programkód a 31 bites címtérben foglaljon helyet, míg az adatok a 64 bites régiókban is tárolhatók.

Jelenleg (2013) a legtöbb tulajdonosi x86 szoftvert 32 bites kódra, egy kisebb részüket pedig 32 és 64 bitre egyaránt lefordítanak. Ilyenformán a legtöbb szoftver nem használja ki nagyobb címtér vagy a 64 bites és megnövelt számú regiszterek előnyeit. A legtöbb RISC platformon, illetve a szabad/nyílt forrású operációs rendszerek és programok esetén (ahol a forráskód rendelkezésre áll és 64 bites compilerrel újrafordítható) már évek óta kihasználják a 64 bites számítási környezet előnyeit. Nem minden ilyen alkalmazás igényli a nagyobb címteret vagy a 64 bites adatelemek manipulációját, az ilyen alkalmazások számára főleg az x86-64 architektúra megnövelt számú regisztere jelent nyereséget.

Szoftverek hozzáférhetősége

[szerkesztés]

Az x86-32-höz kötődő 64 bites rendszerekhez (x86-64 és IA-64) néha problémát okoz beszerezni a 32 bites architektúrákra írt programok megfelelőit. A legsúlyosabb gond Microsoft Windows alatt az eszközmeghajtók inkompatibilitása. A legtöbb 32 bites alkalmazói szoftver képes kompatibilitási vagy emulációs módban futni, amilyen a Microsoft WoW64 Technology for IA-64 and AMD64. A 64 bites Windows Native Mode[25] eszközmeghajtó-környezet azonban a 64 bites NTDLL.DLL fölött fut, ami nem képes a 32 bites Win32-alrendszerben végződő hívásokat végrehajtani (pl. olyan eszközökhöz, ahol a tényleges hardverfunkciót felhasználói módú szoftver váltja ki, mint a Winmodemek vagy Winprinterek). Mivel a legtöbb gyártó nem tette elérhetővé 2007 elejéig, a Vista x64 megjelenéséig a 64 bites illesztőprogramokat termékeihez, a 64 bites Windowsok futtatása gyakran nehéz kompromisszumokkal járt. A trend azóta a 64 bites számítástechnika támogatásának irányába mozdult el, ahogy a memóriaárak esése gyakoribbá tette a 4 GB-nál több memória használatát a számítógépekben. A legtöbb gyártó most már elkészíti a 32 bites mellett a 64 bites drivert is az új eszközökhöz, így a 64 bites driverek hiánya már sokkal kisebb probléma – kivételt képeznek a régebbi eszközök, amikhez a gyártók jellemzően nem tesznek 64 bites drivert elérhetővé, így 64 bites rendszereken nem is lehet használni azokat.

A driverek kompatibilitása a nyílt forrású eszközmeghajtóknál kisebb gondot jelent, mivel a forráskód birtokában a 32 bites verziókat viszonylag könnyen át lehet írni 64 bitesre. 2007 előtt a nyílt forrású platformokon inkább a felhasználók alacsony száma miatt volt problémás a 64 bites rendszerek támogatása.

A Mac OS X Tiger és a Mac OS X Leopard gépek kernele 32 bites volt, de 64 bites processzorokon képes volt 64 bites felhasználói módú kódok futtatására. A Mac OS X Snow Leopardhoz 32 és 64 bites kernel is készült, és a legtöbb Mac gép még 64 bites processzoron is a 32 bites kernelt futtatta; ez lehetővé tette, hogy a 64 bites felhasználói programok futtatása mellett továbbra is 32 bites eszközmeghajtókat használjanak – a kompatibilitási nyereség mellett elveszítve a 64 bites driverek teljesítményelőnyét. A Mac OS X Lion több Mac modellen futott 64 bites kernellel, az OS X Mountain Lion pedig már kizárólagosan 64 bites kernellel futott. A 64 bites CPU-jú hardvereken a 32 és 64 bites OS X kernelek is képesek a 32 bites felhasználói kódok futtatására, és az OS X összes verziójába beépítették a 32 bites alkalmazások által használt 32 bites programkönyvtárakat, hogy azok teljes értékűen használhatók legyenek ezeken a rendszereken.

DOS-on elvben a kezdetektől fogva lehetséges volt a 32 és 64 bites programok futtatása, noha utóbbira nagyon kevés gyakorlati példa létezik. Mindez nem a kernel valamilyen extra hozzáadott funkciója, hanem minimalista jellege miatt van így. A kernel maga, valamint a beépített, opcionális és harmadik féltől származó driverek egyaránt, ide értve az IBM-kompatibilis számítógépek DOS-korszakát ugyanúgy, mint a mai, modern drivereket, a memóriában vannak ugyan, de futni csak akkor futnak, amikor egy program meghívja őket. Ennek köszönhetően volt lehetséges az önmagában 16 bites operációs rendszeren 32 bites programokat futtatni már a 32 bites méret megjelenésekor, esetenként egy-egy speciális driver is lehet 32 bites (pl. Ruslan Starodubov HDA Audio driverei az HX.DOS runtimeban) A 64 bites architektúrával hasonló a helyzet. Egy processzoron futtatni a különböző méretű kódokat azonban sok elpazarolt ciklust jelent a módok váltogatása okán. Több processzoros vagy többmagos rendszereken lehetőség van a különböző méretű kódok különböző CPU-kon való futtatására DMMI interface segítségével, amely ezt a problémát kiiktatja.

A Linux és a többi Unix-szerű operációs rendszer többsége, valamint a hozzájuk tartozó C és C++ fejlesztői eszközkészletek már a Microsoft kiadásai előtt évekkel támogatták a 64 bites processzorokat, illetve adtak ki 64 bites operációs rendszereket. A legtöbb alkalmazás és programkönyvtár ezeken a platformokon nyílt forrású, C-ben vagy C++-ban íródott, tehát ha „64-bit-safe” módon íródtak (tehát nem tesznek feltételezéseket pl. arra nézve, hogy egy int típus 32 vagy 64 bites[26]), akkor könnyen fordítható belőlük 64 bites változat. A forrás-alapú, új kiadásokat gyakran megjelentető terjesztési modell csökkenti a 64 bites alkalmazások elérhetőségének problémáját ezeknél az operációs rendszereknél.

64 bites adatmodellek

[szerkesztés]

A 32 bites programokban a pointerek és az adattípusok (pl. egész) általában ugyanakkora méretűek; ez a 64 bites számítógépeken nem feltétlenül igaz.[27][28][29] Az egyes programozási nyelvekben, pl. C és leszármazottaiban, mint a C++ és Objective-C alkalmazott adattípus-keverés így 32 bites implementációkban működőképes lehet, 64 biten nem feltétlenül.

A 64 bites gépeken futó, C-alapú vagy C-leszármazott alapú programozási környezetekben az „int” változók sok esetben továbbra is 32 bitesek, de a „hosszú” egészek és mutatók (long integer, long pointer) 64 bitesek. Ezt „LP64” adatmodellnek is nevezik. Ennek alternatívája az „ILP64” adatmodell, ahol mindhárom adattípus 64 bites, sőt a „SILP64”, ahol még a „rövid egész” (short integer) típus is 64 bites. A legtöbb esetben azonban a szükséges módosítások viszonylag kis számúak és nyilvánvalóak, és a jól megírt programok nagy részét egyszerű újrafordítás után futtatni lehet a 64 bites környezetben. Egy másik lehetőség az „LLP64” modell, ami a 32 bites kompatibilitást azzal biztosítja, hogy az int-et és a long típust is 32 bitesnek hagyja meg. Az „LL” a „long long integer” típusra utal, ami legalább 64 bites az összes platformon, beleértve a 32 bites környezeteket.

64 bites adatmodellek
Adatmodell short (integer) int long (integer) long long pointer/
size_t
Példa operációs rendszer
LLP64/
IL32P64
16 32 32 64 64 Microsoft Windows (X64/IA-64)
LP64/
I32LP64
16 32 64 64 64 A legtöbb Unix és Unix-szerű rendszer, pl. Solaris, Linux, BSD és OS X; z/OS
ILP64 16 64 64 64 64 A HAL Computer Systems Solaris-átültetése SPARC64-re
SILP64 64 64 64 64 64 UNICOS

Sok jelenlegi 64 bites fordítóprogram alkalmazza az „LP64” modellt (köztük a Solaris, az AIX, a HP-UX, a Linux, az OS X, a BSD és az IBM z/OS natív fordítói). A Microsoft Visual C++ fordítóprogramja az LLP64 modellt használja. Az LP64 modell hátránya, hogy long típust int-en tárolva túlcsordulás jöhet létre. Más részről, egy pointer long változóba töltése működik. Az LLP modellben ennek a fordítottja igaz. Ezek a problémák nem lépnek fel a teljesen szabványos módon megírt kód esetén, de a programozók gyakran implicit feltevésekkel élnek az egész típusok méretével kapcsolatban.

Az egyes adatmodellek közötti választás a fordítóprogram szintjén dől el, tehát ugyanazon az operációs rendszeren több adatmodell is együtt létezhet. Általában azonban az OS API-jai által használt elsődleges modell dominál egy-egy platformon.

Egy másik figyelembe veendő kérdés az eszközmeghajtók által használt adatmodell. A driverek a modern operációs rendszerek kódjának jelentős részét alkotják (bár az operációs rendszer futásakor ezek nagy részét nem kell betölteni). A legtöbb eszközmeghajtó erősen támaszkodik a pointerekre az adatműveletek során, és egyes esetekben adott méretű pointereket kell a hardverbe töltenie, hogy azok DMA-műveleteket végezhessenek. Például egy 32 bites PCI eszköz meghajtóprogramja hiába kérné az eszközt, hogy DMA-val töltsön adatokat egy 64 bites számítógép 4 GB fölötti memóriaterületére, az nem lenne erre képes, mert az azokhoz a címekhez tartozó pointerek nem férnének bele az eszköz DMA-regisztereibe. Ezt az operációs rendszer vagy úgy küszöböli ki, hogy az eszköz korlátozott memória-hozzáférését figyelembe veszi a DMA-kéréseknél, vagy IOMMU használatával.

Jelenlegi 64 bites mikroprocesszor-architektúrák

[szerkesztés]

A jelenleg (2011) is gyártásban lévő, 64 bites mikroprocesszor-architektúrák közé tartoznak::

A legtöbb, 32 bites processzor-architektúrából származtatott 64 bites architektúra az előd architektúra 32 bites kódjait natívan, teljesítménycsökkenés nélkül képes futtatni. Az ilyen jellegű támogatást bi-architekturális vagy multi-architekturális támogatásnak is nevezik.

Kapcsolódó szócikkek

[szerkesztés]

Jegyzetek

[szerkesztés]
  1. ARM Holdings. "ARM Launches Cortex-A50 Series, the World’s Most Energy-Efficient 64-bit Processors". Sajtóközlemény. Elérés: 2012-10-31.
  2. A 16 exabyte értéke 16·1018, míg a 16 exbibyte értéke pontosan 264. A 16 exbibyte értéke 18 exabyte-nál is jóval nagyobb.
  3. Grimes, Jack (1989). „The Intel i860 64-Bit Processor: A General-Purpose CPU with 3D Graphics Capabilities”. IEEE Computer Graphics and Applications 9 (4), 85–94. o. [2011. június 29-i dátummal az eredetiből archiválva]. DOI:10.1109/38.31467. (Hozzáférés: 2010. november 19.) 
  4. G. Pascal Zachary: Show Stopper!: The Breakneck Race to Create Windows NT and the Next Generation at Microsoft, ISBN 978-0029356715
  5. NEC (1998-01-20). "NEC Offers Two High Cost Performance 64-bit RISC Microprocessors". Sajtóközlemény. Elérés: 2011-01-09. “Versions of the VR4300 processor are widely used in consumer and office automation applications, including the popular Nintendo 64TM video game and advanced laser printers such as the recently announced, award-winning Hewlett-Packard LaserJet 4000 printer family.”
  6. AMD64 Programmer's Manual Volume 2: System Programming, order number 24593, revision 3.14, September 2007, Advanced Micro Devices
  7. i860 64-Bit Microprocessor. Intel, 1989. (Hozzáférés: 2010. november 30.)
  8. Joe Heinrich: "MIPS R4000 Microprocessor User's Manual, Second Edition", 1994, MIPS Technologies, Inc.
  9. Richard L. Sites: "Alpha AXP Architecture", Digital Technical Journal, Volume 4, Number 4, 1992, Digital Equipment Corporation.
  10. Atari Jaguar History. AtariAge. Hozzáférés ideje: 9 August 2010.
  11. Linley Gwennap: "UltraSparc Unleashes SPARC Performance", Microprocessor Report, Volume 8, Number 13, 3 October 1994, MicroDesign Resources.
  12. J. W. Bishop, et al.: "PowerPC AS A10 64-bit RISC microprocessor", IBM Journal of Research and Development, Volume 40, Number 4, July 1996, IBM Corporation.
  13. Linley Gwennap: "PA-8000 Combines Complexity and Speed", Microprocessor Report, Volume 8, Number 15, 14 November 1994, MicroDesign Resources
  14. F. P. O'Connell and S. W. White: "POWER3: The next generation of PowerPC processors", IBM Journal of Research and Development, Volume 44, Number 6, November 2000, IBM Corporation.
  15. VIA Unveils Details of Next-Generation Isaiah Processor Core. VIA Technologies, Inc.. [2004. október 10-i dátummal az eredetiből archiválva]. (Hozzáférés: 2007. július 18.)
  16. ARMv8 Technology Preview, 2011. október 31. [2018. június 10-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. november 15.)
  17. Stefan Berka: Unicos Operating System. www.operating-system.org. [2010. november 26-i dátummal az eredetiből archiválva]. (Hozzáférés: 2010. november 19.)
  18. My Life and Free Software
  19. Andi Kleen: Porting Linux to x86-64, 2001. június 26. [2010. szeptember 10-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. augusztus 21.) „Status: The kernel, compiler, tool chain work. The kernel boots and work on simulator and is used for porting of userland and running programs”
  20. a b John Siracusa: Mac OS X 10.6 Snow Leopard: the Ars Technica review. Ars Technica. [2009. október 9-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. szeptember 6.)
  21. Mashey, John (2006. október 1.). „The Long Road to 64 Bits4 (8), 85–94. o. (Hozzáférés: 2011. február 19.) 
  22. Windows 7: 64 bit vs 32 bit?. W7 Forums. [2009. április 5-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. április 5.)
  23. Frequently Asked Questions About the Java HotSpot VM. Sun Microsystems, Inc.. [2007. május 10-i dátummal az eredetiből archiválva]. (Hozzáférés: 2007. május 3.)
  24. A description of the differences between 32-bit versions of Windows Vista and 64-bit versions of Windows Vista. (Hozzáférés: 2011. október 14.)
  25. Inside Native Applications. Technet.microsoft.com, 2006. november 1. [2010. október 23-i dátummal az eredetiből archiválva]. (Hozzáférés: 2010. november 19.)
  26. [1]
  27. "Exploring 64-bit development on POWER5: How portable is your code, really?" by Peter Seebach 2006
  28. "The Ten Commandments for C Programmers" by Henry Spencer
  29. The Story of Thud and Blunder. Datacenterworks.com. (Hozzáférés: 2010. november 19.)

Fordítás

[szerkesztés]
  • Ez a szócikk részben vagy egészben a 64-bit computing című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.

További információk

[szerkesztés]