Interfacciamento
Processore – dispositivi di I/O
1
Gestione delle operazioni di I/O
Caratteristiche dei dispositivi di Ingresso/Uscita
Tipo
Dischi Magnetici
Nastri Magnetici
Stampante Seriale
Stampante Parallela
Terminali CRT
Convertitori analogico-digitali
USB 1.0
USB 2.0
Codice
Byte
Byte
Byte
Byte
Byte
Parola 8-16 bit
Byte
Byte
Velocità di scambio
Fino a 300 Mcar/sec
Fino a 30 Mcar/sec
200 – 1200 car/sec
1K – 100K car/sec
300 – 19,2K car/sec
10-10M parole/sec
1,5Mcar/sec
60Mcar/sec
2
Evoluzione delle prestazioni del
sottosistema di I/O
• Incremento Prestazioni CPU: 60% ogni anno
• Le prestazioni dei sistemi di I/O system sono tipicamente (dischi,
stampanti etc.. ) limitate da ritardi meccanici
< 10% ogni anno (IO per sec)
• Legge di Amdahl:
S
1
- S è lo speed-up effettivo
- f è la frazione di lavoro non dipendente dall’I/O
- K è lo speed-up della modalità “veloce”
f
K
• Lo speed-up di un sistema è limitato dal componente più lento:
10% I/O & 10x CPU (f=0,9;k=10) => ≃5x Performance (- 50%)
10% I/O & 100x CPU (f=0,9;k=100)=> ≃10x Performance (- 90%)
(1  f ) 
• Il sottosistema di I/O rappresenta un collo di bottiglia:
< frazione di tempo in cui la CPU è effettivamente attiva
< efficienza delle CPUs più veloci
3
Possibili connessione tra CPU e dispositivi di
Ingresso/Uscita
Architettura a due bus: bus di memoria distinto dal bus di I/O
MEM. DATA BUS
MEM. ADDRESS BUS
MEM. CONTROL
BUS
M1
…
Mk
CPU
I/O DATA BUS
I/O ADDRESS BUS
I/O CONTROL
BUS
I/O1
…
I/Oh
4
Possibili connessione tra CPU e dispositivi di
Ingresso/Uscita
Architettura ad un solo bus
DATA BUS
ADDRESS BUS
CPU
CONTROL BUS
M1
…
Mk
I/O1
…
I/Ok
5
Tipi di interazione tra CPU e dispositivi esterni
- Previste dai programmi eseguiti nella CPU
(I/O programmato)
- Su richiesta esterna
- Gestite da processori dedicati (canali)
Esempi quotidiani di interazione
I/O programmato:
- controllo della cottura della pasta
- ricevimento studenti
su richiesta esterna:
- ricezione di una telefonata
- ricezione di una lettera
gestite da processori dedicati
- gestione delle comunicazioni tramite un servizio di segreteria
(persona dedicata)
6
Tipi di interazione tra CPU e dispositivi esterni
che studieremo
q Previste dai programmi che vengono eseguiti nella CPU
(I/O programmato):
- modalità busy waiting, implementata:
i. a firmware
ii. a software
- modalità polling
q
q
Su richiesta esterna:
- interruzione
Gestite da processori dedicati (canali)
- Direct Memory Access Controller (DMAC)
7
“Richiamo” INTERFACCIA Sistemi Digitali Complessi
(per supportare protocollo di handshaking)
UTx
URx
RDY1
Dato pronto
RDY2
FF1
FF2
ck1
URx
ck2
RRx
ck2
ck1
ck1
UTx
WRITE,RDY1=1
ACK2=0
Wait ACK2=1
Wait RDY1=1
Len2
RTx
Len1
ack1
Initial values: RDY1=0, ACK2=0
ack2
FF3
RDY1=0
READ, ACK2=1
Wait ACK2=0
Wait RDY1=0
Dato letto
FF4
ck2
8
Cosa succederebbe se si
rimuovessero le “wait”?
UTx
Sovrascrivo
prima che
la lettura
sia
avvenuta…
URx
WRITE,RDY1=1
ACK2=0
Wait ACK2=1
Wait RDY1=1
RDY1=0
READ, ACK2=1
Wait ACK2=0
Wait RDY1=0
9
Cosa succederebbe se si
rimuovessero le wait?
UTx
Al ciclo successivo
dopo aver scritto
potrei trovare
ACK=1 dal ciclo
precedente, senza che
la lettura del nuovo
valore sia avvenuta:
SOVRASCRIVO!
URx
WRITE,RDY1=1
ACK2=0
Wait ACK2=1
Wait RDY1=1
RDY1=0
READ, ACK2=1
Wait ACK2=0
Wait RDY1=0
10
Che succederebbe se si
rimuovessero le wait?
UTx
URx
WRITE,RDY1=1
ACK2=0
Wait ACK2=1
Wait RDY1=1
RDY1=0
READ, ACK2=1
Wait ACK2=0
Wait RDY1=0
Potrei leggere
prima che la
scrittura sia
avvenuta!
11
Che succederebbe se si
rimuovessero le wait?
UTx
URx
WRITE,RDY1=1
ACK2=0
Wait ACK2=1
Wait RDY1=1
RDY1=0
READ, ACK2=1
Wait ACK2=0
Wait RDY1=0
Potrei leggere 2
volte
lo stesso
valore!
12
Protocollo di HandShaking
Utx
URx
1: datoRTx, 1FF1;
1: 0FF4;
2: if ack1=0, then vai a 2;
2: if RDY2=0, then vai a 2;
3: 0FF1;
3: RTxRRx, 1FF4;
4: if ack1=1, then vai a 4;
4: if RDY2=1, vai a 4 ;
5: i+1i;
5: i+1i;
6: if iN, vai a 1
6: if iN, vai a 1
13
Sequenze di microistruzioni eseguite da UTx e URx durante il
protocollo di comunicazione
1
dato
1
1
RTx
FF1
ACK1=1
NO
SI
0
2
FF1
ACK1=0
NO
RTx
1
RRx
FF4
NO
RDY2=0
SI
SI
3
FF4
RDY2=1
NO
SI
2
0
i+1
i=N
SI
i
3
NO
i+1
i=N
i
NO
SI
14
“Altra” INTERFACCIA di Sistemi Digitali
Complessi
(per supportare protocollo di handshaking)
UTx
ack1
D
FF1
URx
Q
ck1
S
Q
sem
R
D
ck2
FF2
Len1
RRx
Len2
RTx
ck1
RDY2
ck2
15
Sequenze di microistruzioni eseguite da UTx e URx durante il
protocollo di comunicazione
1
dato
1 Attesa sul sem
RTx
Set sem
NO
RDY2=1
SI
2 Attesa sul sem
ACK1=0
2
RTx
RRx
Reset sem
NO
SI
3
i+1
i=N
SI
i
3
NO
i+1
i=N
i
NO
SI
16
I/O programmato INTERFACCIA DISPOSITIVI di I/O
(per supportare protocollo di handshaking, implementato a firmware)
Schema di Interfaccia per l’input tra PD32 e un solo Sistema Digitale Complesso
CPU
DEV
R
32 bit
I/O
DR
SCA
E
G
LD I/O DR
I/O RD
SCO
WAIT
R
S
STATUS
Q
Q
SCO
17
Temporizzazione dei segnali
T1
T2
TW TW T3
T1
I/ORD
T2
WAIT
DATO
WAIT
TW
WAIT
dato
LD I/ODR
18
T3
I/O programmato INTERFACCIA DISPOSITIVI DI I/O
(per supportare protocollo di handshaking, implementato a firmware)
Schema di Interfaccia per l’output tra PD32 e un solo Sistema Digitale Complesso
I/O
AR
I/O
R
32 bit
DR
SCA
E
G
LD
I/O WR
SCO
WAIT
R
S
STATUS
Q
Q
SCO
19
Temporizzazione dei segnali
T1
TW TW T3
T2
T1
I/OWR
WAIT
0
1
T2
WAIT
TW
WAIT
DATO
20
T3
I/O programmato INTERFACCIA DISPOSITIVI DI I/O
(per supportare protocollo di handshaking, implementato a firmware)
Schema di Interfaccia per l’output tra PD32 e più DISPOSITIVI di I/O
I/O AB
I/O DB
I/O CB
PD32
WAIT
O.C.
I/O WR
R Q
LD
REG
SELECT
SCA
STATUS
S
SCO
21
Temporizzazione dei segnali nel caso di
più dispositivi di I/O
T1
T2
TW TW T3
T1
T1
I/OAB
I/OWR
I/ODB
ind. device
0
T2
1
WAIT
TW
WAIT
dato
WAIT
WAIT
22
T3
I/O programmato INTERFACCIA DISPOSITIVI DI I/O
(per supportare protocollo di handshaking, implementato a firmware)
Schema di Interfaccia per l’input tra PD32 e più DISPOSITIVI di I/O
PD32
I/O AB
I/O DB
I/O CB
I/O
DR
LD I/O DR
WAIT
O.C.
I/O RD
R Q
STATUS
S
SELECT
REG
SCA
LD
SCO
23
I/O programmato INTERFACCIA DISPOSITIVI DI I/O
(per supportare protocollo di handshaking, implementato a firmware)
Schema di Interfaccia per l’input tra PD32 e più DISPOSITIVI di I/O
T1
I/OAB
I/ORD
I/ODB
T2
TW TW T3
T1
ind. device
0
1
dato
WAIT
WAIT
24
Porte Logiche Open Collector
e Connessione Wired-OR
25
Porte Logiche:
Totem Pole vs Open Collector
• E’ possibile distinguere due tipologie di porte
logiche in funzione dello schema circuitale che le
implementa:
– Totem Pole:
Curiosità:
“Totem
Pole”?
• In caso di uscita logica
“alta”, unPerché
transistore
di pull-up
attivo
che forza un livello di tensione alto sul pin d’uscita.
• In caso di uscita logica “bassa”, un transistore di pull-down che
forza un livello di tensione basso sul pin d’uscita.
– Open Collector:
• In caso di uscita logica “alta”, l’uscita della porta va in alta
impedenza, disconnettendosi dal circuito.
• In caso di uscita logica “bassa”, la tensione sul pin d’uscita
vale 0 (il pin d’uscita è messo a massa)
26
Porte Logiche Open Collector
• Poiché in configurazione open-collector le porte non
possono generare autonomamente lo stato logico alto,
occorre utilizzare un generatore di tensione ed una
resistenza di pull-up:
Uscita =1
Uscita =0
Vcc
Vcc
Vcc
Vout=Vcc
O.C.
O.C.
Vout=0
O.C.
27
WIRED OR / WIRED AND
Connettendo su una stessa linea più porte open collector otteniamo
le cosiddette connessioni WIRED OR, ovvero WIRED AND a
seconda che si lavori in logica positiva o negativa:
LOGICA POSITIVA
LOGICA NEGATIVA
1) Se solo una porta ha l’uscita bassa (FALSE),
la linea va a massa e l’uscita è bassa (FALSE).
2) Per ottenere un’uscita alta (TRUE), tutte le
porte devono avere uscita alta (TRUE).
AND DELL’USCITA DELLE SINGOLE PORTE
Vcc
Vcc
Vcc
TRUE
1) Se solo una porta ha l’uscita bassa (TRUE),
la linea va a massa e l’uscita è bassa (TRUE).
2) Per ottenere un’uscita alta (FALSE), tutte le
porte devono avere uscita alta(FALSE).
OR DELL’USCITA SINGOLE PORTE
FALSE
FALSE
Vout=Vcc
Vcc
TRUE
Vout=Vcc
Vout=0
Vout=0
1
1
1
0
1
1
1
O.C.
O.C.
O.C.
O.C.
O.C.
O.C.
O.C.
0
28
O.C.
Connessione di più porte logiche
su uno stesso BUS
• PROBLEMA: Non è possibile connettere più
porte logiche Totem Pole sullo stesso BUS, onde
evitare conflitti dovuti alla presenza di stati logici
diversi su porte logiche diverse.
• Soluzioni:
– Utilizzare buffer three states oppurtanamente pilotati
per garantire che solo una porta logica sia
effettivamente connessa al bus in ogni istante.
– Utilizzare porte logiche OPEN COLLECTOR +una
connessione di tipo wired-or.
29
Esempio: Connesione, in wired OR, di più
interfacce alla linea “not READY”
A) Se nessuna interfaccia ha attivo
il segnale di select, tutti i NAND
O.C. vanno in alta impedenza e
READY=1 (false).
Vcc
B) Poiché solo una interfaccia può
avere il segnale di select attivo:
1) Solo tale interfaccia può
avere il segnale READY=0 (se
STATUS=1);
READY
O.C.
CPU
READY
O.C.
2) Tutte le altre interfacce
avranno READY=1, ovvero in
alta impedenza.
select
Questo ci
conflitti!
consente
di
evitare
STATUS
Modulo
interfaccia i
select
STATUS
Modulo
interfaccia i+1
30
ISTRUZIONE DI OUTPUT
OUTs Rx, Device
(sposta nel registro di interfaccia del dispositivo di indirizzo Device
uno o due o quattro bytes memorizzati nel registro Rx,
naturalmente il numero di bytes da spostare dipende dal valore di
“s”)
ISTRUZIONE DI INPUT
INs Device, Rx
(sposta nel registro Rx uno o due o quattro bytes memorizzati nel
registro di interfaccia del dispositivo di indirizzo Device,
naturalmente il numero di bytes da spostare dipende dal valore di
“s”)
31
I/O programmato
PROTOCOLLO DI HANDSHAKING, IMPLEMENTATO A FIRMWARE
Aspetto negativo: l’attesa della produzione o del consumo del dato da
parte della periferica può bloccare per lunghi periodi la CPU
Per esempio se CK del processore 1 nsec. (10-9 sec.) e velocità di
produzione/consumo dei dati della periferica è 1 msec (10-3 sec.) allora il
processore, per ogni interazione, “passa” nello stato di WAIT per un
numero di volte dell’ordine di 106 .
32
I/O programmato
INTERFACCIA DISPOSITIVI DI I/O
(PER SUPPORTARE PROTOCOLLO DI HANDSHAKING, IMPLEMENTATO A SOFTWARE)
Necessità di istruzioni atte alla emulazione del test sulla variabile di condizione WAIT
(negata) – uso di una nuova variabile di condizione “READY” - e di una istruzione per
avvertire SCO del dispositivo di I/O che il processore intende colloquiare con la periferica.
JR address
(se READY = 0 allora salta all’esecuzione dell’istruzione il
cui indirizzo di memoria è “address”)
JNR address
(se READY = 1 allora salta all’esecuzione dell’istruzione il
cui indirizzo di memoria è “address”)
START device
(avverti – asserendo ad 1 il segnale di controllo START – la periferica
“device” che ci sarà un’interazione)
Notare che per eliminare gli effetti della variabile di condizione
WAIT
è sufficiente mettere a massa (a zero) il collegamento (pin) del processore relativo a tale
variabile. Notare che in questo caso durante l’esecuzione di una istruzione di IN o di OUT
il processore passa una volta solo nello stato WAIT (vedere lucidi precedenti).
33
I/O programmato – INTERFACCIA di INPUT
PROTOCOLLO DI HANDSHAKING IMPLEMENTATO A SOFTWARE
I/O AB
I/O DB
I/O CB
PD32
I/O RD
START
READY
“0”
STARTD
SELECT
REG
SCA
O.C.
R
Q
STATUS
S
Q
COMPLETE STARTDEV
SCO
34
Connesione, in wired OR, di più
interfacce alla linea “not READY”
Vcc
READY
O.C.
STATUS
READY
O.C.
STATUS
Modulo
interfaccia i
CPU
READY
O.C.
STATUS
Modulo
interfaccia i+1
35
Protocollo di Input
1. Il processore invia sull’I/O Address bus l’indirizzo del dispositivo e ne
esamina lo stato tramite la linea di controllo READY.
2. Se il dispositivo non è pronto ( READY = 1 ) il processore deve attendere e
tornare al punto 1 o saltare ad un’altra istruzione.
3. Se
READY = 0 il processore avverte il dispositivo che vuole un dato da
lui (seleziona il dispositivo tramite le linee indirizzi e invia il segnale
START). START resetta il flip-flop STATUS e in tale stato rimane per tutta
la durata delle operazioni di produzione del dato da parte del dispositivo.
4. Quando il dato è stato prodotto ed è disponibile in REG, il dispositivo
genera il segnale COMPLETE, settando STATUS (READY=0).
5. Nel frattempo il processore, in attesa del dato, esamina lo stato del F/F
campionando il segnale READY.
6. Se READY= 1 il processore deve attendere e tornare al punto 5.
7. Se READY= 0 il processore esegue una istruzione id INPUT (seleziona il
dispositivo ed invia il segnale di controllo IO RD per trasferire il dato
presente in REG all’interno di uno dei registri del processore).
36
Programma assembler (input)
Aspetta1:
JNR DeviceIN, Aspetta 1
START DeviceIN
Aspetta2:
JNR DeviceIN, Aspetta2
INB DeviceIN, R0
37
I/O programmato- INTERFACCIA di OUTPUT
PROTOCOLLO DI HANDSHAKING IMPLEMENTATO A SOFTWARE
I/O AB
I/O DB
I/O CB
PD32
I/O WR
START
READY
STARTD
DEC
SELECT
REG
SCA
O.C.
R
Q
STATUS
S
Q
COMPLETE STARTDED
SCO
38
Protocollo di Output
1. Il processore invia sull’I/O Address bus l’indirizzo del dispositivo e ne
esamina lo stato tramite la linea di controllo READY.
2. Se il dispositivo non è pronto ( READY = 1 ) il processore deve attendere e
tornare al punto 1 o saltare ad un’altra istruzione.
3. Se READY=0 il processore esegue una istruzione di OUTPUT e trasferisce
il contenuto di un registro nel registro di interfaccia del dispositivo
(mediante il segnale di controllo I/OWR).
4. Il processore avverte il dispositivo che gli ha trasferito un dato (seleziona il
dispositivo tramite le linee indirizzi e invia il segnale START). START
resetta il flip-flop STATUS e in tale stato rimane per tutta la durata delle
operazioni di consumo del dato da parte del dispositivo. Quando il dato è
stato letto da REG, il dispositivo genera il segnale COMPLETE, settando
STATUS (READY=0).
5. Nel frattempo il processore, in attesa, esamina lo stato del F/F campionando
il segnale READY.
6. Se READY= 1 il processore deve attendere e tornare al punto 5.
7. Se READY= 0 il processore può eseguire un’altra istruzione.
39
Programma assembler (output)
Aspetta1:
JNR DeviceOUT, Aspetta 1
OUT R0, DeviceOUT
START DeviceOUT
Aspetta2:
JNR DeviceOUT, Aspetta2
40
I/O programmato
MODALITA’ BUSY WAITING
…
MOVL #100, R0 ; numero di dati da acquisire
MOVL #DATI, R1 ; ind.dell’area di memoria
JSR IN_AD1
…
IN_AD1: PUSH R0
; salv. registri usati
PUSH R1
PUSH R2
IN_1:
JNR AD1, IN_1
; attende che AD1 sia pronto
IN_2:
START AD1
;avvia l’acquisizione di un dato
IN_3:
JNR AD1, IN_3
; attende che il dato sia stato prodotto
INW AD1, R2
; prelievo del dato e….
MOVW R2, (R1)+ ; … suo trasferimento in memoria
SUBL #1, R0
; decremento del contatore
JNZ IN_2
; acquisizione di un altro dato se non si è azzerato
; il contatore
POP R2
; ripristino dei registri usati
POP R1
;
POP R0
;
RET
; ritorno al programma chiamante
41
Polling
(verifica circolare se ogni DEVICE è pronto ad interagire)
I/O AB
I/O DB
I/O CB
PD32
DEV 1
DEV 2
DEV 3
DEV 4
42
Polling
…
MOVL #100, R0
; numero di dati da acquisire
MOVL #DATI, R1
; ind.dell’area di memoria
JSR IN_AD1
…
IN_AD1: PUSH R0
; salv. registri usati
PUSH R1
PUSH R2
POLL:
JR AD1, IN_1
; attende che AD1 sia pronto
JR AD2, IN_2
JR AD3, IN_3
JR AD4, IN_4
JMP POLL
IN_i:
WAIT:
START ADi
; avvia l’acquisizione di un dato
JNR ADi, WAIT
; attende che il dato sia stato prodotto
INW ADi, R2
; prelievo del dato e….
MOVW R2, (R1)+ ; … suo trasferimento in memoria
SUBL #1, R0
; decremento del contatore
JNZ WAIT ; acquisizione di un altro dato se non si è azzerato
; il contatore
POP R2
; ripristino dei registri usati
POP R1
;
POP R0
;
RET
; ritorno al programma chiamante
43
I/O programmato
- SVANTAGGI –
Uso non efficiente del processore (perdita di tempo per verificare
se la periferica è pronta o meno ad interagire);
q
Rischio di non soddisfare esigenze di urgenza (real-time) (p.e.
nel polling vengono visitate le periferiche in modo ciclico e quindi
non si possono gestire eventi all’atto del loro verificarsi, quali
caduta della tensione)
q
Necessità di interazione basata sulla richiesta dei dispositivi
esterni (INTERRUZIONI)
44
INTERRUZIONE
Similitudine con la ricezione di una telefonata:
Polling:
- squillo;
- prelievo cornetta
- richiesta di identificazione: "sei Giovanni?"
- se affermativo inizio colloquio con Giovanni
- se no, nuova richiesta di identificazione:
"sei Franco?“
- se affermativo inizio colloquio con Franco
- se no, nuova richiesta……….
- ……
Naturalmente al momento della ricezione della telefonata si stava facendo qualcosa di altro
(p.e. doccia), che dovrà essere continuato dopo che si è terminata la telefonata.
Normale interazione:
- squillo;
- prelievo cornetta;
- "pronto";
- il chiamante si identifica
- inizio del colloquio
Inoltre il chiamante ci può "interrompere" solo se lo desideriamo, per esempio spengo il
telefonino del lavoro quando sono a casa.
45
Fasi per la gestione dell'interruzione
a) salvare lo stato del processo in esecuzione;
b)
identificare
all'interruzione;
il
programma
di
servizio
relativo
c) eseguire il programma di servizio;
d) riprendere le attività lasciate in sospeso.
46
Tecniche di identificazione del programma di servizio
relativo all’interruzione
(identificazione della sorgente dell’interruzione)
Tecniche di identificazione:
 Polling
 Polling a multilivello
 Vettorizzata
 Vettorizzata a multilivello
