Kann ein 32-Bit-Betriebssystem in einem 64-Bit-Prozessor ausgeführt werden?

24

Was ist der Unterschied zwischen 32-Bit-Betriebssystemen und 64-Bit-Betriebssystemen? Kann ein 32-Bit-Betriebssystem in einem 64-Bit-Prozessor ausgeführt werden?

zufällig
quelle
Wenn Sie über Windows sprechen (und das Win32-Tag scheint darauf hinzudeuten), dann ja, absolut - Vista und Win7 64-Bit unterstützen fast alle 32-Bit-Apps über eine Kompatibilitätsebene - ich habe noch nichts gefunden, was dies nicht kann funktioniert unter Vista 64-Bit nicht
einwandfrei
5
Die Frage scheint eher, ob Sie Win Vista x86 auf einer Box mit 64-Bit-Prozessor installieren können, als ob x86-Apps auf Win Vista x64 laufen.
KTC

Antworten:

34

Ihre Frage ist architekturspezifisch. x64 ist im Wesentlichen eine Erweiterung der x86-Architektur. Es unterstützt einen 64-Bit-Adressraum. Es enthält einige neue Anweisungen und neue Register.

Sie können 32-Bit-x86-Windows auf einem x64-Computer ausführen. Beachten Sie, dass dies auf Itanium 64-Bit-Systemen nicht möglich ist.

Mehrdad Afshari
quelle
15

Auf einem 64-Bit-Prozessor können sowohl 32- als auch 64-Bit-Betriebssysteme ausgeführt werden (mindestens ein x64-Prozessor). Ein 32-Bit-Prozessor kann nativ nur 32 ausführen.

Der Unterschied liegt hauptsächlich in der Größe eines Zeigers / einer Referenz. Auf 64-Bit-Computern können Sie auf eine Adresse in einem 64-Bit-Adressbereich verweisen (wodurch Sie 2 ^ 64 Byte Speicher erhalten). Auf 32 Bit können Sie nur 2 ^ 32 Bytes (= 4 GB) adressieren. Wenn Sie sich die aktuellen Computer ansehen, ist es offensichtlich, warum die Welt auf 64-Bit umsteigt: 32-Bit kann nicht mehr einfach den gesamten Arbeitsspeicher adressieren.

Auf x64 (AMD / Intel) haben Sie zusätzliche Vorteile von 64 Bit. Die CPU verfügt über mehr Register und ermöglicht so einen effizienteren Code.

Auf anderen Architekturen sind die Unterschiede zwischen 64 und 32 Bit weniger offensichtlich. Zum Beispiel war der Nintendo 64 (daran erinnert?) Eine 64-Bit-Maschine, aber der größte Teil des Codes war 32-Bit. In diesem Fall dienten 64 Bit eher als Marketingtrick.

terdon
quelle
3

Die aktuell akzeptierte Antwort ist im Allgemeinen richtig, aber nicht spezifisch. Es gibt wirklich keine einzige Sache, die als "32-Bit-CPU" oder "64-Bit-CPU" bezeichnet wird - das ist eine Beschreibung, die sich nur auf einen kleinen Teil der Architektur der CPU bezieht, insbesondere auf die Zahl von Adressauswahlleitungen zwischen der CPU und dem Speicher, dh dem sogenannten Adressraum, der für Speicheroperationen verfügbar ist.

In den Tagen früher, als die CPU die Drähte zwischen einem Prozessor und dem Speicher zusammensetzte und wickelte, hätte man entweder 32 oder (theoretisch, weil es zu der Zeit nicht existierte) 32 verwenden müssen. 64 Drähte zwischen der CPU und dem Speichercontroller, mit denen angegeben wird, auf welche Speicheradresse Sie zugreifen möchten. Nehmen wir zum Beispiel an, wir haben eine 2-Bit-Speicherarchitektur: Das Senden von 00 würde die Adresse 0 auswählen, 01 würde die Adresse 1 auswählen, 10 würde die Adresse 2 auswählen und 11 würde die Adresse 3 auswählen. Dieses 2-Bit gibt uns 2 ^ 2 Bytes RAM (4 Bytes).

