EuraStudy
Appunti/Informatica/Architettura dei computer (AC)
Appunti · InformaticaIT · Maturità

Architettura dei computer (AC)

L'argomento studia come un elaboratore sia organizzato e funzioni: il modello logico-fisico di von Neumann, il modo in cui l'informazione viene codificata in binario, i mattoni logici (algebra di Boole e porte) con cui si costruiscono i circuiti, il ciclo con cui la CPU esegue le istruzioni e la gerarchia delle memorie che ne determina le prestazioni. È un nucleo fondante dell'informatica del triennio del Liceo Scientifico (opzione Scienze Applicate) e rientra a pieno titolo nell'Esame di Stato. Lo studente impara a collegare la rappresentazione binaria dell'informazione al funzionamento concreto dell'hardware e a valutare il ruolo dei diversi componenti nelle prestazioni del sistema.

5 sezioni·~26 min di lettura·3 competenze·Livello Base 1 · Standard 3 · Approfondimento 1·Verificato · 07/2026

T·0555 / 14
Profilo d’esame
Comprendere la struttura logica e fisica di un elaboratore e il modo in cui rappresenta ed elabora l'informazioneCollegare la codifica binaria dell'informazione al funzionamento dei circuiti logiciValutare il ruolo dei diversi componenti hardware nelle prestazioni del sistema
Operatori:spiegadescrivicalcolaconvertideterminaconfrontaanalizzaclassificaillustragiustifica

livello base

Si richiede la padronanza del modello di von Neumann, delle conversioni tra i sistemi di numerazione, delle porte logiche fondamentali con le rispettive tabelle di verità e del ciclo fetch-decode-execute, con la rappresentazione degli interi (anche in complemento a due) e dei caratteri.

livello avanzato

L'indirizzo del Liceo Scientifico (Scienze Applicate) approfondisce la rappresentazione in virgola mobile, la semplificazione di funzioni booleane con le leggi dell'algebra di Boole, il legame quantitativo tra gerarchia delle memorie, località dei riferimenti e prestazioni, e i cenni ai circuiti sequenziali.

Profondità

Profondità di lettura: Approfondimento

Testo

Dimensione del testo: Standard

Contenuti · 5 sezioni▾
  1. Architettura dei computer (AC)
    • 01La macchina di von Neumann e i suoi componenti○
    • 02Rappresentazione e codifica dell'informazione◐
    • 03Algebra di Boole, porte e circuiti logici◐
    • 04Il ciclo di esecuzione delle istruzioni (CPU)◐
    • 05La gerarchia delle memorie●
§ 01

La macchina di von Neumann e i suoi componenti#

●○○BaseLPOSA-informatica-AC-architetturaLPArchitettura di von Neumann (1945)

Schema a blocchi della macchina di von Neumann

Macchina di von NeumannGrafo, CPU · CU, ALU, registri → Bus di sistema, Bus di sistema → Memoria centrale, Bus di sistema → I/OCPU · CU,ALU, registriBus disistemaMemoriacentraleI/O
Fig. 1CPU, memoria e I/O sono collegati dai tre bus di sistema (bus dati, bus indirizzi, bus controllo). Programma e dati risiedono nella stessa memoria centrale (architettura di von Neumann).

Punti chiave

Quasi tutti gli elaboratori odierni discendono dal modello logico proposto da John von Neumann nel 1945: una macchina universale a programma memorizzato, in cui i dati e le istruzioni del programma risiedono nella stessa memoria centrale e sono codificati allo stesso modo, in binario. È questa l'idea-chiave che rende il calcolatore «general purpose»: cambiando il programma in memoria, la stessa macchina svolge compiti diversi senza essere ricablata.
I componenti fondamentali sono quattro: l'unità centrale di elaborazione (CPU), la memoria centrale, i dispositivi di ingresso/uscita (I/O) e il sistema di interconnessione, ossia il bus. La CPU si articola a sua volta nell'unità di controllo (CU), che dirige il flusso delle operazioni, e nell'unità aritmetico-logica (ALU), che esegue i calcoli e i confronti; vi sono inoltre i registri, piccole celle di memoria velocissime interne alla CPU.
La memoria centrale (RAM) è organizzata come una sequenza di celle, ciascuna individuata da un indirizzo univoco; ogni cella contiene una parola di bit. La CPU vi accede in lettura e in scrittura attraverso il bus. Poiché istruzioni e dati condividono la stessa memoria e lo stesso canale, il flusso tra CPU e memoria diventa il punto critico delle prestazioni: è il cosiddetto «collo di bottiglia di von Neumann».
Il bus è il fascio di linee che collega i componenti e si distingue in tre parti: il bus dati, che trasporta l'informazione vera e propria; il bus indirizzi, che seleziona la cella di memoria o il dispositivo coinvolto; il bus di controllo, che porta i segnali di temporizzazione e comando (per esempio «leggi» o «scrivi»). L'ampiezza del bus indirizzi determina quante celle sono indirizzabili: con n linee si indirizzano 2^n celle distinte.
Va distinta l'organizzazione di von Neumann (memoria unica per dati e istruzioni) dall'architettura Harvard (memorie e bus separati per dati e istruzioni), citata come confronto: la seconda evita in parte il collo di bottiglia ma è meno flessibile, e si ritrova soprattutto nelle memorie cache interne e nei microcontrollori.
N=2nN = 2^{n}N=2n

