Perché i sistemi x86-64 hanno solo uno spazio di indirizzi virtuali a 48 bit?


97

In un libro ho letto quanto segue:

I processori a 32 bit hanno 2 ^ 32 indirizzi possibili, mentre gli attuali processori a 64 bit hanno uno spazio degli indirizzi a 48 bit

La mia aspettativa era che se si tratta di un processore a 64 bit, anche lo spazio degli indirizzi dovrebbe essere 2 ^ 64.

Quindi mi chiedevo qual è la ragione di questa limitazione?


11
Il libro deve aver parlato specificamente dell'attuale implementazione dell'architettura AMD64 (x86-64). Vengono utilizzati solo i 48 bit di ordine inferiore. Tuttavia, questa non è una limitazione hardware: tutti i 64 bit sono disponibili.
Cody Grey

7
È sempre una buona idea identificare il libro.
Henk Holterman

1
Immagino che le linee dell'indirizzo fisico non siano libere (sono necessari almeno 16 pin aggiuntivi della CPU). E non sono ancora a conoscenza di alcun hardware che possa riempire uno spazio di 48 bit con chip RAM fisici sullo stesso processore. Quando ciò sarà possibile, sono sicuro che AMD aggiungerà i 16 pin mancanti :)
Torp

7
anche, The 32-bit processors have 2^32 possible addressesnon è necessariamente vero, possono esistere cpu a 32 bit con solo 24 "pin" per indirizzare la memoria. Ad esempio, 68EC020 (versione 68020 più economica) è una cpu a 32 bit ma con 24 bit per l'indirizzamento della memoria.
ShinTakezou

21
C'è un problema molto reale con l'indirizzamento fisico a 64 bit, la dimensione della pagina della memoria virtuale è troppo piccola. Il che rende enormi directory di pagine e cache TLB estremamente costosi a ogni cambio di contesto. Il passaggio da pagine 4KB a 4 MB è un'opzione ma molto incompatibile con i sistemi operativi attuali.
Hans Passant

Risposte:


134

Perché è tutto ciò che serve. 48 bit ti danno uno spazio di indirizzi di 256 terabyte. Questo è molto. Non vedrai presto un sistema che necessita di più di quello.

Quindi i produttori di CPU hanno preso una scorciatoia. Usano un set di istruzioni che consente uno spazio di indirizzi a 64 bit completo, ma le CPU attuali usano solo i 48 bit inferiori. L'alternativa era sprecare i transistor per gestire uno spazio di indirizzi più grande che non sarebbe stato necessario per molti anni.

Quindi una volta che ci avviciniamo al limite di 48 bit, è solo questione di rilasciare CPU che gestiscono l'intero spazio degli indirizzi, ma non richiederà alcuna modifica al set di istruzioni e non interromperà la compatibilità.


118
640kb sono sufficienti per chiunque.

7
Stai ancora utilizzando un sistema 8088, bdares?
Joe

23
@bdares: cattiva analogia. Il set di istruzioni dell'arch 8088/8086 ha un limite di 640k incorporato. Solo facendo un nuovo ISA (386) è stato possibile rompere la barriera. x86_64 d'altra parte supporta tutti i 64 bit in ISA. È solo l'hardware della generazione attuale che non può utilizzarli tutti ...
R .. GitHub STOP HELPING ICE

16
@R. In realtà, la limitazione nella CPU era di un megabyte. Il PC IBM ha designato una sezione di quella per le periferiche mappate in memoria, BIOS, ecc. Alcuni altri progetti 8088/8086 (Zenith Z100, se la memoria serve) designati meno per periferiche e simili, e corrispondentemente di più per i programmi applicativi.
Jerry Coffin

25
lwn.net/SubscriberLink/655437/9a48cd3e7a8cbe8a <- tre anni dopo questa risposta, stiamo già raggiungendo questi limiti :) La macchina HP avrà 320 TB di memoria e non possono fornirla come spazio di indirizzi flat a causa del 48 limitazione dell'indirizzamento a bit.
Agam

18

