Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
CELLE ADDIZIONATRICI
Una cella addizionatrice è un modulo combinatorio formato da 3 ingressi e 2
uscite. Riceve in input 2 iesimi bit di due parole binarie da sommare e il bit di
riporto della iterazione precedente. Alla prima iterazione il riporto vale 0.
CIRCUITI ALU
I circuiti ALU sono i protagonisti nel calcolo delle divisioni e delle moltiplicazioni,
grazie ai circuiti divisori e moltiplicatori.
Iniziamo col considerare il prodotto di un operando “c” di N cifre binarie per un
operando “b” rappresentato da un bit. Quindi:
Se b = 0 ⇒ c*b = 0; Se b = 1 ⇒ c*b = c
Dal punto di vista circuitale, potremmo implementare questo risultato mediante
N porte AND a 2 ingressi, ciascuna delle quali riceverà una cifra diversa da c e
l’unica di b.
Ogni funzione produrrà in uscita una cifra del prodotto.
Prendendo in considerazione il caso precedente, con un operando B espresso
su M bit. B può essere espresso come la somma della sua prima cifra da destra
con le successive generiche b , ciascuna delle quali moltiplicata per 2 , dove i
i i
individua l’indice delle M cifre, a partire da 0 fino ad M - 1.
M-1 2 1 0
B = 2 *b , … + 2 *b + 2 *b + 2 *b
M-1 2 1 0
Nel caso di M = 2 bit, quindi, ad esempio, il prodotto a*B può essere
decomposto in A*b +
0
A*b *2. L’operazione di moltiplicazione per 2 viene realizzata mediante lo
1
scorrimento della
rappresentazione del numero di una cifra verso sinistra.
Possiamo pertanto immaginare un circuito moltiplicatore tra due numeri di N
bit ed M bit come un circuito che fa solo uso di circuiti sommatori e funzioni
AND.
Un circuito moltiplicatore mantiene questa logica: consiste in un registro
prodotto inizializzato nei suoi LSB (Least Significant Bit) ovvero bit con peso
pag. 18
minore, con il moltiplicatore, un registro moltiplicando ed un sommatore,
comandati dalla unità di controllo.
L’unità di controllo (CU) esegue ciclicamente le seguenti operazioni:
Controlla se il LSB del registro prodotto (RP) è uno, somma agli MSB
(Most Significant
Bit) ovvero bit con peso maggiore, il contenuto del registro moltiplicando;
Scorre il contenuto del registro prodotto sulla destra.
Il circuito divisore consiste di un registro resto/quoziente inizializzato con il
dividendo, un
registro divisore ed un sommatore, il tutto comandato dalla unità di controllo.
La divisione viene eseguita testando se il divisore è contenuto 0 o 1 volte nei
resti parziali man mano che si procede nell'operazione. Il test di contenimento
può essere effettuato sottraendo dal resto parziale il divisore: se il risultato è 1
allora il bit di quoziente è 1, altrimenti 0.
Modello di Von Neumann
Con l'espressione architettura di von Neumann ci si riferisce a uno schema di
progettazione di calcolatori elettronici che prende nome dal matematico John
von Neumann. Il modello di Von Neumann è quanto di più prossimo alla reale
struttura di un calcolatore; può essere considerato il modello base di tutti i
moderni calcolatori.
Lo schema di Von Neumann è costituito da 4 componenti fondamentali:
Memoria Centrale : Memorizza e fornisce l’accesso a dati e programmi.
Unità Centrale di Elaborazione (CPU) : Esegue istruzioni per
l’elaborazione dei dati e svolge anche funzioni di controllo.
Interfacce di Ingresso e Uscita (o periferiche).
Bus: Trasferisce dati ed informazioni di controllo tra le componenti
suddette. pag. 19
BUS
L’obbiettivo principale del bus è quello di permettere lo scambio di informazioni
tra le varie componenti funzionali del calcolatore. Esso dunque svolge alcune
funzioni:
Trasferimento dei dati e delle informazioni di controllo;
-L’utilizzo di un BUS favorisce la modularità e l’espandibilità del
calcolatore;
Il bus di sistema assicura l’interconnessione tra gli elementi della
macchina di Von Neumann;
Tutti i trasferimenti avvengono attraverso il BUS.
I programmi eseguiti dai calcolatori sono sequenze finite di istruzioni. Le
istruzioni da eseguire sono contenute in locazioni consecutive di RAM, a partire
da un indirizzo iniziale. Le istruzioni sono codificate da stringhe binarie di
lunghezza finita e costante.
E’ possibile distinguere le istruzioni in diverse categorie:
Accesso alla memoria, atte al trasferimento di informazioni tra RAM e
CPU.
Aritmetico-logiche, che denotano operazioni di elaborazione combinatoria
e logica sugli operandi.
Controllo di flusso, in grado di alterare l’ordine di esecuzione delle
istruzioni stesse.
Input/output, idonee al trasferimento di informazioni sia in ingresso che in
uscita.
La CU esegue ogni istruzione in una sequenza di microeventi, e dunque
microfasi successive che comportano fetch ed execute. pag. 20
Nella fase di Fetch si inserisce l'indirizzo della prima istruzione nel Program
Counter. Dopodichè la CU ricopia il contenuto del PC nel MAR e viene effettuato
un accesso in lettura a quell'indirizzo. Successuvamente il dato prelevato
dall'indirizzo, cui si è acceduto, viene conservato in MDR ed infine il contenuto
di MDR viene ricopiato in IR. Nel frattempo PC si è, in maniera automatica,
aggiornato alla locazione successiva.
Mentre nella fase di Execute i registri verranno caricati con le operazioni da
effettuare e la CU invia alla ALU il comando per l'esecuzione dell’operazione.
Infile l’ALU la esegue.
Architettura MIPS
microprocessor without interlocked pipeline stages).
MIPS (
L'architettura MIPS è di tipo Load-and-Store.
La maggioranza delle istruzioni MIPS operano tramite registri interni al
processore.
Esempio:
add $t0, $t1, $t2
Somma $t1+$t2 e mette il risultato in $t0
Per questo motivo:
LOAD: i dati da elaborare devono essere prelevati dalla memoria ;
STORE: i risultati devono essere salvati in memoria;
Esistono 3 formati base di istruzioni MIPS:
Formato R (istruzioni aritmetico-logiche);
Formato I (istruzioni di salto condizionato e di trasferimento dati dalla/alla
RAM e dai/ai registri CPU);
Formato J (salto incondizionato).
FORMATO R pag. 21
op: codice operativo
rs: primo operando sorgente (registro)
rt: secondo operando sorgente (registro)
rd: registro destinazione
shamt: shift amount (per operazioni di scalamento)
funct: seleziona una variante specifica dell'operazione base definita nel campo
op. Per esempio: campo funct per le istruzioni add, sub, and, or, slt
FORMATO I
rs:
nel caso di istruzioni immediate: registro sorgente
nel caso di lw e sw: registro base al cui contenuto va sommato address
rt:
nel caso di istruzioni immediate: registro destinazione
nel caso di lw e sw: primo registro che compare nell'istruzione (registro
destinazione per lw e registro sorgente per sw)
FORMATO J
I 26 bit all'interno dell'istruzione jump contengono un indirizzo in parole, questi
26 bit vengono concatenati con i 4 bit più significativi del PC. L'indirizzo in byte
si ottiene moltiplicando per 4 (ovvero, concatenando altri due bit 00) per
ottenere un indirizzo a 32 bit. pag. 22
Le architetture MIPS supportano l’indirizzamento immediato, con riferimento a
registro, spiazzato rispetto ad una base, relativo al Program Counter,
pseudodiretto.
Le fasi di esecuzione di una singola istruzione possono arrivare a cinque:
Caricamento dell’istruzione (Fetch) ed incremento del PC;
Decodifica dell’istruzione, lettura dal/dai registri sorgente e calcolo
dell’indirizzo di salto;
Calcolo del risultato;
Scrittura del risultato nel registro destinazione ed accesso alla memoria;
Scrittura del risultato in memoria.
PIPELINING MIPS
Il Pipelining è una tecnica per migliorare le prestazioni del processore basata
sulla sovrapposizione dell’esecuzione di più istruzioni appartenenti ad un flusso
di esecuzione sequenziale.
Il lavoro svolto da un processore con pipelining per eseguire un’istruzione è
diviso in passi:
Entrano da un’estremità della pipeline;
Vengono elaborate dai vari stadi secondo l’ordine previsto;
Escono dall’altra estremità della pipeline.
Le istruzioni eseguite nella pipeline sono dipendenti tra loro possono nascere
problemi dovuti a conflitti di dati.
Ci sono due tipi di tecniche per la soluzione di questo conflitto:
Tecniche di compilazione del codice:
Inserimento di istruzioni nop (no operation).
Scheduling o riordino delle istruzioni in modo da impedire che istruzioni
correlate siano troppo vicine.
- Il compilatore cerca di inserire tra le istruzioni correlate (che
presentano dei conflitti) delle istruzioni indipendenti dal risultato delle
precedenti operazioni, facendo così scomparire tutti i conflitti;
- Quando il compilatore non riesce a trovare istruzioni indipendenti deve
inserire istruzioni nop.
Tecniche di tipo hardware:
- Inserimento di “bolle” o stalli nella pipeline. pag. 23
Input/Output
Con il termine Input/Output (I/O) intendiamo tutte le interfacce messe a
disposizione dal sistema operativo, o più in generale da qualunque sistema di
basso livello, ai programmi per effettuare uno scambio di dati o segnali con altri
programmi.
Oltre ai componenti processore e memoria, il terzo elemento chiave di un
computer è un insieme di moduli di I/O. Ogni modulo è interconnesso con il
processore e la memoria e controlla uno o più componenti esterni. Il modulo I/O
interagisce con il resto del computer per mezzo delle tecniche di:
I/O programmato;
I/O ad interruzione;
I/O con accesso diretto alla memoria.
I/O PROGRAMMATO
Durante l’intero svolgimento dell’opererazione di I/O, il processore è
direttamente impegnato ad eseguirne le operazioni operazioni.
I/O ad INTERRUZIONE (INTERRUPT)
Basato sul meccanismo delle interruzioni interruzioni. Il processore comanda
l’operazione.
I/O con accesso diretto alla memoria
Le unità di I/O hanno capacità di procedere autonomamente al trasferimento
dati da e verso la e verso la memoria 9. Il processore non interviene nel
trasferimento ed a fine operazione viene informato.
La CPU, dopo aver predisposto il controller all’esecuzione dell’I/O, si ferma e si
mette ad interrogare il registro di stato della periferica in attesa che il ready
but assuma un determinato valore.
Ci sono sia vantaggi che svantaggi nelle tecniche di Input/Output:
VANTAGGIO: Risposta veloce al ready bit.
SVANTAGGIO: CPU bloccata in stato di: busy waiting o spin lock.
CENNI DI MULTIPROGRAMMAZIONE
Le tecniche di gestione di I/