Celle indirizzabili

Con n linee del bus indirizzi si possono distinguere N = 2^n indirizzi diversi, quindi N celle di memoria.

Esempio svolto

Capacità indirizzabile da un bus indirizzi

Un calcolatore ha un bus indirizzi a 20 linee e celle di memoria da 1 byte. Determina il numero di celle indirizzabili e la dimensione totale della memoria indirizzabile in KiB e MiB.

  1. 01Imposta la relazione

    Con n = 20 linee del bus indirizzi il numero di indirizzi distinti è N = 2^n.

  2. 02Calcola le celle

    2^20 = 1.048.576, quindi sono indirizzabili 1.048.576 celle, ciascuna da 1 byte.

  3. 03Converti in KiB

    1 KiB = 2^10 byte = 1024 byte, dunque 2^20 byte = 2^20 / 2^10 = 2^10 KiB = 1024 KiB.

  4. 04Converti in MiB

    1 MiB = 2^20 byte, perciò 2^20 byte = 1 MiB. La selezione della cella avviene tramite il bus indirizzi.

Risultato: 1.048.576 celle = 1.048.576 byte = 1024 KiB = 1 MiB; la cella è selezionata dal bus indirizzi.

Obiettivo Maturità

  • Saper disegnare e commentare lo schema a blocchi della macchina di von Neumann, indicando il ruolo di CPU (CU e ALU), memoria, I/O e dei tre bus.
  • Spiegare in che senso il programma memorizzato rende la macchina universale e che cos'è il «collo di bottiglia di von Neumann».

Errori frequenti

  • Confondere la CU con la ALU: la prima coordina e decodifica le istruzioni, la seconda esegue le operazioni aritmetiche e logiche.
  • Dire che dati e istruzioni stanno in memorie diverse: nel modello di von Neumann condividono la stessa memoria centrale (è l'architettura Harvard a separarle).

Approfondimento

L'idea del programma memorizzato ha una radice teorica precisa: la macchina universale di Turing (1936), capace di simulare qualunque altra macchina leggendone la descrizione come un dato — von Neumann la traduce in ingegneria trattando le istruzioni come numeri in memoria. Che il codice sia dato al pari dei dati ha conseguenze profonde e ambivalenti: rende possibili i compilatori e gli interpreti (programmi che manipolano programmi), il caricamento dinamico e perfino il codice auto-modificante, ma apre anche la porta agli attacchi di iniezione di codice, in cui dati malevoli vengono fatti eseguire come istruzioni. Il confine fra hardware e software è fissato dall'architettura del set di istruzioni (ISA, Instruction Set Architecture): l'insieme delle istruzioni macchina, dei registri e delle modalità di indirizzamento che la CPU espone; è il «contratto» rispetto al quale i compilatori generano codice, ed è il motivo per cui lo stesso sorgente va ricompilato per architetture diverse. Le ISA si dividono storicamente in CISC (poche istruzioni complesse e potenti, come nella famiglia x86) e RISC (molte istruzioni semplici, regolari ed eseguibili idealmente in un ciclo, come ARM), due filosofie con compromessi diversi fra complessità del circuito e prestazioni. Il «collo di bottiglia di von Neumann» — l'unico canale condiviso fra CPU e memoria — resta il limite di fondo che cache, pipeline e, in parte, l'architettura Harvard cercano di attenuare senza rinunciare alla flessibilità del programma memorizzato.

Ripasso attivo

Un calcolatore dispone di un bus indirizzi a 20 linee e di celle di memoria da 1 byte. Determina il numero massimo di celle indirizzabili e la dimensione complessiva della memoria indirizzabile, esprimendola in kibibyte (KiB) e mebibyte (MiB). Descrivi inoltre quale bus interviene quando la CPU «sceglie» la cella da leggere.

Richiamo attivo

Ricorda i punti chiave — poi rivela.

Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))

§ 02

Rappresentazione e codifica dell'informazione#

●●○StandardLPOSA-informatica-AC-architetturaLPCodifica binaria, complemento a due, standard di codifica dei caratteri (ASCII/Unicode)

Conversione e corrispondenza tra le basi (8 bit)