Qualsiasi risposta che si riferisce alla dimensione del bus e alla memoria fisica è leggermente errata, poiché la domanda di OP riguardava lo spazio degli indirizzi virtuali e non lo spazio degli indirizzi fisici . Ad esempio, il limite presumibilmente analogo su circa 386 era un limite alla memoria fisica che potevano usare, non lo spazio degli indirizzi virtuali, che era sempre di 32 bit completi. In linea di principio è possibile utilizzare 64 bit completi di spazio degli indirizzi virtuali anche con pochi MB di memoria fisica; ovviamente puoi farlo scambiando, o per attività specializzate in cui vuoi mappare la stessa pagina alla maggior parte degli indirizzi (ad esempio alcune operazioni con dati sparsi).

Penso che la vera risposta sia che AMD era semplicemente economica e sperava che a nessuno interessasse ora, ma non ho riferimenti da citare.


14
"Essere economici" Immagino che intendi non aggiungere pin che non verranno mai utilizzati, non occupare spazio sul chip per transistor che non verranno utilizzati e utilizzare lo spazio liberato per rendere più veloci le istruzioni esistenti? Se è economico, ci sto!
Olof Forshell

L'80386 consente 2 * 4096 selettori, ciascuno contenente fino a 4 GB di memoria (32 TB in totale). L'80286 consentiva 2 * 4096 selettori, ciascuno contenente fino a 64 KB (1 GB).
Olof Forshell

Gli hack segmentati non lineari non contano come spazio degli indirizzi nel mio libro. Non c'è modo per il software portatile di farne uso.
R .. GitHub STOP AIUTO AL GHIACCIO

@R .. - Ho pensato che la definizione di software portatile è che può . :-) Ad esempio, C ++ proibisce il confronto dei puntatori in diversi array in modo che possano essere in segmenti separati da 4 GB.
Bo Persson

Se la tua compilazione genera effettivamente puntatori enormi e carica un registro di segmento per ogni dereferenziazione della memoria, allora sì. Ma in realtà è terribilmente lento, e invece tutti usavano modelli di memoria ridotta e __far(o peggio ancora, FAR/ far!) Puntatori ...
R .. GitHub STOP HELPING ICE

10

Leggi la sezione sulle limitazioni dell'articolo di wikipedia :

Un PC non può contenere 4 petabyte di memoria (a causa delle dimensioni dei chip di memoria attuali se non altro) ma AMD ha immaginato server di grandi dimensioni, cluster di memoria condivisa e altri usi dello spazio degli indirizzi fisici che potrebbero avvicinarsi a questo nel prossimo futuro, e il 52 L'indirizzo fisico a bit offre ampio spazio per l'espansione senza sostenere i costi di implementazione di indirizzi fisici a 64 bit

Cioè, non ha senso implementare l'indirizzamento completo a 64 bit a questo punto, perché non possiamo costruire un sistema che possa utilizzare appieno tale spazio di indirizzi, quindi scegliamo qualcosa che sia pratico per i sistemi di oggi (e di domani).


Da dove vengono i 4 nei 4 petabyte? Se stiamo parlando di 64 linee di indirizzo dovremmo finire con il quadrato dello spazio degli indirizzi reso possibile da 32 linee di indirizzo che è di 4 gigabyte. Al quadrato, dovremmo avere 16, non 4 petabyte. Mi sto perdendo qualcosa?
Olof Forshell

1
Viene dall'attuale limite fisico (52 bit): il punto è che non possiamo mettere abbastanza RAM in un PC per supportare questo intervallo limitato, per non parlare di ciò che sarebbe richiesto per uno spazio di indirizzi a 64 bit completo.
Damien_The_Unbeliever

9

Non è necessario che la larghezza operativa / del registro nativo interno si rifletta nella larghezza del bus dell'indirizzo esterno.

Supponiamo che tu abbia un processore a 64 bit che deve accedere solo a 1 megabyte di RAM. Un bus di indirizzi a 20 bit è tutto ciò che è necessario. Perché preoccuparsi del costo e della complessità hardware di tutti i pin aggiuntivi che non userete?

