I moderni computer possono differire per velocità di calcolo, memoria utilizzata, linguaggi e programmi eseguibili, dispositivi di ingresso e uscita e altre caratteristiche. Tutti però si rifanno a un modello di architettura ben definito, chiamato macchina di Von Neumann, dal nome del matematico e informatico inglese che ha proposto tale modello per la costruzione di uno dei primi calcolatori della storia dell’informatica (l’EDVAC) a metà del secolo scorso. Un’architettura di un computer descrive quali sono le varie parti che lo compongono e in che modo collaborano per memorizzare, eseguire i programmi e generare i risultati di tale elaborazione. I componenti fondamentali di una macchina di Von Neumann sono i seguenti:
- CPU, o Central Processing Unit (Unità di Elaborazione Centrale, anche se si usa universalmente l’acronimo inglese).
- Memoria (detta anche memoria di sistema o memoria RAM, dall’acronimo Random Access Memory).
- Bus di sistema.
- Una o più interfacce di periferica. Una periferica è un’apparecchiatura che consente al computer di scambiare informazioni con il mondo esterno, mediante operazioni di ingresso (o lettura, verso il computer) e uscita (o scrittura), verso l’esterno.
- La memoria di massa (per esempio dischi magnetici e ottici), ovvero dispositivi esterni per la memorizzazione permanente dell’informazione.
La CPU è il “cervello” del computer, in quanto è l’unità in grado di leggere le istruzioni di un programma, interpretarle ed eseguirle. Nel modello di Von Neumann, questa sequenza di operazioni (lettura–interpretazione-esecuzione) viene fatta in serie, ovvero viene eseguita un’istruzione per volta. Un’istruzione è un’operazione elementare che può comportare il trasferimento di dati dalle varie parti del sistema (dalla memoria alla CPU, dalla memoria a una periferica, dalla CPU alla memoria ecc.) oppure la richiesta di eseguire un’operazione tra dati (operazioni logiche o aritmetiche).
La memoria RAM (o memoria centrale) è un dispositivo in grado di memorizzare in modo semipermanente (ovvero fino a che non si toglie la tensione al computer) sia i dati, sia le istruzioni del programma. È importante sottolineare questo fatto: nella macchina di Von Neumann non esiste una memoria separata per i dati e una per le istruzioni, ma entrambe risiedono nello stesso dispositivo. La memoria può essere vista concettualmente come una sequenza di celle elementari, in grado di contenere una parola (o word). La dimensione di una cella di memoria è sempre un multiplo in potenza di due di bit: valori tipici sono 8, 16, 32, 64 bit. Una memoria può essere vista quindi come una matrice, avente tante righe quante sono le celle (capacità della memoria) e tante colonne quante sono i bit della parola.
La caratteristica della memoria di una macchina di Von Neumann è che il modello è in grado di leggere il contenuto di una cella per volta, mediante l’operazione di indirizzamento: l’indirizzo di memoria è infatti la posizione della cella, ovvero la sua posizione relativa a partire dalla prima cella. Usando il modello a matrice, la prima riga della matrice (prima cella) ha indirizzo zero, la seconda uno ecc. Quindi l’indirizzo non è altro che l’indice di riga della matrice. Anch’esso espresso come numero binario, nell’operazione di indirizzamento viene copiato in un dispositivo speciale della CPU, detto registro degli indirizzi. Un registro è un dispositivo elettronico generalmente di capacità limitata (pochi bit o byte) in grado di memorizzare un dato binario per successive elaborazioni. A differenza della memoria, la sua lettura e la sua scrittura sono molto più veloci e generalmente viene utilizzato per scopi limitati e ben precisi. Per esempio, il registro degli indirizzi contiene sempre indirizzi di memoria e il suo contenuto è usato per accedere alla memoria nella posizione opportuna in base alla fase di lettura-interpretazione-esecuzione in atto nella CPU. La dimensione del registro degli indirizzi identifica anche la massima dimensione di memoria che la CPU è in grado di leggere. Infatti, se il registro degli indirizzi è a k bit, riuscirà a indirizzare al massimo 2k parole di memoria. Siccome la dimensione del registro degli indirizzi è fissa perché è un elemento elettronico interno alla CPU, esiste una dimensione massima della memoria che ogni processore è in grado di gestire (leggere/scrivere).
Le operazioni che possono essere fatte sulla memoria sono due: lettura e scrittura. Lettura significa che l’indirizzo della cella che si vuole leggere viene copiato nel registro degli indirizzi e al termine dell’operazione il contenuto della memoria all’indirizzo voluto viene copiato nel registro dei dati (un altro registro interno alla CPU). La scrittura è invece l’operazione opposta, ovvero il contenuto del registro dei dati viene copiato nella cella di memoria identificata dal dato presente nel registro degli indirizzi.
Il bus di sistema è la componente che permette la connessione e il trasferimento delle informazioni tra le varie parti del modello. Si tratta di un insieme di fili lungo i quali si trasmettono i bit. Dal punto di vista fisico, il collegamento è sempre presente tra tutte le componenti del modello, ma dal punto di vista logico, in un dato istante, solo il collegamento tra due componenti – quelle che colloquiano per scambiarsi i dati – è attivo. Tra le due unità collegate, una trasmette i dati e l’altra li riceve, ovvero la connessione è sempre unidirezionale. È la CPU che decide come pilotare il bus di sistema, per attivare la connessione corretta e il trasferimento dati.
Per capire come un generico programma possa essere eseguito su una macchina di Von Neumann, occorre considerare la rigida sequenzialità con cui questa operazione viene realizzata.
Le istruzioni di un programma vengono tradotte in operazioni elementari che la CPU è in grado di comprendere e realizzare. Tutte le operazioni elementari sono sincronizzate da un orologio di sistema (detto clock): ogni operazione è sincrona con la cadenza del clock. Nei computer moderni, la CPU è rappresentata dal dispositivo elettronico chiamato microprocessore e la frequenza di clock indica appunto il numero di operazioni elementari al secondo che il microprocessore è in grado di realizzare. Maggiore è tale frequenza (misurata in Hz, ovvero numero di cicli al secondo) maggiore è la “velocità” della CPU. I primi computer avevano una frequenza inferiore a 1 ciclo al secondo, mentre i moderni personal computer arrivano a frequenze di clock dell’ordine di GHz.
Le istruzioni, al pari dei dati, sono memorizzate in codice binario. Esse sono costituite da due parti: il codice operativo e gli operandi (uno o più). Per esempio, se devo sommare due numeri, il codice operativo sarà quello dell’operazione di “somma aritmetica” e gli operandi sono i due numeri che voglio sommare. Ogni processore è in grado di comprendere un numero finito di istruzioni codificate e tale insieme costituisce il set di istruzioni eseguibili. La codifica delle istruzioni e le convenzioni per identificare gli operandi costituiscono il linguaggio macchina del computer, che quindi è specifico per una data CPU (o, passando dall’astrazione del modello alla realtà, per un dato microprocessore).
Manuale di cultura generale – Informatica – L’architettura degli elaboratori – Continua