Un sistema operativo a 32 bit può funzionare su un processore a 64 bit?
Qual è la differenza tra un sistema operativo a 32 bit e uno a 64 bit? Un sistema operativo a 32 bit può funzionare su un processore a 64 bit?
Qual è la differenza tra un sistema operativo a 32 bit e uno a 64 bit? Un sistema operativo a 32 bit può funzionare su un processore a 64 bit?
La tua domanda è specifica dell'architettura. x64 è essenzialmente un'estensione dell'architettura x86. Supporta uno spazio di indirizzi a 64 bit. Fornisce alcune nuove istruzioni e nuovi registri.
È possibile eseguire Windows x86 a 32 bit su una macchina x64. Notate che non potete farlo su sistemi Itanium a 64 bit.
La risposta attualmente accettata è generalmente corretta, ma non specificamente tale. Non c'è davvero una singola cosa chiamata “CPU a 32 bit” o “CPU a 64 bit” - questa è una descrizione che si riferisce solo a una piccola parte dell'architettura della CPU. In particolare, si riferisce al numero di linee di selezione degli indirizzi tra la CPU e la memoria, cioè il cosiddetto address space disponibile per le operazioni di memoria.
Ai tempi in cui la CPU quando la gente si sedeva e tesseva (avvolgeva) i fili tra un processore e la memoria, avreste dovuto usare o 32 o (teoricamente, perché all'epoca non esisteva) 64 fili tra la CPU e il controller della memoria che sarebbero serviti per specificare a quale indirizzo di memoria volevate accedere. Per esempio, diciamo che abbiamo un'architettura di memoria a 2 bit: inviando 00 si selezionerebbe l'indirizzo 0, 01 l'indirizzo 1, 10 l'indirizzo 2 e 11 l'indirizzo 3. Questo 2-bit ci dà 2^2 byte di RAM (4 byte).
Se prendi una CPU a 32 bit e aggiungi altri 32 fili tra la CPU e il controller di memoria in modo da essere magicamente in grado di supportare più memoria, ora hai una “CPU a 64 bit” che può eseguire codice a 32 bit o a 64 bit. Cosa significa questo e come succede? Bene, prendiamo la nostra CPU a 2 bit dalla parte precedente di questa risposta e aggiungiamo un altro filo, trasformandola in una CPU a 3 bit, portandoci da 4 byte a 2^3 o 8 byte di RAM.
Il codice “2 byte” esistente verrà eseguito, impostando i valori degli ultimi 2 fili come indicato sopra (00-11). Faremo in modo che la connessione extra sia zero per default, così in realtà quando il codice a 2 byte viene eseguito, quando seleziona 00, sta effettivamente selezionando 000 e quando seleziona 11 sta effettivamente selezionando 011. Facile.
Ora un programmatore vuole scrivere codice “nativo” a 3 byte e scrive il suo software per sfruttare lo spazio di indirizzamento extra. Dice alla CPU che sa cosa sta facendo e che prenderà il controllo manuale dei nuovi fili extra. Il suo software sa dei fili extra e invia correttamente 000-111, dandole pieno accesso alla gamma di memoria supportata da questa nuova architettura della CPU.
Ma non è così che deve accadere. Infatti, normalmente non avviene così. Quando le CPU a 64 bit sono state introdotte per la prima volta (e ce ne sono state molte), tutte sono andate con architetture/progetti completamente nuovi. Non si limitavano ad aggiungere 32 fili e a dire “ecco qua, questa è una CPU a 64 bit che potete usare in modalità 32 o 64 bit”, ma piuttosto dicevano “Questa è la nostra nuova CPU e richiede solo la programmazione in questo linguaggio macchina completamente nuovo, si comporta in questo modo completamente nuovo, risolve un fantastilione di problemi diversi in modo molto più elegante di quanto abbiano mai fatto le vecchie CPU x86/i386 a 32 bit, ed è un'architettura nativa a 64 bit. Divertitevi”.
Questa era la storia dell'Intel Itanium, ora notoriamente conosciuto come “Itanic” per come è affondato in modo massiccio. Doveva annunciare la nuova era a 64 bit, ed era qualcosa da vedere. Istruzioni di lunghezza variabile, cache enormi, spazio di indirizzamento a 64 bit, tonnellate di registri, super eccitante, super cool, e super difficile da convincere tutti a ricompilare o riscrivere 20 anni di codice legacy. Questo accadeva quando AMD e Intel erano effettivamente in competizione, e AMD ebbe la brillante idea di dire “lasciamo perdere tutta questa faccenda del ‘risolvere tutti i problemi del mondo’ e aggiungiamo semplicemente altri 32 fili all'i386 e facciamo una CPU a 64 bit compatibile a 32 bit” e nacque l'architettura CPU x86_64.
Infatti, se guardate i nomi dei kernel e i sorgenti dei principali sistemi operativi (Linux, Windows, BSD, ecc.) li troverete pieni di riferimenti alle CPU AMD64 e all'architettura AMD64. AMD ha elaborato una strategia vincente per far passare tutti al mondo a 64 bit, pur mantenendo la compatibilità con le applicazioni a 32 bit, in modo che un sistema operativo a 32 bit potesse funzionare su un hardware a 64 bit o anche le applicazioni a 32 bit potessero funzionare su un sistema operativo a 64 bit su un hardware a 64 bit. Intel seguì l'esempio più tardi con la loro architettura “Intel EM64T” (che era fondamentalmente identica ad AMD64) e x86\64 ebbe la meglio mentre Itanic e altri come MIPS64 e ALPHA64 non furono più visti nel mercato desktop/server.
tl;dr Le CPU amd64 alias x86\64 sono progettate per essere compatibili con kernel e codice a 32 e 64 bit, ma la maggior parte delle CPU a 64 bit sono decisamente non retrocompatibili allo stesso modo. Una CPU a 32 bit può accedere al massimo a 4GiB di memoria, mentre una CPU a 64 bit può accedere a uno sbalorditivo 16 EiBs (16 × 1024^6 byte, o 4 miliardi di volte più memoria di 4GiB).
Sia un sistema operativo a 32 che a 64 bit può funzionare su un processore a 64 bit, ma il sistema operativo a 64 bit può usare tutta la potenza del processore a 64 bit (registri più grandi, più istruzioni) - in breve può fare più lavoro nello stesso tempo. Un processore a 32 bit supporta solo il sistema operativo Windows a 32 bit.