Note Ingegneria Informatica · UniTN
Programmazione 1
Lezione
11 set
in corso

Architettura hardware e software di un calcolatore

Indice 4 sezioni
  1. 1Concetti
  2. 1.1Tipologie di calcolatori
  3. 1.2Organizzazione software
  4. 1.3La macchina di Von Neumann
  5. 1.4La CPU
  6. 1.5Il ciclo di esecuzione
  7. 1.6La memoria centrale
  8. 1.7Esempio: eseguire c←a+bc \leftarrow a + b
  9. 1.8Il bus di sistema
  10. 1.9Gerarchia di memoria
  11. 1.10Memorie di massa
  12. 1.11Periferiche
  13. 2Esercizi tipo esame
  14. 3Errori tipici
  15. 4Domande

Lezione 02 di Programmazione 1, 11 settembre 2026. Slide: 1.2 Architettura del calcolatore. Prima: Introduzione al corso e algoritmi. Dopo: Il Linguaggio C.

Il filo della lezione:

tipi di calcolatore      mainframe, PC, laptop, smartphone
        |
        v
livelli software         hardware -> SO -> software di sistema -> applicativo
        |
        v
Von Neumann              CPU, memoria centrale, memoria di massa, periferiche, tutti sul bus
        |
        v
dentro la CPU            registri, ALU, unità di controllo, clock
        |
        v
ciclo di esecuzione      fetch -> decode -> execute, un'istruzione alla volta
        |
        v
esempio  c <- a + b      leggere e scrivere una cella passando dal bus
        |
        v
memorie e periferiche    gerarchia, HDD/SSD, polling e interrupt

1Concetti

1.1Tipologie di calcolatori

(slide 3-4)

TipoCaratteristiche
Mainframegrandi dimensioni, elevata potenza, tanta memoria. Negli anni ‘70 occupavano stanze fino a 1000 m², oggi un armadio da data center. Gestiscono enormi quantità di transazioni in tempo reale: banche, borsa
Personal computer (desktop)monitor e tastiera separati dall’unità centrale, memorie di massa interne o esterne
Laptopversione portatile del PC
Handheld (smartphone)dimensioni limitate
Smartwatchancora più piccoli

La legge di Moore descrive la miniaturizzazione: il numero di transistor su un chip raddoppia circa ogni due anni. Accanto ai dispositivi sempre più piccoli crescono anche le grandi infrastrutture di calcolo, per esempio quelle per l’intelligenza artificiale.

1.2Organizzazione software

Un calcolatore si guarda a strati. Ogni strato usa quello sotto e offre qualcosa di più comodo a quello sopra: salendo, aumenta il livello di astrazione.

+-----------------------------+
|  software applicativo       |   fogli elettronici, client di posta, browser
+-----------------------------+
|  software di sistema        |   ambienti di programmazione: compilatore, debugger
+-----------------------------+
|  sistema operativo          |   Windows, Linux, macOS: gestisce memoria, CPU, periferiche
+-----------------------------+
|  hardware                   |   CPU, memorie, periferiche: la parte fisica che calcola
+-----------------------------+

Chi scrive un programma in C lavora col software di sistema (il compilatore), che produce codice eseguito grazie al sistema operativo sull’hardware. Il passaggio dal sorgente all’eseguibile è in Il Linguaggio C.

1.3La macchina di Von Neumann

L’architettura hardware dei calcolatori si chiama macchina di Von Neumann (slide 11).

Architettura di Von neumann
ComponenteRuolo
CPUsvolge l’elaborazione, cioè esegue i programmi
Memoria centralecontiene dati e istruzioni dei programmi in esecuzione
Memoria di massaconserva grandi quantità di dati e programmi in modo persistente (non volatile, a differenza della RAM)
Periferichetastiere, monitor, schede di rete, stampanti, …
Bus di sistemacollega tutti gli altri componenti e permette lo scambio di dati

L’idea chiave è che dati e istruzioni stanno nella stessa memoria. Un programma è anch’esso una sequenza di parole in memoria, che la CPU va a leggere una alla volta.

Come funziona (slide 14):

1.4La CPU

La CPU (Central Processing Unit) è l’unità di elaborazione. Dentro ci sono (slide 23-24):

CPU Architettura Von Neumann
ParteSiglaA cosa serve
Registro contatore di programmaPCindirizzo della prossima istruzione da eseguire
Registro istruzione correnteCIRl’istruzione in elaborazione in questo momento
Registro di statoSRi flag sull’esito dell’ultima operazione: riporto (C), zero (Z), segno (S), overflow (V)
Registri A e Bgli operandi su cui lavora l’ALU
Registro interruzioniINTRsegnala le richieste di interrupt dalle periferiche
Registro indirizziARl’indirizzo della cella di memoria da leggere o scrivere
Registro datiDRla parola appena letta dalla memoria, o da scrivere
Unità aritmetico-logicaALUfa i calcoli: somme, confronti, operazioni logiche
Unità di controlloCUcoordina tutto: prelievo, decodifica, esecuzione
Clockdà il ritmo

