64-Bit-Computing - 64-bit computing

In der Computerarchitektur sind 64-Bit- Ganzzahlen , Speicheradressen oder andere Dateneinheiten diejenigen, die 64- Bit (8- Oktett ) breit sind. Außerdem sind 64-Bit- Architekturen einer zentralen Verarbeitungseinheit (CPU) und einer arithmetischen Logikeinheit (ALU) solche, die auf Prozessorregistern , Adressbussen oder Datenbussen dieser Größe basieren . 64-Bit- Mikrocomputer sind Computer, in denen 64-Bit- Mikroprozessoren die Regel sind. Aus Softwaresicht bedeutet 64-Bit-Computing die Verwendung von Maschinencode mit virtuellen 64-Bit- Speicheradressen . Allerdings unterstützen nicht alle 64-Bit-Befehlssätze vollständige virtuelle 64-Bit-Speicheradressen; x86-64 und ARMv8 unterstützen beispielsweise nur 48 Bits virtueller Adresse, wobei die verbleibenden 16 Bits der virtuellen Adresse alle Nullen oder alle Einsen sein müssen, und mehrere 64-Bit-Befehlssätze unterstützen weniger als 64 Bit des physischen Speichers die Anschrift.

Der Begriff 64-Bit beschreibt eine Computergeneration, bei der 64-Bit-Prozessoren die Regel sind. 64 Bit sind eine Wortgröße , die bestimmte Klassen von Computerarchitekturen, Bussen, Speicher und CPUs und damit auch die darauf ausgeführte Software definiert. 64-Bit-CPUs werden seit den 1970er Jahren in Supercomputern ( Cray-1 , 1975) und in RISC-basierten Workstations und Servern auf Basis von Computern mit reduziertem Befehlssatz (RISC) seit den frühen 1990er Jahren verwendet, insbesondere in den MIPS R4000 , R8000 und R10000 , den Digital Equipment Corporation (DEC) Alpha , die Sun Microsystems UltraSPARC und die IBM RS64 und POWER3 und neuere POWER Mikroprozessoren . Im Jahr 2003 wurden 64-Bit-CPUs in Form von x86-64- Prozessoren und dem PowerPC G5 auf dem (früher 32-Bit ) Mainstream- PC- Markt eingeführt und 2012 in die ARM-Architektur eingeführt, die auf Smartphones und Tablet-Computer abzielte verkauft am 20. September 2013, im iPhone 5S mit dem ARMv8-A Apple A7 System on a Chip (SoC).

Ein 64-Bit-Register kann jeden von 2 64 (über 18 Trillionen oder 1,8 × 10 19 ) verschiedenen Werten enthalten. Der Bereich der Integer- Werte, der in 64 Bit gespeichert werden kann, hängt von der verwendeten Integer-Darstellung ab . Bei den beiden gängigsten Darstellungen reicht der Bereich von 0 bis 18.446.744.073.709.551.615 (2 64 − 1) für die Darstellung als ( vorzeichenlose ) Binärzahl und −9.223.372.036.854.775.808 (−2 63 ) bis 9.223.372.036.854.775.807 (2 63 − 1) für die Darstellung als Zweierkomplement . Somit kann ein Prozessor mit 64-Bit-Speicheradressen direkt auf 2 64 Byte (16 Exbibyte oder EiB) Byte-adressierbaren Speicher zugreifen .

Ohne weitere Qualifizierung, eine 64-Bit - Computer - Architektur hat im Allgemeinen Integer- und Adressieren Prozessor - Register , die 64 Bit breit sind, so dass ein direkte Unterstützung für 64-Bit - Datentypen und Adressen. Eine CPU kann jedoch externe Datenbusse oder Adressbusse mit unterschiedlichen Größen von den Registern haben, sogar noch größer (der 32-Bit- Pentium hatte beispielsweise einen 64-Bit-Datenbus).

Der Begriff kann sich auch auf die Größe von Low-Level-Datentypen beziehen, wie z. B. 64-Bit- Gleitkomma-Arithmetikzahlen .

Architektonische Implikationen

Prozessorregister werden normalerweise in mehrere Gruppen unterteilt: Integer , Floating Point , Single-Instruction-Multiple-Data ( SIMD ), Control und oft spezielle Register für die Adressarithmetik, die verschiedene Verwendungen und Namen wie Adresse , Index oder Basis haben können registriert . In modernen Designs werden diese Funktionen jedoch oft von ganzzahligen Registern für allgemeinere Zwecke ausgeführt . In den meisten Prozessoren können nur Ganzzahl- oder Adressregister verwendet werden, um Daten im Speicher zu adressieren; die anderen Arten von Registern können dies nicht. Die Größe dieser Register begrenzt daher normalerweise die Menge des direkt adressierbaren Speichers, selbst wenn es Register gibt, die breiter sind, wie beispielsweise Gleitkommaregister.

Die meisten 32-Bit- und 64-Bit-Hochleistungsprozessoren (einige bemerkenswerte Ausnahmen sind ältere oder eingebettete ARM-Architektur (ARM) und 32-Bit- MIPS-Architektur (MIPS)-CPUs) haben integrierte Gleitkomma-Hardware, die oft, aber nicht immer, basiert auf 64-Bit-Dateneinheiten. Obwohl die x86 / x87- Architektur beispielsweise über Befehle zum Laden und Speichern von 64-Bit- (und 32-Bit-) Gleitkommawerten im Speicher verfügt, ist das interne Gleitkomma-Daten- und Registerformat 80 Bit breit, während das universelle Register sind 32 Bit breit. Im Gegensatz dazu verwendet die 64-Bit- Alpha- Familie ein 64-Bit-Gleitkomma-Daten- und -Registerformat sowie 64-Bit-Ganzzahlregister.

Geschichte