Wenn Sie eine 32-Bit-CPU verwenden und 32 weitere Drähte zwischen der CPU und dem Speichercontroller hinzufügen, um auf magische Weise mehr Speicher zu unterstützen, verfügen Sie jetzt über eine "64-Bit-CPU", die 32-Bit ausführen kann Code oder 64-Bit-Code. Was bedeutet das und wie passiert das? Nun, nehmen wir unsere 2-Bit-CPU aus dem vorherigen Teil dieser Antwort und fügen einen weiteren Draht hinzu, der in eine 3-Bit-CPU umgewandelt wird und uns von 4 Byte auf 2 ^ 3 oder 8 Byte RAM bringt.

Der vorhandene "2-Byte" -Code wird ausgeführt und stellt die Werte der letzten 2 Drähte wie oben angegeben ein (00-11). Wir verbinden die zusätzliche Verbindung standardmäßig mit Null. Wenn also der 2-Byte-Code ausgeführt wird, wenn 00 ausgewählt wird, wird 000 ausgewählt und wenn 11 ausgewählt wird, wird 011 ausgewählt. Einfach.

Nun möchte ein Programmierer "nativen" 3-Byte-Code schreiben und schreibt seine Software, um den zusätzlichen Adressraum zu nutzen. Sie teilt der CPU mit, dass sie weiß, was sie tut, und dass sie die neuen, zusätzlichen Kabel manuell kontrollieren wird. Ihre Software kennt die zusätzliche (n) Leitung (en) und sendet (n) 000-111 korrekt, sodass sie uneingeschränkt auf den von dieser neuen CPU-Architektur unterstützten Speicherbereich zugreifen kann.

Aber so muss es nicht sein. In der Tat ist das normalerweise nicht der Fall. Als 64-Bit-CPUs zum ersten Mal eingeführt wurden (und es gab viele), gingen alle mit völlig neuen Architekturen / Designs einher. Sie haben nicht nur zusätzliche 32 Drähte angeschlossen und gesagt: "Hier, das ist eine 64-Bit-CPU, die Sie im 32-Bit- oder 64-Bit-Modus verwenden können." Es erfordert nur die Programmierung in dieser völlig neuen Maschinensprache, verhält sich auf diese völlig neue Weise, löst eine Unmenge verschiedener Probleme weitaus eleganter als die alten x86 / i386-32-Bit-CPUs und ist eine native 64-Bit-Architektur . "

Das war die Geschichte des Intel Itanium, der heute als "Itanic" bekannt ist, weil er massiv gesunken ist. Es sollte die neue 64-Bit-Ära einläuten, und es war etwas zu sehen. Anweisungen mit variabler Länge, riesige Caches, 64-Bit-Adressraum, jede Menge Register, super aufregend, super cool und super schwer, alle davon zu überzeugen, 20 Jahre alten Code neu zu kompilieren oder neu zu schreiben. Dies war damals, als AMD und Intel tatsächlich miteinander konkurrierten, und AMD hatte die geniale Idee zu sagen: "Vergessen wir all das, um alle Probleme der Welt zu lösen, und fügen Sie dem i386 einfach 32 weitere Drähte hinzu und machen Sie einen 32-Bit-kompatiblen 64-Bit-Computer." bit CPU "und die x86_64 CPU Architektur war geboren.

Wenn Sie sich die Kernelnamen und -quellen für die wichtigsten Betriebssysteme (Linux, Windows, BSDs usw.) ansehen, werden Sie feststellen, dass sie mit Verweisen auf AMD64-CPUs und AMD64-Architektur übersät sind. AMD hat eine erfolgreiche Strategie entwickelt, mit der jeder auf die 64-Bit-Welt umsteigen und gleichzeitig die Kompatibilität mit 32-Bit-Anwendungen aufrechterhalten kann, sodass ein 32-Bit-Betriebssystem auf 64-Bit-Hardware oder sogar 32-Bit-Anwendungen ausgeführt werden kann könnte auf einem 64-Bit-Betriebssystem auf 64-Bit-Hardware ausgeführt werden. Intel folgte Suite eher früher als später mit ihrer "Intel EM64T" -Architektur (die im Wesentlichen mit AMD64 identisch war) und x86_64 setzte sich durch, während der Itanic und andere wie MIPS64 und ALPHA64 auf dem Desktop / Server-Markt nicht mehr zu sehen waren.