Un registro è una piccola memoria dentro la CPU, grande una parola, velocissima.

Clock (slide 13). Il lavoro della CPU è scandito dagli impulsi del clock. Più alta la frequenza, più istruzioni per unità di tempo. Si misura in hertz, 1 Hz=11\ \text{Hz} = 1 ciclo al secondo: nel 1981 si era a 44 MHz, nel 2004 a 33 GHz. La frequenza non è tutto: contano anche la memoria disponibile e altri fattori.

1.5Il ciclo di esecuzione

Per ogni istruzione la CPU ripete tre fasi (slide 26):

All’avvio del programma il PC contiene l’indirizzo della prima istruzione. Poi:

1. Fetch (prelievo).

  1. La CU copia il contenuto del PC nel registro indirizzi AR.
  2. La CU manda alla memoria il segnale di controllo READ per leggere la cella all’indirizzo in AR.
  3. La parola letta arriva nel registro dati DR. La CU aspetta il segnale MFC (memory function completed) che conferma la fine della lettura.
  4. La CU copia DR nel registro istruzione corrente CIR.

2. Decode (interpretazione). La CU decodifica l’istruzione in CIR: capisce che operazione è e su quali operandi.

3. Execute (esecuzione). La CU genera la sequenza di segnali di controllo che realizza l’istruzione, usando i registri A e B, l’ALU e gli altri registri.

Infine il PC viene incrementato per puntare alla prossima istruzione, e si ricomincia.

Tipi di istruzioni (slide 27):

TipoEsempi
aritmetichesomma, sottrazione, moltiplicazione, divisione, shift
di controllosalto incondizionato o condizionato, chiamata a sottoprogramma
di trasferimento datida registro a registro, da registro a memoria e viceversa

1.6La memoria centrale

La memoria centrale accoglie dati e programmi su cui opera il calcolatore: mentre usi il computer ci sono il sistema operativo, i programmi aperti e i dati che stai inserendo (slide 16-18).

Struttura. Concettualmente è una sequenza di celle, ognuna delle quali contiene una parola (word).

Spazio di indirizzamento. Anche gli indirizzi sono numeri binari di lunghezza fissa. Con indirizzi di kk bit si possono distinguere 2k2^k celle diverse.

indirizzo (k = 10 bit)         parola (h = 16 bit)
        0   ->  | 0 1 1 0 1 0 0 1 0 0 0 1 1 0 1 0 |
        1   ->  | . . . . . . . . . . . . . . . . |
        2   ->  | . . . . . . . . . . . . . . . . |
      ...
     1023   ->  | . . . . . . . . . . . . . . . . |

spazio di indirizzamento: 2^10 = 1024 celle

La slide dice ”2k2^k bit”: sono 2k2^k celle (parole), ognuna di hh bit.

RAM (slide 19-20). La memoria centrale di solito è una RAM (Random Access Memory):

Nelle DRAM (dynamic) il contenuto va rinfrescato periodicamente. Complica la gestione ma rende la singola cella più semplice, quindi si impacchettano più celle nello stesso spazio. Le SRAM (static) non hanno bisogno di refresh ma sono meno dense.

1.7Esempio: eseguire c←a+bc \leftarrow a + b

Un’istruzione di alto livello diventa un piccolo algoritmo per la CPU (slide 28-32):

  1. leggi i valori di aa e bb dalla memoria;
  2. sommali con l’ALU (gli operandi passano dai registri A e B);
  3. scrivi il risultato nella cella di cc.

Leggere il valore di aa. Nell’esempio delle slide aa sta nella cella di indirizzo 123123 e vale 4242.

  1. La CU carica l’indirizzo 123123 nel registro AR, che lo mette sul bus indirizzi.
  2. La CU manda READ sul bus di controllo.
  3. La memoria mette il contenuto della cella 123123, cioè 4242, sul bus dati, e il valore arriva nel registro DR.
  4. La memoria risponde OK sul bus di controllo: la lettura è completata.

Scrivere il risultato in cc. Simmetrico: la CU mette l’indirizzo di cc (321321 nelle slide) in AR e sul bus indirizzi, mette il risultato (7070) in DR e sul bus dati, manda WRITE sul bus di controllo, la memoria salva il valore nella cella 321321 e risponde OK.

Il nome aa non esiste per la CPU: esiste solo l’indirizzo 123123. Associare nomi a indirizzi è il lavoro del compilatore, ed è da qui che nasce il concetto di variabile in Il Linguaggio C.

1.8Il bus di sistema