Binario – decimale – esadecimale (8 bit)Tabella con 8 colonne e 1 righe, Dati: 128 · 64 · 32 · 16 · 8 · 4 · 2 · 1; 1 · 0 · 0 · 1 · 1 · 1 · 0 · 0128643216842110011100
Fig. 2Byte 10011100: bit accesi 128 + 16 + 8 + 4 = 156 (decimale). A gruppi di 4 bit: 1001₂ = 9 e 1100₂ = C, quindi 9C (esadecimale). Una cifra esadecimale = 4 bit.

Punti chiave

Nel calcolatore ogni informazione è codificata con due soli simboli, 0 e 1, ossia con cifre binarie (bit), perché i circuiti distinguono in modo affidabile due soli stati elettrici. Otto bit formano un byte. Il sistema binario è un sistema posizionale in base 2: il valore di una cifra dipende dalla sua posizione, esattamente come nel sistema decimale, ma le potenze di riferimento sono quelle di 2.
La conversione da binario a decimale si ottiene sommando le potenze di 2 corrispondenti alle posizioni dei bit posti a 1. Viceversa, da decimale a binario si procede con le divisioni successive per 2, leggendo i resti dal basso verso l'alto. I sistemi ottale (base 8) ed esadecimale (base 16) sono notazioni compatte del binario: una cifra esadecimale equivale esattamente a 4 bit, una ottale a 3 bit, il che rende immediata la conversione raggruppando i bit.
Per rappresentare gli interi con segno lo standard è la notazione in complemento a due su un numero fisso di bit: i numeri non negativi hanno la stessa scrittura binaria naturale, mentre l'opposto di un numero si ottiene invertendo tutti i bit e aggiungendo 1. Su k bit si rappresentano i valori interi da -2^(k-1) a 2^(k-1)-1; il vantaggio decisivo è che la sottrazione si riduce a un'addizione, semplificando i circuiti della ALU.
I numeri reali si rappresentano in virgola mobile (floating point, standard IEEE 754): un numero è scomposto in segno, mantissa ed esponente, secondo la forma x = (-1)^s · m · 2^e. Questa scelta consente un'ampia gamma di valori con un numero fisso di bit, ma introduce errori di arrotondamento, perché solo un sottoinsieme finito di numeri reali è rappresentabile esattamente.
Anche i dati non numerici sono ridotti a bit. I caratteri si codificano con tabelle standard: il codice ASCII su 7 bit (128 simboli, esteso a 8 bit per 256) e, oggi, Unicode con le sue codifiche (per esempio UTF-8), che assegna un codice univoco a decine di migliaia di caratteri di tutte le lingue. Le immagini raster si codificano per pixel (con la profondità di colore in bit per pixel); analogamente audio e video derivano da campionamento e quantizzazione.
(dn−1 dn−2 … d1 d0)2=∑i=0n−1di⋅2 i(d_{n-1}\,d_{n-2}\,\dots\,d_1\,d_0)_2 = \sum_{i=0}^{n-1} d_i \cdot 2^{\,i}(dn−1​dn−2​…d1​d0​)2​=i=0∑n−1​di​⋅2i

Valore posizionale (binario)

Il valore decimale di un numero binario è la somma dei pesi 2^i delle posizioni in cui la cifra d_i vale 1.

−2 k−1≤x≤2 k−1−1-2^{\,k-1} \le x \le 2^{\,k-1}-1−2k−1≤x≤2k−1−1

Intervallo in complemento a due (k bit)

Su k bit la notazione in complemento a due rappresenta gli interi da -2^(k-1) a 2^(k-1)-1; per k = 8 si va da -128 a +127.

Esempio svolto

Da decimale a binario, a esadecimale e a complemento a due

Converti 156 in binario su 8 bit e in esadecimale; rappresenta poi -100 in complemento a due su 8 bit.

  1. 01156 in binario

    Divisioni successive per 2 (resti dal basso): 156 = 128+16+8+4, cioè 10011100. Verifica: 128+16+8+4 = 156.

  2. 02156 in esadecimale

    Raggruppo i bit a 4 a 4: 1001 = 9 e 1100 = C, quindi 156 = 9C in base 16.

  3. 03+100 in binario su 8 bit

    100 = 64+32+4 = 01100100.

  4. 04-100 in complemento a due

    Inverto i bit di 01100100 ottenendo 10011011, poi aggiungo 1: 10011011 + 1 = 10011100. Quindi -100 = 10011100.

Risultato: 156 = (10011100)_2 = (9C)_16; -100 = (10011100)_2 in complemento a due su 8 bit (osserva: la somma 01100100 + 10011100 dà 1 00000000, cioè 0 troncando il riporto).

