przetwarzanie 64-bitowe - 64-bit computing

W architekturze komputera , 64-bitowych liczb całkowitych , adresów pamięci , lub innych danych jednostkach są te, które są 64- bitowy (8- oktet ) szerokości. Ponadto architektury 64-bitowej jednostki centralnej (CPU) i jednostek arytmetyczno-logicznych (ALU) są oparte na rejestrach procesora , szynach adresowych lub szynach danych o tym rozmiarze. Mikrokomputery 64-bitowe to komputery, w których mikroprocesory 64-bitowe są normą. Z perspektywy oprogramowania przetwarzanie 64-bitowe oznacza użycie kodu maszynowego z 64-bitowymi adresami pamięci wirtualnej . Jednak nie wszystkie 64-bitowe zestawy instrukcji obsługują pełne 64-bitowe adresy pamięci wirtualnej; Na przykład x86-64 i ARMv8 obsługują tylko 48 bitów adresu wirtualnego, przy czym pozostałe 16 bitów adresu wirtualnego musi zawierać same zera lub same jedynki , a kilka zestawów instrukcji 64-bitowych obsługuje mniej niż 64 bity pamięci fizycznej adres.

Termin 64-bitowy opisuje generację komputerów, w których procesory 64-bitowe są normą. 64 bity to rozmiar słowa, który definiuje pewne klasy architektury komputera, magistrali, pamięci i procesorów, a co za tym idzie, działającego na nich oprogramowania. 64-bitowe procesory są używane w superkomputerach od lat 70 - tych ( Cray-1 , 1975) oraz w stacjach roboczych i serwerach opartych na zredukowanych zestawach instrukcji (RISC) od wczesnych lat 90-tych, zwłaszcza MIPS R4000 , R8000 i R10000 , sprzęt cyfrowy Corporation (DEC) Alpha The Sun Microsystems UltraSPARC i IBM RS64 i POWER3 a później MOCY mikroprocesory . W 2003 roku, 64-bitowe procesory zostały wprowadzone do (dawniej 32-bitowej ) nurtu osobistego komputera rynku w postaci x86-64 procesorów i PowerPC G5 , a zostały wprowadzone w 2012 roku w architekturze ARM kierowania smartfonów i tabletów , pierwszy sprzedany 20 września 2013 r. w iPhonie 5S z układem ARMv8-A Apple A7 na chipie (SoC).

Rejestr 64-bitowy może przechowywać dowolną z 264 (ponad 18 kwintylionów lub 1,8×10 19 ) różnych wartości. Zakres wartości liczb całkowitych , które mogą być przechowywane w 64 bitach, zależy od używanej reprezentacji liczb całkowitych . W przypadku dwóch najczęstszych reprezentacji zakres wynosi od 0 do 18 446 744 073 709 551 615 (2 64 - 1) dla reprezentacji jako ( bez znaku ) liczby binarnej oraz od -9 223 372 036 854 775 808 (-2 63 ) do 9 223 372 036 854 775 807 (2 63 - 1) dla reprezentacji jako dwójki . W związku z tym procesor z 64-bitowymi adresami pamięci może uzyskać bezpośredni dostęp do 2 64 bajtów (16 eksbibajtów lub EiB ) bajtowej pamięci adresowalnej .

Bez dalszych kwalifikacji, 64-bitowa architektura komputerowa ma zazwyczaj rejestry procesorów całkowitych i adresujących o szerokości 64 bitów, co umożliwia bezpośrednią obsługę 64-bitowych typów danych i adresów. Jednak procesor może mieć zewnętrzne magistrale danych lub magistrale adresowe o rozmiarach innych niż rejestry, nawet większe (na przykład 32-bitowy Pentium miał 64-bitową magistralę danych).

Termin ten może również odnosić się do rozmiaru typów danych niskiego poziomu, takich jak 64-bitowe liczby zmiennoprzecinkowe .

Implikacje architektoniczne

Rejestry procesora są zazwyczaj podzielone na kilka grup: całkowite , zmiennoprzecinkowe , jednoinstrukcyjne-wiele danych ( SIMD ) , kontrolne i często specjalne rejestry do arytmetyki adresów , które mogą mieć różne zastosowania i nazwy, takie jak adres , indeks lub podstawa rejestry . Jednak we współczesnych projektach funkcje te są często wykonywane przez rejestry liczb całkowitych ogólnego przeznaczenia . W większości procesorów do adresowania danych w pamięci można używać tylko rejestrów całkowitych lub rejestrów adresowych; inne typy rejestrów nie mogą. Dlatego rozmiar tych rejestrów zwykle ogranicza ilość bezpośrednio adresowalnej pamięci, nawet jeśli istnieją rejestry, takie jak rejestry zmiennoprzecinkowe, które są szersze.

