Architettura dell`elaboratore (modello di Von Neumann)

Transcript

Architettura dell`elaboratore (modello di Von Neumann)
Architettura dell'elaboratore (modello di Von Neumann)
La struttura (hardware) di un elaboratore comprende una Unità Centrale e delle Unità Periferiche.
L'Unità Centrale comprende una Memoria Centrale (che immagazzina informazioni) e un Processore (che elabora le informazioni
eseguendo le istruzioni di un programma).
Le Unità Periferiche o di Input/Output (I/O) consentono la comunicazione tra l'unità centrale e l'ambiente esterno. Può trattarsi di:
 Unità di interazione utente-sistema (es: mouse, tastiera, schermo, stampante, ecc.)
 Unità di memoria di massa (dischi magnetici, dischi ottici, nastri, ecc.)
 Unità di comunicazione (modem, schede di rete, ecc.).
L'architettura di Von Neumann è caratterizzata dal fatto che sia il programma in esecuzione (codice eseguibile) che i dati su cu esso
lavora devono essere memorizzati nella memoria centrale.
Il PROCESSORE (o CPU = Central Processing Unit) è a sua volta costituito da:



Una Unità di Controllo (CU: Control Unit). Essa sovrintende al funzionamento dell'intero processore dirigendone le
operazioni.
Una Unità Aritmetico-Logica (ALU: Arithmetic Logic Unit). L'ALU è in grado di eseguire semplici operazioni aritmetiche
(somma, prodotto, ecc.), logiche (AND, OR, ecc) e di confronto (uguale, maggiore, ecc.). I dati su cui opera la ALU devono
essere contenuti nei registri del processore.
Un insieme di Registri. I registri sono delle memorie di piccole dimensioni (normalmente da 8 a 64 bit ciascuno) ma ad
accesso molto veloce: essi contengono informazioni (dati, indirizzi o istruzioni) che la CPU preleva dalla memoria centrale
oppure informazioni che la CPU deve registrare nella memoria centrale. Alcuni registri sono di uso generale e sono
utilizzabili da un programma scritto da un utente programmatore. Di solito sono indicati con sigle come R1, R2, R3, ecc.
oppure AX, BX, CX, ecc. Altri registri hanno invece delle funzionalità speciali (es: Program Counter, Instruction Register,
Status Register, ecc.).
La MEMORIA CENTRALE (o anche: Working Memory o Short Term Memory,) è costituita da una sequenza di di locazioni (o
celle) di memoria, tutte di uguale dimensione. La dimensione di una cella è detta parola di memoria (memory word). Può essere di 1
byte oppure di 2, 4, 8 ecc. Ognuna di queste locazioni è distinta mediante un numero progressivo chiamato indirizzo di memoria.
L'indirizzo viene utilizzato dalla CPU per specificare in quale locazione deve essere effettuata una operazione di lettura o di scrittura.
Attenzione: non bisogna confondere l'indirizzo di una locazione di memoria con il suo contenuto. Ad esempio la cella di indirizzo 213 può
contenere in un certo momento il valore 25. Il contenuto può essere cambiato con una operazione di scrittura. L'indirizzo di una cella è
invece fisso.
La memoria centrale è realizzata in generale mediante moduli di RAM (Random Access Memory) ed è una memoria volatile. Una piccola parte
della memoria centrale è costituita da una ROM (Read Only Memory), che ha un funzionamento analogo a quello della RAM, ma che
immagazzina informazioni in modo permanente e non può essere scritta (modificata): tale memoria è destinata a contenere le istruzioni ed i dati
che devono essere sempre presenti nella memoria centrale e non devono mai essere modificati (ad esempio le istruzioni da eseguire al momento
dell'accensione dell'elaboratore). Varianti evolute della ROM sono le memorie PROM, EPROM, EEROM, ecc.
Il tempo di accesso ad un dato presente in una memoria RAM è sempre uguale indipendentemente da quale è la cella in cui il dato si trova. Ciò
non è vero per memorie di massa come dischi magnetici, dischi ottici, nastri magnetici. Inoltre la velocità di accesso alla memoria centrale è
molto superiore a quella dei dischi. I registri interni della CPU hanno un accesso a loro volta molto più veloce rispetto alla RAM. I computer di
oggi utilizzano anche la memoria cache, che è una memoria di transito piccola e veloce (più veloce ma anche più costosa della RAM) che serve
per rendere mediamente più rapido l’accesso ai dati contenuti nella memoria centrale. La tabella seguente riassume le caratteristiche tipiche di
alcune tipologie di memoria utilizzate nei personal computer.
Tipo di memoria
Registri della CPU
Memoria centrale
Dischi magnetci
Nastri magnetici
Tempo di accesso
< 10 ns
20 - 200 ns
20 – 30 ms
Diversi secondi
Capacità
< 1 KB
1 - 4 GB
50 – 500 GB
> 100 GB
Volatile
Sì
Sì
No
No
Nota:
ms = millisecondi = millesimi di secondo
= 10-3 sec
s = microsecondi = milionesimi di secondo = 10-6 sec
ns = nanosecondi = miliardesimi di secondo = 10-9 sec
KB = KiloByte = 210 Byte (1024 byte, cioè circa mille)
MB = MegaByte = 220 Byte (circa 1 milione)
GB = GigaByte = 230 Byte (circa 1 miliardo)
BUS
La comunicazione tra le diverse componenti di un elaboratore avviene attraverso un insieme di linee di collegamento dette BUS. In
base alla funzione svolta si possono distinguere tre tipi di bus: Bus Dati, Bus Indirizzi, Bus di controllo.
Il Bus Dati, bidirezionale, trasporta i dati che devono essere trasmessi tra il processore e la memoria centrale oppure tra il processore
ed una unità periferica (ad es: un disco). La dimensione (numero di linee) del bus dati determina la dimensione in bit del dato che può
essere scritto o letto con una singola operazione di lettura/scrittura (es: se il bus dati ha 16 linee si scrivono/leggono due byte per
volta).
Il Bus Indirizzi, unidirezionale, viene utilizzato per trasmettere l'indirizzo di una locazione di memoria centrale in cui il processore
deve scrivere o leggere un dato. L'indirizzo trasmesso può anche identificare una periferica con la quale il processore deve
comunicare. La dimensione del bus indirizzi determina lo spazio di memoria indirizzabile (es: se il bus indirizzi ha 20 linee, lo spazio
indirizzabile è di 220 celle, quindi se le celle sono di 1 Byte il totale è 1 MB).
Il Bus di Controllo, bidirezionale, trasporta informazioni di controllo necessarie per la gestione dell'attività elaborativa. Ad esempio
il bus di controllo contiene una linea indicata in genere con R/W il cui valore (0 o 1) indica se si deve effettuare una operazione di
lettura (R=Read) o di scrittura (W= Write).
LETTURA / SCRITTURA in memoria centrale
Per effettuare una operazione di lettura o scrittura di un dato in memoria centrale si utilizza un Registro Dati (o MBR=Memory
Buffer Register) e un Registro Indirizzi (o MAR=Memory Address Register). Le operazioni di lettura e scrittura avvengono nel
modo seguente.
Lettura:
 La CU pone nel registro indirizzi (MAR) l'indirizzo della locazione di memoria da cui si deve leggere il dato.
 La CU invia l’indirizzo alla memoria tramite il bus indirizzi. Un dispositivo apposito (selettore) attiva la linea collegata alla
