I retaggi di progetti precedenti, come il difference engine di Babbage e i sistemi di schede perforate mainframe degli anni ‘ 70, hanno un impatto significativo sui sistemi informatici odierni. Nel mio primo articolo di questa serie storica, Computer history and modern computers for sysadmins, ho discusso diversi precursori del computer moderno e le caratteristiche elencate che definiscono ciò che oggi chiamiamo un computer.,

In questo articolo, discuto l’unità di elaborazione centrale (CPU), compresi i suoi componenti e funzionalità. Molti degli argomenti si riferiscono al primo articolo, quindi assicurati di leggerlo se non l’hai già fatto.

L’unità di elaborazione centrale (CPU)

La CPU nei computer moderni è l’incarnazione del “mulino” nel motore di differenza di Babbage. Il termine central processing unit è nato nelle nebbie del tempo del computer quando un singolo armadio massiccio conteneva i circuiti necessari per interpretare le istruzioni del programma a livello di macchina ed eseguire operazioni sui dati forniti., L’unità centrale di elaborazione ha anche completato tutte le elaborazioni per qualsiasi periferica collegata. Le periferiche includevano stampanti, lettori di schede e dispositivi di archiviazione precoci come unità a tamburo e disco. Le periferiche moderne hanno una notevole quantità di potenza di elaborazione e scaricano alcune attività di elaborazione dalla CPU. Ciò libera la CPU dalle attività di input / output in modo che la sua potenza venga applicata all’attività principale in questione.

I primi computer avevano solo una CPU e potevano eseguire solo un’attività alla volta.,

Oggi conserviamo il termine CPU, ma ora si riferisce al pacchetto del processore su una tipica scheda madre. Figura 1 visualizza un pacchetto di processori Intel standard.

Immagine

Figura 1: Un pacchetto di processori Intel Core i5 (Jud McCranie via Wikimedia Commons, CC BY-SA 4.0).

Non c’è davvero nulla da vedere qui se non il pacchetto del processore stesso. Il pacchetto del processore è un chip contenente il processore(s) sigillato all’interno di un contenitore metallico e montato su un piccolo circuito stampato (PC) bordo., Il pacchetto è semplicemente caduto in posizione nella presa CPU su una scheda madre e fissato con una disposizione leva di bloccaggio. Un dispositivo di raffreddamento della CPU si collega al pacchetto del processore. Ci sono diversi socket fisici diversi con numeri specifici di contatti, quindi ottenere il pacchetto corretto per adattarsi alla presa della scheda madre è essenziale se costruisci i tuoi computer.

Come funziona la CPU

Diamo un’occhiata alla CPU in modo più dettagliato. Figura 2 è un diagramma concettuale di una CPU ipotetica in modo da poter visualizzare i componenti più facilmente., La RAM e l’orologio di sistema sono ombreggiati perché non fanno parte della CPU e vengono mostrati solo per chiarezza. Inoltre, non vengono disegnate connessioni tra l’orologio della CPU e l’unità di controllo ai componenti della CPU. Basti dire che i segnali provenienti dall’orologio e dall’unità di controllo sono parte integrante di ogni altro componente.

Immagine

Figura 2: Un diagramma concettuale semplificato di una tipica CPU.

Questo design non sembra particolarmente semplice, ma la realtà è ancora più complicata., Questa cifra è sufficiente per i nostri scopi senza essere eccessivamente complessa.

Unità logica aritmetica

L’unità logica aritmetica (ALU) esegue le funzioni aritmetiche e logiche che sono il lavoro del computer. I registri A e B contengono i dati di input e l’accumulatore riceve il risultato dell’operazione. Il registro delle istruzioni contiene le istruzioni che l’ALU deve eseguire.

Ad esempio, quando si aggiungono due numeri, un numero viene inserito nel registro A e l’altro nel registro B. L’ALU esegue l’aggiunta e mette il risultato nell’accumulatore., Se l’operazione è logica, i dati da confrontare vengono inseriti nei registri di input. Il risultato del confronto, un 1 o 0, viene inserito nell’accumulatore. Che si tratti di un’operazione logica o aritmetica, il contenuto dell’accumulatore viene quindi inserito nella posizione della cache riservata dal programma per il risultato.