Viele Computer - Befehlssätze sind so gestaltet, dass ein einziges Ganzzahl - Register speichern können , die Speicheradresse an einem beliebigen Ort in dem physikalischen oder des Computer virtuelle Speichern . Daher wird die Gesamtzahl der Speicheradressen oft durch die Breite dieser Register bestimmt. Das IBM System/360 der 1960er Jahre war ein früher 32-Bit-Computer; es hatte 32-Bit-Integer-Register, obwohl es nur die niederwertigen 24 Bits eines Wortes für Adressen verwendete, was zu einem Adressraum von 16  MiB ( 16 × 1024 2 Bytes ) führte. 32-Bit- Superminicomputer wie der DEC VAX wurden in den 1970er Jahren gebräuchlich, und 32-Bit-Mikroprozessoren wie die Motorola 68000-Familie und die 32-Bit-Mitglieder der x86-Familie, beginnend mit dem Intel 80386 , erschienen Mitte des 20. 1980er Jahre, was 32 Bit zu einem De-facto- Konsens als praktische Registergröße machte.

Ein 32-Bit - Adreßregister gemeint , dass 2 32 Adressen oder 4  GiB von random-access memory (RAM), verwiesen werden. Als diese Architekturen entwickelt wurden, lagen 4 GiB Speicher so weit über den typischen Mengen (4 MiB) in Installationen, dass dies als genügend Spielraum für die Adressierung angesehen wurde. 4,29 Milliarden Adressen wurden aus einem weiteren wichtigen Grund als angemessene Größe angesehen: 4,29 Milliarden ganze Zahlen reichen aus, um den meisten Entitäten in Anwendungen wie Datenbanken eindeutige Referenzen zuzuweisen .

Einige Supercomputer- Architekturen der 1970er und 1980er Jahre, wie der Cray-1 , verwendeten Register mit einer Breite von bis zu 64 Bit und unterstützten 64-Bit-Integer-Arithmetik, obwohl sie keine 64-Bit-Adressierung unterstützten. Mitte der 1980er Jahre begann die Entwicklung von Intel i860 in einer (zu spät für Windows NT) 1989 veröffentlichten Veröffentlichung; Der i860 hatte 32-Bit-Integer-Register und 32-Bit-Adressierung, war also kein vollständiger 64-Bit-Prozessor, obwohl seine Grafikeinheit 64-Bit-Integer-Arithmetik unterstützte. 32 Bit blieben jedoch bis Anfang der 1990er Jahre die Norm, als die kontinuierliche Reduzierung der Speicherkosten zu Installationen mit RAM-Mengen von fast 4 GiB führte und die Verwendung von virtuellen Speicherplätzen über der 4 GiB-Obergrenze für die Handhabung bestimmter Typen wünschenswert wurde von Problemen. Als Reaktion darauf entwickelten MIPS und DEC 64-Bit-Mikroprozessorarchitekturen, zunächst für High-End- Workstations und Server- Maschinen. Bis Mitte der 1990er Jahre hatten HAL Computer Systems , Sun Microsystems , IBM , Silicon Graphics und Hewlett Packard 64-Bit-Architekturen für ihre Workstation- und Serversysteme entwickelt. Eine bemerkenswerte Ausnahme von diesem Trend waren Mainframes von IBM, die damals 32-Bit-Daten und 31-Bit-Adressgrößen verwendeten; die IBM-Mainframes enthielten bis 2000 keine 64-Bit-Prozessoren. In den 1990er Jahren wurden mehrere kostengünstige 64-Bit-Mikroprozessoren in der Unterhaltungselektronik und in eingebetteten Anwendungen verwendet. Insbesondere der Nintendo 64 und die PlayStation 2 hatten vor ihrer Einführung in PCs 64-Bit-Mikroprozessoren. High-End-Drucker, Netzwerkgeräte und Industriecomputer verwendeten ebenfalls 64-Bit-Mikroprozessoren wie die Quantum Effect Devices R5000 . 64-Bit-Computing begann ab 2003 auf den PC-Desktop zu sickern, als einige Modelle in Apples Macintosh-Linien auf PowerPC 970- Prozessoren ( von Apple als G5 bezeichnet) umstiegen und Advanced Micro Devices (AMD) seine ersten 64-Bit- Prozessoren herausbrachte. Bit x86-64- Prozessor.

64-Bit-Datenzeitleiste

1961
IBM liefert den Supercomputer IBM 7030 Stretch aus , der 64-Bit-Datenwörter und 32- oder 64-Bit-Befehlswörter verwendet.
1974
Control Data Corporation bringt den Vektor-Supercomputer CDC Star-100 auf den Markt, der eine 64-Bit-Wortarchitektur verwendet (frühere CDC-Systeme basierten auf einer 60-Bit-Architektur).
International Computers Limited führt die ICL 2900-Serie mit 32-Bit-, 64-Bit- und 128-Bit -Zweierkomplement- Ganzzahlen ein; 64-Bit- und 128-Bit-Gleitkomma; 32-Bit-, 64-Bit- und 128-Bit-gepackte Dezimal- und ein 128-Bit-Akkumulatorregister. Die Architektur hat eine Reihe von ICL- und Fujitsu-Maschinen überlebt. Das neueste ist Fujitsu Supernova, das die ursprüngliche Umgebung auf 64-Bit-Intel-Prozessoren emuliert.
1976
Cray Research liefert den ersten Cray-1- Supercomputer, der auf einer 64-Bit - Wortarchitektur basiert und die Grundlage für spätere Cray-Vektor-Supercomputer bilden wird.
1983
Elxsi bringt den parallelen Minisupercomputer Elxsi 6400 auf den Markt . Die Elxsi-Architektur hat 64-Bit-Datenregister, aber einen 32-Bit-Adressraum.
1989
Intel stellt den Intel i860- Prozessor mit reduziertem Befehlssatz (RISC) vor. Als "64-Bit-Mikroprozessor" vermarktet, hatte er im Wesentlichen eine 32-Bit-Architektur, die mit einer 3D-Grafikeinheit erweitert wurde, die 64-Bit-Integer-Operationen ausführen kann.
1993
Atari stellt die Videospielkonsole Atari Jaguar vor , die in ihrer Architektur einige 64-Bit-breite Datenpfade enthält.