Il Motorola 68000 era così; 32 bit internamente, ma con un bus indirizzi a 23 bit (e un bus dati a 16 bit). La CPU poteva accedere a 16 megabyte di RAM e per caricare il tipo di dati nativo (32 bit) richiedeva due accessi alla memoria (ciascuno con 16 bit di dati).


1
ma 68000 è considerata come una cpu "16/32 bit", non "piena" a 32 bit quindi si potrebbe dire che ha ancora un piede nel passato a 16 bit; Ho scelto il 68020 come esempio, dato che la sua versione a basso costo 68EC020 ha 24 bit solo per gli indirizzi, anche se il 68020 è una cpu "piena" a 32 bit ... +1 per aver considerato questa meravigliosa famiglia di processori!
ShinTakezou

@ShinTakezou: onestamente, l'80386SX era una CPU a 16 bit (perché aveva uno spazio degli indirizzi come l'80286) o era a 32 bit (perché aveva l'architettura interna di un 80386DX)? Uno potrebbe dire come fai tu, ma un altro (questo) dice "l'interno è ciò che conta" - e puoi citarmi su questo.
Olof Forshell

@Olof Penso che, nel contesto della "memoria" (che è il mondo esterno), ciò che conta è l'esterno, quindi 68000 è una CPU a 16 bit (che richiede 2 "passaggi" per leggere dati a 32 bit): D
ShinTakezou

@ShinTakezou: il contesto della memoria, anche le cache, è sempre esterno alla CPU stessa anche se sono strettamente accoppiati nei processori moderni. L'8088 era internamente uguale all'8086 sebbene avesse otto linee di bus dati per le sedici dell'8086. Non vedo quello che apparentemente vedi come ovvio, che l'8088 dovrebbe essere classificato nello stesso gruppo di Z80, 8080, 8085 ecc. La questione della larghezza del bus dati sembra banale in quel contesto
Olof Forshell

Non sono affatto un esperto di una materia del genere, quindi non ho nulla di ovvio per me. Volevo solo notare la necessità di un taglio più netto con il passato, dove si potrebbe pensare che 68000 sia ancora un processore "vecchio stile", quindi che può sembrare "naturale" che il suo spazio di indirizzamento sia limitato a meno di 32 bit; mentre il 68020 può farlo a 32 bit, quindi l'esistenza del 68EC020 con il suo limite fa capire che è una scelta non dovuta al "limite di quello ( o questo) tempo "ma per altra considerazione (come renderlo più economico se non c'è un reale vantaggio nell'avere 64 pin), che è più o meno l'argomento di questa risposta.
ShinTakezou

7

C'è una ragione più grave rispetto al semplice salvataggio dei transistor nel percorso dell'indirizzo della CPU: se si aumenta la dimensione dello spazio degli indirizzi è necessario aumentare la dimensione della pagina, aumentare la dimensione delle tabelle delle pagine o avere una struttura della tabella delle pagine più profonda (quella è più livelli di tabelle di traduzione). Tutte queste cose aumentano il costo di una mancata TLB, che danneggia le prestazioni.


1
Intel propone uno schema di paging a 5 livelli per estendere dagli attuali 48 bit a 57 bit. (Stessi 9 bit per livello / pagine 4k delle attuali tabelle di pagine x86-64). L'uso di 10 o 11 bit per livello avrebbe richiesto la modifica dell'hardware di esplorazione della pagina, quindi questo potrebbe non essere il design ottimale per una memoria enorme, ma è un'estensione ragionevole per una CPU dual-mode che deve supportare anche le massime prestazioni per 4 tabelle di livello nel formato corrente.
Peter Cordes

Ovviamente, con pagine enormi 2M o 1G, ci sono solo 4 o 3 livelli di tabelle di pagina dal livello più alto a una voce di tabella di pagina enorme invece di un puntatore di directory di pagina.
Peter Cordes

6

Dal mio punto di vista, questo è il risultato della dimensione della pagina. Ogni pagina contiene al massimo 4096/8 = 512 voci della tabella delle pagine. E 2 ^ 9 = 512. Quindi 9 * 4 + 12 = 48.


4

Per rispondere alla domanda originale: non era necessario aggiungere più di 48 bit di PA.

I server hanno bisogno della quantità massima di memoria, quindi proviamo a scavare più a fondo.

1) La configurazione del server più grande (comunemente usata) è un sistema a 8 socket. Un sistema 8S non è altro che 8 CPU Server collegate da un'interconnessione coerente ad alta velocità (o semplicemente, un "bus" ad alta velocità) per formare un singolo nodo. Ci sono cluster più grandi là fuori, ma sono pochi e distanti tra loro, stiamo parlando di configurazioni comunemente usate qui. Si noti che negli usi del mondo reale, il sistema a 2 socket è uno dei server più comunemente utilizzati e 8S è generalmente considerato di fascia alta.