Większość wysokowydajnych 32- i 64-bitowych procesorów (niektóre godne uwagi wyjątki to starsza lub wbudowana architektura ARM (ARM) i 32-bitowa architektura MIPS (MIPS) mają zintegrowany sprzęt zmiennoprzecinkowy, który często, choć nie zawsze, jest oparty na na 64-bitowych jednostkach danych. Na przykład, chociaż architektura x86 / x87 ma instrukcje zdolne do ładowania i przechowywania 64-bitowych (i 32-bitowych) wartości zmiennoprzecinkowych w pamięci, wewnętrzne dane zmiennoprzecinkowe i format rejestru mają szerokość 80 bitów, podczas gdy ogólnego przeznaczenia rejestry mają szerokość 32 bitów. W przeciwieństwie do tego, 64-bitowa rodzina Alpha używa 64-bitowego zmiennoprzecinkowego formatu danych i rejestru oraz 64-bitowych rejestrów całkowitych.

Historia

Wiele zestawów instrukcji komputerowych jest zaprojektowanych tak, aby pojedynczy rejestr liczb całkowitych mógł przechowywać adres pamięci w dowolnej lokalizacji w fizycznej lub wirtualnej pamięci komputera . Dlatego całkowita liczba adresów do pamięci jest często określana przez szerokość tych rejestrów. IBM System / 360 z 1960 roku był jednym z pierwszych 32-bitowy komputer; miał 32-bitowe rejestry liczb całkowitych, chociaż używał tylko 24 bitów słowa dla adresów, co dało 16  MiB ( 16 × 1024 2 bajty ) przestrzeń adresową. 32-bitowe superminikomputery , takie jak DEC VAX , stały się powszechne w latach 70., a 32-bitowe mikroprocesory, takie jak rodzina Motorola 68000 i 32-bitowe elementy rodziny x86, począwszy od Intela 80386 , pojawiły się w połowie 1980, czyniąc 32 bity czymś w rodzaju konsensusu de facto jako wygodny rozmiar rejestru.

32-bitowy rejestr adresowy oznacza, że 2 32 adresów, albo 4  GB miejsca z losowego dostępu do pamięci (RAM), może się odwoływać. Kiedy te architektury zostały opracowane, 4 GiB pamięci było tak daleko poza typowymi ilościami (4 MiB) w instalacjach, że uznano, że jest to wystarczający zapas na adresowanie. 4,29 miliarda adresów zostało uznane za odpowiedni rozmiar do pracy z innego ważnego powodu: 4,29 miliarda liczb całkowitych wystarcza do przypisania unikalnych odwołań do większości jednostek w aplikacjach, takich jak bazy danych .

Niektóre architektury superkomputerów z lat 70. i 80., takie jak Cray-1 , wykorzystywały rejestry o szerokości do 64 bitów i obsługiwały 64-bitową arytmetykę liczb całkowitych, chociaż nie obsługiwały adresowania 64-bitowego. W połowie lat 80. rozwój Intel i860 rozpoczął się w wydaniu (za późno na Windows NT) 1989; i860 miał 32-bitowe rejestry liczb całkowitych i 32-bitowe adresowanie, więc nie był w pełni 64-bitowym procesorem, chociaż jego jednostka graficzna obsługiwała 64-bitową arytmetykę liczb całkowitych. Jednak 32 bity pozostawały normą aż do początku lat 90., kiedy ciągłe obniżanie kosztów pamięci doprowadziło do instalacji z ilością pamięci RAM zbliżającą się do 4 GiB, a wykorzystanie przestrzeni pamięci wirtualnej przekraczających pułap 4 GiB stało się pożądane do obsługi niektórych typów problemów. W odpowiedzi MIPS i DEC opracowały 64-bitowe architektury mikroprocesorowe, początkowo dla wysokiej klasy stacji roboczych i serwerów . W połowie lat 90. firmy HAL Computer Systems , Sun Microsystems , IBM , Silicon Graphics i Hewlett Packard opracowały architektury 64-bitowe dla swoich systemów stacji roboczych i serwerów. Godnym uwagi wyjątkiem od tego trendu były komputery mainframe firmy IBM, które następnie wykorzystywały 32-bitowe dane i 31-bitowe rozmiary adresów; komputery mainframe IBM nie zawierały procesorów 64-bitowych do 2000 roku. W latach 90. w elektronice użytkowej i aplikacjach wbudowanych stosowano kilka tanich 64-bitowych mikroprocesorów. Warto zauważyć, że Nintendo 64 i PlayStation 2 miały 64-bitowe mikroprocesory przed ich wprowadzeniem na komputery osobiste. Wysokiej klasy drukarki, sprzęt sieciowy i komputery przemysłowe również wykorzystywały 64-bitowe mikroprocesory, takie jak Quantum Effect Devices R5000 . Przetwarzanie 64-bitowe zaczęło spływać na pulpit komputera osobistego od 2003 r., kiedy niektóre modele z linii Macintosh firmy Apple przeszły na procesory PowerPC 970 (określane przez firmę Apple jako G5 ), a firma Advanced Micro Devices (AMD) wydała swój pierwszy 64-bitowy procesor. bitowy procesor x86-64 .

64-bitowa oś czasu danych

1961
IBM dostarcza superkomputer IBM 7030 Stretch , który wykorzystuje 64-bitowe słowa danych i 32- lub 64-bitowe słowa instrukcji.
1974
Control Data Corporation wprowadza na rynek superkomputer wektorowy CDC Star-100 , który wykorzystuje 64-bitową architekturę słowa (wcześniejsze systemy CDC były oparte na architekturze 60-bitowej).
International Computers Limited wprowadza na rynek serię ICL 2900 z 32-bitowymi, 64-bitowymi i 128-bitowymi liczbami całkowitymi dopełniającymi do dwóch ; 64-bitowy i 128-bitowy zmiennoprzecinkowy; 32-bitowy, 64-bitowy i 128-bitowy spakowany dziesiętny i 128-bitowy rejestr akumulacyjny. Architektura przetrwała dzięki serii maszyn ICL i Fujitsu. Najnowsza to Fujitsu Supernova, która emuluje oryginalne środowisko na 64-bitowych procesorach Intela.
1976
Cray Research dostarcza pierwszy superkomputer Cray-1 , który jest oparty na 64-bitowej architekturze słowa i będzie stanowił podstawę późniejszych superkomputerów wektorowych Cray.
1983
Elxsi uruchamia równoległy minisuperkomputer Elxsi 6400 . Architektura Elxsi ma 64-bitowe rejestry danych, ale 32-bitową przestrzeń adresową.
1989
Intel wprowadza procesor Intel i860 ze zredukowanym zestawem instrukcji (RISC). Sprzedawany jako „64-bitowy mikroprocesor”, miał zasadniczo 32-bitową architekturę, wzbogaconą o jednostkę graficzną 3D zdolną do 64-bitowych operacji na liczbach całkowitych.
1993
Atari przedstawia konsolę do gier wideo Atari Jaguar , która zawiera w swojej architekturze kilka 64-bitowych ścieżek danych.

64-bitowa oś czasu adresu

1991
MIPS Computer Systems produkuje pierwszy 64-bitowy mikroprocesor, R4000 , który implementuje architekturę MIPS III , trzecią wersję swojej architektury MIPS . Procesor jest używany w graficznych stacjach roboczych SGI, począwszy od IRIS Crimson . Firma Kendall Square Research dostarcza swój pierwszy superkomputer KSR1, oparty na opatentowanej architekturze 64-bitowego procesora RISC z systemem OSF/1 .
1992
Digital Equipment Corporation (DEC) wprowadza czystą 64-bitową architekturę Alpha, która powstała w wyniku projektu PRISM .
1994
Intel ogłasza plany dotyczące 64-bitowej architektury IA-64 (opracowanej wspólnie z Hewlett-Packard ) jako następcy swoich 32-bitowych procesorów IA-32 . Celem była data premiery w latach 1998-1999.
1995
Firma Sun wprowadza na rynek 64-bitowy procesor SPARC , UltraSPARC . Należąca do Fujitsu firma HAL Computer Systems wprowadza na rynek stacje robocze oparte na 64-bitowym procesorze, niezależnie zaprojektowanym przez HAL SPARC64 pierwszej generacji . IBM wypuszcza mikroprocesory A10 i A30, pierwsze 64-bitowe procesory PowerPC AS. IBM wydaje również aktualizację 64-bitowego systemu AS/400 , która umożliwia konwersję systemu operacyjnego, bazy danych i aplikacji.
1996
Nintendo przedstawia konsolę do gier wideo Nintendo 64 , zbudowaną na bazie taniego wariantu MIPS R4000. HP wprowadza na rynek pierwszą implementację swojej 64-bitowej architektury PA-RISC 2.0 , PA-8000 .
1998
IBM wypuszcza linię POWER3 w pełni 64-bitowych procesorów PowerPC/ POWER .
1999
Intel udostępnia zestaw instrukcji dla architektury IA-64. AMD publicznie ujawnia swój zestaw 64-bitowych rozszerzeń do IA-32, o nazwie x86-64 (później pod nazwą AMD64).
2000
IBM dostarcza swój pierwszy 64-bitowy komputer mainframe z/ArchitecturezSeries z900. z/Architecture to 64-bitowa wersja 32-bitowej architektury ESA/390 , potomka 32-bitowej architektury System/360 .
2001
Intel dostarcza linię procesorów IA-64 po wielokrotnych opóźnieniach w wejściu na rynek. Teraz pod marką Itanium i ukierunkowaną na serwery z najwyższej półki, sprzedaż nie spełnia oczekiwań.
2003
AMD wprowadza swoje linie procesorów Opteron i Athlon 64 , oparte na architekturze AMD64, która jest pierwszą 64-bitową architekturą procesorów x86. Apple dostarcza również 64-bitowy procesor PowerPC 970 „G5” produkowany przez IBM. Intel utrzymuje, że jego chipy Itanium pozostaną jego jedynymi 64-bitowymi procesorami.
2004
Intel, reagując na rynkowy sukces AMD, przyznaje, że rozwijał klon rozszerzeń AMD64 o nazwie IA-32e (później przemianowany na EM64T, a następnie ponownie przemianowany na Intel 64). Firma Intel dostarcza zaktualizowane wersje swoich procesorów z rodziny Xeon i Pentium 4 obsługujące nowy 64-bitowy zestaw instrukcji.
VIA Technologies przedstawia 64-bitowy procesor Isaiah .
2006
Sony, IBM i Toshiba rozpoczynają produkcję 64-bitowego procesora Cell do użytku w PlayStation 3 , serwerach, stacjach roboczych i innych urządzeniach. Intel wypuścił Core 2 Duo jako pierwszy główny procesor x86-64 dla swojej linii mobilnej, stacjonarnej i stacji roboczej. Wcześniejsze 64-bitowe linie procesorów rozszerzających nie były powszechnie dostępne na rynku detalicznym (większość 64-bitowych Pentium 4/D była OEM), 64-bitowe Pentium 4, Pentium D i Celeron nie weszły do ​​masowej produkcji aż do końca 2006 roku z powodu problem z niską wydajnością (większość płytek o dobrej wydajności była skierowana na serwery i komputery mainframe, podczas gdy mainstream nadal pozostawał linią 32-bitowych procesorów 130 nm do 2006 r.) i wkrótce stał się low-end po debiucie Core 2. AMD wypuściło swój pierwszy 64-bitowy procesor mobilny i wyprodukowany w 90 nm.
2011
ARM Holdings ogłasza ARMv8-A, pierwszą 64-bitową wersję architektury ARM .
2012
ARM Holdings ogłosił swoje rdzenie Cortex-A53 i Cortex-A57, swoje pierwsze rdzenie oparte na architekturze 64-bitowej, 30 października 2012 r.
2013
Apple ogłasza iPhone'a 5S z pierwszym na świecie 64-bitowym procesorem w smartfonie, który wykorzystuje ich system-on-a-chip oparty na A7 ARMv8-A.
2014
Google ogłasza tablet Nexus 9 , pierwsze urządzenie z Androidem działające na 64-bitowym układzie Tegra K1.

64-bitowa oś czasu systemu operacyjnego

1985
Cray wypuszcza UNICOS , pierwszą 64-bitową implementację systemu operacyjnego Unix .
1993
DEC wypuszcza 64-bitowy system operacyjny podobny do systemu Unix DEC OSF/1 AXP (później przemianowany na Tru64 UNIX) dla swoich systemów opartych na architekturze Alpha .
1994
Wsparcie dla procesora R8000 zostało dodane przez Silicon Graphics do systemu operacyjnego IRIX w wersji 6.0.
1995
DEC wydaje OpenVMS 7.0, pierwszą pełną 64-bitową wersję OpenVMS dla Alpha. Wydana zostaje pierwsza 64-bitowa dystrybucja Linuksa dla architektury Alpha.
1996
Wsparcie dla procesorów R4x00 w trybie 64-bitowym zostało dodane przez Silicon Graphics do systemu operacyjnego IRIX w wersji 6.2.
1998
Firma Sun wypuszcza Solaris 7 z pełną obsługą 64-bitowego UltraSPARC .
2000
IBM wypuszcza z/OS , 64-bitowy system operacyjny wywodzący się z MVS , dla nowych 64-bitowych komputerów mainframe zSeries ; 64-bitowy system Linux on z Systems niemal natychmiast nadąża za wydaniem procesora.
2001
Linux staje się pierwszym jądrem systemu operacyjnego, które w pełni obsługuje x86-64 (na symulatorze, ponieważ nie wydano jeszcze procesorów x86-64).
2001
Microsoft wypuszcza Windows XP 64-Bit Edition dla architektury Itanium IA-64; może uruchamiać aplikacje 32-bitowe przez warstwę wykonawczą.
2003
Apple wypuszcza swój system operacyjny Mac OS X 10.3 „Panther”, który dodaje obsługę natywnej 64-bitowej arytmetyki liczb całkowitych na procesorach PowerPC 970 . Kilka dystrybucji Linuksa zostało wydanych z obsługą AMD64 . Wydania FreeBSD z obsługą AMD64.
2005
4 stycznia Microsoft wycofuje Windows XP 64-Bit Edition, ponieważ żaden komputer z procesorami IA-64 nie był dostępny od września poprzedniego roku i ogłasza, że ​​opracowuje wersje x86-64 systemu Windows, aby go zastąpić. 31 stycznia Sun wypuszcza Solaris 10 z obsługą procesorów AMD64 i EM64T. 29 kwietnia firma Apple wypuszcza system Mac OS X 10.4 „Tiger”, który zapewnia ograniczone wsparcie dla 64-bitowych aplikacji wiersza polecenia na komputerach z procesorami PowerPC 970; nowsze wersje dla komputerów Mac z procesorami Intel obsługiwały 64-bitowe aplikacje wiersza polecenia na komputerach Mac z procesorami EM64T. 30 kwietnia firma Microsoft wypuszcza systemy Windows XP Professional x64 Edition i Windows Server 2003 x64 Edition dla procesorów AMD64 i EM64T.
2006
Firma Microsoft wydaje system Windows Vista , w tym 64-bitową wersję dla procesorów AMD64/EM64T, która zachowuje 32-bitową zgodność. W wersji 64-bitowej wszystkie aplikacje i składniki systemu Windows są 64-bitowe, chociaż wiele z nich zawiera również wersje 32-bitowe, aby zapewnić zgodność z wtyczkami .
2007
Apple wypuszcza system Mac OS X 10.5 „Leopard”, który w pełni obsługuje aplikacje 64-bitowe na komputerach z procesorami PowerPC 970 lub EM64T.
2009
Microsoft wypuszcza Windows 7 , który, podobnie jak Windows Vista, zawiera pełną 64-bitową wersję dla procesorów AMD64/Intel 64; większość nowych komputerów jest domyślnie ładowana w wersji 64-bitowej. Microsoft wypuszcza również Windows Server 2008 R2 , który jest pierwszym 64-bitowym systemem operacyjnym przeznaczonym wyłącznie dla serwerów. Apple wypuszcza system Mac OS X 10.6 „Snow Leopard”, który jest dostarczany z 64-bitowym jądrem dla procesorów AMD64/Intel64, chociaż tylko niektóre najnowsze modele komputerów Apple będą domyślnie obsługiwać 64-bitowe jądro. Większość aplikacji dołączonych do systemu Mac OS X 10.6 jest teraz również 64-bitowa.
2011
Apple wypuszcza system Mac OS X 10.7 „Lion”, który domyślnie uruchamia 64-bitowe jądro na obsługiwanych maszynach. Starsze maszyny, które nie mogą uruchomić jądra 64-bitowego, uruchamiają jądro 32-bitowe, ale, podobnie jak we wcześniejszych wersjach, nadal mogą uruchamiać aplikacje 64-bitowe; Lion nie obsługuje maszyn z procesorami 32-bitowymi. Prawie wszystkie aplikacje dołączone do systemu Mac OS X 10.7 są teraz również 64-bitowe, w tym iTunes.
2012
Microsoft wypuszcza system Windows 8, który obsługuje UEFI Class 3 ( UEFI bez CSM) i Secure Boot .
2013
Apple wypuszcza iOS 7 , który na komputerach z procesorami AArch64 ma 64-bitowe jądro obsługujące aplikacje 64-bitowe.
2014
Google wypuszcza Android Lollipop , pierwszą wersję systemu operacyjnego Android z obsługą procesorów 64-bitowych.
2017
Apple wypuszcza iOS 11 , obsługujący tylko maszyny z procesorami AArch64. Ma jądro 64-bitowe, które obsługuje tylko aplikacje 64-bitowe. Aplikacje 32-bitowe nie są już kompatybilne.
2019
Apple wypuszcza system macOS 10.15 „Catalina”, rezygnując z obsługi 32-bitowych aplikacji Intela.
2021
Google wypuszcza Androida 12 , rezygnując z obsługi aplikacji 32-bitowych. Microsoft wypuszcza Windows 11 bez wydawania 32-bitowej wersji systemu operacyjnego.

Limity procesorów

W zasadzie, 64-bitowy mikroprocesor może adresować 16 EiB ( 16 × 1024 6 = 2 64 = 18 446 744 073 709 551 616 bajtów lub około 18,4 eksabajtów) pamięci. Jednak nie wszystkie zestawy instrukcji i nie wszystkie procesory implementujące te zestawy instrukcji obsługują pełną 64-bitową wirtualną lub fizyczną przestrzeń adresową.

X86-64 architektura (od 2016) pozwala na 48 bitów do pamięci wirtualnej, a dla dowolnego danego procesora, do 52 bitów do pamięci fizycznej. Limity te pozwalają na rozmiar pamięci odpowiednio 256  TiB ( 256 × 1024 4 bajty ) i 4  PiB ( 4 × 1024 5 bajtów ). Komputer PC nie może obecnie zawierać 4  pebibajtów pamięci (ze względu na fizyczny rozmiar układów pamięci), ale firma AMD przewidziała duże serwery, klastry pamięci współdzielonej i inne zastosowania fizycznej przestrzeni adresowej, które mogą zbliżyć się do tego w przewidywalnej przyszłości. Tak więc 52-bitowy adres fizyczny zapewnia dużo miejsca na rozbudowę, nie ponosząc kosztów implementacji pełnych 64-bitowych adresów fizycznych. Podobnie 48-bitowa wirtualna przestrzeń adresowa została zaprojektowana tak, aby zapewnić 65 536 (2 16 ) razy 32-bitowy limit 4 GiB ( 4 × 1024 3 bajty ), zapewniając miejsce na późniejszą rozbudowę i bez narzutu na tłumaczenie pełnego 64-bitowego adresy.

Zasilania ISA v3.0 umożliwia 64 bitów dla Adres efektywny, odwzorowane na segmentowym adresu z pomiędzy 65 i 78 bitów dozwolony, pamięci wirtualnej, a dla dowolnego danego procesora, do 60 bitów do pamięci fizycznej.

Architektura Oracle SPARC 2015 pozwala na 64 bity na pamięć wirtualną oraz, dla dowolnego procesora, od 40 do 56 bitów na pamięć fizyczną.

ARM AArch64 pamięci wirtualnej Architektura systemu umożliwia 48 bitów w pamięci wirtualnej, a dla dowolnego danego procesora, z 32 do 48 bitów do pamięci fizycznej.

Specyfikacja DEC Alpha wymaga obsługi co najmniej 43 bitów przestrzeni adresowej pamięci wirtualnej (8 TiB), a sprzęt musi sprawdzać i przechwytywać, czy pozostałe nieobsługiwane bity wynoszą zero (w celu zapewnienia zgodności z przyszłymi procesorami). Alpha 21064 wspierała 43 bity przestrzeni adresowej pamięci wirtualnej (8 TiB) i 34 bity przestrzeni adresowej pamięci fizycznej (16 GiB). Alpha 21164 wspierała 43 bity przestrzeni adresowej pamięci wirtualnej (8 TiB) i 40 bitów przestrzeni adresowej pamięci fizycznej (1 TiB). Alpha 21264 obsługuje konfigurowane przez użytkownika 43 lub 48 bitów przestrzeni adresowej pamięci wirtualnej (8 TiB lub 256 TiB) oraz 44 bity przestrzeni adresowej pamięci fizycznej (16 TiB).


Aplikacje 64-bitowe

32-bitowe a 64-bitowe

Zmiana z architektury 32-bitowej na 64-bitową jest fundamentalną zmianą, ponieważ większość systemów operacyjnych musi zostać gruntownie zmodyfikowana, aby skorzystać z nowej architektury, ponieważ oprogramowanie to musi zarządzać rzeczywistym sprzętem adresującym pamięć. Aby korzystać z nowych możliwości, należy również przenieść inne oprogramowanie ; starsze oprogramowanie 32-bitowe może być obsługiwane na podstawie zestawu instrukcji 64-bitowych będącego nadzbiorem zestawu instrukcji 32-bitowych, dzięki czemu procesory obsługujące zestaw instrukcji 64-bitowych mogą również uruchamiać kod dla instrukcji 32-bitowych lub poprzez emulację programową , lub przez faktyczną implementację 32-bitowego rdzenia procesora w 64-bitowym procesorze, jak w przypadku niektórych procesorów Itanium firmy Intel, które zawierały rdzeń procesora IA-32 do uruchamiania 32-bitowych aplikacji x86 . Systemy operacyjne dla tych architektur 64-bitowych zazwyczaj obsługują aplikacje zarówno 32-bitowe, jak i 64-bitowe.

Jednym z istotnych wyjątków jest AS/400 , dla którego oprogramowanie jest skompilowane w architekturę zestawu instrukcji wirtualnych (ISA) o nazwie Technology Independent Machine Interface (TIMI); Kod TIMI jest następnie tłumaczony na natywny kod maszynowy przez oprogramowanie niskiego poziomu przed wykonaniem. Oprogramowanie do tłumaczenia to wszystko, co trzeba przepisać, aby przenieść cały system operacyjny i całe oprogramowanie na nową platformę, jak wtedy, gdy IBM przeniósł natywny zestaw instrukcji dla AS/400 ze starszego 32/48-bitowego IMPI do nowszego 64-bitowego PowerPC -AS , o kryptonimie Amazon . Zestaw instrukcji IMPI był zupełnie inny niż nawet 32-bitowy PowerPC, więc to przejście było nawet większe niż przeniesienie danego zestawu instrukcji z 32 do 64 bitów.

Na 64-bitowym sprzęcie z architekturą x86-64 (AMD64) większość 32-bitowych systemów operacyjnych i aplikacji może działać bez problemów ze zgodnością. Podczas gdy większa przestrzeń adresowa architektur 64-bitowych ułatwia pracę z dużymi zestawami danych w aplikacjach, takich jak wideo cyfrowe , obliczenia naukowe i duże bazy danych , toczy się poważna debata na temat tego, czy one lub ich 32-bitowe tryby zgodności będą szybsze niż porównywalnie cenowo 32-bitowe systemy do innych zadań.

Skompilowany program Java może działać na 32- lub 64-bitowej wirtualnej maszynie Java bez modyfikacji. Długości i precyzja wszystkich typów wbudowanych, takich jak char, short, int, long, floati double, oraz typy, które mogą być używane jako indeksy tablic, są określone przez standard i nie są zależne od podstawowej architektury. Programy Java działające na 64-bitowej maszynie wirtualnej Java mają dostęp do większej przestrzeni adresowej.

Szybkość nie jest jedynym czynnikiem, który należy wziąć pod uwagę przy porównywaniu procesorów 32-bitowych i 64-bitowych. Aplikacje, takie jak wielozadaniowość, testy warunków skrajnych i klastrowanie — w przypadku obliczeń o wysokiej wydajności (HPC) — mogą być bardziej dostosowane do architektury 64-bitowej, jeśli zostaną odpowiednio wdrożone. Z tego powodu klastry 64-bitowe są szeroko wdrażane w dużych organizacjach, takich jak IBM, HP i Microsoft.

Streszczenie:

  • Procesor 64-bitowy działa najlepiej z oprogramowaniem 64-bitowym.
  • Procesor 64-bitowy może mieć kompatybilność wsteczną , co pozwala na uruchamianie 32-bitowej aplikacji dla 32-bitowej wersji zestawu instrukcji, a także może obsługiwać 32-bitowe systemy operacyjne dla 32-bitowej wersji zestawu instrukcji .
  • Procesor 32-bitowy jest niezgodny z oprogramowaniem 64-bitowym.

Plusy i minusy

Powszechnym błędnym przekonaniem jest to, że architektury 64-bitowe nie są lepsze niż architektury 32-bitowe, chyba że komputer ma więcej niż 4 GiB pamięci o dostępie swobodnym . To nie do końca prawda:

  • Niektóre systemy operacyjne i pewne konfiguracje sprzętowe ograniczają fizyczną przestrzeń pamięci do 3 GiB w systemach IA-32 , ponieważ większość regionu 3-4 GiB jest zarezerwowana dla adresowania sprzętowego; patrz bariera 3 GiB ; Architektury 64-bitowe mogą adresować znacznie więcej niż 4 GiB. Jednak procesory IA-32 od Pentium Pro i nowszych umożliwiają 36-bitową fizyczną przestrzeń adresową pamięci, używając rozszerzenia adresu fizycznego (PAE), co daje zakres adresów fizycznych 64 GiB, z czego do 62 GiB może być używane przez pamięć główną ; systemy operacyjne obsługujące PAE mogą nie być ograniczone do 4 GiB pamięci fizycznej, nawet na procesorach IA-32. Jednak sterowniki i inne oprogramowanie trybu jądra, a zwłaszcza starsze wersje, mogą być niekompatybilne z PAE; jest to cytowane jako powód ograniczenia 32-bitowych wersji systemu Microsoft Windows do 4 GiB fizycznej pamięci RAM (chociaż słuszność tego wyjaśnienia jest kwestionowana).
  • Niektóre systemy operacyjne rezerwują część przestrzeni adresowej procesu do użytku systemu operacyjnego, skutecznie zmniejszając całkowitą przestrzeń adresową dostępną dla pamięci mapowania dla programów użytkownika. Na przykład, 32-bitowy Windows rezerwuje 1 lub 2 GiB (w zależności od ustawień) całkowitej przestrzeni adresowej dla jądra, co pozostawia tylko 3 lub 2 GiB (odpowiednio) przestrzeni adresowej dostępnej dla trybu użytkownika. Ten limit jest znacznie wyższy w 64-bitowych systemach operacyjnych.
  • Pliki mapowane w pamięci stają się coraz trudniejsze do zaimplementowania w architekturach 32-bitowych, ponieważ pliki o wielkości ponad 4 GiB stają się coraz bardziej powszechne; tak duże pliki nie mogą być łatwo mapowane w pamięci do architektur 32-bitowych, ponieważ tylko część pliku może być mapowana w przestrzeni adresowej na raz, a aby uzyskać dostęp do takiego pliku przez mapowanie pamięci, mapowane części muszą być zamienione na i w razie potrzeby z przestrzeni adresowej. Jest to problem, ponieważ mapowanie pamięci, jeśli jest prawidłowo zaimplementowane przez system operacyjny, jest jedną z najbardziej wydajnych metod „dysk-pamięć”.
  • Niektóre programy 64-bitowe, takie jak kodery, dekodery i oprogramowanie szyfrujące, mogą znacznie skorzystać z rejestrów 64-bitowych, podczas gdy wydajność innych programów, takich jak programy zorientowane na grafikę 3D, pozostaje niezmieniona po przełączeniu z 32-bitowego na Środowisko 64-bitowe.
  • Niektóre architektury 64-bitowe, takie jak x86-64 , obsługują więcej rejestrów ogólnego przeznaczenia niż ich 32-bitowe odpowiedniki (chociaż nie wynika to konkretnie z długości słowa). Prowadzi to do znacznego wzrostu prędkości w przypadku ciasnych pętli, ponieważ procesor nie musi pobierać danych z pamięci podręcznej lub pamięci głównej, jeśli dane mieszczą się w dostępnych rejestrach.
Przykład w C :
int a, b, c, d, e;
for (a = 0; a < 100; a++)
{
    b = a;
    c = b;
    d = c;
    e = d;
}
Jeśli procesor może przechowywać tylko dwie lub trzy wartości lub zmienne w rejestrach, musiałby przenieść niektóre wartości między pamięcią a rejestrami, aby móc przetwarzać również zmienne d i e; jest to proces, który zajmuje wiele cykli procesora. Procesor, który może przechowywać wszystkie wartości i zmienne w rejestrach, może je przeglądać bez potrzeby przenoszenia danych między rejestrami i pamięcią dla każdej iteracji. To zachowanie można łatwo porównać z pamięcią wirtualną, chociaż wszelkie efekty zależą od kompilatora.

Główną wadą architektur 64-bitowych jest to, że w porównaniu do architektur 32-bitowych te same dane zajmują więcej miejsca w pamięci (ze względu na dłuższe wskaźniki i prawdopodobnie inne typy oraz dopełnienie wyrównania). Zwiększa to wymagania dotyczące pamięci danego procesu i może mieć wpływ na efektywne wykorzystanie pamięci podręcznej procesora. Utrzymanie częściowego modelu 32-bitowego jest jednym ze sposobów radzenia sobie z tym i ogólnie jest dość skuteczne. Na przykład system operacyjny z/OS przyjmuje to podejście, wymagając, aby kod programu znajdował się w 31-bitowych przestrzeniach adresowych (bit wyższego rzędu nie jest używany do obliczania adresu na bazowej platformie sprzętowej), podczas gdy obiekty danych mogą opcjonalnie znajdować się w 64-bitowych przestrzeniach adresowych. regiony bitowe. Nie wszystkie takie aplikacje wymagają dużej przestrzeni adresowej lub manipulują 64-bitowymi elementami danych, więc te aplikacje nie korzystają z tych funkcji.

Dostępność oprogramowania

W 64-bitowych systemach opartych na architekturze x86 czasami brakuje odpowiedników oprogramowania napisanego dla architektur 32-bitowych. Najpoważniejszym problemem w systemie Microsoft Windows są niezgodne sterowniki urządzeń dla przestarzałego sprzętu. Większość 32-bitowych aplikacji może działać w 64-bitowym systemie operacyjnym w trybie zgodności , zwanym również trybem emulacji , np. Microsoft WoW64 Technology dla IA-64 i AMD64. 64-bitowe środowisko sterownika Windows Native Mode działa na 64-bitowym pliku NTDLL.DLL , który nie może wywołać 32-bitowego kodu podsystemu Win32 (często urządzeń, których rzeczywista funkcja sprzętowa jest emulowana w oprogramowaniu trybu użytkownika, takim jak Winprinters). Ponieważ 64-bitowe sterowniki dla większości urządzeń były niedostępne do początku 2007 roku (Vista x64), korzystanie z 64-bitowej wersji systemu Windows było uważane za wyzwanie. Jednak od tego czasu trend przesunął się w kierunku przetwarzania 64-bitowego, tym bardziej, że spadły ceny pamięci i wzrosło użycie ponad 4 GiB pamięci RAM. Większość producentów zaczęła dostarczać zarówno 32-bitowe, jak i 64-bitowe sterowniki dla nowych urządzeń, więc niedostępność sterowników 64-bitowych przestała być problemem. Dla wielu starszych urządzeń nie przewidziano sterowników 64-bitowych, które w konsekwencji nie mogły być używane w systemach 64-bitowych.

Kompatybilność sterowników była mniejszym problemem w przypadku sterowników open source, ponieważ 32-bitowe można było zmodyfikować do użytku 64-bitowego. Wsparcie dla sprzętu wyprodukowanego przed początkiem 2007 roku było problematyczne dla platform open-source, ze względu na stosunkowo małą liczbę użytkowników.

64-bitowe wersje systemu Windows nie mogą uruchamiać oprogramowania 16-bitowego . Jednak większość aplikacji 32-bitowych będzie działać dobrze. Użytkownicy 64-bitowi są zmuszeni do zainstalowania maszyny wirtualnej z 16- lub 32-bitowym systemem operacyjnym, aby uruchamiać 16-bitowe aplikacje.

Mac OS X 10.4 „Tiger” i Mac OS X 10.5 „Leopard” miały tylko jądro 32-bitowe, ale mogą uruchamiać 64-bitowy kod w trybie użytkownika na 64-bitowych procesorach. Mac OS X 10.6 „Snow Leopard” miał zarówno jądra 32-, jak i 64-bitowe, a na większości komputerów Mac używał jądra 32-bitowego nawet na procesorach 64-bitowych. Dzięki temu komputery Mac mogły obsługiwać procesy 64-bitowe, jednocześnie obsługując 32-bitowe sterowniki urządzeń; chociaż nie 64-bitowe sterowniki i zalety wydajności, które mogą się z nimi wiązać. Mac OS X 10.7 „Lion” działał z 64-bitowym jądrem na większej liczbie komputerów Mac, a OS X 10.8 „Mountain Lion” i nowsze wersje macOS mają tylko 64-bitowe jądro. W systemach z procesorami 64-bitowymi zarówno 32-bitowe, jak i 64-bitowe jądra systemu macOS mogą uruchamiać 32-bitowy kod w trybie użytkownika, a wszystkie wersje systemu macOS zawierają 32-bitowe wersje bibliotek, z których korzystałyby aplikacje 32-bitowe, więc 32 -bitowe oprogramowanie trybu użytkownika dla macOS będzie działać na tych systemach.

Linux i większość innych uniksopodobnych systemów operacyjnych oraz łańcuchy narzędzi C i C++ obsługują 64-bitowe procesory od wielu lat. Wiele aplikacji i bibliotek dla tych platform to oprogramowanie typu open source , napisane w językach C i C++, więc jeśli są 64-bitowe, można je skompilować do wersji 64-bitowych. Ten model dystrybucji oparty na źródłach, z naciskiem na częste wydania, sprawia, że ​​dostępność oprogramowania aplikacji dla tych systemów operacyjnych jest mniejszym problemem.

64-bitowe modele danych

W programach 32-bitowych wskaźniki i typy danych, takie jak liczby całkowite, mają zazwyczaj tę samą długość. Niekoniecznie jest to prawdą na komputerach 64-bitowych. Mieszanie typów danych w językach programowania, takich jak C i jego potomkach, takich jak C++ i Objective-C, może zatem działać w implementacjach 32-bitowych, ale nie w implementacjach 64-bitowych.

W wielu środowiskach programowania dla języków wywodzących się z C i C na maszynach 64-bitowych intzmienne nadal mają szerokość 32 bity, ale długie liczby całkowite i wskaźniki mają szerokość 64 bitów. Są one opisane jako posiadające model danych LP64 , który jest skrótem od „Long, Pointer, 64”. Inne modele to model danych ILP64, w którym wszystkie trzy typy danych mają szerokość 64 bity, a nawet model SILP64, w którym krótkie liczby całkowite mają również szerokość 64 bitów. Jednak w większości przypadków wymagane modyfikacje są stosunkowo niewielkie i proste, a wiele dobrze napisanych programów można po prostu ponownie skompilować dla nowego środowiska bez żadnych zmian. Inną alternatywą jest model LLP64 , który zachowuje zgodność z 32-bitowym kodem, pozostawiając zarówno 32-bitowe, jak i 32-bitowe. LL odnosi się do typu long long integer , który ma co najmniej 64 bity na wszystkich platformach, w tym w środowiskach 32-bitowych. intlong

Istnieją również systemy z procesorami 64-bitowymi wykorzystującymi model danych ILP32 , z dodatkiem długich liczb całkowitych o długości 64-bitowej; jest to również używane na wielu platformach z procesorami 32-bitowymi. Model ten zmniejsza rozmiar kodu i rozmiar struktur danych zawierających wskaźniki, kosztem znacznie mniejszej przestrzeni adresowej, co jest dobrym wyborem dla niektórych systemów wbudowanych. W przypadku zestawów instrukcji, takich jak x86 i ARM, w których 64-bitowa wersja zestawu instrukcji ma więcej rejestrów niż wersja 32-bitowa, zapewnia dostęp do dodatkowych rejestrów bez kary za miejsce. Jest powszechny w 64-bitowych maszynach RISC, eksplorowany w x86 jako x32 ABI , a ostatnio był używany w Apple Watch Series 4 i 5.

64-bitowe modele danych
Model danych krótki (liczba całkowita) int długa liczba całkowita) długo długo wskaźniki,
rozmiar_t
Przykładowe systemy operacyjne
ILP32 16 32 32 64 32 x32 i arm64ilp32 ABI w systemach Linux; MIPS N32 ABI.
LLP64 16 32 32 64 64 Microsoft Windows (x86-64 i IA-64) przy użyciu Visual C++ ; i MinGW
LP64 16 32 64 64 64 Większość systemów uniksowych i uniksopodobnych , np. Solaris , Linux , BSD , macOS . Windows podczas korzystania z Cygwin ; z/OS
ILP64 16 64 64 64 64 Port HAL Computer Systems systemu Solaris na SPARC64
SILP64 64 64 64 64 64 Klasyczny UNICOS (w porównaniu z UNICOS/mp itp.)