47
Polling
Perif.1
ha generato
INT?
istr.N
istr.N+1
Programma
in esecuzione
interrotto
alla fine della
Istruzione n.ma
no
Perif.2
ha generato
INT?
no
Ultima
Perif ha
generato
INT?
no
si
programma di
servizio x
perif.1
si
programma di
servizio x
perif.2
si
programma di
servizio x
48
ultima perif.
Routine di Polling per il
riconoscimento delle interruzioni
Routine:
JP DISP1, DRIVER1
JP DISP2, DRIVER2
….
JP DISPN, DRIVERN
- Richieste multiple vengono servite in ordine di interrogazione
- Tempo di CPU non minimo per il riconoscimento
N.B “JP” non è una istruzione PD32
49
Meccanismo interruzioni vettorizzate
Periferica
Indirizzo
0
iniziale
1
2 prog.servizio
3 prima perife.
Indirizzo
4
iniziale
5
6 prog.servizio
7 seconda perife.
.
.
.
Indirizzo
4*i
iniziale
4*i+1
4*i+2 prog.servizio
4*i+3 perife. i-esima
INT
IACK
identificazione
periferica
CPU
PUSH …
.
.
.
Identificativo
Periferica x 4
POP
RTI
50
Meccanismo di interruzione multilivello (a polling o vettorizzate)
SERVIZIO
LIVELLO 0
PRIORITA’ CRESCENTE
INTERR.
FINE
SERVIZIO
LIVELLO 1
INTERR.
SERVIZIO
LIVELLO L
FINE
RIPRESA
SERVIZIO
FINE
INTERR.
RIPRESA
PROGRAMMA
PRINCIPALE
PROGRAMMA
PRINCIPALE
IRL
RIPRESA
SERVIZIO
IR1
IR0
t
51
Meccanismo di interruzione multilivello (a polling o vettorizzata)
CPU
CONTROLLO INTERRUZIONI
Q
S
R
Q
S
R
IFF0 MFF0
IR0
Q
S
R
Q
S
R
IFF1 MFF1
IR1
……………
Q
S
R
Q
S
R
IFFL MFFL
IRL
IFFi: Flip-Flop di memorizzazione di richiesta a livello i
MFFi: Flip-Flop di mascheramento delle richieste a livello i
52
Gestione delle richieste di interruzione PD32
Abilitazione/disabilitazione delle interruzioni
Per memorizzare l'informazione che le interruzioni siano o meno abilitate si fa uso di
un flip-flop (denominato I e contenuto nel registro SR).
Il contenuto di questo flip-flop può essere manipolato dalle istruzioni assembler CLRI e
SETI.
Verifica richiesta delle interruzioni
La richiesta di un'interruzione avviene in modo asincrono rispetto alle attività del
processore e quindi del suo SCO.
La verifica della presenza della richiesta di un’interruzione viene fatta alla fine di ogni
ciclo istruzione
Si potrebbe anche effettuarlo alla fine di ogni ciclo macchina, ma in questo caso
sarebbe necessario salvare lo stato del microprogramma (più complesso da
implementare).
53
Modifica SCO PD32
micro codice
relativo al primo
ciclo macchina
1
2
3
4
5
6
7
8
9
micro codice
relativo al secondo
ciclo macchina
(PC) → MAR
--- fetch
MEM(MAR) → MD
--- fetch
(MD) → IR, (PC)+1 → PC
--- fetch
Decodifica istruzione
Esecuzione istruzione
Se “I” AND “IRQ” = 0 allora vai a 7 altrimenti a 9
Salva PC e registro dei flag nella pila puntata dallo SP
Carica in PC l'indirizzo iniziale del programma di servizio
Torna al passo 1 fino a che trovi una istruzione HALT
micro codice
relativo all'ultimo
ciclo macchina
si
I=1 & IRQ=0 ?
gestione
interruzioni
no
54
Salvataggio dello Stato
Stato di un processo: contenuto dei registri del processore e delle locazioni di
memoria usati dal codice del processo.
Le locazioni di memoria possono essere protette assegnando a ciascun processo
una partizione distinta della memoria.
I registri interni del processore, invece, sono visibili a tutti i processi. Quindi
necessità di memorizzare i contenuti dei registri che potrebbero essere modificati
da altri processi (vedi routine di servizio).
Organizzazione a pila (stack di sistema- gestione LIFO) della memoria in cui
andare memorizzare i contenuti dei registri (vedere gestione delle subroutine).
Ricordarsi che R7 è visto anche come STACK POINTER dello stack di sistema.
Possibilità di memorizzazione:
q
via firmware tutti i registri
q via firmware solo PC e SR, a software solo quelli che verranno effettivamente
modificati.
55
Nel PD32 si è optato per la seconda soluzione.
Identificazione programma di servizio
IRQ
CLEAR
IACK
IACK
I/O AB
I/O DB
P
D
3
2
IACKIN
O.C.
DEC
………..
Q
R
S
IVN
SELECT
Tecnica scelta: interruzioni vettorizzate.
IACKOUT
SCO
DISPOSITIVO
ESTERNO
56
Connesione, in wired OR, di più
interfacce alla linea IRQ
Vcc
CPU
INT
IRQi-1
IRQi
IRQi+1
I
O.C.
STATUS
O.C.
IM
Modulo
interfaccia i-1
STATUS
O.C.
IM
Modulo
interfaccia i
STATUS
IM
Modulo
interfaccia i+1
57
- Completamento salvataggio dello stato
- esecuzione del programma di servizio
- ripristino stato
Salvataggio del contenuto dei registri (visibili dall’utente: Ri) che la routine di
servizio modificherà tramite esecuzione di istruzioni tipo PUSH.
q
q
Esecuzione programma.
Ripristino del contenuto dei registri salvati nello stack, tramite POP (tante POP
per quante PUSH effettuate precedentemente).
q
Esecuzione della RTI (ReTurn from Interrupt), che ripristina nello SR e nello
PC i valori memorizzati nello stack di sistema (equivalente a due istruzioni POP).
q
RTI quindi deve essere l’ultima istruzione della routine di servizio.
58
Interfaccia di Input e sua connessione con il PD32
59
Interfaccia di Input e sua connessione con il PD32
60
Driver: acquisizione di 100 dati tramite interruzione
;Inizializzazione:
MOVL #100, AD1_C
MOVL #DATI,AD1_P
START AD1
;Routine di servizio
SAD1: PUSH R0
PUSH R1
MOVL AD1_C, R0
MOVL AD1_P, R1
INW AD1, (R1)+
NEXT:
EXIT:
SUBL #1, R0
JNZ
NEXT
CLEAR AD1
JMP
EXIT
START AD1
MOVL R0, AD1_C
MOVL R1, AD1_P
POP R1
POP R0
RTI
; valore iniziale del contatore
;valore iniziale del puntatore
;comando che inizia l’acquisizione del primo dato
;salva i registri usati
;
; contatore
; puntatore
; trasferisce il dato in memoria e incrementa il
; puntatore
; decrementa il contatore
; era l’ultimo dato?
; si: rimuove la richiesta di interruz. rendendo il
; dispositivo inattivo e ritorna al progr.interrotto
; no: avvia l’acquisizione successiva
; aggiorna il contatore e…
; … il puntatore in memoria
; ripristina i registri usati
;
; ritorna al programma interrotto
61
Concetto di azione atomica
Flip-Flop I:
messo a 0 dal microprogramma relativo al
ciclo riconoscimento interrupt
messo a 1 dal microprogramma relativo a RTI
62
Aumento della priorità
LIVELLO L
R
ACKL
MFFL
PLK
IFFL
PL2
IR
Q
S
PL1
IR
R
IR
Q
S
Aumento della priorità
…
INTL
CONTROLLORE INTERRUZIONI a PRIORITA’
R
ACK1
INT1
MFF1
P1K
IFF1
P12
Q
S
P11
IR
IR
R
IR
Q
S
LIVELLO 1
R
ACK0
INT0
MFF0
P0K
IFF0
P02
Q
S
P01
IR
IR
R
IR
Q
S
LIVELLO 0
IRQ
IACK
63
PD
32
Controllore interruzione a priorità per PD32
IRQ0
R0
IRQ
R1
IRQ1
R2
IRQ2
R3
IRQ3
IACK
ACK0
R0
ACK1
R1
ACK2
R2
ACK3
R3
64
Costo di esecuzione del driver per il trasferimento
dati tramite interrupt di un file (100 dati) da una
periferica ad un processore
Dall’esempio precedente calcolare
numero di istruzioni e quindi numero di cicli di clock complessivi
per eseguire un trasferimento
65
Operazioni di I/O gestite da canale
La maggior parte delle interazioni tra un dispositivo di Ingresso/Uscita e il processore
avviene per trasferire dati (file). Non essendoci grosse necessità elaborative è sufficiente
utilizzare dei dispositivi (canali) capaci solo di effettuare il trasferimento di file.
La tecnica utilizzata per far ciò è la Direct Memory Access e il dispositivo che la supporta
normalmente viene identificato con DMAC (Direct Memory Access Controller)
DMAC
Per effettuare il trasferimento di un file dalla memoria ad un dispositivo di
Ingresso/Uscita o viceversa è necessario definire da processore:





la direzione del trasferimento (verso o dalla memoria);
l'indirizzo iniziale della memoria;
il tipo di formato dei dati (B, W, L), se previsti più formati;
la lunghezza del file (numero di dati);
la periferica di Ingresso/Uscita interessata al trasferimento (se ce ne sono più di una).
66
Utilizzo di un DMAC
Una volta che il DMAC è stato programmato il processore lo deve attivare (p.e.
tramite una START)
Da notare che il DMAC per poter trasferire i dati deve poter utilizzare il bus del
processore, per questo quando lo usa il processore deve avere le proprie uscite verso il
bus in alta impedenza.
Una volta che il DMAC ha effettuato il trasferimento dei dati così come richiestogli
dalla CPU la deve avvertire (p.e. tramite INTERRUPT).
L'architettura di massima del DMAC e il protocollo di interazione processore-DMAC
sono schematizzati nei lucidi successivi.
67
Struttura semplificata di un DMA controller
(CPU con un unico bus sia per la memoria che per I/O)
DATA BUS
REGISTRO
DI STATO
CONTATORE
DI BYTES
M
P
LUNGHEZZA
BLOCCO
INDIRIZZO
INIZIALE
CPU
ADDRESS BUS
CONTROL BUS
UNITA’ DI
CONTROLLO
E
TEMPORIZZAZIONE
CONTATORE
DI INDIRIZZO
68
Protocollo di interazione DMAC-CPU
Trasferimento a Bus - stealing
69
DMAC
CPU
nop
I/O
I/O
no
start
START
La CPU
Inizializza
Il DMAC
(1/2)
si
nop
no
perif.
pronta?
si
invio richiesta
rilascio BUS
MBR
no
MBG=1
MBG
La CPU termina il ciclo
macchina ed entra in uno
stato di sospensione
“rilascio dei bus” uscite
in alta impedenza
70
si
(2/2)
si
trasf.di un
dato decr.WC
incr. CAR
MBR
rilascio BUS
WC=0
La CPU riprende il
normale funzionamento
Riacquisto del controllo
del BUS
si
IRQ
operaz. terminata
avvisare CPU
DMAC
La CPU esegue la
routine di servizio
CPU
71
Protocollo di interazione DMAC-CPU
Trasferimento a BURST
72
DMAC
CPU
nop
I/O
I/O
no
start
START
La CPU
Inizializza
Il DMAC
(1/2)
si
nop
no
perif.
pronta?
si
invio richiesta
rilascio BUS
MBR
no
MBG=1
MBG
La CPU termina il ciclo
macchina ed entra in uno
stato di sospensione
“rilascio dei bus” uscite
in alta impedenza
73
si
(2/2)
si
trasf.di un
dato decr.WC
incr. CAR
nop
WC=0
no
si
richiesta
nuovo dato
rilascio BUS
nop
operaz. terminata
avvisare CPU
dato
pronto?
si
MBR
IRQ
La CPU riprende il
normale funzionamento
Riacquisto del controllo
del BUS
La CPU esegue la
routine di servizio
74
CPU
Modifica SCO PD32
per poter gestire le due modalità di interazione
micro codice
relativo al primo
ciclo macchina
si
MBR = 0 ?
uscite sul bus in
micro codice
relativo all'ultimo
ciclo macchina
alta impedenza
Invia MBG
no
si
MBR = 0 ?
micro codice
relativo al secondo
ciclo macchina
alta impedenza
Invia MBG
no
si
si
MBR = 0 ?
no
I=1 & IRQ=0 ?
uscite sul bus in
gestione
interruzioni
uscite sul bus in
alta impedenza
Invia MBG
no
75
Architettura di un DMAC (adatto x PD32)
trasferimento dati tra una periferica e la memoria
76
AB
DB
CB
PD32
I/O WR
CAR
START
MEMORIA
INC
START
F/F
SELECT
REG IN
REG OUT
MRD
MWR
DECR
WC
I/O WR
Q
MBR
I/O DB
I/O CB
I/O AB
TC
O.C.
MBG
I/O
F/F
INT
F/F
MBR
F/F
SCO
DMAC
DATO SCRITTO
NEXT DATO
DATO LETTO
SCO
DEVICE
DATO PRONTO
BURST
BUS-STEALING
F/F
77
DB
CB
PD32
MEMORIA
I/O WR
I/O
F/F
SELECT
REG IN
I/O DB
I/O CB
I/O AB
BURST
BUS-ST
MRD
MWR
I/O WR
REG OUT
SCO
DMAC
DATO SCRITTO
NEXT DATO
DATO LETTO
SCO
DEVICE
DATO PRONTO
78
IRQ
CLEAR
IACK
IACK
I/O AB
I/O DB
P
D
3
2
IACKIN
O.C.
DEC
………..
Q
R
S
IVN
SELECT
IACKOUT
SCO
DMAC
79
Esempio inizializzazione DMAC
INIZIALIZ:
MOVL #100,R0
OUT WCOUNTER,R0
MOVL #2000,R0
OUT CAREGISTER,R0
MOVL #1,R0
OUT DMACI/O,R0
MOVL #0,R0
OUT DMACB-ST,R0
START DMAC
;programma il DMAC per la lettura
;seleziona la modalità (bus-stealing/burst)
;avvia trasferimento
I/OWR
selectI/O
Data Bus (bit meno signif.)
;carica in R0 il numero di word da leggere
;e passa il valore al WC (nel DMAC)
;carica in R0 l’indirizzo da cui leggere
;e passa il valore al CAR (nel DMAC)
R Q
I/O
S
80
Scarica

PD32