Obiettivo Maturità

  • Eseguire correttamente le conversioni binario↔decimale↔esadecimale e raggruppare i bit a 4 a 4 per l'esadecimale.
  • Rappresentare un intero negativo in complemento a due su un dato numero di bit e indicare l'intervallo rappresentabile.

Errori frequenti

  • Sbagliare l'ordine dei resti nelle divisioni successive: il numero binario si legge dall'ultimo resto (in alto) al primo (in basso).
  • Nel complemento a due, dimenticare di aggiungere 1 dopo aver invertito i bit, oppure non fissare il numero di bit (l'intervallo dipende da k).

Approfondimento

Vale la pena vedere l'aritmetica binaria all'opera. La somma di due bit segue le regole «0+0=0, 0+1=1, 1+1=10» (0 con riporto 1), e si procede colonna per colonna propagando il riporto, esattamente come in decimale. Il complemento a due rende la sottrazione un'addizione: «A − B» si calcola come «A + (complemento a due di B)», scartando l'eventuale riporto oltre il k-esimo bit. L'overflow (traboccamento) in complemento a due si riconosce con una regola netta: si verifica quando il riporto entrante nel bit di segno è diverso dal riporto uscente da esso, segno che il risultato è uscito dall'intervallo rappresentabile «[−2^(k−1), 2^(k−1)−1]». Per i reali, lo standard IEEE 754 in singola precisione impiega 32 bit così ripartiti: 1 bit di segno, 8 di esponente (memorizzato con polarizzazione, bias 127) e 23 di mantissa; il valore è «(−1)^s · 1,m · 2^(e−127)». Poiché la mantissa è finita, solo le frazioni con denominatore potenza di 2 sono esatte: «0,1» in binario è periodico e va arrotondato, ragione per cui «0,1 + 0,2» non dà esattamente «0,3» — tema centrale del calcolo numerico. Sul piano concettuale un bit misura la scelta fra due alternative equiprobabili, e per distinguere N alternative servono «⌈log₂ N⌉» bit: è la radice del legame profondo fra quantità di informazione e logaritmo in base 2.

Ripasso attivo

Converti il numero decimale 156 in binario su 8 bit e in esadecimale. Rappresenta poi il numero -100 in complemento a due su 8 bit e verifica il risultato sommandolo a +100 (la somma su 8 bit deve dare 0).

Richiamo attivo

Ricorda i punti chiave — poi rivela.

Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))

§ 03

Algebra di Boole, porte e circuiti logici#

●●○StandardLPOSA-informatica-AC-architetturaLPAlgebra di Boole (George Boole, 1854) e porte logiche

Porte logiche fondamentali e tabelle di verità

Porte logiche: tabelle di veritàTabella con 4 colonne e 4 righe, Dati: A · B · AND · OR; 0 · 0 · 0 · 0; 0 · 1 · 0 · 1; 1 · 0 · 0 · 1; 1 · 1 · 1 · 1ABANDOR0000010110011111
Fig. 3AND vale 1 solo quando entrambi gli ingressi sono 1; OR vale 1 se almeno uno è 1. NOT (¬): ¬0 = 1, ¬1 = 0.

Punti chiave

L'algebra di Boole, formalizzata da George Boole nel 1854, opera su variabili che assumono solo due valori, 0 e 1 (falso e vero), ed è il linguaggio matematico con cui si progettano i circuiti digitali. Le tre operazioni fondamentali sono il prodotto logico AND (·), la somma logica OR (+) e la negazione NOT (la barra sopra la variabile). Da queste si derivano NAND, NOR e XOR.
Ogni operazione è definita da una tabella di verità, che elenca l'uscita per tutte le combinazioni degli ingressi. L'AND vale 1 solo quando entrambi gli ingressi valgono 1; l'OR vale 1 quando almeno un ingresso vale 1; il NOT inverte il valore. Con n ingressi le righe della tabella sono 2^n, perché tante sono le combinazioni possibili.
Le porte logiche sono i circuiti elettronici che realizzano fisicamente queste operazioni; combinandole si costruiscono i circuiti combinatori, in cui l'uscita dipende solo dagli ingressi presenti in quell'istante (per esempio sommatori e multiplexer). Si distinguono dai circuiti sequenziali, in cui l'uscita dipende anche dallo stato precedente grazie a elementi di memoria (i flip-flop): è da questi cenni che nascono i registri.
Le leggi dell'algebra di Boole permettono di semplificare le espressioni e quindi i circuiti: valgono commutativa, associativa e distributiva, gli elementi neutri e assorbenti, l'idempotenza, e soprattutto le leggi di De Morgan, secondo cui la negazione di un prodotto è la somma delle negazioni e viceversa. Semplificare un'espressione significa usare meno porte, riducendo costo, consumo e ritardo del circuito.
Una funzione logica si può descrivere in tre modi equivalenti — tabella di verità, espressione booleana, schema con le porte — e si può sempre passare dall'uno all'altro. Questa equivalenza è il ponte concettuale tra la codifica binaria dell'informazione (la sezione precedente) e l'hardware che la elabora: i bit dei dati diventano i livelli logici in ingresso alle porte.
A⋅B‾=A‾+B‾A+B‾=A‾⋅B‾\overline{A \cdot B} = \overline{A} + \overline{B} \qquad \overline{A + B} = \overline{A} \cdot \overline{B}A⋅B=A+BA+B​=A⋅B

