vuoi
o PayPal
tutte le volte che vuoi
Il trasferimento si divide in due fasi:
Programmazione: la CPU modifica i registri IOR e DC inserendo l’indirizzo di memoria
associato al trasferimento e in DC il numero di parole da trasferire, inoltre la CPU informa il
DMA della direzione di trasferimento. Dopo la programmazione il DMA invia un segnale di
DMA request alla CPU per prendere il controllo del bus, la CPU appena è pronta a rilasciare
il bus invia un segnale di Acknowledge e rilascia il bus, così il DMA diventerà master del bus
e potrà iniziare il trasferimento. Durante il trasferimento ad parola trasferita avremo un
aggiornamento di DC e IOR, per interrompere temporaneamente il trasferimento il DMA
disattiva la linea di richiesta e di conseguenza la CPU disattiva il segnale di Acknowledge.
Quando il trasferimento è terminato il DMA invia un interrupt alla CPU
2. Si descrivano le differenti soluzioni di arbitraggio di un bus elencandone
vantaggi e svantaggi.
Per poter gestire l’arbitraggio di un bus abbiamo differenti soluzioni quali:
Distribuito: Preso come esempio il bus SCSI aventi 8 linee di dato, ogni modulo che può
diventare Master è connesso ad una linea di dato. Ogni linea di dato ha una propria priorità
che va diminuendo scendendo nell'ordine delle linee DB7 > DB0. Quando il bus è libero, Bus
Busy a 0, i moduli possono fare richiesta di diventare master alzando propria la linea di dato.
Il master sarà il modulo associato alla linea con priorità maggiore
Svantaggi: priorità statica, Vantaggi: Tollerante ai guasti, costo medio
Daisy chain: In questo caso consideriamo n moduli che possono fare richiesta per diventare
master, un arbitro, e 3 linee di controllo, bus busy - bus request - bus grant. Quando il bus
busy è a 0, i moduli possono fare richiesta all’arbitro, dopo che l’arbitro ha ricevuto la
richiesta attiva il bus grant verso il primo modulo modulo, se è effettivamente il primo ad aver
fatto richiesta, diventerà master, in caso contrario attiverà il bus grant verso il modulo
successivo e così via.
Svantaggi: Poco tollerante ai guasti, lento, priorità statica
Vantaggi: Poco costoso
Polling: In questo caso considerati n moduli collegati ad un arbitro e 2+logn linee di controllo.
Quando il bus busy è a 0 le varie unità possono richiedere l’accesso al bus attivando il bus
request, quando l’arbitro riceve la richiesta scandisce i vari moduli mettendo sulle linee
POLL COUNTER l’identificativo di ciascuna, se l’unità aveva fatto richiesta mette il bus busy
a 1 e prende il controllo del bus, in caso contrario non fa nulla e l’arbitro passa all’unità
successiva
Svantaggi: Costo medio
Vantaggi: Tollerante ai guasti, priorità dinamica, velocità media
RIchieste indipendenti: Formato da n moduli collegati ad una logica, ogni modulo ha il
proprio bus grant e proprio bus request, avremo quindi 1 + 2n linee di controllo, l’arbitro è il
più complesso visto fin ora, infatti si baserà sulla priorità delle linee di bus request ricevute,
attivando il bus grant corrispondente
Svantaggi: Più costoso
Vantaggi: Tollerante ai guasti, Priorità dinamica, Velocità massima
3. Si illustri un esempio di articolazione in stadi di un’architettura pipeline
(spiegando la funzione di ciascuno stadio) e si descrivano le principali cause
di stallo e le principali contromisure software.
L'architettura a pipeline è l’equivalente elettronico della catena di montaggio, ogni istruzione
è suddivisa in stadi e ogni modulo del processore si occupa di eseguire uno stadio ben
definito. Ogni processore può essere progettato avente stadi diversi ad esempio il Mips ha 5
stadi, l’Arm invece ne ha 4. Considerando quest’ultimo caso ogni istruzione è suddivisa in 4
stadi ( Fetch (caricamento delle istruzioni dalla memoria), decode ( decodifica delle istruzioni
precedentemente caricate), operate ( svolgimento di tali operazioni ), write ( scrittura sul
registro di destinazione) ). Idealmente ad ogni colpo di clock viene eseguito uno stadio di
una determinata istruzione e contemporaneamente entra una nuova istruzione in pipeline,
cosicché i moduli possano lavorare in parallelo, in questo modo avremo un CPI = 1.
Nella realtà il CPI è più alto di uno perché sorgono problemi che limitano la velocità di
questo processo:
● Uno degli stadi perde più di un periodo di clock per essere eseguito, in questo caso
tutti gli stadi a valle vengono bloccati (stallo) e quelli a monte continuano a lavorare
per smaltire i dati dello stadio critico.
● Dipendenze fra dati: quando i dati di due istruzioni consecutive sono dipendenti tra
loro c’è bisogno di un meccanismo che rilevi tale dipendenza e che blocchi
temporaneamente l’esecuzione della seconda istruzione fino a che la prima non
abbia terminato lo stadio di write
● Istruzioni di salto: quando è presente un’istruzione di salto bisogna svuotare la
pipeline delle istruzioni che erano entrate ma che a causa del salto adesso non
servono più
Per introdurre questi stalli nel sistema si utilizzano soluzioni HW e SW.
Le soluzioni software consistono nell’introduzione di NOP apposite nel codice da parte del
compilatore. ESAME 11/02/2020
1. Si consideri un sistema a processore che utilizza un DMA Controller per
gestire la comunicazione con un dispositivo di output. Si disegni lo schema di
connessione tra CPU, DMA Controller, memoria e dispositivo periferico,
riportando i relativi segnali di interconnessione. Si descrivano le operazioni
eseguite dal sistema a partire dal momento in cui esso programma il DMA
Controller per eseguire il trasferimento di un blocco di dati dalla memoria al
periferico e fino al termine dell’operazione di trasferimento, assumendo che
venga utilizzato il meccanismo del trasferimento a blocchi (burst transfer).
Il DMA viene usata per il trasferimento di grosse moli di dati, si interfaccia con il bus e la
CPU con la quale condivide due segnali, DMA request, DMA Acknowledge. Il trasferimento
si articola in due fasi, la prima è la programmazione, dove la CPU scrive i registri di IOR e
DC e fornisce al DMA l’indirizzo di memoria e il numero di parole da trasferire e la direzione
del trasferimento. La seconda fase è quella del trasferimento dove la DMA riceve la richiesta
di trasferimento dalla periferica, attiva verso la CPU il segnale di DMA request, la cpu allora
in questo caso, una volta finito il proprio lavoro,libererà il bus e tramite il segnale di DMA
Acknowledge permetterà al DMA di iniziare il trasferimento, in questo caso utilizzerà l’intero
bus per tutta la durata del trasferimento, questo è il metodo più veloce ma meno efficiente,
perché il bus sarà occupato dal DMA e la CPU non potrà usarlo.
2. Si descrivano le caratteristiche di un processore RISC.
I RISC, come ben sappiamo, hanno un ridotto set di istruzioni ma un elevato numero di
registri, implementano architettura a pipeline e idealmente riescono a completare ciascuna
istruzione in un singolo periodo di clock, il CPI è pari a uno anche se dato che può accadere
che un istruzione utilizzi più di un ciclo di clock. La pipeline è l’equivalente alla catena di
montaggio elettronica, dove idealmente ogni istruzione è suddivisa in stadi e ogni modulo
esegue sempre lo stesso stadio, nei processori ARM si hanno 3 e in quelli MIPS se ne
hanno 5, tra i vari moduli addetti ai vari stati abbiamo dei registri utili per la sincronizzazione.
In un modello a pipeline infatti può accadere che si abbiano degli stalli, infatti per ovviare al
problema relativo al miss di qualche istruzione si hanno un numero maggiore di registri in cui
vengono caricate più istruzioni durante la fase di fetch, questo prende il nome di coda delle
istruzioni. Altri problemi che potrebbero mandare in stallo la pipeline sono: dipendenze tra
dati e istruzioni di salto che potrebbero far svuotare la pipeline e quindi ritardarne il normale
ciclo di lavoro. Per ovviare a questo problema esistono delle soluzioni HW(Logica che rileva
eventuali istruzioni di salto o eventuali dipendenze per creare stalli appositi) e delle soluzioni
SW (Istruzioni NOP da parte del compilatore)
3. Si disegni l’architettura di un’unità di controllo microprogrammata che utilizza
la microprogrammazione orizzontale e se ne descriva il funzionamento.
Assumendo che la memoria di microcodice sia composta da 250 parole da 180
bit ciascuna e che non esistano microistruzioni di salto, si dimensionino il PC
e il IR.
Un’unità di controllo microprogrammata è composta da una memoria di microcodice
collegata a due registri il micro-IR e micro-PC, inoltre è presente al suo interno anche una
logica per la generazione degli indirizzi. Nella memoria di microcodice sono presenti per ogni
riga i segnali di controllo da attivare per ogni operazione ( la memoria non sarà
eccessivamente grande se il processore è RISC dato che ha un set di istruzioni ridotto), la
logica che genera gli indirizzi comunica con l’esterno e con il micro-IR e a seconda dei suoi
segnali di ingresso genererà l’indirizzo corretto e lo manderà al micro-PC, cosicchè la
memoria lo possa prelevare e accedere alla corretta linea. Rispetto alla
microprogrammazione verticale è più efficiente ma in quest’ultimo caso si risparmia in
termini di dimensioni della memoria di microcodice.
Il micro-PC sarà composto da 8 bit e quindi di conseguenza anche gli indirizzi per accedere
in memoria di microcodice saranno su 8 bit.
Nel micro-IR è su 180 bit dato che le parole sono su 180 bit
ESAME 20-09-2019
1. Si disegni lo schema di connessione tra CPU, Interrupt Controller e dispositivi
periferici, riportando i principali segnali di interconnessione. Si descrivano le
operazioni eseguite da una CPU a partire dal momento in cui un dispositivo
periferico esterno manda un segnale di richiesta di interrupt e sino al momento
in cui inizia l’esecuzione della Interrupt Service Routine corrispondente a tale
richiesta.
Lo schema è composto da una CPU, collegata all’interrupt controller ( IC ), quest’ultimo è
collegato a tutte le periferiche. Quando una periferica vuole richiedere un interrupt alla CPU
manda la richiesta all’interrupt controller che ha il compito di inoltrare la richiesta alla CPU e
inoltre gestire eventuali richieste contemporanee. Una volta che la CPU ha terminato
l’operazione corrente manda un segnale di interrupt acknowledge verso la periferica (
passando sempre per IC ), a questo punto la periferica invia alla CPU il proprio identificativo
e attraverso quest’ultimo la CPU farà accesso all’interrupt vector table ( u