Registri

I registri sono piccole memorie ad accesso molto veloce che fanno parte integrante della CPU (Central Processing Unit). Essi fungono da contenitori temporanei per dati e indirizzi, utilizzati durante l’esecuzione delle istruzioni. I registri sono di fondamentale importanza perché riducono il numero di accessi alla memoria principale, che è più lenta, migliorando così le prestazioni del sistema.

Tra i registri più rilevanti in un’architettura di calcolatore vi sono:

  • Registro dell’Istruzione (Instruction Register - IR): contiene l’istruzione attualmente in esecuzione.
  • Registro del Program Counter (PC): mantiene traccia dell’indirizzo della prossima istruzione da eseguire.
  • Registri Generali (General-Purpose Registers - GPR): utilizzati per memorizzare dati temporanei durante l’esecuzione delle operazioni aritmetiche e logiche.
  • Registro di Stato (Status Register o Flags Register): contiene informazioni sullo stato della CPU (es. risultato zero, overflow, carry).

Questi registri sono essenziali per la comunicazione tra i vari componenti della CPU e per il trasferimento rapido dei dati nel processo di esecuzione.

Percorso Dati

Il percorso dati rappresenta il cammino fisico e logico che i dati e le istruzioni seguono all’interno della CPU. Esso comprende vari componenti, come le unità logico-aritmetiche (ALU), i registri e i bus. La funzione principale del percorso dati è quella di gestire il flusso di informazioni tra i registri, la memoria e le unità di elaborazione.

Percorso Dati

  • ALU (Arithmetic Logic Unit): L’ALU è responsabile dell’esecuzione delle operazioni aritmetiche (come addizione e sottrazione) e logiche (come AND, OR, NOT).
  • Bus: è uno dei componenti essenziali in un sistema di calcolo e svolge il ruolo di canale di comunicazione tra i vari componenti hardware del computer, come la CPU, la memoria e i dispositivi di input/output (I/O). Esso permette il trasferimento di dati, indirizzi e segnali di controllo, assicurando che le informazioni possano circolare tra i diversi elementi del sistema. Un bus può essere diviso in:
    • Bus dati: trasporta i dati tra i vari componenti.
    • Bus indirizzi: trasmette l’indirizzo della cella di memoria o del dispositivo.
    • Bus di controllo: trasporta i segnali di controllo per coordinare le operazioni.

Il percorso dati deve essere progettato in modo ottimale per minimizzare il tempo di latenza e massimizzare la velocità di elaborazione.

Il Ciclo Fetch-Decode-Execute

Il ciclo fetch-decode-execute è il processo fondamentale attraverso il quale un processore esegue un programma. Questo ciclo è composto da quattro fasi principali:

  1. Fetch (Caricamento dell’Istruzione): In questa fase, l’indirizzo della prossima istruzione viene letto dal Program Counter (PC) e l’istruzione stessa viene caricata dalla memoria nel registro delle istruzioni (IR). Il PC viene poi incrementato per puntare all’istruzione successiva.

  2. Decode (Decodifica dell’Istruzione): L’istruzione viene decodificata all’interno della CPU per determinare quali operazioni eseguire e quali risorse (registri, ALU, memoria) sono necessarie. In questa fase, il processore identifica anche se devono essere caricati dati aggiuntivi.

  3. Execute (Esecuzione dell’Istruzione): L’ALU esegue l’operazione decodificata, che può essere un’operazione aritmetica, logica, o un trasferimento di dati tra registri o memoria. Il risultato dell’operazione viene poi memorizzato nel registro appropriato o inviato alla memoria.

  4. Write-back (Scrittura del Risultato): Il risultato dell’istruzione eseguita viene scritto nel registro di destinazione o in memoria, a seconda della natura dell’istruzione. Questo completa il ciclo.

Il ciclo fetch-decode-execute si ripete continuamente finché il programma non termina, e la velocità con cui questo ciclo viene eseguito è un fattore chiave nella determinazione delle prestazioni della CPU.

Architettura di Von Neumann vs Architettura Harvard

Le architetture di Von Neumann e Harvard sono due modelli distinti di organizzazione dei calcolatori, principalmente in termini di gestione della memoria. Entrambi hanno influenzato lo sviluppo dei computer moderni, ma si distinguono per il modo in cui separano o combinano memoria e dati.