Il bus collega i componenti del calcolatore (slide 41). In ogni istante collega due unità, una che trasmette e una che riceve. È la CPU a scegliere quale collegamento attivare e quale operazione fare (bus mastering, schema master/slave).

Il bus è diviso in tre gruppi di linee:

LineeTrasportano
bus indirizzil’indirizzo della cella o del dispositivo coinvolto
bus datiil dato da leggere o scrivere
bus di controlloche operazione fare (READ, WRITE) e la temporizzazione (OK, MFC)

1.9Gerarchia di memoria

Memorie veloci costano di più e sono piccole, memorie capienti sono lente. Si usano tutte insieme, ognuna al suo livello (slide 33):

       velocità ↑              capacità ↓
  +---------------------+
  |  registri           |   dentro la CPU, pochi byte (es. 64 bit)
  +---------------------+
  |  cache (SRAM)       |   pochi dati usati spessissimo (es. 250 KB)
  +---------------------+
  |  memoria principale |   DRAM, molti più dati, meno veloce
  +---------------------+
  |  memoria di massa   |   HDD, SSD, CD, DVD: tantissimi dati, molto più lenta
  +---------------------+
       velocità ↓              capacità ↑

Le slide fanno anche il parallelo con la memoria umana: a lungo termine (si scrive, si legge, si cancella) e a breve termine (volatile, capacità limitata, decade in centinaia di millisecondi, il chunking ne aumenta la capacità).

1.10Memorie di massa

Una memoria di massa è un dispositivo di memorizzazione permanente con grande capacità (slide 35). Si classificano in:

Hard disk (HDD) (slide 37-39). Dal 1956. Usa materiali ferromagnetici: ogni micro-cella si magnetizza in una direzione o nell’altra, e ogni direzione vale un bit. La magnetizzazione resta senza alimentazione ma si può cambiare.

TempoCos’èOrdine di grandezza
ST posizionamento (seek)spostare la testina sulla traccia giusta4-8 ms
LT latenza (rotazione)aspettare che il settore passi sotto la testinain media mezzo giro: circa 4,2 ms a 7200 giri/min
TT trasferimentoportare i dati in memoriatrascurabile

Da dove viene il 4,2: a 7200 giri al minuto il disco fa 7200/60=1207200 / 60 = 120 giri al secondo, quindi un giro dura 1/1201/120 s ≈8,3\approx 8{,}3 ms. Quando la testina arriva sulla traccia, il settore cercato può essere appena passato (bisogna aspettare quasi un giro intero) o essere proprio lì (zero attesa): in media si aspetta mezzo giro, 8,3/2≈4,28{,}3 / 2 \approx 4{,}2 ms. Gli 8 ms sono il caso peggiore, non la latenza tipica.

SSD (slide 40). Memorie a stato solido: accesso tutto elettronico, niente parti in movimento. Avvio immediato, posizionamento circa 0,10{,}1 ms, latenza bassissima, 100100-600600 MB/s. Costano di più per GB.

1.11Periferiche

Interfaccia (slide 43-45). Ogni periferica si collega al bus attraverso un’interfaccia che gestisce lo scambio di dati con la CPU. Contiene un registro dati, un registro di comando e un registro di stato. I registri della periferica possono:

Invece di un’interfaccia diversa per ogni dispositivo si usano interfacce standard: seriale RS-232-C, SCSI, USB.

Polling e interrupt (slide 46-48). La CPU è molto più veloce di qualsiasi periferica, quindi bisogna sincronizzarle. Esempio: leggere da un disco.

POLLING                                    INTERRUPT
CPU: comando di lettura                    CPU: comando di lettura
CPU: controlla stato -> non pronto         CPU: continua a fare altro
CPU: controlla stato -> non pronto         ...
CPU: controlla stato -> non pronto         periferica: "pronto!" (interrupt)
CPU: controlla stato -> pronto             CPU: salva il suo stato
CPU: copia il dato in memoria              CPU: routine di gestione (parte del SO)
                                                copia il dato in memoria
                                           CPU: riprende da dove era
PollingInterrupt
comela CPU chiede in continuazione se il dato è prontola periferica avvisa la CPU quando è pronto
prosemplicela CPU non spreca tempo ad aspettare
controla CPU resta bloccata in un ciclo di attesaserve salvare e ripristinare lo stato

Terminali e stampanti (slide 49-50). Un video si descrive con dimensione (diagonale in pollici), risoluzione (pixel × pixel), dot pitch (mm) e frequenza di refresh (Hz). Una stampante con velocità (pagine al minuto, PPM) e risoluzione (punti per pollice, DPI); tipi: a margherita, ad aghi, a getto d’inchiostro, laser.

2Esercizi tipo esame

