ARCHITETTURA DEL COMPUTERcome funziona davvero una macchina
Capire un computer non significa solo saperlo accendere o aprire file: dietro ogni operazione c’è un mondo complesso di componenti, segnali e cicli di calcolo. Qui ti porto in un viaggio attraverso la macchina, spiegandoti tutto in maniera colloquiale e accessibile, ma senza saltare nulla di importante.
La squadra del computer: CPU, memoria e periferiche
Immagina il computer come una grande cucina professionale. Al centro c’è la CPU, il cervello e il cuoco insieme. È lei a leggere le ricette (le istruzioni dei programmi), decidere come cucinare (decodifica) e infine mettere il piatto pronto sul tavolo (esegue il calcolo o l’operazione richiesta). Accanto al cuoco c’è la memoria, che funziona come una dispensa. Alcuni scaffali sono vicini e contengono ingredienti già pronti all’uso, altre scorte sono più lontane, più lente da raggiungere. Per spostare dati e comandi tra CPU e memoria ci sono i bus, veri e propri corridoi della cucina dove tutto si muove velocissimo. Infine, le periferiche, i dispositivi di input/output, permettono al computer di interagire con il mondo esterno: tastiera, mouse, monitor, stampanti, schede di rete, microfoni, sensori e altoparlanti.
Questa organizzazione segue il modello di Von Neumann, che risale agli anni ’40. La grande intuizione di Von Neumann fu semplice ma rivoluzionaria: programmi e dati vivono nella stessa memoria e la CPU li preleva a turno. Grazie a questo schema, anche computer moderni, smartphone e microcontrollori condividono lo stesso principio di base.
Il ciclo macchina: fetch → decode → execute
Il funzionamento della CPU si basa sul ciclo fetch-decode-execute. Immagina che la CPU legga una riga di ricetta: prima preleva l’istruzione dalla memoria (fetch), poi capisce che operazione deve eseguire e quali ingredienti usare (decode), e infine realizza l’azione richiesta, scrivendo il risultato nel posto corretto (execute). Questo ciclo si ripete miliardi di volte al secondo senza interruzioni.
Per rendere tutto più efficiente, le CPU moderne usano la pipeline, una sorta di catena di montaggio: mentre un’istruzione viene eseguita, un’altra viene decodificata e una terza prelevata. Tecniche avanzate come out-of-order execution e branch prediction permettono alla CPU di non fermarsi mai: se c’è un “se… allora”, la macchina prova a indovinare il percorso giusto. Se sbaglia, elimina il lavoro errato, ma il vantaggio di prevedere correttamente è enorme.
Dentro la CPU: registri, ALU, FPU e unità di controllo
All’interno della CPU ci sono componenti specializzati. I registri sono piccole tasche dove vengono conservati dati temporanei, velocissimi da leggere. L’ALU (unità aritmetico-logica) si occupa dei calcoli sui numeri interi, mentre la FPU gestisce numeri in virgola mobile, cioè decimali complessi. L’unità di controllo dirige il traffico delle istruzioni, mentre il clock scandisce il ritmo, proprio come un metronomo.
Alcune CPU supportano Hyper-Threading o SMT, che permettono di gestire più flussi di istruzioni contemporaneamente usando le stesse unità di calcolo. La differenza tra CPU e GPU è fondamentale: la CPU è un solista molto bravo su compiti diversi, mentre la GPU è un coro di migliaia di voci che eseguono in parallelo la stessa melodia, perfetta per grafica, IA e calcoli massivi.
La gerarchia della memoria
La memoria è organizzata come una piramide di velocità e capienza. I registri sono velocissimi ma minuscoli, poi ci sono le cache L1, L2 e L3, sempre più grandi e leggermente più lente. Dopo le cache arriva la RAM, la memoria principale di lavoro, e infine i dischi SSD o HDD, che conservano i dati in modo permanente.
La cache serve a ridurre i tempi di accesso ai dati usati di recente, sfruttando la località spaziale (se accedi a un dato, probabilmente userai anche quelli vicini) e la località temporale (se un dato è stato usato di recente, lo userai di nuovo a breve). Nei sistemi multicore, è fondamentale che le cache dei vari core siano coerenti: se un core cambia un dato, gli altri devono essere aggiornati.
La memoria virtuale permette a ogni programma di vedere un suo spazio ordinato di indirizzi. La MMU traduce questi indirizzi virtuali in indirizzi fisici reali, e se la pagina richiesta non è in RAM si verifica un page fault, che costringe il sistema a recuperarla dal disco.
Come comunicano le periferiche
Tutte le periferiche comunicano con la CPU tramite interruzioni: quando la tastiera viene premuta o il mouse si muove, la CPU riceve un segnale e gestisce l’evento. La GPU aggiorna lo schermo scrivendo in un framebuffer che viene visualizzato a ripetizione, creando l’effetto di immagini fluide. Alcuni dispositivi, grazie al DMA, trasferiscono dati direttamente in memoria senza disturbare la CPU, rendendo il sistema più efficiente. Il sistema operativo decide in ogni momento quale thread eseguire, coordinando CPU, memoria e periferiche.
Multicore e parallelismo
Nei sistemi moderni, avere più core significa poter eseguire più operazioni contemporaneamente. I processi sono programmi in esecuzione con il loro spazio di memoria, mentre i thread sono flussi di esecuzione all’interno dei processi che condividono la memoria. Lo scheduler del sistema operativo decide chi gira e quando. Tuttavia, come ci ricorda la legge di Amdahl, il pezzo di lavoro che resta seriale limita i guadagni del parallelismo: non tutto può essere fatto contemporaneamente.
Un esempio semplice: se cucini pasta e sugo insieme, puoi velocizzare il lavoro, ma se l’acqua non bolle, devi comunque aspettare. Allo stesso modo, nei computer non tutto può essere parallelizzato.
RISC vs CISC e microarchitetture
Il set di istruzioni (ISA) è il linguaggio che la CPU comprende: x86-64, ARM, RISC-V. La microarchitettura è il modo in cui la CPU realizza queste istruzioni. Le architetture RISC usano istruzioni semplici e uniformi, mentre le CISC hanno istruzioni più ricche e complesse. Oggi molte CPU CISC traducono internamente le istruzioni in micro-operazioni semplici, unendo i vantaggi di entrambe le filosofie.
Apertura di un file: cosa succede davvero
Quando apri un file, dietro il semplice doppio clic c’è una coreografia complessa. Il programma chiama una system call, il kernel individua il filesystem, consulta la cache delle pagine, eventualmente legge i blocchi da disco tramite DMA, e consegna i dati alla CPU. Infine, i dati arrivano al programma e vengono visualizzati sullo schermo. Tutto avviene così rapidamente che nemmeno ce ne accorgiamo.
PC, smartphone e microcontrollori
I principi restano gli stessi su tutti i dispositivi, ma con ottimizzazioni diverse. Nei PC e server prevale la potenza e la RAM abbondante; negli smartphone, i SoC combinano CPU, GPU, acceleratori IA e modem in un unico chip, ottimizzato per basso consumo. Nei microcontrollori, come Arduino o ESP32, la memoria è ridotta e il sistema operativo è minimale, ideale per rispondere in tempo reale a sensori e attuatori.
Performance e sicurezza
Aumentare la frequenza della CPU produce più calore, quindi servono dissipatori e sistemi di throttling per proteggere il processore. L’efficienza, cioè il lavoro fatto per watt consumato, è fondamentale nei portatili e negli smartphone. Anche la sicurezza è cruciale: vulnerabilità legate all’esecuzione speculativa sono mitigabili con aggiornamenti di firmware e sistema operativo.
Esercizi pratici
Per capire meglio questi concetti, puoi fare alcuni esperimenti: simulare la cache con post-it numerati, creare una pipeline umana con tre persone che leggono, decodificano ed eseguono istruzioni, oppure tracciare ogni passaggio dall’apertura di un file a video e tastiera, mappando CPU, memoria, cache, kernel e periferiche. Anche analogie in cucina o nel traffico stradale aiutano a capire perché non tutto si può parallelizzare.
Mini-glossario lampo
ALU = calcoli interi; FPU = calcoli decimali complessi; registri = memoria velocissima della CPU; cache = memoria piccola e vicina alla CPU; RAM = memoria di lavoro; SSD/HDD = archiviazione permanente; DMA = trasferimenti diretti; IRQ = interruzioni; MMU/TLB = traduzione indirizzi virtuali/fisici; ISA = set di istruzioni; thread = flusso di esecuzione; scheduler = regista del processore.
Test di comprensione – Architettura del computer
1. Quale parte del computer decodifica le istruzioni?
a) CPU
b) Hard Disk
c) RAM
Risposta: a) CPU
Spiegazione: La CPU è responsabile di prendere le istruzioni dalla memoria, decodificarle per capire quale operazione eseguire e infine eseguirle. Hard disk e RAM servono solo a immagazzinare dati, non a interpretarli.
2. Cos’è la memoria cache?
a) Una memoria permanente
b) Una memoria veloce per dati recenti
c) Una parte del monitor
Risposta: b) Una memoria veloce per dati recenti
Spiegazione: La cache è un tipo di memoria molto più veloce della RAM, che contiene i dati usati di recente o istruzioni frequenti, riducendo i tempi di accesso della CPU. Non è permanente e non fa parte dello schermo.
3. Cosa rappresenta il “fetch” nel ciclo macchina?
a) Il prelievo dell’istruzione dalla memoria
b) La stampa del risultato
c) L’esecuzione finale del programma
Risposta: a) Il prelievo dell’istruzione dalla memoria
Spiegazione: Il fetch è il primo passaggio del ciclo fetch-decode-execute: la CPU legge l’istruzione dalla memoria prima di decodificarla e eseguirla.
4. A cosa serve la pipeline in una CPU?
a) A far eseguire più istruzioni contemporaneamente in stadi diversi
b) A raffreddare il processore
c) A memorizzare i dati su disco
Risposta: a) A far eseguire più istruzioni contemporaneamente in stadi diversi
Spiegazione: La pipeline divide il ciclo macchina in fasi: fetch, decode, execute, write-back. Così la CPU può iniziare a processare una nuova istruzione prima che la precedente sia completata, aumentando la velocità.
5. Per cosa è particolarmente adatta la GPU?
a) Per eseguire calcoli seriali complessi
b) Per calcoli paralleli su grandi quantità di dati
c) Per leggere dati da disco
Risposta: b) Per calcoli paralleli su grandi quantità di dati
Spiegazione: La GPU contiene migliaia di unità di calcolo in parallelo, ottime per grafica, intelligenza artificiale o calcoli massivi. La CPU invece gestisce meglio calcoli complessi ma seriali.
6. Cos’è la memoria virtuale e a cosa serve?
Risposta aperta:
La memoria virtuale è un sistema che permette a ogni programma di avere un proprio spazio ordinato di indirizzi, indipendente dalla memoria fisica reale. La MMU traduce gli indirizzi virtuali in indirizzi fisici nella RAM. Questo permette di far girare programmi più grandi della memoria disponibile e di isolare i processi tra loro.
7. Quando si verifica un page fault?
a) Quando la CPU sbaglia a eseguire un’istruzione
b) Quando un dato richiesto non è in RAM e deve essere caricato dal disco
c) Quando la cache è piena
Risposta: b) Quando un dato richiesto non è in RAM e deve essere caricato dal disco
Spiegazione: Un page fault indica che la CPU ha richiesto un indirizzo virtuale che non è presente in memoria principale. Il sistema operativo recupera la pagina necessaria dal disco, causando un leggero ritardo.
8. A cosa serve il DMA (Direct Memory Access)?
a) A trasferire dati in memoria senza usare la CPU
b) A gestire le interruzioni della tastiera
c) A decodificare le istruzioni della CPU
Risposta: a) A trasferire dati in memoria senza usare la CPU
Spiegazione: Il DMA permette ai dispositivi di scrivere o leggere dati direttamente dalla RAM, liberando la CPU da operazioni di copia e velocizzando il sistema.
9. Cosa ci ricorda la legge di Amdahl?
Risposta aperta:
La legge di Amdahl spiega che il miglioramento delle prestazioni tramite il parallelismo è limitato dalla parte del programma che deve rimanere seriale. Anche se un’operazione è accelerata da più core, il segmento di lavoro che non può essere parallelizzato rallenta comunque l’esecuzione totale.
10. Come funziona il modello di Von Neumann?
Risposta aperta:
Nel modello di Von Neumann, programmi e dati condividono la stessa memoria. La CPU preleva istruzioni e dati, le decodifica e le esegue seguendo il ciclo fetch-decode-execute. Tutto ciò avviene attraverso bus che trasportano informazioni tra CPU, memoria e periferiche.
11. Qual è la differenza principale tra CPU e GPU?
a) La CPU è più grande della GPU
b) La CPU è ottimizzata per operazioni complesse e seriali, la GPU per calcoli paralleli massivi
c) La CPU ha più memoria della GPU
Risposta: b) La CPU è ottimizzata per operazioni complesse e seriali, la GPU per calcoli paralleli massivi
Spiegazione: La CPU è flessibile e gestisce una grande varietà di compiti, mentre la GPU eccelle in operazioni ripetitive e parallele come il rendering grafico o l’elaborazione di array di dati.
12. Cosa sono i registri e perché sono importanti?
Risposta aperta:
I registri sono piccole memorie all’interno della CPU, estremamente veloci, dove vengono conservati temporaneamente i dati durante i calcoli. Servono a ridurre i tempi di accesso, permettendo alla CPU di lavorare molto più rapidamente rispetto all’uso diretto della RAM.
13. Cos’è la cache L1, L2 e L3?
Risposta aperta:
La cache è una memoria veloce tra CPU e RAM. L1 è piccola ma rapidissima, integrata nel core; L2 è più grande e leggermente più lenta; L3 è condivisa tra i core e più capiente. Tutte hanno lo scopo di fornire dati e istruzioni alla CPU riducendo i tempi di accesso alla RAM.
14. Perché il clock è importante?
a) Determina quante istruzioni la CPU può eseguire al secondo
b) Mantiene la CPU fresca
c) Carica i programmi dal disco
Risposta: a) Determina quante istruzioni la CPU può eseguire al secondo
Spiegazione: Il clock scandisce il ritmo delle operazioni, simile a un metronomo. Più alta è la frequenza, più rapidamente la CPU può processare istruzioni, sempre entro i limiti di temperatura e consumo energetico.
15. Cosa significa RISC e CISC?
Risposta aperta:
RISC (Reduced Instruction Set Computer) utilizza istruzioni semplici e uniformi, ottimizzando la velocità e la pipeline. CISC (Complex Instruction Set Computer) ha istruzioni più complesse che possono svolgere più operazioni in un singolo comando. Oggi molte CPU CISC tradurranno internamente le istruzioni in micro-istruzioni più semplici, combinando i vantaggi dei due approcci.

.jpeg)


.jpg)