Architettura di Von Neumann

L’architettura di Von Neumann, proposta da John von Neumann negli anni ‘40, è alla base della maggior parte dei calcolatori moderni. Si basa su alcuni concetti chiave:

Caratteristiche principali dell’architettura di Von Neumann:

  1. Memoria unificata:

    • Istruzioni e dati sono memorizzati nella stessa memoria.
    • Sia i programmi (istruzioni) che i dati risiedono nella stessa unità di memoria.
    • Questo significa che i dati e le istruzioni devono essere trasferiti attraverso lo stesso bus.
  2. Un singolo bus per dati e istruzioni:

    • L’architettura di Von Neumann utilizza un singolo bus (detto bus unificato) per il trasferimento di dati e istruzioni.
    • Questo può creare un “collo di bottiglia” (noto come Von Neumann bottleneck), poiché solo una operazione di lettura o scrittura può avvenire per volta (o si caricano dati o si caricano istruzioni).
  3. Esecuzione sequenziale delle istruzioni:

    • Le istruzioni vengono lette ed eseguite una alla volta, in modo sequenziale.
    • Questo ciclo è noto come ciclo fetch-decode-execute.

Vantaggi dell’architettura di Von Neumann:

  • Semplicità: Un singolo bus per dati e istruzioni rende il design dell’hardware più semplice.
  • Flessibilità: La CPU può accedere sia a istruzioni che a dati in qualsiasi momento, il che rende l’architettura adatta a una vasta gamma di applicazioni.

Svantaggi dell’architettura di Von Neumann:

  • Collo di bottiglia di Von Neumann: Il singolo bus per dati e istruzioni limita le prestazioni, poiché la CPU deve attendere che il bus sia libero per trasferire sia i dati che le istruzioni.

Architettura Harvard

L’architettura Harvard prende il nome dal Mark I, un calcolatore elettromeccanico sviluppato ad Harvard durante la Seconda Guerra Mondiale. Essa è differente dall’architettura di Von Neumann per via della separazione della memoria e dei bus per istruzioni e dati.

Caratteristiche principali dell’architettura Harvard:

  1. Memoria separata per istruzioni e dati:

    • Istruzioni e dati sono memorizzati in memorie separate.
    • Ogni memoria ha il proprio bus dedicato, il che significa che le istruzioni e i dati possono essere trasferiti simultaneamente.
  2. Bus separati per dati e istruzioni:

    • Ci sono bus separati per il trasferimento di istruzioni e di dati, permettendo operazioni parallele.
    • Questo elimina il collo di bottiglia di Von Neumann, poiché la CPU può caricare istruzioni e dati nello stesso momento.
  3. Maggiore velocità di esecuzione:

    • Poiché le operazioni su dati e istruzioni avvengono parallelamente, il processore può eseguire più rapidamente le istruzioni.

Vantaggi dell’architettura Harvard:

  • Prestazioni superiori: Grazie alla separazione delle memorie e dei bus, le operazioni possono avvenire in parallelo, migliorando le prestazioni generali del sistema.
  • Efficienza: Ideale per applicazioni specializzate che richiedono un’esecuzione rapida, come i microcontrollori o i sistemi embedded.

Svantaggi dell’architettura Harvard:

  • Maggiore complessità hardware: Avere memorie separate per dati e istruzioni e bus dedicati aumenta la complessità del design hardware.
  • Minore flessibilità: Il codice (istruzioni) e i dati non possono essere facilmente condivisi o scambiati tra le due memorie.

Confronto tra Von Neumann e Harvard

CaratteristicaVon NeumannHarvard
Memoria per dati e istruzioniUnificataSeparata
Bus per dati e istruzioniSingolo bus per entrambiBus separati per dati e istruzioni
PrestazioniMaggior rischio di collo di bottigliaMigliori prestazioni grazie al parallelismo
FlessibilitàMaggiore flessibilità e semplicitàMaggiore complessità nel design
ApplicazioniUtilizzata nella maggior parte dei calcolatoriUtilizzata nei microcontrollori e nei sistemi embedded