64-Bit-Adresszeitleiste

1991
MIPS Computer Systems produziert den ersten 64-Bit-Mikroprozessor, den R4000 , der die MIPS III- Architektur implementiert , die dritte Überarbeitung seiner MIPS-Architektur . Die CPU wird in SGI- Grafik-Workstations ab dem IRIS Crimson verwendet . Kendall Square Research liefert seinen ersten KSR1-Supercomputer, der auf einer proprietären 64-Bit-RISC-Prozessorarchitektur mit OSF/1 basiert .
1992
Die Digital Equipment Corporation (DEC) führt die reine 64-Bit- Alpha- Architektur ein, die aus dem PRISM- Projekt hervorgegangen ist.
1994
Intel kündigt Pläne für die 64-Bit- IA-64- Architektur (gemeinsam mit Hewlett-Packard entwickelt ) als Nachfolger seiner 32-Bit- IA-32- Prozessoren an. Es wurde ein Startdatum von 1998 bis 1999 angestrebt.
1995
Sun bringt einen 64-Bit- SPARC- Prozessor auf den Markt , den UltraSPARC . HAL Computer Systems im Besitz von Fujitsu bringt Workstations auf Basis einer 64-Bit-CPU auf den Markt , HALs unabhängig entwickelte SPARC64 der ersten Generation . IBM veröffentlicht die Mikroprozessoren A10 und A30, die ersten 64-Bit-PowerPC-AS-Prozessoren. IBM veröffentlicht auch ein 64-Bit- AS/400- System-Upgrade, das das Betriebssystem, die Datenbank und die Anwendungen konvertieren kann.
1996
Nintendo stellt die Videospielkonsole Nintendo 64 vor , die auf einer kostengünstigen Variante des MIPS R4000 basiert. HP veröffentlicht die erste Implementierung seiner 64-Bit- PA-RISC 2.0- Architektur, den PA-8000 .
1998
IBM veröffentlicht die POWER3- Reihe von Voll-64-Bit-PowerPC/ POWER- Prozessoren.
1999
Intel veröffentlicht den Befehlssatz für die IA-64-Architektur. AMD veröffentlicht öffentlich seine 64-Bit-Erweiterungen für IA-32, genannt x86-64 (später als AMD64 bezeichnet).
2000
IBM liefert seinen ersten 64-Bit- z/Architecture- Mainframe aus , den zSeries z900. z/Architecture ist eine 64-Bit-Version der 32-Bit- ESA/390- Architektur, ein Nachkomme der 32-Bit- System/360- Architektur.
2001
Intel liefert seine IA-64-Prozessorlinie nach wiederholten Verzögerungen bei der Markteinführung aus. Jetzt unter der Marke Itanium und auf High-End-Server ausgerichtet, bleiben die Verkäufe hinter den Erwartungen zurück.
2003
AMD stellt seine Opteron- und Athlon 64- Prozessorlinien vor, basierend auf seiner AMD64- Architektur, der ersten x86-basierten 64-Bit-Prozessorarchitektur. Apple liefert auch die von IBM produzierte 64-Bit "G5" PowerPC 970 CPU aus. Intel behauptet, dass seine Itanium-Chips seine einzigen 64-Bit-Prozessoren bleiben würden.
2004
Als Reaktion auf den Markterfolg von AMD gibt Intel zu, einen Klon der AMD64-Erweiterungen namens IA-32e (später umbenannt in EM64T, dann wieder umbenannt in Intel 64) entwickelt zu haben. Intel liefert aktualisierte Versionen seiner Xeon- und Pentium 4- Prozessorfamilien aus, die den neuen 64-Bit-Befehlssatz unterstützen.
VIA Technologies kündigt den 64-Bit-Prozessor von Isaiah an .
2006
Sony, IBM und Toshiba beginnen mit der Herstellung des 64-Bit- Cell-Prozessors für den Einsatz in PlayStation 3 , Servern, Workstations und anderen Geräten. Intel hat den Core 2 Duo als ersten Mainstream-x86-64-Prozessor für seine Mobil-, Desktop- und Workstation-Produktlinie veröffentlicht. Frühere 64-Bit-Erweiterungsprozessorlinien waren im Verbrauchereinzelhandel nicht weit verbreitet (die meisten 64-Bit-Pentium 4/D waren OEM), 64-Bit-Pentium 4, Pentium D und Celeron wurden erst Ende 2006 in Massenproduktion aufgenommen zu einem Problem mit schlechter Ausbeute (die meisten Wafer mit guter Ausbeute waren auf Server und Mainframe ausgerichtet, während der Mainstream bis 2006 immer noch eine 130-nm-32-Bit-Prozessorlinie blieb) und wurde nach dem Debüt von Core 2 bald am unteren Ende. AMD hat seinen ersten 64-Bit-Mobilprozessor veröffentlicht und in 90 nm hergestellt.
2011
ARM Holdings kündigt ARMv8-A an, die erste 64-Bit-Version der ARM-Architektur .
2012
ARM Holdings kündigte am 30. Oktober 2012 ihre Cortex-A53- und Cortex-A57-Kerne an, ihre ersten Kerne basierend auf ihrer 64-Bit-Architektur.
2013
Apple kündigt das iPhone 5S mit dem weltweit ersten 64-Bit-Prozessor in einem Smartphone an, das auf seinem A7 ARMv8-A-basierten System-on-a-Chip basiert.
2014
Google kündigt mit dem Nexus 9- Tablet das erste Android-Gerät an, das auf dem 64-Bit-Tegra-K1-Chip läuft.

Zeitleiste des 64-Bit-Betriebssystems