2) I principali tipi di memoria utilizzati dai server sono la normale memoria DRAM indirizzabile a byte (ad esempio memoria DDR3 / DDR4), Memory Mapped IO - MMIO (come la memoria utilizzata da una scheda aggiuntiva), nonché lo spazio di configurazione utilizzato per la configurazione i dispositivi presenti nel sistema. Il primo tipo di memoria è quello che di solito è il più grande (e quindi richiede il maggior numero di bit di indirizzo). Alcuni server di fascia alta utilizzano anche una grande quantità di MMIO, a seconda della configurazione effettiva del sistema.

3) Si supponga che ciascuna CPU del server possa ospitare 16 DIMM DDR4 in ogni slot. Con una dimensione massima DIMM DDR4 di 256 GB. (A seconda della versione del server, questo numero di DIMM possibili per socket è in realtà inferiore a 16 DIMM, ma continua a leggere per il bene dell'esempio).

Quindi ogni socket può teoricamente avere 16 * 256 GB = 4096 GB = 4 TB. Per il nostro sistema 8S di esempio, la dimensione della DRAM può essere un massimo di 4 * 8 = 32 TB. Ciò significa che il numero massimo di bit necessari per indirizzare questo spazio DRAM è 45 (= log2 32 TB / log2 2).

Non entreremo nei dettagli degli altri tipi di memoria (MMIO, MMCFG ecc.), Ma il punto qui è che il tipo di memoria più "esigente" per un sistema a 8 socket con i più grandi tipi di DIMM DDR4 oggi disponibili (256 GB DIMM) utilizzano solo 45 bit.

Per un sistema operativo che supporta 48 bit (WS16 ad esempio), ci sono (48-45 =) 3 bit rimanenti. Ciò significa che se abbiamo utilizzato i 45 bit inferiori esclusivamente per 32 TB di DRAM, abbiamo ancora 2 ^ 3 volte di memoria indirizzabile che può essere utilizzata per MMIO / MMCFG per un totale di 256 TB di spazio indirizzabile.

Quindi, per riassumere: 1) 48 bit di indirizzo fisico sono molti bit per supportare i più grandi sistemi di oggi che sono "completamente caricati" con abbondanti quantità di DDR4 e anche molti altri dispositivi IO che richiedono spazio MMIO. 256 TB per essere esatti.

Si noti che questo spazio di indirizzi di 256 TB (= 48 bit di indirizzo fisico) NON include unità disco come le unità SATA perché NON fanno parte della mappa degli indirizzi, includono solo la memoria che è indirizzabile in byte ed è esposta al sistema operativo.

2) L'hardware della CPU può scegliere di implementare 46, 48 o> 48 bit a seconda della generazione del server. Ma un altro fattore importante è quanti bit riconosce il sistema operativo. Oggi, WS16 supporta indirizzi fisici a 48 bit (= 256 TB).

Ciò che questo significa per l'utente è che, anche se uno ha una CPU del server grande e ultra moderna in grado di supportare> 48 bit di indirizzamento, se esegui un sistema operativo che supporta solo 48 bit di PA, puoi sfruttare solo 256 TB .

3) Tutto sommato, ci sono due fattori principali per trarre vantaggio da un numero maggiore di bit di indirizzo (= maggiore capacità di memoria).

a) Quanti bit supporta l'HW della tua CPU? (Questo può essere determinato dall'istruzione CPUID nelle CPU Intel).