locazione indirizzata.
 La CU invia alla memoria sulla linea R/W del bus di controllo un bit che indica il tipo di operazione da eseguire (R=Read).
 Il dato presente nella cella di memoria specificata viene inviato alla CPU tramite il bus dati e viene copiato nel Registro Dati
(MBR).
Scrittura:
 La CU pone nel Registro Dati (MBR) il dato da scrivere in memoria.
 La CU pone nel Registro Indirizzi (MAR) l'indirizzo della locazione in cui si deve scrivere il dato.
 La CU invia l’indirizzo alla memoria tramite il bus indirizzi. Un dispositivo apposito (selettore) attiva la linea collegata alla
locazione indirizzata.
 La CU invia alla memoria sulla linea R/W del bus di controllo un bit che indica il tipo di operazione da eseguire (W=Write).
 Il dato presente nel Registro Dati (MBR) viene inviato alla memoria tramite il bus dati e viene copiato nella cella specificata.
Attenzione: il trasferimento di un dato avviene sempre mediante copia. Pertanto, ad esempio, una operazione di lettura non modifica mai la cella di
memoria letta.
Funzionamento del processore (ciclo di FETCH - EXECUTE)
Un processore esegue dei programmi. Un programma (codice eseguibile) è costituito da una sequenza di istruzioni macchina che il
processore è in grado di eseguire una per volta. Le istruzioni devono essere eseguite nell'ordine in cui si trovano, tranne quando si
incontrano alcune speciali istruzioni che alterano la sequenza, causando ad esempio un salto ad un dato punto del programma. Per
intraprendere l'esecuzione di un programma è necessario che questo risieda in un'area della memoria centrale. Lo stesso vale per i dati
che devono essere elaborati dal programma. Programma e dati vengono caricati in memoria da un apposito modulo (programma) del
Sistema Operativo, detto loader (caricatore), che li preleva di solito da una memoria di massa (ad esempio dal disco fisso).
Per eseguire un programma la CPU preleva una per una le istruzioni che compongono il programma e le esegue fino a quando il
programma non è terminato. Il ciclo di operazioni svolte dalla CPU per eseguire un programma è detto ciclo di FETCH-EXECUTE
(preleva - esegui) e costituisce la normale attività svolta sempre e continuamente dal processore, dal momento dell'accensione fino
allo spegnimento della macchina.
Il ciclo Fetch-Execute fa uso di due speciali registri:
 Program Counter (PC): contiene l'indirizzo della cella di memoria in cui si trova l'istruzione da prelevare (se l'istruzione occupa
più celle consecutive, contiene l'indirizzo della prima di queste celle ).
 Instruction Register (IR): contiene il codice dell'istruzione prelevata dalla memoria.
Il ciclo Fetch-Execute avviene ripetendo in successione le seguenti operazioni:


Fase di Fetch. Viene prelevata dalla memoria centrale (all'indirizzo indicato dal PC) l'istruzione da eseguire. Tale istruzione
viene copiata nel Registro Istruzione (IR). Subito dopo aver prelevato l'istruzione, il PC viene incrementato in modo da
puntare all'istruzione successiva (l'incremento deve essere pari al numero di celle occupate dall'istruzione).
Fase di Execute. Viene decodificata l'istruzione presente nell'IR (fase di Decode) e viene impartita la sequenza di comandi
elementari necessari per eseguire l'istruzione stessa.
L'esecuzione dell'istruzione può modificare il contenuto di uno o più registri della CPU oppure di una o più locazioni di memoria
centrale. In alcuni casi l'istruzione può modificare il contenuto del registro PC (es: istruzioni di JUMP) causando così un salto ad
un'istruzione specifica. Le condizioni che si verificano durante l'esecuzione dell'istruzione vengono memorizzate come flag (unità di
informazione binaria, cioè 0=falso o 1=vero) in un apposito registro della CPU detto Status Register (SR) o Registro dei Flag. Ad
esempio ci sono flag per indicare il verificarsi di condizioni di overflow (traboccamento), carry (riporto), zero (l'istruzione ha avuto 0
come risultato), negatività (il risultato è stato negativo), ecc.
Attenzione: non bisogna confondere la funzione svolta dai registri Program Counter e Instruction Register. Il Program Counter contiene l'indirizzo di una
locazione di memoria nella quale si trova una istruzione del programma. Nella fase di fetch l'istruzione puntata viene copiata nel registro Instruction
Register. Pertanto il PC contiene sempre l'indirizzo (puntatore) di una istruzione, mentre l'IR contiene invece una istruzione vera e propria.
INTERRUZIONI (Interrupt)
Il ciclo di esecuzione di un programma può subire delle interruzioni (interrupt) causate da richieste provenienti da dispositivi periferici (unità di I/O,
dischi, ecc.) o anche da programma. Ciò avviene ad esempio quando si preme un tasto della tastiera oppure si fa un click con il mouse. La periferica
invia una richiesta di interrupt alla CPU su una apposita linea del bus di controllo. La CPU di norma interrompe momentaneamente l'esecuzione del
programma attuale per passare ad eseguire le istruzioni necessarie per servire l'interrupt (es: acquisire un carattere digitato, rilevare la posizione del
mouse, ecc). Successivamente tornerà ad eseguire il programma interrotto (il meccanismo degli interrupt sarà approfondito il prossimo anno).
CLOCK
Il lavoro della CPU è cadenzato da un apposito dispositivo detto clock che fornisce un segnale elettrico ciclico di temporizzazione (onda quadra). La
velocità di clock si misura in Hertz (1HZ = un ciclo al secondo) o multipli di Hertz (es: 1 Mhz = 1 milione di cicli al secondo, 1 GHz = 1 miliardo di
cicli al secondo) e fornisce un'indicazione della velocità di lavoro di una CPU. Ogni istruzione macchina viene eseguita in un numero ben preciso di
cicli di clock. Un'altra misura utilizzata per i processori è il MIPS (milioni di istruzioni per secondo).