4 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.
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.

.jpeg)


.jpg)