Esiste un altro tipo di operazione eseguita dall’ALU. Il risultato è un indirizzo in memoria e viene utilizzato per calcolare una nuova posizione in memoria per iniziare a caricare le istruzioni. Il risultato viene inserito nel registro puntatore istruzioni.,

Registro di istruzioni e puntatore

Il puntatore di istruzioni specifica la posizione in memoria contenente l’istruzione successiva che deve essere eseguita dalla CPU. Quando la CPU completa l’esecuzione dell’istruzione corrente, l’istruzione successiva viene caricata nel registro delle istruzioni dalla posizione di memoria indicata dal puntatore dell’istruzione.

Dopo che l’istruzione è stata caricata nel registro delle istruzioni, il puntatore del registro delle istruzioni viene incrementato di un indirizzo di istruzione. L’incremento consente di essere pronto per spostare l’istruzione successiva nel registro delle istruzioni.,

Cache

La CPU non accede mai direttamente alla RAM. Le CPU moderne hanno uno o più livelli di cache. La capacità della CPU di eseguire calcoli è molto più veloce della capacità della RAM di alimentare i dati alla CPU. Le ragioni di questo sono oltre lo scopo di questo articolo, ma voglio esplorare ulteriormente nel prossimo articolo.

La memoria cache è più veloce della RAM di sistema ed è più vicina alla CPU perché è sul chip del processore. La cache fornisce l’archiviazione dei dati e le istruzioni per impedire alla CPU di attendere i dati da recuperare dalla RAM., Quando la CPU ha bisogno di dati-e anche le istruzioni del programma sono considerate dati-la cache determina se i dati sono già in residenza e li fornisce alla CPU.

Se i dati richiesti non sono nella cache, vengono recuperati dalla RAM e utilizzano algoritmi predittivi per spostare più dati dalla RAM nella cache. Il controller della cache analizza i dati richiesti e cerca di prevedere quali dati aggiuntivi saranno necessari dalla RAM. Carica i dati previsti nella cache., Mantenendo alcuni dati più vicini alla CPU in una cache più veloce della RAM, la CPU può rimanere occupata e non sprecare cicli in attesa di dati.

La nostra semplice CPU ha tre livelli di cache. I livelli 2 e 3 sono progettati per prevedere quali dati e istruzioni del programma saranno necessari dopo, spostare i dati dalla RAM e spostarli sempre più vicino alla CPU per essere pronti quando necessario. Queste dimensioni della cache variano in genere da 1 MB a 32 MB, a seconda della velocità e dell’uso previsto del processore.

La cache di livello 1 è più vicina alla CPU. Nella nostra CPU, ci sono due tipi di cache L1., L1i è la cache delle istruzioni e L1d è la cache dei dati. Le dimensioni della cache di livello 1 variano in genere da 64 KB a 512 KB.

Unità di gestione della memoria

L’unità di gestione della memoria (MMU) gestisce il flusso di dati tra la memoria principale (RAM) e la CPU. Fornisce inoltre la protezione della memoria richiesta negli ambienti multitasking e la conversione tra indirizzi di memoria virtuale e indirizzi fisici.

CPU clock e unità di controllo

Tutti i componenti della CPU devono essere sincronizzati per lavorare insieme senza problemi., L’unità di controllo esegue questa funzione ad una velocità determinata dalla velocità di clock ed è responsabile della direzione delle operazioni delle altre unità utilizzando segnali di temporizzazione che si estendono su tutta la CPU.

Memoria ad accesso casuale (RAM)

Anche se la RAM, o memoria principale, è mostrato in questo diagramma e il prossimo, non è veramente una parte della CPU. La sua funzione è quella di memorizzare programmi e dati in modo che siano pronti per l’uso quando la CPU ne ha bisogno.

Come funziona

