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.
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
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
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
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
- 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
- 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
32 bit vs. 64 bit
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
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
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
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.
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
A jelenleg (2011) is gyártásban lévő, 64 bites mikroprocesszor-architektúrák közé tartoznak::
- Az AMD által az x86-architektúrához kifejlesztett 64 bites kiterjesztés, amit később az Intel licencelt, általánosan elterjedt nevén „x86-64”, „AMD64” vagy „x64”:
- Az AMD processzoraiban használt AMD64-kiterjesztések (az Athlon 64, Opteron, Sempron, Turion 64, Phenom, Athlon II és Phenom II processzorok része)
- Az Intel Intel 64-kiterjesztései (az újabb Celeron, Pentium és Xeon processzorok, az Intel Core 2/i3/i5/i7 processzorok és egyes Atom processzorok része)
- A VIA Technologies 64 bites kiterjesztése, ami a VIA Nano processzorok része
- A Power Architektúra 64 bites verziója:
- Az IBM POWER6 és POWER7 processzorai
- Az IBM PowerPC 970 processzora
- A PlayStation 3-ban alkalmazott Cell Broadband Engine, amit az IBM, a Toshiba és a Sony közösen alkottak meg, a 64 bites Power-architektúrájú processzort kombinálja hét vagy nyolc „szinergikus feldolgozó elemmel”.
- Az IBM Xenon processzora, amit a Microsoft Xbox 360 játékkonzolába építettek, 3 64 bites PowerPC processzormagot tartalmaz.
- SPARC V9 architektúra:
- Sun UltraSPARC processzorok
- A Fujitsu SPARC64 processzorai
- Az IBM z/Architecture, az ESA/390 architektúra 64 bites változata, amit az IBM eServer zSeries és System z IBM nagyszámítógépeiben alkalmaznak
- Az Intel IA-64 architektúrája (az Itanium processzorok része)
- A MIPS Technologies MIPS64 architektúrája
- Az ARM Holdings AArch64 architektúrája
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
Jegyzetek
Fordítás
További információk
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.