tl; dr amd64 aka x86_64-CPUs sind so konzipiert, dass sie sowohl mit dem 32- als auch mit dem 64-Bit-Kernel und -Code kompatibel sind, aber die meisten 64-Bit-CPUs sind eindeutig nicht auf die gleiche Weise abwärtskompatibel. Eine 32-Bit-CPU kann auf höchstens 4 GB Speicher zugreifen, während eine 64-Bit-CPU auf beeindruckende 16 GB Speicher zugreifen kann (16 × 1024 ^ 6 Bytes oder 4 Milliarden Mal so viel Speicher wie 4 GB).

Mahmoud Al-Qudsi
quelle
1
Sie haben ein paar sachliche Fehler: 1) Der Itanium hat keine Anweisungen mit variabler Länge eingeführt (jeder x86 hat sie gehabt). Es wurden sehr lange Wortanweisungen hinzugefügt, die gleichzeitig mit mehreren 64-Bit-Mengen arbeiten konnten. 2) x86_64 hat nicht nur auf mehr Adresszeilen geklatscht; Außerdem wurden eine Reihe zusätzlicher Register hinzugefügt und alle Register (und die ALUs, die mit ihnen arbeiten) von 32 auf 64 Bit erweitert. Vergleichen Sie dies mit dem 8086/8088, der 4 weitere Adressleitungen und Segmentauswahlregister hinzufügte, diese jedoch alle auf 16 Bit hielt, wie der 8080 davor.
Psusi
-1

Sowohl ein 32- als auch ein 64-Bit-Betriebssystem können auf einem 64-Bit-Prozessor ausgeführt werden, aber das 64-Bit-Betriebssystem kann die volle Leistung des 64-Bit-Prozessors nutzen (größere Register, mehr Anweisungen) - kurz gesagt, es kann mehr Arbeit in derselben Zeit erledigen. Ein 32-Bit-Prozessor unterstützt nur 32-Bit-Windows-Betriebssysteme.

CsTamas
quelle
3
Dies ist im Allgemeinen falsch, obwohl dies speziell für x64 richtig ist.
ChrisInEdmonton
1
Auf einem 32-Bit-Prozessor kann jedes Betriebssystem ausgeführt werden, das für die Ausführung auf einer solchen Prozessorarchitektur ausgelegt ist.
Waxhead
Ein 32-Bit-x86-Betriebssystem kann offensichtlich nicht auf ARM64 ausgeführt werden, ist also 32 and 64 bit OS can run on a 64 bit processorim Allgemeinen nicht korrekt
phuclv
@ Phúc Möglicherweise gibt es 64-Bit-Prozessoren, die ihren 32-Bit-Twin nicht unterstützen. Sie verwenden jedoch eine falsche Logik in Ihrem Argument. SunOS 4.4.1 auf 32-Bit-MicroSparc läuft auch nicht auf ARM32. Mit Ihren logischen Mitteln ist es im Allgemeinen nicht korrekt, dass ein 32-Bit-Betriebssystem auf einem 32-Bit-Prozessor ausgeführt werden kann. Wenn ich wie Sie den gesunden Menschenverstand ignoriere, kann ich argumentieren, dass 32-Bit-ARM-Betriebssysteme auf Intel i386 / x64 ausgeführt werden, da Android-Entwickler Android-ARM-Images auf ihren Wintel-Computern ausführen. Natürlich ist das Betriebssystem für die richtige Prozessorfamilie und natürlich läuft das Betriebssystem auf physischer Hardware und nicht auf Emulation (genug gesagt, raus)
Tino