Leggi di De Morgan

La negazione di un prodotto logico è la somma delle negazioni; la negazione di una somma logica è il prodotto delle negazioni.

R=2 nR = 2^{\,n}R=2n

Righe di una tabella di verità

Una funzione con n ingressi binari ha 2^n combinazioni possibili, quindi 2^n righe nella tabella di verità.

Esempio svolto

Tabella di verità e semplificazione di una funzione

Costruisci la tabella di verità di F(A,B) = (A AND B) OR (NOT A) e stabilisci se la funzione si può semplificare.

  1. 01Numero di righe

    Gli ingressi sono 2, quindi le righe sono 2^2 = 4.

  2. 02Riga per riga

    A=0,B=0: NOT A=1 → F=1. A=0,B=1: NOT A=1 → F=1. A=1,B=0: A·B=0, NOT A=0 → F=0. A=1,B=1: A·B=1 → F=1.

  3. 03Osserva il risultato

    F vale 0 solo quando A=1 e B=0; vale 1 negli altri tre casi.

  4. 04Semplifica

    Per la proprietà di assorbimento (A·B)+(NOT A) = B + (NOT A), perché (NOT A) copre già A=0 e l'unico caso con A=1 che dà 1 è B=1. La tabella di B + (NOT A) coincide con quella trovata.

Risultato: F = (A AND B) OR (NOT A) si semplifica in F = B OR (NOT A); vale 0 solo per A=1, B=0.

Obiettivo Maturità

  • Compilare la tabella di verità di una funzione booleana e tradurla in espressione e in schema a porte (e viceversa).
  • Applicare le leggi di De Morgan e le proprietà fondamentali per semplificare un'espressione logica.

Errori frequenti

  • Confondere l'OR logico con l'OR esclusivo (XOR): l'OR vale 1 anche quando entrambi gli ingressi sono 1, lo XOR no.
  • Applicare male De Morgan dimenticando di negare i singoli termini: la negazione di (A·B) è (NOT A)+(NOT B), non (NOT A)·(NOT B).

Approfondimento

Ogni funzione booleana ammette una forma canonica ricavabile direttamente dalla tabella di verità: la somma di prodotti (SoP), che somma un mintermine per ciascuna riga con uscita 1, e il duale prodotto di somme (PoS). Queste forme sono sistematiche ma non minime; per ottenere il circuito con meno porte si applica la minimizzazione, che a mano si esegue con le mappe di Karnaugh — griglie in cui celle adiacenti differiscono per un solo bit (codice Gray), sicché raggruppando le caselle a 1 in blocchi di potenze di 2 si eliminano le variabili che cambiano. Un risultato notevole è la completezza funzionale: la sola porta NAND (o la sola NOR) basta a costruire qualunque funzione logica — NOT, AND e OR si ottengono tutti da NAND — ed è per questo che molti circuiti reali usano porte di un solo tipo. Combinando le porte si costruiscono i mattoni dell'aritmetica: il semisommatore (half adder), formato da uno XOR (che dà la somma) e un AND (che dà il riporto), somma due bit; il sommatore completo (full adder) aggiunge il riporto entrante e, incatenato bit dopo bit, produce il sommatore a n bit che vive dentro la ALU. Così l'algebra astratta di Boole diventa il circuito fisico che esegue la «1+1» del calcolatore, saldando la codifica binaria dell'informazione all'hardware che la elabora.

Ripasso attivo

Data la funzione F(A,B) = (A AND B) OR (NOT A), costruisci la tabella di verità completa (4 righe) e disegna lo schema con le porte AND, OR e NOT. Stabilisci poi se la funzione si può semplificare e giustifica la risposta.

Richiamo attivo

Ricorda i punti chiave — poi rivela.

Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))

§ 04

Il ciclo di esecuzione delle istruzioni (CPU)#

●●○StandardLPOSA-informatica-AC-architetturaLPFunzionamento della CPU: ciclo fetch-decode-execute, registri, unità di controllo e ALU

Il ciclo fetch-decode-execute

