Kann ein 32-Bit-Betriebssystem auf einem 64-Bit-Prozessor laufen?
Was ist der Unterschied zwischen einem 32-Bit-Betriebssystem und einem 64-Bit-Betriebssystem? Kann ein 32-Bit-Betriebssystem auf einem 64-Bit-Prozessor laufen?
Was ist der Unterschied zwischen einem 32-Bit-Betriebssystem und einem 64-Bit-Betriebssystem? Kann ein 32-Bit-Betriebssystem auf einem 64-Bit-Prozessor laufen?
Ihre Frage ist architekturspezifisch. x64 ist im Wesentlichen eine Erweiterung der x86-Architektur. Sie unterstützt einen 64-Bit-Adressraum. Sie bietet einige neue Anweisungen und neue Register.
Sie können 32-Bit-x86-Windows auf einem x64-Rechner ausführen. Beachten Sie, dass Sie dies nicht auf Itanium 64-Bit-Systemen tun können.
Die derzeit akzeptierte Antwort ist im Allgemeinen richtig, aber nicht spezifisch. Es gibt nicht wirklich eine “32-Bit-CPU” oder eine “64-Bit-CPU” - das ist eine Beschreibung, die sich nur auf einen kleinen Teil der Architektur der CPU bezieht. Insbesondere bezieht sie sich auf die Anzahl der Adressauswahlleitungen zwischen der CPU und dem Speicher, d.h. den sogenannten Adressraum, der für Speicheroperationen zur Verfügung steht.
In den alten Zeiten der CPU, als man sich noch hinsetzte und die Drähte zwischen einem Prozessor und dem Speicher weben (wickeln) musste, hätte man entweder 32 oder (theoretisch, weil es das damals noch nicht gab) 64 Drähte zwischen der CPU und dem Speicher-Controller verwenden müssen, um anzugeben, auf welche Speicheradresse man zugreifen wollte. Nehmen wir 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. Diese 2-Bit geben uns 2^2 Bytes RAM (4 Bytes).
Wenn Sie eine 32-Bit-CPU nehmen und 32 weitere Drähte zwischen der CPU und dem Speicher-Controller hinzufügen, so dass Sie auf magische Weise in der Lage sind, mehr Speicher zu unterstützen, haben Sie jetzt eine “64-Bit-CPU”, die 32-Bit-Code oder 64-Bit-Code ausführen kann. Was bedeutet das und wie geschieht das? Nun, nehmen wir unsere 2-Bit-CPU aus dem früheren Teil dieser Antwort und fügen einen weiteren Draht hinzu, der sie in eine 3-Bit-CPU verwandelt und uns von 4 Byte auf 2^3 oder 8 Byte RAM bringt.
Der bestehende “2-Byte”-Code wird ausgeführt und setzt die Werte der letzten 2 Drähte wie oben angegeben (00-11). Wir verdrahten die zusätzliche Verbindung so, dass sie standardmäßig Null ist, so dass der 2-Byte-Code, wenn er 00 auswählt, tatsächlich 000 auswählt und wenn er 11 auswählt, tatsächlich 011 auswählt. Einfach.
Nun möchte ein Programmierer “nativen” 3-Byte-Code schreiben und schreibt seine Software so, dass sie den zusätzlichen Adressraum ausnutzt. Sie sagt der CPU, dass sie weiß, was sie tut und dass sie die neuen, zusätzlichen Drähte manuell steuern wird. Ihre Software weiß über die zusätzliche(n) Leitung(en) Bescheid und sendet korrekt 000-111 aus, wodurch sie vollen Zugriff auf den von der neuen CPU-Architektur unterstützten Speicherbereich erhält.
Aber so muss es nicht sein. Tatsächlich ist das normalerweise nicht so, wie die Dinge passieren. Als 64-Bit-CPUs zum ersten Mal eingeführt wurden (und davon gab es viele), hatten sie alle völlig neue Architekturen/Designs. Sie haben nicht einfach zusätzliche 32 Drähte angehängt und gesagt: “Bitte sehr, das ist eine 64-Bit-CPU, die Sie im 32-Bit- oder 64-Bit-Modus verwenden können”, sondern sie haben gesagt: “Das ist unsere neue CPU, die nur in dieser völlig neuen Maschinensprache programmiert werden muss, die sich auf diese völlig neue Weise verhält, die eine Bazillion verschiedener Probleme viel eleganter löst, als es die alten x86/i386-32-Bit-CPUs jemals getan haben, und die eine native 64-Bit-Architektur ist. Viel Spaß!”
Das war die Geschichte des Intel Itanium, heute bekannt als der “Itanic”, weil er so massiv unterging. Er sollte die neue 64-Bit-Ära einläuten, und er war etwas, das man gesehen haben muss. Anweisungen mit variabler Länge, riesige Caches, 64-Bit-Adressraum, tonnenweise Register, super spannend, super cool und super schwer davon zu überzeugen, 20 Jahre alten Code neu zu kompilieren oder umzuschreiben. Das war zu der Zeit, als AMD und Intel tatsächlich miteinander konkurrierten und AMD die brillante Idee hatte, zu sagen: “Lasst uns diese ganze ‘löse alle Probleme der Welt’-Sache vergessen und einfach 32 weitere Drähte zum i386 hinzufügen und eine 32-Bit-kompatible 64-Bit-CPU machen” und die x86_64-CPU-Architektur war geboren.
In der Tat, wenn Sie sich die Kernel-Namen und Quellen der wichtigsten Betriebssysteme (Linux, Windows, BSDs, etc.) ansehen, werden Sie feststellen, dass sie mit Verweisen auf AMD64-CPUs und AMD64-Architektur übersät sind. AMD hat eine erfolgreiche Strategie entwickelt, um alle zum Umstieg auf die 64-Bit-Welt zu bewegen und gleichzeitig die Kompatibilität mit 32-Bit-Anwendungen zu erhalten, so dass ein 32-Bit-Betriebssystem auf 64-Bit-Hardware oder sogar 32-Bit-Anwendungen auf einem 64-Bit-Betriebssystem auf 64-Bit-Hardware laufen können. Intel folgte eher früher als später mit seiner “Intel EM64T”-Architektur (die im Grunde identisch mit AMD64 war) und x86_64 setzte sich durch, während Itanic und andere wie MIPS64 und ALPHA64 auf dem Desktop/Server-Markt nicht mehr gesehen wurden.
tl;dr amd64 aka x86_64 CPUs sind so konzipiert, dass sie sowohl mit 32- als auch mit 64-Bit-Kernel und -Code kompatibel sind, aber die meisten 64-Bit-CPUs sind entschieden nicht abwärtskompatibel in der gleichen Weise. Eine 32-Bit-CPU kann auf höchstens 4GiB Speicher zugreifen, während eine 64-Bit-CPU auf atemberaubende 16 EiBs (16 × 1024^6 Bytes oder 4 Milliarden mal so viel Speicher wie 4GiB) zugreifen kann.
Sowohl ein 32- als auch ein 64-Bit-Betriebssystem können auf einem 64-Bit-Prozessor laufen, 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 der gleichen Zeit erledigen. Ein 32-Bit-Prozessor unterstützt nur 32-Bit-Windows-Betriebssysteme.