Wiele platform 64-bitowych używa obecnie modelu LP64 (w tym Solaris, AIX , HP-UX , Linux, macOS, BSD i IBM z/OS). Microsoft Windows używa modelu LLP64 . Wadą modelu LP64 jest to, że przechowywanie longw intmoże zostać skrócone. Z drugiej strony konwersja wskaźnika na a longbędzie „działać” w LP64. W modelu LLP64 jest odwrotnie. Nie są to problemy, które wpływają na kod w pełni zgodny ze standardami, ale kod jest często pisany z niejawnymi założeniami dotyczącymi szerokości typów danych. Kod C powinien preferować ( u) intptr_tzamiast longrzutowania wskaźników na obiekty całkowite.

Model programowania to wybór dokonany w celu dopasowania do danego kompilatora, a kilka może współistnieć w tym samym systemie operacyjnym. Jednak model programowania wybrany jako podstawowy model interfejsu programowania aplikacji systemu operacyjnego (API) zazwyczaj dominuje.

Inną kwestią jest model danych używany dla sterowników urządzeń . Sterowniki stanowią większość kodu systemu operacyjnego w większości nowoczesnych systemów operacyjnych (chociaż wiele z nich może nie zostać załadowanych, gdy system operacyjny jest uruchomiony). Wiele sterowników intensywnie używa wskaźników do manipulowania danymi, aw niektórych przypadkach musi załadować wskaźniki o określonym rozmiarze do obsługiwanego sprzętu w celu bezpośredniego dostępu do pamięci (DMA). Na przykład, sterownik urządzenia PCI 32-bitowego z prośbą urządzenie do danych DMA w górnych obszarach pamięci, maszynę do 64-bitowego nie może spełnić żądania z systemu operacyjnego, ładowanie danych z urządzenia do pamięci powyżej 4 gibibyte bariery , ponieważ wskaźniki tych adresów nie pasowałyby do rejestrów DMA urządzenia. Ten problem został rozwiązany przez to, że system operacyjny bierze pod uwagę ograniczenia pamięci urządzenia podczas generowania żądań do sterowników DMA lub używając jednostki zarządzania pamięcią wejścia-wyjścia (IOMMU).

Obecne architektury 64-bitowe

Od maja 2018 r. 64-bitowe architektury, dla których produkowane są procesory, obejmują:

  • IBM z/Architecture , 64-bitowa wersja architektury ESA/390 , używana w komputerach mainframe IBM eServer zSeries i System z :
  • Architektura HP-Intel IA-64 :
  • MIPS Technologies ' MIPS64 architektura
  • ARM Holdings ' AArch64 architektura
  • Architektura Elbrusa :
  • Architektura NEC SX
  • RISC-V
  • Większość architektur 64-bitowych, które pochodzą z tej samej architektury 32-bitowej, może wykonywać kod napisany dla wersji 32-bitowych natywnie, bez spadku wydajności. Ten rodzaj podpory jest powszechnie nazywany podporą bi-arch lub ogólniej podporą wielołukową .

    Zobacz też

    Bibliografia

    Zewnętrzne linki