Salta al contenuto
Note per Studenti Struttura di un elaboratore

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 kk bit si indirizzano 2k2^k 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:

  1. Fetch: legge dalla memoria l'istruzione all'indirizzo contenuto nel PC e la copia nell'IR; incrementa il PC.
  2. Decode: la CU interpreta il codice operativo e individua gli operandi.
  3. 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.

Teoria collegata