Struttura di un elaboratore
In questa pagina 5
Modello di von Neumann
Un calcolatore moderno segue (con varianti) l'architettura di von Neumann: dati e istruzioni del programma stanno nella stessa memoria e una CPU li legge in sequenza.
| Componente | Ruolo |
|---|---|
| CPU (processore) | esegue le istruzioni: unità di controllo + ALU + registri |
| Memoria centrale (RAM) | contiene programma in esecuzione e dati; volatile, accesso diretto per indirizzo |
| Memoria di massa (SSD, HDD) | persistente, molto più lenta; contiene file e programmi non in esecuzione |
| Periferiche di I/O | tastiera, schermo, rete, dischi: comunicano con CPU e memoria tramite controller |
| Bus | collegamenti condivisi: bus dati, bus indirizzi, bus di controllo |
CPU
- Unità di controllo (CU): preleva le istruzioni, le decodifica e coordina le altre unità.
- ALU (Arithmetic Logic Unit): operazioni aritmetiche (somma, sottrazione, ...) e logiche (AND, OR, confronti).
- Registri: poche celle velocissime interne alla CPU. I principali:
- PC (Program Counter): indirizzo della prossima istruzione;
- IR (Instruction Register): istruzione in esecuzione;
- registri generali per operandi e risultati intermedi;
- registro di stato (flag: zero, segno, overflow, riporto).
Memoria centrale
Sequenza di celle (tipicamente di 1 byte = 8 bit), ognuna con un indirizzo numerico. Con indirizzi a bit si indirizzano celle. Una variabile di un programma occupa una o più celle consecutive: in C l'indirizzo è esplicito (vedi Puntatori in CUn puntatore contiene un indirizzo di memoria; operatori & e *, NULL, puntatori come parametri per modificare variabili del chiamante, aritmetica dei puntatori, legame tra array e puntatori, const, puntatori a puntatori.Puntatori in C →), in Python è nascosto.
Ciclo fetch-decode-execute
La CPU ripete all'infinito:
- Fetch: legge dalla memoria l'istruzione all'indirizzo contenuto nel PC e la copia nell'IR; incrementa il PC.
- Decode: la CU interpreta il codice operativo e individua gli operandi.
- Execute: l'ALU (o l'unità di memoria/I/O) esegue l'operazione; il risultato va in un registro o in memoria.
Un salto (condizionato o no) è un'istruzione che scrive un nuovo valore nel PC: è così che vengono realizzati if, cicli e chiamate di funzione.
Le istruzioni comprensibili alla CPU formano il linguaggio macchina (codici binari specifici per ogni famiglia di processori, es. x86-64, ARM). L'assembly ne è la versione testuale. I linguaggi ad alto livello vengono tradotti in linguaggio macchina da compilatori o interpreti (vedi Paradigmi di programmazione e linguaggiAlgoritmo e programma; paradigmi imperativo, procedurale, a oggetti, funzionale e dichiarativo; compilazione e interpretazione; confronto tra Python e C.Paradigmi di programmazione e linguaggi →).
Gerarchia di memoria
Più una memoria è veloce, più è piccola e costosa per byte:
| Livello | Dimensione tipica | Tempo di accesso tipico |
|---|---|---|
| Registri | centinaia di byte | < 1 ns |
| Cache L1/L2/L3 | KB – decine di MB | 1–20 ns |
| RAM | GB | ~100 ns |
| SSD | centinaia di GB – TB | ~100 µs |
| HDD | TB | ~10 ms |
La cache conserva copie dei dati usati di recente (località temporale) e di quelli vicini (località spaziale). Conseguenza pratica: scorrere un array in ordine di indirizzo è più veloce che saltare a caso.
Sistema operativo
Il sistema operativo (Windows, Linux, macOS) è il programma che gestisce le risorse: carica i programmi in memoria, assegna la CPU ai processi, gestisce file system e periferiche. Un programma in esecuzione è un processo, con il proprio spazio di indirizzi diviso in segmenti (codice, dati statici, stack, heap: vedi Gestione della memoria in CSegmenti di memoria di un processo (codice, dati statici, stack, heap); durata delle variabili; allocazione dinamica con malloc, calloc, realloc e free; errori classici: memory leak, dangling pointer, double free, buffer overflow; strumenti di controllo.Gestione della memoria in C →).
Errori tipici
- Confondere memoria centrale (volatile, dove gira il programma) e memoria di massa (persistente, dove stanno i file): un dato in una variabile si perde alla fine del programma se non viene scritto su file.
- Pensare che il PC conti le istruzioni eseguite: contiene l'indirizzo della prossima istruzione.