1985
Cray veröffentlicht UNICOS , die erste 64-Bit-Implementierung des Unix- Betriebssystems.
1993
DEC veröffentlicht das 64-Bit - Betriebssystem DEC OSF/1 AXP Unix (später umbenannt in Tru64 UNIX) für seine Systeme, die auf der Alpha- Architektur basieren .
1994
Die Unterstützung für den R8000- Prozessor wird von Silicon Graphics dem IRIX- Betriebssystem in Version 6.0 hinzugefügt .
1995
DEC veröffentlicht OpenVMS 7.0, die erste vollständige 64-Bit-Version von OpenVMS für Alpha. Die erste 64-Bit- Linux-Distribution für die Alpha-Architektur wird veröffentlicht.
1996
Die Unterstützung für die R4x00-Prozessoren im 64-Bit-Modus wird von Silicon Graphics in Version 6.2 zum IRIX- Betriebssystem hinzugefügt .
1998
Sun veröffentlicht Solaris 7 mit vollständiger 64-Bit- UltraSPARC- Unterstützung.
2000
IBM veröffentlicht z/OS , ein 64-Bit-Betriebssystem, das von MVS abstammt , für die neuen 64-Bit-Mainframes der zSeries ; 64-Bit- Linux auf z-Systemen folgt fast sofort der CPU-Version.
2001
Linux ist der erste Betriebssystemkernel, der x86-64 vollständig unterstützt (auf einem Simulator, da noch keine x86-64-Prozessoren veröffentlicht wurden).
2001
Microsoft veröffentlicht Windows XP 64-Bit Edition für die IA-64-Architektur von Itanium ; es könnte 32-Bit-Anwendungen über eine Ausführungsschicht ausführen.
2003
Apple veröffentlicht sein Mac OS X 10.3 "Panther"-Betriebssystem, das die native 64-Bit-Integer-Arithmetik auf PowerPC 970- Prozessoren unterstützt. Mehrere Linux- Distributionen werden mit Unterstützung für AMD64 veröffentlicht . FreeBSD- Releases mit Unterstützung für AMD64.
2005
Am 4. Januar stellt Microsoft die Windows XP 64-Bit Edition ein, da seit September zuvor keine PCs mit IA-64-Prozessor mehr verfügbar waren, und kündigt an, x86-64-Versionen von Windows zu entwickeln, um diese zu ersetzen. Am 31. Januar veröffentlicht Sun Solaris 10 mit Unterstützung für AMD64- und EM64T-Prozessoren. Am 29. April veröffentlicht Apple Mac OS X 10.4 "Tiger", das eingeschränkte Unterstützung für 64-Bit-Befehlszeilenanwendungen auf Maschinen mit PowerPC 970-Prozessoren bietet; spätere Versionen für Intel-basierte Macs unterstützten 64-Bit-Befehlszeilenanwendungen auf Macs mit EM64T-Prozessoren. Am 30. April veröffentlicht Microsoft Windows XP Professional x64 Edition und Windows Server 2003 x64 Edition für AMD64- und EM64T-Prozessoren.
2006
Microsoft veröffentlicht Windows Vista , einschließlich einer 64-Bit-Version für AMD64/EM64T-Prozessoren, die 32-Bit-Kompatibilität beibehält. In der 64-Bit-Version sind alle Windows-Anwendungen und -Komponenten 64-Bit, obwohl viele auch ihre 32-Bit-Versionen enthalten, um die Kompatibilität mit Plug-Ins zu gewährleisten .
2007
Apple veröffentlicht Mac OS X 10.5 "Leopard", das 64-Bit-Anwendungen auf Maschinen mit PowerPC 970- oder EM64T-Prozessoren vollständig unterstützt.
2009
Microsoft veröffentlicht Windows 7 , das wie Windows Vista eine vollständige 64-Bit-Version für AMD64/Intel 64-Prozessoren enthält; die meisten neuen Computer werden standardmäßig mit einer 64-Bit-Version geladen. Microsoft veröffentlicht auch Windows Server 2008 R2 , das erste reine 64-Bit-Serverbetriebssystem. Apple veröffentlicht Mac OS X 10.6 "Snow Leopard", das mit einem 64-Bit-Kernel für AMD64/Intel64-Prozessoren ausgeliefert wird, obwohl nur bestimmte neuere Modelle von Apple-Computern standardmäßig den 64-Bit-Kernel ausführen. Die meisten mit Mac OS X 10.6 gebündelten Anwendungen sind jetzt auch 64-Bit.
2011
Apple veröffentlicht Mac OS X 10.7 , "Lion", das standardmäßig den 64-Bit-Kernel auf unterstützten Rechnern ausführt. Ältere Maschinen, die den 64-Bit-Kernel nicht ausführen können, führen den 32-Bit-Kernel aus, können aber wie bei früheren Versionen weiterhin 64-Bit-Anwendungen ausführen. Lion unterstützt keine Maschinen mit 32-Bit-Prozessoren. Fast alle Anwendungen, die mit Mac OS X 10.7 gebündelt sind, sind jetzt auch 64-Bit, einschließlich iTunes.
2012
Microsoft veröffentlicht Windows 8, das UEFI Class 3 ( UEFI ohne CSM) und Secure Boot unterstützt .
2013
Apple veröffentlicht iOS 7 , das auf Maschinen mit AArch64-Prozessoren über einen 64-Bit-Kernel verfügt, der 64-Bit-Anwendungen unterstützt.
2014
Google veröffentlicht Android Lollipop , die erste Version des Android- Betriebssystems mit Unterstützung für 64-Bit-Prozessoren.
2017
Apple veröffentlicht iOS 11 , das nur Maschinen mit AArch64-Prozessoren unterstützt. Es hat einen 64-Bit-Kernel, der nur 64-Bit-Anwendungen unterstützt. 32-Bit-Anwendungen sind nicht mehr kompatibel.
2019
Apple veröffentlicht macOS 10.15 "Catalina" und stellt die Unterstützung für 32-Bit-Intel-Anwendungen ein.
2021
Google veröffentlicht Android 12 und stellt die Unterstützung für 32-Bit-Anwendungen ein. Microsoft veröffentlicht Windows 11 , ohne eine 32-Bit-Version des Betriebssystems zu veröffentlichen.

Grenzen der Prozessoren