b) Quale versione del sistema operativo stai utilizzando e quanti bit di PA riconosce / supporta.

Il minimo di (a, b) determinerà alla fine la quantità di spazio indirizzabile di cui il sistema può trarre vantaggio.

Ho scritto questa risposta senza esaminare in dettaglio le altre risposte. Inoltre, non ho approfondito in dettaglio le sfumature di MMIO, MMCFG e l'intera costruzione della mappa degli indirizzi. Ma spero che questo aiuti.

Grazie, Anand K Enamandram, Server Platform Architect Intel Corporation


Questa domanda chiede circa la dimensione dello spazio degli indirizzi virtuali a 48 bit (richiede che gli indirizzi virtuali siano canonici). Vuoi più bit virtuali che bit fisici, quindi un kernel con metà alta può mappare tutta la memoria fisica in un singolo spazio di indirizzi (è proprio o spazio utente). Come dici tu, HW deve solo implementare tanti bit PA quanti sono i controller DRAM + MMIO possono usare e può usare qualsiasi numero fino al limite di 52 bit nel formato x86-64 page-table. ( Perché a 64 bit l'indirizzo virtuale è corto di 4 bit (lungo 48 bit) rispetto all'indirizzo fisico (lungo 52 bit)? )
Peter Cordes

1
Il formato tabella di pagina a 4 livelli impone anche il limite VA a 48 bit, fino a quando HW + SW non supportano le tabelle di pagina PML5 per VA a 57 bit. Ad ogni modo, questa è una risposta utile, ma sembra essere pubblicata sotto la domanda sbagliata. Non sono sicuro che ci sia un posto migliore per questo, quindi immagino che possiamo lasciarlo qui, si spera con una modifica per aggiungere un'intestazione per dire qualcosa su PA contro VA.
Peter Cordes

2

Molte persone hanno questa idea sbagliata. Ma ti prometto che se lo leggi attentamente, dopo aver letto questo tutte le tue idee sbagliate saranno chiare.

Dire che un processore a 32 bit o 64 bit non significa che dovrebbe avere rispettivamente un bus di indirizzi a 32 bit o un bus di indirizzi a 64 bit! ... Ripeto NON !!

Il processore a 32 bit significa che ha ALU (Arithmetic and Logic Unit) a 32 bit ... ciò significa che può funzionare su operando binario a 32 bit (o semplicemente dicendo un numero binario a 32 cifre) e allo stesso modo il processore a 64 bit può funzionare su binario a 64 bit operando. Quindi, se un processore a 32 o 64 bit NON significa che è possibile installare la quantità massima di memoria. Mostrano solo quanto può essere grande l'operando ... (per analogia puoi pensare a una calcolatrice a 10 cifre in grado di calcolare risultati fino a 10 cifre ... non può darci 11 cifre o altri risultati più grandi ... anche se lo è in decimale ma sto dicendo questa analogia per semplicità) ... ma quello che stai dicendo è lo spazio degli indirizzi che è la dimensione massima di memoria (RAM) direttamente interfacciabile. La RAM ' La dimensione massima possibile è determinata dalla dimensione del bus indirizzo e non è la dimensione del bus dati o anche dell'ALU su cui è definita la dimensione del processore (32/64 bit). Sì, se un processore ha un "bus indirizzo" a 32 bit, è in grado di indirizzare 2 ^ 32 byte = 4 GB di RAM (o per 64 bit sarà 2 ^ 64) ... ma dicendo che un processore a 32 bit o 64 bit ha niente di rilevante per questo spazio degli indirizzi (spazio degli indirizzi = quanto può accedere alla memoria o la dimensione massima della RAM) e dipende solo dalla dimensione della sua ALU. Ovviamente il bus dati e il bus indirizzi possono essere della stessa dimensione e quindi può sembrare che il processore a 32 bit significhi che accederà a 2 ^ 32 byte o 4 GB di memoria ... ma è solo una coincidenza e non sarà lo stesso per tutti.... per esempio Intel 8086 è un processore a 16 bit (in quanto ha ALU a 16 bit) quindi, come dici tu, avrebbe dovuto accedere a 2 ^ 16 byte = 64 KB di memoria ma non è vero. Può accedere fino a 1 MB di memoria per avere un bus di indirizzi a 20 bit .... Puoi google se hai dei dubbi :)

