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