Im Prinzip kann ein 64-Bit-Mikroprozessor 16 EiB ( 16 × 1024 6 = 2 64 = 18.446.744.073.709.551.616 Byte oder etwa 18,4 Exabyte) Speicher adressieren. Jedoch unterstützen nicht alle Befehlssätze und nicht alle Prozessoren, die diese Befehlssätze implementieren, einen vollständigen virtuellen oder physischen 64-Bit-Adressraum.

Die x86-64-Architektur (Stand 2016) erlaubt 48 Bit für virtuellen Speicher und für jeden Prozessor bis zu 52 Bit für physischen Speicher. Diese Grenzen erlauben Speichergrößen von 256  TiB ( 256 × 1024 4 Byte ) bzw. 4  PiB ( 4 × 1024 5 Byte ). Ein PC kann derzeit keine 4  Pebibyte Arbeitsspeicher enthalten (aufgrund der physischen Größe der Speicherchips), aber AMD stellte sich große Server, Shared Memory-Cluster und andere Nutzungen des physischen Adressraums vor, die sich in absehbarer Zeit diesem Ziel nähern könnten. Somit bietet die physikalische 52-Bit-Adresse ausreichend Platz für Erweiterungen, ohne dass die Kosten für die Implementierung vollständiger physikalischer 64-Bit-Adressen entstehen. In ähnlicher Weise wurde der virtuelle 48-Bit-Adressraum so konzipiert, dass er das 65.536- (2 16 )-fache der 32-Bit-Grenze von 4 GiB ( 4 × 1024 3 Bytes ) bietet, was Raum für spätere Erweiterungen lässt und keinen Overhead für die Übersetzung vollständiger 64-Bit-Dateien verursacht Adressen.

Die Power - ISA v3.0 ermöglicht 64 Bits , die für eine effektive Adresse, auf eine segmentierte Adresse abgebildet mit zwischen 65 und 78 Bits erlaubt, für den virtuellen Speicher, und, für jeden gegebenen Prozessor, bis zu 60 Bits für physischen Speicher.

Die Oracle SPARC- Architektur 2015 erlaubt 64 Bit für virtuellen Speicher und für jeden Prozessor zwischen 40 und 56 Bit für physischen Speicher.

Die ARM AArch64 Virtual Memory System Architecture erlaubt 48 Bit für virtuellen Speicher und für jeden Prozessor 32 bis 48 Bit für physischen Speicher.

Die DEC-Alpha- Spezifikation erfordert, dass mindestens 43 Bit des virtuellen Speicheradressraums (8 TiB) unterstützt werden, und die Hardware muss überprüfen und abfangen, ob die verbleibenden nicht unterstützten Bits Null sind (um die Kompatibilität mit zukünftigen Prozessoren zu unterstützen). Alpha 21064 unterstützte 43 Bit des Adressraums des virtuellen Speichers (8 TiB) und 34 Bit des Adressraums des physischen Speichers (16 GiB). Alpha 21164 unterstützte 43 Bit des Adressraums des virtuellen Speichers (8 TiB) und 40 Bit des Adressraums des physischen Speichers (1 TiB). Alpha 21264 unterstützt vom Benutzer konfigurierbare 43 oder 48 Bit des virtuellen Speicheradressraums (8 TiB oder 256 TiB) und 44 Bit des physischen Speicheradressraums (16 TiB).


64-Bit-Anwendungen

32-Bit vs. 64-Bit

Ein Wechsel von einer 32-Bit- auf eine 64-Bit-Architektur ist eine grundlegende Änderung, da die meisten Betriebssysteme umfassend modifiziert werden müssen, um die Vorteile der neuen Architektur zu nutzen, da diese Software die eigentliche Speicheradressierungshardware verwalten muss. Auch andere Software muss portiert werden , um die neuen Fähigkeiten nutzen zu können; ältere 32-Bit-Software kann entweder dadurch unterstützt werden, dass der 64-Bit-Befehlssatz eine Obermenge des 32-Bit-Befehlssatzes ist, sodass Prozessoren, die den 64-Bit-Befehlssatz unterstützen, auch Code für den 32-Bit-Befehl ausführen können Set, oder durch Software - Emulation oder durch die tatsächliche Implementierung eines 32-Bit - Prozessorkern innerhalb des 64-Bit - Prozessor, wie bei einigen Itanium - Prozessoren von Intel, die einen eingeschlossenen IA-32 - Prozessorkern 32-Bit laufen x86 - Anwendungen. Die Betriebssysteme für diese 64-Bit-Architekturen unterstützen im Allgemeinen sowohl 32-Bit- als auch 64-Bit-Anwendungen.

Eine bedeutende Ausnahme hiervon ist der AS/400 , dessen Software in eine virtuelle Befehlssatzarchitektur (ISA) kompiliert ist, die als Technology Independent Machine Interface (TIMI) bezeichnet wird; Der TIMI-Code wird dann von Low-Level-Software in nativen Maschinencode übersetzt, bevor er ausgeführt wird. Die Übersetzungssoftware ist alles, was neu geschrieben werden muss, um das vollständige Betriebssystem und die gesamte Software auf eine neue Plattform zu verschieben, wie als IBM den nativen Befehlssatz für AS/400 von der älteren 32/48-Bit- IMPI auf die neuere 64-Bit- PowerPC umstellte -AS , Codename Amazon . Der IMPI-Befehlssatz unterschied sich sogar von 32-Bit-PowerPC, daher war dieser Übergang noch größer als das Verschieben eines gegebenen Befehlssatzes von 32 auf 64 Bit.

Auf 64-Bit-Hardware mit x86-64- Architektur (AMD64) können die meisten 32-Bit-Betriebssysteme und -Anwendungen ohne Kompatibilitätsprobleme ausgeführt werden. Während der größere Adressraum von 64-Bit-Architekturen die Arbeit mit großen Datensätzen in Anwendungen wie digitalem Video , wissenschaftlichem Rechnen und großen Datenbanken erleichtert, gab es erhebliche Diskussionen darüber, ob sie oder ihre 32-Bit- Kompatibilitätsmodi schneller sein werden als vergleichbare 32-Bit-Systeme für andere Aufgaben.