Ciclo fetch-decode-executeGrafo, Fetch · preleva (PC) → Decode · decodifica (IR), Decode · decodifica (IR) → Execute · esegui (ALU), Execute · esegui (ALU) → Fetch · preleva (PC)Fetch · preleva(PC)Decode ·decodifica (IR)Execute · esegui(ALU)
Fig. 4Il ciclo fetch-decode-execute si ripete a ogni impulso di clock: il Program Counter indica l’istruzione, il registro istruzione la contiene, l’ALU la esegue.

Punti chiave

La CPU esegue i programmi ripetendo, per ogni istruzione, un ciclo elementare detto fetch-decode-execute (preleva, decodifica, esegui). Questo ciclo è scandito dal clock, il segnale periodico che sincronizza tutte le operazioni: a ogni colpo di clock la macchina avanza di un passo, e la frequenza del clock (in hertz) misura quanti cicli al secondo la CPU può compiere.
Nella fase di fetch l'unità di controllo legge dalla memoria l'istruzione il cui indirizzo è contenuto nel Program Counter (PC), un registro speciale che punta alla prossima istruzione; l'istruzione viene caricata nel registro istruzione (IR) e il PC viene incrementato. Nella fase di decode la CU interpreta i bit dell'istruzione, riconoscendo l'operazione da svolgere e gli operandi coinvolti.
Nella fase di execute interviene la ALU (per le operazioni aritmetico-logiche) oppure si accede alla memoria o ai registri, e il risultato viene memorizzato. Tra i registri di lavoro vi sono gli accumulatori e i registri generali; il registro di stato (o dei flag) conserva informazioni sull'ultimo risultato, come il segno o l'eventuale riporto, usate dalle istruzioni di salto condizionato.
Il tempo di esecuzione di un programma dipende da quante istruzioni esegue, da quanti cicli di clock richiede ciascuna istruzione (CPI, cicli per istruzione) e dalla durata di un ciclo, pari al reciproco della frequenza. Aumentare la frequenza accelera l'esecuzione, ma incontra limiti fisici (calore, consumo); per questo si ricorre al parallelismo, come la pipeline e i processori multi-core (cenni).
Il linguaggio macchina è l'insieme delle istruzioni che la CPU comprende direttamente, codificate in binario; il linguaggio assembly ne è la versione simbolica leggibile. Comprendere il ciclo fetch-decode-execute spiega perché un programma scritto in un linguaggio ad alto livello deve essere tradotto in istruzioni elementari che la macchina possa eseguire un passo per volta.
Tciclo=1fT_{ciclo} = \frac{1}{f}Tciclo​=f1​

Durata di un ciclo di clock

La durata di un ciclo è il reciproco della frequenza di clock f; per f = 2 GHz = 2 000 000 000 Hz si ha T = 0.5 ns.

TCPU=Nistr⋅CPI⋅Tciclo=Nistr⋅CPIfT_{CPU} = N_{istr} \cdot \text{CPI} \cdot T_{ciclo} = \frac{N_{istr} \cdot \text{CPI}}{f}TCPU​=Nistr​⋅CPI⋅Tciclo​=fNistr​⋅CPI​

Tempo di esecuzione

Il tempo della CPU è il numero di istruzioni per i cicli medi per istruzione (CPI) per la durata di un ciclo.

Esempio svolto

Tempo di esecuzione di un programma

Una CPU a 2 GHz esegue 6 milioni di istruzioni con CPI medio 4. Calcola la durata di un ciclo e il tempo di esecuzione in millisecondi.

  1. 01Durata del ciclo

    T_ciclo = 1/f = 1 / (2·10^9 Hz) = 0.5·10^-9 s = 0.5 ns.

  2. 02Cicli totali

    Cicli = N_istr · CPI = 6·10^6 · 4 = 24·10^6 = 2.4·10^7 cicli.

  3. 03Tempo di esecuzione

    T_CPU = cicli · T_ciclo = 2.4·10^7 · 0.5·10^-9 s = 1.2·10^-2 s.

  4. 04Converti in millisecondi

    1.2·10^-2 s = 12·10^-3 s = 12 ms.

Risultato: Durata del ciclo = 0.5 ns; tempo di esecuzione = 1.2·10^-2 s = 12 ms.

Obiettivo Maturità

  • Descrivere ordinatamente le fasi fetch, decode ed execute e il ruolo dei registri PC e IR.
  • Collegare frequenza di clock, durata del ciclo e tempo di esecuzione, sapendo calcolare il tempo da numero di istruzioni e CPI.