Esercizio 1. Una macchina ha indirizzi di 16 bit e parole di 32 bit. Quante celle può indirizzare? Quanti byte di memoria sono al massimo?

Soluzione

216=65 5362^{16} = 65\,536 celle. Ogni cella è una parola da 32 bit, cioè 4 byte: 65 536⋅4=262 14465\,536 \cdot 4 = 262\,144 byte =256= 256 KiB.

Esercizio 2. Quanti bit di indirizzo servono per 1000 celle? E per una memoria di 4 GiB in cui ogni byte ha il suo indirizzo?

Soluzione

Serve il più piccolo kk con 2k≥10002^k \geq 1000: 29=5122^9 = 512 non basta, 210=10242^{10} = 1024 sì, quindi 10 bit. 4 GiB sono 4⋅230=2324 \cdot 2^{30} = 2^{32} byte: 32 bit.

Esercizio 3. Un disco gira a 5400 giri/min e ha tempo di posizionamento medio 9 ms. Stima il tempo medio di accesso a un settore, trascurando il trasferimento.

Soluzione

Giri al secondo: 5400/60=905400 / 60 = 90. Un giro: 1/901/90 s ≈11,1\approx 11{,}1 ms. Latenza media, mezzo giro: ≈5,6\approx 5{,}6 ms. ST+LT≈9+5,6=14,6ST + LT \approx 9 + 5{,}6 = 14{,}6 ms. Per confronto un SSD si posiziona in circa 0,1 ms.

Esercizio 4. Descrivi i passi con cui la CPU scrive il valore 70 nella variabile cc, che sta all’indirizzo 321. Quali registri e quali linee del bus usa?

Soluzione
  1. La CU mette 321 nel registro AR, che lo porta sul bus indirizzi.
  2. Mette 70 nel registro DR, che lo porta sul bus dati.
  3. Manda WRITE sul bus di controllo.
  4. La memoria scrive 70 nella cella 321 e risponde OK sul bus di controllo. È la lettura al contrario: il dato va da DR alla memoria invece che dalla memoria a DR.

Esercizio 5. SI o NO?

  1. La RAM conserva i dati anche a computer spento.
  2. La cache è più veloce della memoria centrale.
  3. Il PC contiene l’istruzione in esecuzione.
  4. Il bus dati trasporta gli indirizzi delle celle.
  5. Con la gestione a interrupt la CPU aspetta in un ciclo che la periferica sia pronta.
  6. Un hard disk è una memoria ad accesso sequenziale.
Soluzione
  1. NO, è volatile. 2. SI (SRAM, vicino alla CPU). 3. NO, contiene l’indirizzo della prossima istruzione; quella in esecuzione sta nel CIR. 4. NO, gli indirizzi viaggiano sul bus indirizzi. 5. NO, quello è il polling; con l’interrupt la CPU fa altro finché la periferica non la avvisa. 6. NO, è ad accesso casuale (diretto): il nastro è sequenziale.

3Errori tipici

4Domande

Quali sono i quattro livelli dell’organizzazione software di un calcolatore, dal basso verso l’alto?

Dal basso: hardware, sistema operativo, software di sistema (compilatore, debugger), software applicativo. Salendo aumenta il livello di astrazione.

Quali componenti ha la macchina di Von Neumann e cosa li collega?

CPU, memoria centrale, memoria di massa, periferiche, collegati dal bus di sistema.

Cosa contiene il registro PC e cosa il registro CIR?

PC: l’indirizzo della prossima istruzione da eseguire. CIR: l’istruzione in esecuzione, già letta dalla memoria. Il PC contiene un indirizzo, il CIR un’istruzione.

A cosa servono i registri AR e DR?

AR: l’indirizzo della cella da leggere o scrivere, anche quando è un’istruzione. DR: la parola appena letta dalla memoria o quella da scrivere.

Descrivi i passi della fase di fetch.

PC → AR; la CU manda READ alla memoria; la parola letta arriva in DR; la CU aspetta MFC (memory function completed); DR → CIR.

In che unità si misura la frequenza del clock e cosa indica?

In hertz: 1 Hz = un impulso di clock al secondo. Non è il numero di istruzioni al secondo, perché ogni istruzione richiede in generale più cicli di clock (fetch, decode ed execute sono sequenze di passi, e l’accesso alla memoria può far aspettare).

Con indirizzi di kk bit, quante celle di memoria si possono indirizzare?

2k2^k celle, ognuna di una parola da hh bit. Con k=10k = 10 sono 1024 celle. Le slide scrivono ”2k2^k bit”: è un errore.

Cosa significa che la RAM è ad accesso casuale? E che è volatile?

Accesso casuale: si raggiunge una cella direttamente dal suo indirizzo, e il tempo non dipende da quale sia (il contrario del nastro). Volatile: senza alimentazione il contenuto si perde.