Ein kompiliertes Java-Programm kann ohne Änderung auf einer 32- oder 64-Bit-Java-Virtual Machine ausgeführt werden. Die Länge und Genauigkeit aller integrierten Typen wie char, short, int, long, float, und doublesowie die Typen, die als Array-Indizes verwendet werden können, werden vom Standard festgelegt und sind nicht von der zugrunde liegenden Architektur abhängig. Java-Programme, die auf einer 64-Bit-Java-Virtual Machine ausgeführt werden, haben Zugriff auf einen größeren Adressraum.

Geschwindigkeit ist nicht der einzige Faktor, der beim Vergleich von 32-Bit- und 64-Bit-Prozessoren berücksichtigt werden muss. Anwendungen wie Multitasking, Stresstests und Clustering – für High-Performance Computing (HPC) – sind bei entsprechender Bereitstellung möglicherweise besser für eine 64-Bit-Architektur geeignet. Aus diesem Grund sind 64-Bit-Cluster in großen Unternehmen wie IBM, HP und Microsoft weit verbreitet.

Zusammenfassung:

  • Ein 64-Bit-Prozessor funktioniert am besten mit 64-Bit-Software.
  • Ein 64-Bit-Prozessor ist möglicherweise abwärtskompatibel , sodass er 32-Bit-Anwendungssoftware für die 32-Bit-Version seines Befehlssatzes ausführen kann und möglicherweise auch 32-Bit-Betriebssysteme für die 32-Bit-Version seines Befehlssatzes unterstützt .
  • Ein 32-Bit-Prozessor ist nicht mit 64-Bit-Software kompatibel.

Vor-und Nachteile

Ein weit verbreitetes Missverständnis ist, dass 64-Bit-Architekturen nicht besser sind als 32-Bit-Architekturen, es sei denn, der Computer verfügt über mehr als 4 GiB Arbeitsspeicher . Das ist nicht ganz richtig:

  • Einige Betriebssysteme und bestimmte Hardwarekonfigurationen begrenzen den physischen Speicherplatz auf IA-32- Systemen auf 3 GiB , da ein Großteil der 3–4 GiB-Region für die Hardwareadressierung reserviert ist; siehe 3 GiB-Barriere ; 64-Bit-Architekturen können weit mehr als 4 GiB adressieren. IA-32-Prozessoren ab dem Pentium Pro ermöglichen jedoch einen physischen 36-Bit- Speicheradressraum mithilfe von Physical Address Extension (PAE), was einen physischen Adressbereich von 64 GiB ergibt, von dem bis zu 62 GiB vom Hauptspeicher verwendet werden können ; Betriebssysteme, die PAE unterstützen, sind möglicherweise nicht auf 4 GiB des physischen Speichers beschränkt, selbst auf IA-32-Prozessoren. Treiber und andere Kernel-Modus-Software, insbesondere ältere Versionen, sind jedoch möglicherweise nicht mit PAE kompatibel. dies wurde als Grund dafür angeführt, dass 32-Bit-Versionen von Microsoft Windows auf 4 GiB physischen RAM beschränkt sind (obwohl die Gültigkeit dieser Erklärung umstritten ist).
  • Einige Betriebssysteme behalten Teile des Prozessadressraumes für OS Gebrauch, effektiv den Gesamtadressraum zur Verfügung für die Zuordnung von Speichern zu reduzieren für Anwenderprogramme. 32-Bit-Windows reserviert beispielsweise 1 oder 2 GiB (je nach Einstellung) des gesamten Adressraums für den Kernel, wodurch nur 3 oder 2 GiB (jeweils) des Adressraums für den Benutzermodus verfügbar bleiben. Diese Grenze ist auf 64-Bit-Betriebssystemen viel höher.
  • Speicherabgebildete Dateien werden in 32-Bit-Architekturen immer schwieriger zu implementieren, da Dateien mit mehr als 4 GiB immer häufiger werden. so große Dateien können nicht ohne weiteres auf 32-Bit-Architekturen gemappt werden, da jeweils nur ein Teil der Datei in den Adressraum gemappt werden kann, und um auf eine solche Datei durch Memory Mapping zuzugreifen, müssen die gemappten Teile ausgelagert werden und aus dem Adressraum nach Bedarf. Dies ist ein Problem, da die Speicherzuordnung bei richtiger Implementierung durch das Betriebssystem eine der effizientesten Disk-to-Memory-Methoden ist.
  • Einige 64-Bit-Programme wie Encoder, Decoder und Verschlüsselungssoftware können stark von 64-Bit-Registern profitieren, während die Leistung anderer Programme, wie z 64-Bit-Umgebung.
  • Einige 64-Bit-Architekturen, wie z. B. x86-64 , unterstützen allgemeinere Register als ihre 32-Bit-Gegenstücke (obwohl dies nicht speziell auf die Wortlänge zurückzuführen ist). Dies führt zu einer erheblichen Geschwindigkeitssteigerung bei engen Schleifen, da der Prozessor keine Daten aus dem Cache oder Hauptspeicher holen muss, wenn die Daten in die verfügbaren Register passen.
Beispiel in C :
int a, b, c, d, e;
for (a = 0; a < 100; a++)
{
    b = a;
    c = b;
    d = c;
    e = d;
}
Wenn ein Prozessor nur zwei oder drei Werte oder Variablen in Registern halten kann, müsste er einige Werte zwischen Speicher und Registern verschieben, um auch die Variablen d und e verarbeiten zu können; Dies ist ein Prozess, der viele CPU-Zyklen benötigt. Ein Prozessor, der alle Werte und Variablen in Registern halten kann, kann diese durchlaufen, ohne dass bei jeder Iteration Daten zwischen Registern und Speicher verschoben werden müssen. Dieses Verhalten kann leicht mit virtuellem Speicher verglichen werden, obwohl alle Auswirkungen vom Compiler abhängig sind.