Le CPU funzionano su un ciclo gestito dall’unità di controllo e sincronizzato dall’orologio della CPU., Questo ciclo è chiamato ciclo di istruzioni della CPU e consiste in una serie di componenti fetch/decode/execute. L’istruzione, che può contenere dati statici o puntatori a dati variabili, viene recuperata e inserita nel registro delle istruzioni. L’istruzione viene decodificata e tutti i dati vengono inseriti nei registri di dati A e B. L’istruzione viene eseguita utilizzando i registri A e B, con il risultato inserito nell’accumulatore. La CPU aumenta quindi il valore del puntatore dell’istruzione per la lunghezza del precedente e ricomincia.

Il ciclo di istruzioni della CPU di base è simile a questo.,

Immagine

Figura 3: Il ciclo di istruzioni della CPU di base.

The need for speed

Sebbene la CPU di base funzioni bene, le CPU che girano su questo semplice ciclo possono essere utilizzate in modo ancora più efficiente. Ci sono più strategie per aumentare le prestazioni della CPU, e guardiamo a due di loro qui.

Sovralimentazione del ciclo di istruzioni

Un problema riscontrato dai primi progettisti di CPU era la perdita di tempo nei vari componenti della CPU., Una delle prime strategie per migliorare le prestazioni della CPU era la sovrapposizione delle porzioni del ciclo di istruzioni della CPU per utilizzare le varie parti della CPU in modo più completo.

Ad esempio, quando l’istruzione corrente è stata decodificata, la successiva viene recuperata e inserita nel registro delle istruzioni. Non appena ciò si è verificato, il puntatore dell’istruzione viene aggiornato con l’indirizzo di memoria dell’istruzione successiva. L’uso di cicli di istruzioni sovrapposti è illustrato nella Figura 4.,

Immagine

Figura 4: Il ciclo di istruzioni della CPU con sovrapposizione.

Questo design sembra bello e liscio, ma fattori come l’attesa di I / O possono interrompere il flusso. Non avere i dati o le istruzioni corretti nella cache richiede alla MMU di individuare quelli corretti e spostarli nella CPU, e ciò può richiedere del tempo. Alcune istruzioni richiedono anche più cicli di CPU da completare rispetto ad altri, interferendo con una sovrapposizione uniforme.

Tuttavia, questa è una potente strategia per migliorare le prestazioni della CPU.,

Hyperthreading

Un’altra strategia per migliorare le prestazioni della CPU è hyperthreading. Hyperthreading fa funzionare un singolo core del processore come due CPU fornendo due flussi di dati e istruzioni. L’aggiunta di un secondo puntatore di istruzioni e di un registro di istruzioni alla nostra ipotetica CPU, come mostrato in Figura 5, fa sì che funzioni come due CPU, eseguendo due flussi di istruzioni separati durante ogni ciclo di istruzioni. Inoltre, quando un flusso di esecuzione si blocca durante l’attesa dei dati, di nuovo, anche le istruzioni sono dati, il secondo flusso di esecuzione continua l’elaborazione., Ogni core che implementa hyperthreading è l’equivalente di due CPU nella sua capacità di elaborare le istruzioni.

Immagine

Figura 5: Un diagramma concettuale di una CPU con hyperthreading.

Ricorda che questo è un diagramma e una spiegazione molto semplificati della nostra ipotetica CPU. La realtà è molto più complessa.

Più terminologia

Ho incontrato un sacco di terminologia CPU diversa., Per definire la terminologia un po ‘ più esplicitamente, diamo un’occhiata alla CPU stessa usando il comando lscpu.

Il processore Intel mostrato sopra è un pacchetto che si inserisce in un singolo socket sulla scheda madre. Il pacchetto del processore contiene sei core. Ogni core è in grado di hyperthreading, quindi ognuno può eseguire due thread simultanei per un totale di 12 CPU.