Penso di aver chiarito il mio punto di vista Ora arrivando alla tua domanda ... poiché il processore a 64 bit non significa che deve avere un bus di indirizzi a 64 bit, quindi non c'è niente di sbagliato nell'avere un bus di indirizzi a 48 bit in un processore a 64 bit ... hanno mantenuto lo spazio degli indirizzi più piccolo per rendere la progettazione e la fabbricazione a buon mercato .... poiché nessuno userà una memoria così grande (2 ^ 64 byte) ... dove 2 ^ 48 byte sono più che sufficienti al giorno d'oggi.


Penso che tu abbia chiarito il tuo punto, c'è una cosa che non capisco però in quello che hai detto sulla CPU 8086 a 16 bit: come può una CPU a 16 bit gestire un indirizzo a 20 bit? Lo gestisce attraverso un'operazione in 2 fasi? Anche se il bus degli indirizzi ha una larghezza di 20 bit, una volta che arriva alla CPU, la larghezza del registro può ovviamente richiedere solo 16 bit ... Come fanno?
programmatori

2
Hmm ... Operazione in 2 fasi. Il registro dei segmenti contiene solo i 16 bit superiori. Quindi viene moltiplicato per 10H per ottenere 20 bit e quindi viene aggiunto l'offset.
hafiz031

1

Non è vero che vengono utilizzati solo i 48 bit di ordine inferiore di un VA a 64 bit, almeno con Intel 64. I 16 bit superiori vengono utilizzati, più o meno.

La sezione 3.3.7.1 Indirizzamento canonico nel Manuale per sviluppatori di software per architetture Intel® 64 e IA-32 dice:

un indirizzo canonico deve avere i bit da 63 a 48 impostati su zero o uno (a seconda che il bit 47 sia zero o uno)

Quindi i bit da 47 a 63 formano un super-bit, tutti 1 o tutti 0. Se un indirizzo non è in forma canonica, l'implementazione dovrebbe essere difettosa.

Su AArch64, questo è diverso. Secondo la panoramica del set di istruzioni ARMv8 , è un VA a 49 bit.

Il sistema di traduzione della memoria AArch64 supporta un indirizzo virtuale a 49 bit (48 bit per tabella di traduzione). Gli indirizzi virtuali vengono estesi con segno da 49 bit e memorizzati in un puntatore a 64 bit. Facoltativamente, sotto il controllo di un registro di sistema, gli 8 bit più significativi di un puntatore a 64 bit possono contenere un "tag" che verrà ignorato se usato come indirizzo di caricamento / memorizzazione o come destinazione di un ramo indiretto


1
Solo i 48 inferiori sono significativi, ma l'hardware verifica che sia correttamente esteso a 64 bit. IDK perché non hanno specificato l'estensione zero; forse volevano rendere più comodo il controllo di un indirizzo metà alto o basso (semplicemente controllando il bit di segno). O forse per evitare di rendere speciale il limite 2 ^ 48, in modo che gli indirizzi vicino alla parte superiore possano convenientemente adattarsi a costanti estese di segno a 32 bit. Penso che quest'ultimo sia più probabile.
Peter Cordes

Ad ogni modo, l'attuale controllo HW per canonical impedisce al software di utilizzare bit ignorati per puntatori con tag che si interromperanno su HW futuro, quindi fa parte del meccanismo che rende possibile estendere l'hardware futuro se / quando è necessario. (Il che potrebbe essere prima di quanto si aspettassero, grazie alla memoria non volatile collegata direttamente allo spazio degli indirizzi fisico e virtuale.)
Peter Cordes,