Der Hauptnachteil von 64-Bit-Architekturen besteht darin, dass die gleichen Daten im Vergleich zu 32-Bit-Architekturen mehr Platz im Speicher belegen (aufgrund längerer Zeiger und möglicherweise anderer Typen und Alignment-Padding). Dies erhöht die Speicheranforderungen eines gegebenen Prozesses und kann Auswirkungen auf eine effiziente Verwendung des Prozessor-Cache haben. Die Beibehaltung eines partiellen 32-Bit-Modells ist eine Möglichkeit, dies zu handhaben, und ist im Allgemeinen ziemlich effektiv. Das Betriebssystem z/OS verfolgt beispielsweise diesen Ansatz und erfordert, dass sich der Programmcode in 31-Bit-Adressräumen befindet (das höherwertige Bit wird nicht bei der Adressberechnung auf der zugrunde liegenden Hardwareplattform verwendet), während Datenobjekte optional in 64-Bit-Adressräumen gespeichert werden können. Bit-Regionen. Nicht alle diese Anwendungen benötigen einen großen Adressraum oder manipulieren 64-Bit-Datenelemente, daher profitieren diese Anwendungen nicht von diesen Funktionen.

Softwareverfügbarkeit

x86-basierten 64-Bit-Systemen fehlen manchmal Entsprechungen von Software , die für 32-Bit-Architekturen geschrieben wurde. Das schwerwiegendste Problem in Microsoft Windows sind inkompatible Gerätetreiber für veraltete Hardware. Die meisten 32-Bit-Anwendungssoftware kann auf einem 64-Bit-Betriebssystem in einem Kompatibilitätsmodus laufen , der auch als Emulationsmodus bezeichnet wird , zB Microsoft WoW64- Technologie für IA-64 und AMD64. Die 64-Bit-Windows-Native-Modus-Treiberumgebung wird auf der 64-Bit- NTDLL.DLL ausgeführt , die keinen 32-Bit-Win32-Subsystemcode aufrufen kann (häufig Geräte, deren tatsächliche Hardwarefunktion in Benutzermodus-Software emuliert wird, wie Winprinters). Da 64-Bit-Treiber für die meisten Geräte bis Anfang 2007 (Vista x64) nicht verfügbar waren, galt die Verwendung einer 64-Bit-Version von Windows als Herausforderung. Seitdem hat sich der Trend jedoch in Richtung 64-Bit-Computing verschoben, umso mehr, als die Speicherpreise gesunken sind und die Verwendung von mehr als 4 GiB RAM zugenommen hat. Die meisten Hersteller begannen, sowohl 32-Bit- als auch 64-Bit-Treiber für neue Geräte bereitzustellen, sodass die Nichtverfügbarkeit von 64-Bit-Treibern kein Problem mehr darstellte. Für viele ältere Geräte wurden 64-Bit-Treiber nicht mitgeliefert, die folglich in 64-Bit-Systemen nicht verwendet werden konnten.

Die Treiberkompatibilität war bei Open-Source-Treibern weniger problematisch, da 32-Bit-Treiber für die 64-Bit-Nutzung modifiziert werden konnten. Die Unterstützung von Hardware, die vor Anfang 2007 hergestellt wurde, war für Open-Source-Plattformen aufgrund der relativ geringen Anzahl von Benutzern problematisch.

64-Bit-Versionen von Windows können keine 16-Bit-Software ausführen . Die meisten 32-Bit-Anwendungen funktionieren jedoch gut. 64-Bit-Benutzer sind gezwungen, eine virtuelle Maschine eines 16- oder 32-Bit-Betriebssystems zu installieren, um 16-Bit-Anwendungen auszuführen.

Mac OS X 10.4 "Tiger" und Mac OS X 10.5 "Leopard" hatten nur einen 32-Bit-Kernel, können aber 64-Bit-Benutzermodus-Code auf 64-Bit-Prozessoren ausführen. Mac OS X 10.6 "Snow Leopard" hatte sowohl 32- als auch 64-Bit-Kernel und verwendete auf den meisten Macs den 32-Bit-Kernel sogar auf 64-Bit-Prozessoren. Dadurch konnten diese Macs 64-Bit-Prozesse unterstützen und gleichzeitig 32-Bit-Gerätetreiber unterstützen. wenn auch nicht 64-Bit-Treiber und Leistungsvorteile, die damit einhergehen können. Mac OS X 10.7 "Lion" lief auf mehr Macs mit einem 64-Bit-Kernel, und OS X 10.8 "Mountain Lion" und spätere macOS- Versionen haben nur einen 64-Bit-Kernel. Auf Systemen mit 64-Bit-Prozessoren können sowohl der 32- als auch der 64-Bit-macOS-Kernel 32-Bit-Benutzermoduscode ausführen, und alle Versionen von macOS enthalten 32-Bit-Versionen von Bibliotheken, die 32-Bit-Anwendungen verwenden würden, also 32 -bit-Benutzermodus-Software für macOS wird auf diesen Systemen ausgeführt.

Linux und die meisten anderen Unix-ähnlichen Betriebssysteme und die C- und C++- Toolchains dafür unterstützen seit vielen Jahren 64-Bit-Prozessoren. Viele Anwendungen und Bibliotheken für diese Plattformen sind Open-Source-Software , die in C und C++ geschrieben sind, sodass sie, wenn sie 64-Bit-sicher sind, in 64-Bit-Versionen kompiliert werden können. Dieses quellenbasierte Verteilungsmodell mit Schwerpunkt auf häufigen Releases macht die Verfügbarkeit von Anwendungssoftware für diese Betriebssysteme weniger problematisch.

64-Bit-Datenmodelle

In 32-Bit-Programmen haben Zeiger und Datentypen wie Integer im Allgemeinen die gleiche Länge. Dies ist auf 64-Bit-Rechnern nicht unbedingt der Fall. Das Mischen von Datentypen in Programmiersprachen wie C und seinen Nachkommen wie C++ und Objective-C kann daher bei 32-Bit-Implementierungen funktionieren, jedoch nicht bei 64-Bit-Implementierungen.