Le mie definizioni:

  • Core – Un core è la più piccola unità hardware fisica in grado di eseguire il compito di elaborazione. Contiene un ALU e uno o due set di registri di supporto., Il secondo set di registri e circuiti di supporto consente hyperthreading. Uno o più core possono essere combinati in un unico pacchetto fisico.
  • CPU-Un’unità hardware logica in grado di elaborare un singolo thread di esecuzione. L’uso moderno del termine unità di elaborazione centrale si riferisce al numero totale di thread che un pacchetto di processori è in grado di eseguire simultaneamente. Un processore single-core che non supporta hyperthreading è l’equivalente di una singola CPU. In questo caso, CPU e core sono sinonimi., Un processore hyperthreading con un singolo core è l’equivalente funzionale di due CPU. Un processore hyperthreading con otto core è l’equivalente funzionale di 16 CPU.
  • Pacchetto-Il componente fisico che contiene uno o più core, come quello mostrato in Figura 1 sopra.
  • Processore-1) Un dispositivo che elabora le istruzioni del programma per manipolare i dati. 2) Frequentemente usato come sinonimo di pacchetto.,
  • Socket-A volte usato come un altro sinonimo di pacchetto, ma si riferisce più accuratamente al socket fisico sulla scheda madre in cui è inserito il pacchetto del processore.

I termini socket, processore e pacchetto sono spesso usati in modo intercambiabile, il che può causare una certa confusione. Come vediamo dai risultati del comandolscpu sopra, Intel ci fornisce la propria terminologia e ritengo che la fonte autorevole., In realtà, tutti usiamo questi termini in vari modi, ma finché ci capiamo in un dato momento, questo è ciò che conta davvero.

Si noti che il processore sopra ha due cache di livello 1 di 512 KiB ciascuna, una per le istruzioni (L1i) e una per i dati (L1d). La cache di livello 1 è più vicina alla CPU e accelera le cose per avere istruzioni e dati separati a questo punto. Le cache di livello 2 e 3 sono più grandi, ma le istruzioni e i dati coesistono in ciascuna.

Cosa significa tutto questo?

Buona domanda., Nei primi giorni dei mainframe, ogni computer aveva solo una singola CPU ed era incapace di eseguire più di un programma contemporaneamente. Il mainframe potrebbe eseguire il libro paga, quindi la contabilità di inventario, quindi la fatturazione del cliente e così via, ma è possibile eseguire solo un’applicazione alla volta. Ogni programma doveva finire prima che l’operatore di sistema potesse iniziare il successivo.

Alcuni primi tentativi di eseguire più programmi contemporaneamente avevano un approccio semplice e miravano a un migliore utilizzo di una singola CPU., Ad esempio, program1 e program2 sono stati caricati e program1 è stato eseguito fino a quando non è stato bloccato in attesa che si verificasse l’I/O. A quel punto, program2 ha funzionato fino a quando non è stato bloccato. Questo approccio è stato chiamato multi-processing e ha contribuito a sfruttare appieno il tempo prezioso del computer.

I primi tentativi di multitasking implicavano il passaggio del contesto di esecuzione di una singola CPU molto rapidamente tra i flussi di esecuzione di più attività. Questa pratica non è vero multitasking come lo intendiamo perché, in realtà, solo un singolo thread di esecuzione viene elaborato alla volta. È più correttamente chiamato time-sharing.,

I computer moderni, dagli orologi intelligenti ai tablet ai supercomputer, supportano tutti il vero multitasking con più CPU. Più CPU consentono ai computer di eseguire molte attività contemporaneamente. Ogni CPU svolge le proprie funzioni contemporaneamente a tutte le altre CPU. Un processore a otto core con hyperthreading (cioè 16 CPU) può eseguire 16 attività contemporaneamente.

Considerazioni finali

Abbiamo esaminato una CPU concettualizzata e semplificata per imparare un po ‘ sulle strutture. Ho appena sfiorato la superficie della funzionalità del processore in questo articolo., Si può imparare di più prendendo i link incorporati per gli argomenti che abbiamo esplorato.

Ricorda che i diagrammi e le descrizioni in questo articolo sono puramente concettuali e non rappresentano alcuna CPU reale.

Nella prossima parte di questa serie, guarderò RAM e unità disco come diversi tipi di storage e perché ciascuno è necessario per i computer moderni.

0