Un sottosistema di I/0 è composto da:
• Periferiche
• Unità per controllare questi dispositivi
• Software per la gestione
Ad ogni periferica è associata una specifica interfaccia che lo collega al BUS. Quando la CPU vuole scrivere su un dispositivo manda gli opportuni dati di controllo sul CBUS, invia l’indirizzo sull’ABUS e manda i dati sul DBUS. Ogni dispositivo è dotato di un registro (porte), che ha un opportuni indirizzo.
Esistono diversi metodi per organizzare lo spazio di indirizzamento dei dispositivi:
• Isolated I/O: lo spazio di indirizzamento è indipendente rispetto a quello dei dati. Opportuni bit distinguono i due tipi di indirizzi. Esistono quindi particolari comandi per gestire le periferiche (IN, OUT). 8086
• Memory Mapped I/O: lo spazio di indirizzamento è condiviso con quello dei dati. Alcune zone della stessa memoria non sono quindi utilizzabili per memorizzare dati, ma solo per passarli alle periferiche. In questo modo per mandare un dato ad una periferica si possono usare le istruzioni standard (MOV ad esempio). Motorola 68000
La velocità di lettura e scrittura dei dispositivi di I/O è molto spesso molto diversa a quella della CPU, siccome spesso si deve interfacciare con il mondo esterno. Esistono vari modi per gestire la sincronizzazione:
• I/O programmato. La gestione dei dispositivi è totalmente a carico della CPU. Lo spostamento di ciascun dato implica un’operazione da parte della CPU. Quando I/O è basato sull’esecuzione di un test sul registro di stato, per capire quando si può procedere oltre, si dice polling. Questo metodo è poco costoso e poco efficiente, in quanto la CPU deve effettuare una serie di controlli inutili, tutti i dati passano attraverso la CPU.
• Interrupt
• Direct Memory Access (DMA). In questo caso la gestione è affidata a una circuiteria esterna alla CPU, detta DMA. Essa si preoccupare di gestire il BUS. Per ciascuna periferica il DMA dispone di diverse linee (Acknowledge, richiesta, controllo) e registri (DC e IOAR). La gestione tramite DMA avviene in diversi passi: la CPU carica in DC e IOAR, l’indirizzo dal quale iniziare l’operazione e il numero di dati da trattare e informa su un bit se si tratta di un’operazione di lettura o scrittura. Il DMA riceve una richiesta di intervento da parte di una periferica e invia una DMA Request alla CPU. Quando la CPU verifica il bit di Request e lo trova attivo si ferma e attiva il segnale di Acknowledge e inizia il trasferimento. Ad ogni passo viene incrementato IOAR e decrementato DC finchè DC non è uguale a 0. Il trasferimento tra DMA e I/O può avvenire in diversi modi:
o A blocchi (burst transfer). Prevede che una volta che inizia il trasferimento il DMA non lascia il controllo del BUS alla CPU, finchè esso non è terminato. La CPU rimane bloccata per tutto il trasferimento.
o Cycle stealing. I blocchi sono di piccole dimensioni, in questo modo il tempo nel quale la CPU è bloccata è più fremmentato
o Transparent DMA. Il DMA occupa il BUS solo quando la CPU non ne ha bisogno.
• Processori di I/O.
Esistono diversi modi per servire le richieste da parte delle periferiche di attenzione alla CPU:
• Polling. La CPU effettua un controllo periodico su tutti i dispositivi, uno alla volta. Se qualcuno di essi ha fatto richiesta il dispositivo viene servito. Questo metodo è semplice da realizzare, ma ha una elevata latenza oltre a portare a molti sondaggi con risposte sempre negative.
• Interrupt. E’ basato sulla presenza di un segnale asincrono, che il dispositivo invia alla CPU in caso di necessità. In questo modo il tempo di latenza è minimo e non vi è perdita di tempo da parte della CPU di effettuare controlli.
Per gestire più richieste contemporanee si usano diverse strategie:
• Linee di interrupt multiple. In questa soluzione ogni periferica è associata a un proprio piedino per la gestione degli interrupt. Questo è impraticabile in quanto i dispositivi sono in numero molto elevato.
• Polling. Nel momento in cui il piedino destinato all’interrupt viene attivato, la CPU scandisce tutti gli elementi che possono averne fatto richiesta, finchè non viene trovato. Cresce la latenza. A seconda dell’ordine in cui viene effettuato il controllo cambia la priorità.
• Interrupt vettorizzato. Esiste un apposito dispositivo di nome Interrupt Controller (IRQ), che ha il compito di inviare un segnale di interrupt alla CPU, ogniqualvolta la CPU è in grado di rispondere, e pone sul BUS un codice di identificazione a una procedura di servizio contenuta nell’Interupt vector table. Di solito questa tabella si trova nelle prime posizioni della memoria principale. L’IRQ gestisce le priorità.
Per le immagini Ringraziamo ©wild bony
| < Prec. | Succ. > |
|---|