Errori frequenti

  • Pensare che a ogni colpo di clock venga eseguita un'intera istruzione: in generale un'istruzione richiede più cicli (CPI > 1).
  • Confondere il Program Counter (indirizzo della prossima istruzione) con il registro istruzione (che contiene l'istruzione corrente).

Approfondimento

Il ciclo fetch-decode-execute, se eseguito una istruzione per volta, lascia inattive le unità non coinvolte in ciascuna fase. La pipeline (catena di montaggio) rimedia sovrapponendo le fasi di istruzioni consecutive: mentre una istruzione è in execute, la successiva è in decode e una terza in fetch. Con k stadi, a regime, si completa idealmente un'istruzione per ciclo, con un guadagno fino a k volte; il vantaggio è però eroso dai conflitti (hazard): un salto condizionato rende incerta la prossima istruzione da prelevare, e finché la condizione non è risolta la pipeline potrebbe aver caricato istruzioni sbagliate, da qui la predizione dei salti e l'eventuale svuotamento. La legge fondamentale delle prestazioni resta «tempo = numero di istruzioni × CPI × durata del ciclo»: si può intervenire su uno qualunque dei tre fattori (un compilatore che riduce le istruzioni, un'architettura che abbassa il CPI, una tecnologia che alza la frequenza), ma la legge di Amdahl ricorda che accelerare solo una parte del calcolo produce un guadagno complessivo limitato dalla parte non accelerata. Un meccanismo essenziale che spezza il flusso lineare del ciclo è l'interruzione (interrupt): un dispositivo che richiede attenzione invia un segnale che sospende l'istruzione corrente, ne salva lo stato, esegue una routine di servizio e poi riprende — è il modo in cui la CPU dialoga con l'I/O senza consumarsi in un'attesa attiva (busy waiting), argomento che riprenderemo con i sistemi operativi.

Ripasso attivo

Una CPU ha frequenza di clock di 2 GHz. Un programma esegue 6 milioni di istruzioni con un valore medio di CPI pari a 4. Determina la durata di un ciclo di clock e il tempo di esecuzione del programma, esprimendolo in millisecondi.

Richiamo attivo

Ricorda i punti chiave — poi rivela.

Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))

§ 05

La gerarchia delle memorie#

●●●ApprofondimentoLPOSA-informatica-AC-architetturaLPGerarchia delle memorie: registri, cache, RAM, memorie di massa; cenni alle prestazioni

La piramide della gerarchia delle memorie

Gerarchia delle memoriepiramide, 4 livelli, Dati: Memorie di massa, RAM (volatile), Cache L1/L2/L3, RegistriMemorie di massaRAM (volatile)Cache L1/L2/L3Registri
Fig. 5Dal vertice alla base: velocità decrescente (registri i più veloci) e capacità crescente (memorie di massa le più capienti).

Punti chiave

Nessuna tecnologia di memoria è insieme velocissima, capiente ed economica: per questo l'elaboratore organizza la memoria in una gerarchia a livelli. Salendo verso la CPU le memorie diventano più veloci ma più piccole e costose per bit; scendendo diventano più lente ma più capienti ed economiche. I livelli, dal più veloce al più lento, sono: registri, memoria cache (L1, L2, L3), memoria centrale (RAM), memorie di massa (SSD, dischi) e supporti di archiviazione.
La memoria centrale (RAM) è volatile: perde il contenuto allo spegnimento e contiene programmi e dati in esecuzione. Le memorie di massa sono permanenti (non volatili) e conservano i dati anche senza alimentazione, ma il loro tempo di accesso è di ordini di grandezza maggiore. La cache è una memoria piccola e rapidissima che conserva copie dei dati usati più di recente, riducendo il numero di accessi lenti alla RAM.
La gerarchia funziona grazie al principio di località dei riferimenti: i programmi tendono ad accedere ripetutamente agli stessi dati (località temporale) e a dati vicini tra loro (località spaziale). Mantenendo nei livelli veloci i dati più probabili, la maggior parte degli accessi viene servita dalla cache: la frazione di successi si chiama hit rate, quella di insuccessi miss rate.
Le prestazioni si valutano con il tempo medio di accesso, che combina il tempo del livello veloce e la penalità da pagare quando il dato non c'è. Con hit rate h, tempo della cache T_cache e tempo della RAM T_RAM, il tempo medio è T_medio = h · T_cache + (1-h) · T_RAM: anche un hit rate elevato è decisivo, perché gli accessi mancati costano molto.
Questa organizzazione spiega perché le prestazioni di un sistema non dipendono solo dalla frequenza della CPU, ma dall'intera catena di accesso ai dati: una CPU veloce affamata di dati resta in attesa se la memoria non li fornisce in tempo. È il punto in cui le tre sezioni precedenti (codifica, logica, ciclo della CPU) si saldano nella valutazione complessiva delle prestazioni dell'elaboratore.
Tmedio=h⋅Tcache+(1−h)⋅TRAMT_{medio} = h \cdot T_{cache} + (1-h)\cdot T_{RAM}Tmedio​=h⋅Tcache​+(1−h)⋅TRAM​

Tempo medio di accesso (due livelli)

Il tempo medio combina il tempo della cache (peso h, hit rate) e quello della RAM (peso 1-h, miss rate).

