PD-32
Seconda parte
Connessione di dispositivi esterni (periferiche)
• Ogni dispositivo di I/O è connesso al PD-32 mediante un’ interfaccia
suddivisa in una parte dipendente dal dispositivo ed un’altra
indipendente dal dispositivo
• Parte dipende dal dispositivo (device control)
– E’ specifica del dispositivo
• Ex: Controllore motore del disco
• Parte indipendente dal dispositivo
– Fornisce alla CPU una visione astratta del dispositivo
• STATUS, Stato del dispositivo (Dispositivo pronto/non pronto)
• Buffer, Area dati per trasferimento informazioni
• IM, Maschera interruzioni
Calcolatori Elettronici, Beraldi, aa03/04
I/O isolato
MEM. DATA BUS
MEM. ADDRESS BUS
MEM. CONTROL
BUS
CPU
M1
…
Mk
I/O DATA BUS
I/O ADDRESS BUS
I/O CONTROL
BUS
I/O1
…
I/Oh
porta I/O = indirizzo del dispositivo
Calcolatori Elettronici, Beraldi, aa03/04
Gestione dell’I/O
•
I/O a controllo di programma (I/O programmato)
– Un programma controlla esplicitamente il dispositivo
– Modalità busy waiting
• Il processore aspetta che il dispositivo sia pronto
– Modalità polling
• Più dispositivi. Il processore li interroga circolarmente per verificarne lo stato
•
I/O sotto controllo di interruzione
– Il processore viene interrotto dal dispositivo
– Segnali hardware da/verso la CPU (segnali IRQ / IACK, …)
– Riconoscimento dell’interruzione (dispositivo che ha generato l’interruzione)
• Software: Polling
• Hardware: Vettore delle interruzioni
•
Gestione mediante processori dedicati (controllori di canale)
– Direct Access Memory Controller (DMAC)
Calcolatori Elettronici, Beraldi, aa03/04
I/O programmato, busy waiting
• Un dispositivo è individuato da un indirizzo…
• ..possiede uno stato (pronto/non pronto)
• ..consuma (riceve) o produce (genera) dati
Calcolatori Elettronici, Beraldi, aa03/04
Istruzioni per I/O
programmato
interruzioni
Calcolatori Elettronici, Beraldi, aa03/04
I/O programmato busy waiting (dispositivo di output)
….
wait:
jnr dev,wait
outb r0, dev
start dev
;aspetta che dev sia pronto
;trasferisci un dato
;attiva il dispositivo
….
Start
Not
Ready
Ready
Complete
A cura del device..
Calcolatori Elettronici, Beraldi, aa03/04
Esercizio
• L’interfaccia di una stampante ha indirizzo 0x56. Ammettendo di gestite
la stampante in modalità busy waiting, scrivere una subroutine che
stampi (trasferisca) K=10 byte, memorizzati a partire dall’indirizzo pinit
Calcolatori Elettronici, Beraldi, aa03/04
org 400h
dev
equ
pinit
equ
K
equ
movl #pinit, r1
movl #K, r0
jsr stampa
halt
stampa:
wait:
56h
400h
10
jnr dev, wait
outb (r1)+,dev
start dev
subl #1,r0
jnz wait
ret
; indirizzo dispositivo di output
;inizio area dati da stampare
;numero di byte da trasferire
;puntatore area dati
;contatore
;chiama la subroutine
;ferma il simulatore
;attendi che la stampante sia pronta
;invia un byte nel buffer ed incrementa R1
;comunica alla stampante che il dato è pronto
;decrementa il contatore R0
; ripeti se R0<>0
end
Calcolatori Elettronici, Beraldi, aa03/04
I/O programmato busy waiting (dispositivo di input)
no
Pronto
wait1:
jnr dev,w1
Start device
start dev
no
Pronto
wait2:
jnr dev,w2
inb dev, R0
Leggi dato
Calcolatori Elettronici, Beraldi, aa03/04
I/O programmato busy waiting (dispositivo di input)
;esamina lo stato di dev
;se non pronto aspetta
wait1:
jnr dev,wait1
;dispositivo pronto
;
start dev
;attendi la fine operazione
wait2:
jnr dev,wait2
;leggi dato
inb dev,R0
Calcolatori Elettronici, Beraldi, aa03/04
Esempio
• Scrivere una subroutine in grado di trasferire k word da un dispositivo
di input di indirizzo dev alla memoria a partire dall’indirizzo 800h
Calcolatori Elettronici, Beraldi, aa03/04
org 400h
dev
equ 17h
;Indirizzo del dispositivo di input
MOVB #5,R0
;Carico in R0 il numero dei dati da trasferire
MOVL #800h,R1
;Carico in R1 l'indirizzo di inizio dell'area di
code
;inizio main
;memoria in cui trasferire i dati
JSR INPUT
;Salto alla subroutine
HALT
;fine main
; continua…
Calcolatori Elettronici, Beraldi, aa03/04
;subroutine di input
INPUT:
wait1:
JNR dev,wait1
inizio:
START dev
wait2:
JNR dev,wait2
INW dev,R2
;fine protocollo
MOVW R2,(R1)+
;Pongo il contenuto di R2 in memoria nella locazione
;Puntata da R1 ed aggiorno la locazione puntata
SUBB #1,R0
;Decremento il contatore dei dati da trasferire
JNZ inizio
;Se il trasferimento non è terminato torno ad inizio
RET
;Ritorno da subroutine
END
Calcolatori Elettronici, Beraldi, aa03/04
;Fine programma
Gestione dell’I/O mediante interrupt (cenni)
Il dispositivo comunica alla CPU che è pronto (IRQ=1)
• La CPU conferma la ricezione (IACK) ed attiva un subroutine di
gestione dell’interruzione (driver)
• Meccanismo simile ad una chiamata di un sottoprogramma (jsr) ma
attivato in modo asincrono dall’esterno
•
Calcolatori Elettronici, Beraldi, aa03/04
Interrupt azioni da intraprendere
• Salvataggio/ripristino del contesto
• Disabilitare ulteriori interruzioni
– Flag I=0
• Riconoscimento del dispositivo che ha richiesto interruzione
•
–
Polling (sotware)
–
Vettorizzato (hardware)
Gestione della Gerachia di priorità
–
scelta tra più richieste
–
gestione di richiesta di interruzione durante il servizio
Calcolatori Elettronici, Beraldi, aa03/04
Interrupt PD32
Calcolatori Elettronici, Beraldi, aa03/04
Scarica

PD32(parte II)