Le memorie possono essere classificate in base al tipo e al modo in cui memorizzano i dati. Le principali tipologie includono:

  • Memoria RAM (Random Access Memory): Memoria volatile utilizzata per memorizzare dati temporanei.
  • Memoria ROM (Read Only Memory): Memoria non volatile che conserva dati in modo permanente.
  • Memorie Cache: Veloci memorie temporanee che migliorano le prestazioni del sistema.

2. Funzionamento della Memoria

2.1 Organizzazione della Memoria

La memoria è organizzata in celle o locazioni di memoria, ciascuna delle quali può memorizzare un dato (in genere rappresentato in bit). Ciascuna cella è identificata da un indirizzo univoco che ne consente il recupero. Il processore accede alla memoria inviando l’indirizzo della locazione desiderata, ottenendo in cambio i dati memorizzati in quel punto.

2.2 Ciclo di Operazione della Memoria

Le operazioni di base sulla memoria comprendono:

  • Lettura: Il processore invia un indirizzo alla memoria e recupera i dati memorizzati in quella posizione.
  • Scrittura: Il processore invia un indirizzo, insieme ai dati da memorizzare, e questi vengono scritti nella locazione specificata.

Il ciclo di lettura e scrittura si svolge in tre fasi principali:

  1. Indirizzamento: Il processore invia l’indirizzo della locazione di memoria.
  2. Decodifica dell’indirizzo: Il sistema di memoria individua la cella corrispondente all’indirizzo.
  3. Lettura o scrittura: Viene effettuata l’operazione richiesta (lettura o scrittura).

2.3 Tipologie di Memorie

  • RAM (Random Access Memory): Una memoria volatile utilizzata per il temporaneo stoccaggio dei dati durante l’esecuzione di un programma. Può essere:

    • DRAM (Dynamic RAM): Richiede un aggiornamento periodico per mantenere i dati.
    • SRAM (Static RAM): Più veloce e non richiede aggiornamenti, ma è più costosa e ingombrante.
  • ROM (Read Only Memory): Una memoria non volatile usata per memorizzare dati permanenti, spesso contenente il firmware di sistema.

  • Cache: Una piccola memoria molto veloce situata vicino al processore per ridurre il tempo di accesso ai dati più frequentemente usati.

3. Decodifica dell’Indirizzo

3.1 Definizione della Decodifica dell’Indirizzo

La decodifica dell’indirizzo è il processo utilizzato per tradurre l’indirizzo binario fornito dal processore in un segnale di controllo che seleziona una specifica locazione di memoria. La decodifica permette al sistema di determinare quale cella di memoria o quale dispositivo di input/output deve essere attivato per una determinata operazione.

3.2 Come Funziona la Decodifica dell’Indirizzo

Ogni indirizzo di memoria è costituito da una stringa di bit binari. La decodifica avviene tramite un decoder: un circuito combinatorio che prende in ingresso un indirizzo binario e attiva l’uscita corrispondente alla locazione di memoria specifica.

Un esempio di decoder a 2-bit:

  • Ingresso: Indirizzo binario (2 bit).
  • Uscita: 4 linee di controllo, una per ogni locazione di memoria (dato che con 2 bit si possono indirizzare 4 locazioni).
IndirizzoLinea Attiva
00Linea 0
01Linea 1
10Linea 2
11Linea 3

Il processore fornisce l’indirizzo alla memoria, e il decoder attiva la linea corrispondente a quella specifica locazione. Se la linea attiva corrisponde a una lettura, la memoria fornisce i dati; se invece si tratta di una scrittura, i dati inviati dal processore vengono immagazzinati nella locazione attivata.

3.3 Implementazione di un Decoder

Un decoder tradizionale ha $ n $ ingressi binari e $ 2^n $ uscite, dove ogni uscita corrisponde a una particolare locazione di memoria o dispositivo. Ad esempio, un decoder a 3 bit può indirizzare 8 locazioni di memoria.

La formula per determinare il numero di locazioni di memoria che possono essere indirizzate è:

$ N_{\text{locazioni}} = 2^{n_{\text{bit}}} $

Dove:

  • $ N_{\text{locazioni}} $ è il numero di locazioni di memoria che possono essere indirizzate.
  • $ n_{\text{bit}} $ è il numero di bit dell’indirizzo.

3.4 Memory Mapping e I/O Mapping

La decodifica dell’indirizzo non si applica solo alla memoria, ma anche ai dispositivi di input/output (I/O). Esistono due principali modalità di mappatura:

  • Memory-mapped I/O: I dispositivi di I/O sono mappati allo spazio degli indirizzi di memoria, utilizzando lo stesso schema di indirizzamento della memoria principale.
  • Port-mapped I/O: I dispositivi di I/O hanno un proprio spazio di indirizzi separato, con accesso mediante istruzioni specializzate.

4. Gerarchia della Memoria e Accesso

Le moderne architetture di calcolo adottano una gerarchia della memoria per bilanciare velocità, costo e capacità. La memoria più vicina al processore (cache) è veloce ma limitata in termini di capacità, mentre la memoria più lontana (come RAM e dischi) ha una maggiore capacità ma tempi di accesso più lunghi.

4.1 Cache

La memoria cache è una memoria veloce che conserva una copia temporanea dei dati più frequentemente utilizzati dalla CPU. Riduce il tempo di accesso alla memoria principale, accelerando le prestazioni complessive del sistema.

4.2 RAM

La RAM è il livello principale della gerarchia di memoria. Durante l’esecuzione di un programma, la RAM contiene dati temporanei e istruzioni necessarie per il funzionamento corrente della CPU.

4.3 Memoria Secondaria

Le memorie secondarie, come i dischi rigidi (HDD) e le unità a stato solido (SSD), vengono utilizzate per l’archiviazione a lungo termine di dati e programmi. Queste memorie non sono direttamente accessibili dalla CPU, ma richiedono l’uso di un sistema operativo per gestire il trasferimento dei dati tra memoria secondaria e principale.