Esempio svolto

Tempo medio di accesso al variare dell'hit rate

Cache con tempo 2 ns, RAM con tempo 80 ns. Calcola il tempo medio di accesso con hit rate 95% e con hit rate 90%.

  1. 01Imposta i dati

    T_cache = 2 ns, T_RAM = 80 ns. Caso A: h = 0.95; caso B: h = 0.90.

  2. 02Caso A (h = 0.95)

    T = 0.95·2 + 0.05·80 = 1.9 + 4.0 = 5.9 ns.

  3. 03Caso B (h = 0.90)

    T = 0.90·2 + 0.10·80 = 1.8 + 8.0 = 9.8 ns.

  4. 04Commenta

    Passando da h = 0.95 a h = 0.90 il tempo medio sale da 5.9 a 9.8 ns (+66%): poche mancanze in più pesano molto, perché ogni miss costa 80 ns. Una buona località dei riferimenti, che alza l'hit rate, è quindi decisiva.

Risultato: Con h = 95% il tempo medio è 5.9 ns; con h = 90% sale a 9.8 ns: l'effetto della località dei riferimenti sulle prestazioni è notevole.

Obiettivo Maturità

  • Disporre in ordine i livelli della gerarchia spiegando il compromesso tra velocità, capacità e costo, e distinguere memorie volatili da non volatili.
  • Calcolare il tempo medio di accesso a partire da hit rate e dai tempi dei due livelli.

Errori frequenti

  • Credere che la RAM sia permanente: la RAM è volatile, mentre SSD e dischi conservano i dati allo spegnimento.
  • Pensare che la cache aumenti la capacità totale: la cache migliora la velocità media di accesso, non lo spazio disponibile.

Approfondimento

La cache non trasferisce singoli byte ma blocchi (linee) di celle contigue: caricando l'intorno del dato richiesto sfrutta la località spaziale, così che il prossimo accesso a una cella vicina sarà un successo. Come una linea si colloca in cache dipende dalla mappatura: diretta (ogni blocco ha un'unica posizione possibile: veloce ma soggetta a collisioni), completamente associativa (ovunque: flessibile ma costosa) o associativa a insiemi (il compromesso usato in pratica); quando la cache è piena, una politica di rimpiazzo — tipicamente LRU, che scarta il blocco usato meno di recente — decide chi sacrificare. Con più livelli il tempo medio di accesso si calcola in modo ricorsivo: un miss in L1 paga il tempo di L2, un miss in L2 il tempo della RAM, cosicché «T_medio = T_L1 + miss_L1 · (T_L2 + miss_L2 · T_RAM)». La stessa idea di gerarchia si estende oltre la RAM con la memoria virtuale: il sistema operativo assegna a ciascun processo uno spazio di indirizzi ampio e continuo, suddiviso in pagine, mappandole sulla RAM e, quando questa non basta, su disco (paginazione, swap); una tabella delle pagine traduce gli indirizzi virtuali in fisici, con l'aiuto di una cache dedicata alle traduzioni (TLB). Tutto ciò affronta il «memory wall», il divario crescente fra la velocità delle CPU e quella delle memorie, che rende la catena di accesso ai dati — e non il solo valore del clock — il vero fattore delle prestazioni reali di un sistema.

Ripasso attivo

Un sistema ha una cache con tempo di accesso di 2 ns e una RAM con tempo di accesso di 80 ns. Se l'hit rate della cache è del 95%, calcola il tempo medio di accesso alla memoria e confrontalo con il caso in cui l'hit rate scenda al 90%, commentando l'effetto della località dei riferimenti.

Richiamo attivo

Ricorda i punti chiave — poi rivela.

Fonti: Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento (Ministero dell'Istruzione e del Merito (MIM))

Contenuti

Sezione -- / 05

    • 01La macchina di von Neumann e i suoi componenti○
    • 02Rappresentazione e codifica dell'informazione◐
    • 03Algebra di Boole, porte e circuiti logici◐
    • 04Il ciclo di esecuzione delle istruzioni (CPU)◐
    • 05La gerarchia delle memorie●

0/5 Letti

Dagli appunti all'allenamento

Architettura dei computer (AC)

Consolida questo argomento con domande dalla banca dati.

~26
min
3
Competenze
Esercitati

Riferimenti e fonti

Fonti

Ministero dell'Istruzione e del Merito (MIM)

  • Indicazioni Nazionali per i Licei (DPR 89/2010, DM 211/2010) — Obiettivi Specifici di Apprendimento

Argomento precedente

Programmazione orientata agli oggetti (OOP)

Argomento successivo

Sistemi operativi (SO)

EuraStudy·Appunti T·05·MMXXVI

Continua con l'argomento successivo: il percorso viene conservato.