Struttura di un elaboratore
In questa pagina 5
In questa pagina 5
Modello di von Neumann
Definizione (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
Esempio. Con un bus indirizzi di linee la CPU indirizza celle da byte, cioè GiB di memoria centrale.
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
Formula (celle indirizzabili con bit). 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.
Esempio. Con indirizzi a bit si indirizzano celle.
Ciclo fetch-decode-execute
La CPU ripete all'infinito:
Definizione (ciclo fetch-decode-execute)
- 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.
Esempio. Con il fetch copia in IR l'istruzione all'indirizzo e porta il PC a (istruzioni di byte); il decode ne ricava codice operativo e operandi.
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.
Versione ripasso
Modello di von Neumann
Un calcolatore moderno segue l'architettura di von Neumann: dati e istruzioni stanno nella stessa memoria e la CPU li legge in sequenza.
| Componente | Ruolo |
|---|---|
| CPU (processore) | esegue le istruzioni: unità di controllo + ALU + registri |
| Memoria centrale (RAM) | programma in esecuzione e dati; volatile, accesso diretto per indirizzo |
| Memoria di massa (SSD, HDD) | persistente, lenta; file e programmi non in esecuzione |
| Periferiche di I/O | comunicano con CPU e memoria tramite controller |
| Bus | collegamenti condivisi: dati, indirizzi, controllo |
CPU
- Unità di controllo (CU): preleva, decodifica e coordina.
- ALU: operazioni aritmetiche e logiche.
- Registri: celle velocissime interne. Principali:
- PC (Program Counter): indirizzo della prossima istruzione;
- IR (Instruction Register): istruzione in esecuzione;
- registri generali e registro di stato (flag).
Memoria centrale
Sequenza di celle (1 byte = 8 bit), ognuna con un indirizzo. Con bit si indirizzano celle (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 →).
Ciclo fetch-decode-execute
La CPU ripete all'infinito:
- Fetch: legge dalla memoria l'istruzione all'indirizzo nel PC e la copia nell'IR; incrementa il PC.
- Decode: la CU interpreta il codice e individua gli operandi.
- Execute: esegue l'operazione; il risultato va in un registro o in memoria.
Un salto scrive un nuovo valore nel PC (if, cicli, funzioni).
Gerarchia di memoria
| Livello | Dimensione | Tempo di accesso |
|---|---|---|
| Registri | centinaia di byte | < 1 ns |
| Cache L1/L2/L3 | KB – MB | 1–20 ns |
| RAM | GB | ~100 ns |
| SSD | GB – TB | ~100 µs |
| HDD | TB | ~10 ms |
La cache sfrutta la località temporale e spaziale.
Sistema operativo
Gestisce le risorse: carica programmi, assegna la CPU, gestisce file system e periferiche. Un programma in esecuzione è un processo con codice, dati statici, stack e 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) e memoria di massa (persistente).
- Pensare che il PC conti le istruzioni anziché contenere il loro indirizzo.