In vielen Programmierumgebungen für C und von C abgeleitete Sprachen auf 64-Bit-Maschinen sind intVariablen immer noch 32 Bit breit, aber lange Ganzzahlen und Zeiger sind 64 Bit breit. Diese werden mit einem LP64- Datenmodell beschrieben , das eine Abkürzung für "Long, Pointer, 64" ist. Andere Modelle sind das ILP64- Datenmodell, bei dem alle drei Datentypen 64 Bit breit sind, und sogar das SILP64- Modell, bei dem kurze Ganzzahlen ebenfalls 64 Bit breit sind. In den meisten Fällen sind die erforderlichen Änderungen jedoch relativ geringfügig und unkompliziert, und viele gut geschriebene Programme können ohne Änderungen einfach für die neue Umgebung neu kompiliert werden. Eine andere Alternative ist das LLP64- Modell, das die Kompatibilität mit 32-Bit-Code beibehält , indem sowohl intals auch longals 32-Bit belassen werden . LL bezieht sich auf den Long-Long-Integer- Typ, der auf allen Plattformen, einschließlich 32-Bit-Umgebungen, mindestens 64 Bit umfasst.

Es gibt auch Systeme mit 64-Bit-Prozessoren, die ein ILP32- Datenmodell verwenden, mit zusätzlichen 64-Bit-Long-Integern; dies wird auch auf vielen Plattformen mit 32-Bit-Prozessoren verwendet. Dieses Modell reduziert die Codegröße und die Größe von Datenstrukturen, die Zeiger enthalten, auf Kosten eines viel kleineren Adressraums, eine gute Wahl für einige eingebettete Systeme. Für Befehlssätze wie x86 und ARM, bei denen die 64-Bit-Version des Befehlssatzes mehr Register hat als die 32-Bit-Version, bietet sie Zugriff auf die zusätzlichen Register ohne Platzeinbußen. Es ist in 64-Bit-RISC-Maschinen üblich, wird in x86 als x32 ABI erforscht und wurde kürzlich in der Apple Watch Series 4 und 5 verwendet.

64-Bit-Datenmodelle
Datenmodell kurz (ganzzahlig) int lang (Ganzzahl) lang Lang Zeiger,
Größe_t
Beispielbetriebssysteme
ILP32 16 32 32 64 32 x32- und arm64ilp32- ABIs auf Linux-Systemen; MIPS N32 ABI.
LLP64 16 32 32 64 64 Microsoft Windows (x86-64 und IA-64) mit Visual C++ ; und MinGW
LP64 16 32 64 64 64 Die meisten Unix- und Unix-ähnlichen Systeme, zB Solaris , Linux , BSD , macOS . Windows bei Verwendung von Cygwin ; z/OS
ILP64 16 64 64 64 64 HAL Computer Systems Port von Solaris zum SPARC64
SILP64 64 64 64 64 64 Klassische UNICOS (im Vergleich zu UNICOS/mp usw.)

Viele 64-Bit-Plattformen verwenden heute ein LP64- Modell (einschließlich Solaris, AIX , HP-UX , Linux, macOS, BSD und IBM z/OS). Microsoft Windows verwendet ein LLP64- Modell. Der Nachteil des LP64-Modells besteht darin, dass das Speichern von a longin a intabgeschnitten werden kann. Auf der anderen Seite long„funktioniert“ die Umwandlung eines Zeigers in einen in LP64. Beim LLP64-Modell ist es umgekehrt. Dies sind keine Probleme, die vollständig standardkonformen Code betreffen, aber Code wird oft mit impliziten Annahmen über die Breite von Datentypen geschrieben. C-Code sollte ( u) bevorzugen, intptr_tanstatt longZeiger in Integer-Objekte umzuwandeln.

Ein Programmiermodell ist eine Wahl, die für einen bestimmten Compiler geeignet ist, und mehrere können auf demselben Betriebssystem nebeneinander existieren. Das Programmiermodell, das als primäres Modell für die Anwendungsprogrammierschnittstelle (API) des Betriebssystems gewählt wurde, dominiert jedoch typischerweise.

Eine weitere Überlegung ist das für Gerätetreiber verwendete Datenmodell . Treiber machen den Großteil des Betriebssystemcodes in den meisten modernen Betriebssystemen aus (obwohl viele möglicherweise nicht geladen werden, wenn das Betriebssystem ausgeführt wird). Viele Treiber verwenden Zeiger stark, um Daten zu manipulieren, und müssen in einigen Fällen Zeiger einer bestimmten Größe in die Hardware laden, die sie für den direkten Speicherzugriff (DMA) unterstützen. Beispielsweise konnte ein Treiber für ein 32-Bit-PCI-Gerät, das das Gerät auffordert, DMA-Daten in obere Bereiche des Speichers einer 64-Bit-Maschine zu übertragen, Anforderungen des Betriebssystems zum Laden von Daten vom Gerät in den Speicher oberhalb der 4- Gibibyte- Grenze nicht erfüllen , da die Zeiger für diese Adressen nicht in die DMA-Register des Geräts passen würden. Dieses Problem wird dadurch gelöst, dass das Betriebssystem die Speicherbeschränkungen des Geräts berücksichtigt, wenn es Anforderungen an Treiber für DMA generiert, oder indem eine Eingabe-Ausgabe-Speicherverwaltungseinheit (IOMMU) verwendet wird.

Aktuelle 64-Bit-Architekturen

Ab Mai 2018 umfassen 64-Bit-Architekturen, für die Prozessoren hergestellt werden:

Die meisten 64-Bit-Architekturen, die von derselben 32-Bit-Architektur abgeleitet sind, können Code, der für die 32-Bit-Versionen geschrieben wurde, nativ ohne Leistungseinbußen ausführen. Diese Art von Unterstützung wird allgemein als Bi-Arch-Unterstützung oder allgemeiner Multi-Arch-Unterstützung bezeichnet .

Siehe auch

Verweise

Externe Links