Kan een 32 bit OS draaien op een 64 bit processor?
Wat is het verschil tussen een 32 bit OS en een 64 bit OS? Kan een 32 bit OS draaien op een 64 bit processor?
Wat is het verschil tussen een 32 bit OS en een 64 bit OS? Kan een 32 bit OS draaien op een 64 bit processor?
Uw vraag is architectuurspecifiek. x64 is in wezen een uitbreiding van de x86-architectuur. Het ondersteunt een 64 bit adresruimte. Het biedt een aantal nieuwe instructies en nieuwe registers.
Je kunt 32-bit x86 Windows draaien op een x64 machine. Merk op dat je dit niet kunt doen op Itanium 64-bit systemen.
Het thans geaccepteerde antwoord is in het algemeen juist, maar niet specifiek. Er is echt niet één ding dat een “32-bit CPU” of een “64-bit CPU” wordt genoemd - dat is een beschrijving die slechts verwijst naar een klein deel van de architectuur van de CPU. In het bijzonder verwijst het naar het aantal adres selectielijnen tussen de CPU en het geheugen, d.w.z. de zogenaamde adresruimte die beschikbaar is voor geheugenbewerkingen.
In de dagen van weleer, toen men nog met de CPU bezig was om de draden tussen een processor en het geheugen te weven (wikkelen), zou je tussen de CPU en de geheugencontroller 32 of (theoretisch, want het bestond toen nog niet) 64 draden hebben moeten gebruiken die zouden worden gebruikt om aan te geven welk geheugenadres je wilde benaderen. Laten we bijvoorbeeld zeggen dat we een 2-bit geheugenarchitectuur hebben: door 00 te zenden wordt adres 0 geselecteerd, door 01 adres 1, door 10 adres 2 en door 11 adres 3. Deze 2-bit geeft ons 2^2 bytes RAM (4 bytes).
Als je een 32-bit CPU neemt en je voegt 32 extra draden toe tussen de CPU en de geheugencontroller zodat je op magische wijze in staat bent meer geheugen te ondersteunen, heb je nu een “64-bit CPU” die 32-bit code of 64-bit code kan uitvoeren. Wat betekent dit en hoe gebeurt dit? Laten we onze 2-bit CPU uit het eerste deel van dit antwoord nemen en er een draad aan toevoegen, waardoor het een 3-bit CPU wordt, die ons van 4 bytes naar 2^3 of 8 bytes RAM brengt.
De bestaande “2-byte” code zal lopen, waarbij de waarden van de laatste 2 draden worden ingesteld zoals hierboven aangegeven (00-11). We zullen de extra verbinding standaard op nul zetten, dus wanneer de 2-byte code loopt, wanneer het 00 selecteert, selecteert het eigenlijk 000 en wanneer het 11 selecteert, selecteert het eigenlijk 011. Makkelijk.
Nu wil een programmeur “native” 3-byte code schrijven en schrijft haar software om te profiteren van de extra adresruimte. Ze vertelt de CPU dat ze weet wat ze doet en dat ze handmatige controle zal nemen over de nieuwe, extra draden. Haar software is op de hoogte van de extra draad(en) en stuurt correct 000-111 uit, waardoor zij volledige toegang krijgt tot het geheugenbereik dat door deze nieuwe CPU-architectuur wordt ondersteund.
Maar zo hoeft het niet te gaan. In feite is dat normaal niet hoe dingen gebeuren. Toen 64-bit CPU’s voor het eerst werden geïntroduceerd (en er waren er veel), gingen ze allemaal met geheel nieuwe architecturen/ontwerpen. Ze plakten er niet gewoon een extra 32 draad aan vast en zeiden: “Ziezo, dit is een 64-bit CPU die je in 32-bit of 64-bit modus kunt gebruiken”, maar ze zeiden: “Dit is onze nieuwe CPU en je hoeft hem alleen maar in deze geheel nieuwe machinetaal te programmeren, hij gedraagt zich op deze geheel nieuwe manier, lost een biljoen verschillende problemen veel eleganter op dan de oude x86/i386 32-bit CPU’s ooit deden, en het is een native 64-bit architectuur. Veel plezier.”
Dat was het verhaal van de Intel Itanium, nu bekend als de “Itanic” vanwege hoe massaal hij zonk. Het moest het nieuwe 64-bit tijdperk inluiden, en het was iets om te aanschouwen. Instructies van variabele lengte, enorme caches, 64-bit adresruimte, tonnen registers, super opwindend, super cool, en super moeilijk om iedereen ervan te overtuigen om 20 jaar oude code te hercompileren of te herschrijven. Dit was in de tijd dat AMD en Intel echt met elkaar concurreerden, en AMD het briljante idee had om te zeggen “laten we al deze ‘los alle wereldproblemen op’-zaken vergeten en gewoon 32 extra draden aan de i386 toevoegen en een 32-bit compatibele 64-bit CPU maken” en de x86_64 CPU-architectuur was geboren.
In feite, als je kijkt naar de kernel namen en bronnen voor de belangrijkste besturingssystemen (Linux, Windows, BSD’s, enz.) zul je ze bezaaid vinden met verwijzingen naar AMD64 CPU’s en AMD64 architectuur. AMD kwam met een winnende strategie om iedereen te laten overstappen naar de 64-bit wereld met behoud van compatibiliteit met 32-bit toepassingen, op zo'n manier dat een 32-bit OS kon draaien op 64-bit hardware of zelfs 32-bit toepassingen konden draaien op een 64-bit OS op 64-bit hardware. Intel volgde eerder vroeg dan laat met hun “Intel EM64T” architectuur (die in principe identiek was aan AMD64) en x8664 won het terwijl de Itanic en anderen zoals MIPS64 en ALPHA64 niet meer werden gezien in de desktop/server markt.
tl;dr amd64 aka x8664 CPU’s zijn ontworpen om compatibel te zijn met zowel 32- als 64-bit kernel en code, maar de meeste 64-bit CPU’s zijn beslist _niet achterwaarts compatibel op dezelfde manier. Een 32-bit CPU kan maximaal 4GiB geheugen benaderen, terwijl een 64-bit CPU maar liefst 16 EiBs kan benaderen (16 × 1024^6 bytes, of 4 miljard keer zoveel geheugen als 4GiB).
Zowel een 32 als een 64 bit OS kan draaien op een 64 bit processor, maar het 64 bit OS kan de volledige kracht van de 64 bit processor gebruiken (grotere registers, meer instructies) - kortom het kan meer werk doen in dezelfde tijd. Een 32 bit processor ondersteunt alleen een 32 bit Windows OS.