procfs su Linux sul mio Core i5 dice che viene mappato su 7ffd5ea41000-7ffd5ea62000. Questo intervallo di indirizzi ha senso in base alla regola "canonica" di cui sopra. I bit 48-63 sono 0, il che lo rende un indirizzo canonico corretto. Ciò che è un po 'strano sono alcuni indirizzi nei sorgenti di Linux. In include / asm / pgtable_64_types dice #define __VMALLOC_BASE _AC (0xff92000000000000, UL). Questo NON è un indirizzo canonico. Un tale indirizzo inizierebbe con 0xffff8. Non so perché.
Olsonist

Sì, IIRC Linux utilizza la metà inferiore dell'intervallo canonico per lo spazio utente e (principalmente) utilizza la metà alta per le mappature solo del kernel. Ma una parte della memoria del kernel viene esportata nello spazio utente, come la [vsyscall]pagina. (Potrebbe essere l'esportazione di cose come il PID corrente in modo che getpid()sia puramente spazio utente. Inoltre gettimeofday()può semplicemente usare rdtsc nello spazio utente + fattori di scala esportati dal kernel. Anche se alcuni di questi sono, penso [vdso], che è vicino alla parte superiore del metà inferiore.)
Peter Cordes

IDK cosa __VMALLOC_BASEfa. Presumibilmente non viene utilizzato direttamente.
Peter Cordes

0

Una CPU è considerata "N-bit" principalmente in base alla dimensione del bus dati e in gran parte delle sue entità (architettura interna) : Registri, Accumulatori, Unità logica-aritmetica (ALU), Set di istruzioni, ecc. Per esempio: La buona vecchia CPU Motorola 6800 (o Intel 8050) è una CPU a 8 bit. Ha un bus dati a 8 bit, un'architettura interna a 8 bit e un bus indirizzi a 16 bit.


  • Sebbene la CPU a N bit possa avere entità diverse da quelle di dimensione N. Ad esempio i miglioramenti nel 6809 rispetto al 6800 (entrambi sono CPU a 8 bit con un bus dati a 8 bit). Tra i miglioramenti significativi introdotti nel 6809 c'erano l'uso di due accumulatori a 8 bit (A e B, che potevano essere combinati in un unico registro a 16 bit, D), due registri di indice a 16 bit (X, Y) e due Puntatori allo stack a 16 bit.

C'è già una risposta che fa questo punto con Motorola 68000/68020 come esempio. Questa domanda riguarda in realtà x86-64 in particolare, non le vecchie CPU a 8/16 bit. Nel caso di x86-64, uno dei fattori principali è che indirizzi virtuali più ampi avrebbero bisogno di una tabella delle pagine più profonda e quel fattore non esisteva per i vecchi chip di cui parli.
Peter Cordes

la larghezza del bus dati non deve corrispondere alla larghezza del registro o dell'ALU. Ad esempio, il P5 Pentium ha un bus dati a 64 bit (è garantito che i caricamenti / archivi allineati a 64 bit siano atomici), ma i registri / ALU sono solo a 32 bit (eccetto per l'FPU integrata, e nel successivo Pentium MMX il SIMD ALUs.)
Peter Cordes

OP scrive: "La mia aspettativa era che se si tratta di un processore a 64 bit, anche lo spazio degli indirizzi dovrebbe essere 2 ^ 64." ........ Tu scrivi: "Questa domanda riguarda veramente x86-64 in particolare, non le vecchie CPU a 8/16 bit". ........ Penso che tu abbia perso l'essenza della domanda OP. La domanda OP è il risultato del presupposto sbagliato che una CPU a 64 bit dovrebbe avere un bus di indirizzi a 64 bit. Riguardo all'ALU, ho scritto gran parte delle sue entità; Non tutti loro.
Amit G.

Smetti di inviarmi spam ripubblicando questo commento. Sì, certo, l'OP è sbagliato per il motivo che descrivi, ma stavo sottolineando che la tua risposta sembra fare un errore simile. Dici " e di conseguenza gran parte delle sue entità: registri e accumulatori, unità logica-aritmetica (ALU) ... ", il che suona come se stessi dicendo che quelle cose corrispondono alla larghezza del bus di dati. La frase "una parte importante" implica che stai dicendo quali parti, non che a volte sia vero solo per quelle parti.
Peter Cordes
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.