Il sottosistema di I/O

Documenti analoghi
Calcolatori Elettronici T. Input/Ouput

Il sottosistema di I/O. Input Output digitale

Pin-out logico di una CPU CPU. Reset Clock Ready. Architettura di un Sistema

Input Output digitale

Principali periferiche

Secondo l architettura di Von Neumann il bus rappresenta il punto di interconnessione di tutti i componenti del calcolatore.

Calcolatori Elettronici L A Prova scritta del 20/12/ 02

Calcolatori Elettronici T Ing. Informatica. Traccia soluzione 18 Luglio 2019

Calcolatori Elettronici T Ing. Informatica. Traccia soluzione 15 Febbraio 2017

Richiamo: Interfacce di I/O

cpu CONTROLLORI DI I/O ADDRESS BUS CONTROL BUS DATA BUS D[0:7] dec CS# RD# WR# A0,..An RESET ...?

Fondamenti di Informatica P2 Ing. Meccatronica. Traccia soluzione 27 Giugno 2019

Interruzioni (1) Periferiche I/O 2 1

Interruzioni (1) Interruzioni (2)

CALCOLATORI ELETTRONICI. I dispositivi di memoria

LA GESTIONE DELLA I/O

Input/Output (Cap. 7, Stallings)

Architettura dei sistemi di elaborazione (Input/Output parte 1)

Sistemi di Elaborazione: esercizio con il D12

Interfacciamento di periferiche I/O al μp 8088

ISA Input / Output (I/O) Data register Controller

Periferiche CPU. Misure e Sistemi Microelettronici Sistemi 6-1 SREG. Data Bus Address Bus Control Bus

Calcolatori Elettronici T Ing. Informatica. Traccia soluzione 9 Giugno 2016

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Calcolatori Elettronici T Ingegneria Informatica 06 Programmable Interrupt Controller (PIC)

Sottosistema d ingresso uscita

Calcolatori Elettronici T Ing. Informatica. Traccia soluzione 8 Gennaio 2015

ARCHITETTURA DEL CALCOLATORE

Il problema dello I/O e gli Interrupt. Appunti di Sistemi per la cl. 4 sez. D A cura del prof. Ing. Mario Catalano

Input/Output. Input/Output

Componenti principali

CALCOLATORI ELETTRONICI II

Calcolatori Elettronici T Ingegneria Informatica 04 Interruzioni

Componenti principali. Programma cablato. Architettura di Von Neumann. Programma cablato. Cos e un programma? Componenti e connessioni

Tecniche di gestione dell I/O

Sistemi Operativi SISTEMI DI INPUT/OUTPUT. D. Talia - UNICAL. Sistemi Operativi 10.1

Sottosistemi ed Architetture Memorie

ARCHITETTURA A LIVELLO DI SISTEMA. Interfaccia standard nei microprocessori I segnali esterni dei microprocessori 8088 e 8086

PD-32. Connessione di dispositivi esterni (periferiche)

Il sistema di I/O. Calcolatori Elettronici

Architettura del Calcolatore

ARCHITETTURA DI UN ELABORATORE! Ispirata al modello della Macchina di Von Neumann (Princeton, Institute for Advanced Study, anni 40).!

Calcolatori Elettronici L A Prova scritta del 15/12/ 03

La macchina di Von Neumann. UNIVERSITÀ DEGLI STUDI DEL SANNIO Benevento DING DIPARTIMENTO DI INGEGNERIA CORSO DI "PROGRAMMAZIONE I"

Componenti e connessioni. Capitolo 3

Sistemi a microprocessore

Architettura di una CPU

Sistemi Operativi. Sistemi I/O SISTEMI DI INPUT/OUTPUT. Hardware di I/O. Interfaccia di I/O per le applicazioni. Sottosistema per l I/O del kernel

Struttura dei Sistemi di Calcolo

Livelli del sottosistema di I/O

verso espandibili eterogenei tempo di accesso tempo di risposta throughput

Il Microprocessore. Modello di Von Neumann

Calcolatori Elettronici L-A

Il sistema di I/O. Sistemi Operativi 13.1

SISTEMA DI ELABORAZIONE

cpu CONTROLLORI DI I/O All interno della periferica registri o parole di stato e memoria ADDRESS BUS CONTROL BUS DATA BUS D[0:7] dec CS# RD# WR#

Macchina di von Neumann/Turing

Architettura di von Neumann

Corso di Calcolatori Elettronici I

Sistemi Operativi. La gestione delle risorse

IO 1 Input Output a livello Hardware

Sistemi Operativi. Sottosistema di I/O

Architettura di un calcolatore: primi cenni introduttivi

Corso Sistemi Operativi

Architettura del calcolatore (Seconda parte)

2. Architettura di un calcolatore

Architettura di un calcolatore

Lezione XII: La gestione delle eccezioni in MINIX

Architettura di un calcolatore: primi cenni introduttivi. Calcolatore: sottosistemi

Strutture dei sistemi di calcolo

Architettura dei calcolatori e sistemi operativi. Input Output. IO 3 Device driver

Struttura CPU. Struttura e Funzione del Processore. Capitolo 12. Compiti CPU:

GESTIONE DELLE PERIFERICHE D INGRESSO/USCITA ARGOMENTI

Mari, Buonanno, Sciuto Informatica e cultura dell informazione McGraw-Hill 3/2/2010

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Architettura dei Calcolatori Interfacce

L ARCHITETTURA DEI CALCOLATORI. Il processore La memoria centrale La memoria di massa Le periferiche di I/O

Interazione con il DOS e il BIOS

CIRCUITI INTEGRATI DI INTERFACCIA

ARCHITETTURA DI UN ELABORATORE

Calcolatori Elettronici Lezione B1 Interfacce

Cenni sull architettura del calcolatore

LABORATORIO DI INFORMATICA

Università degli Studi di Cassino

Università degli Studi di Cassino

Modi di esecuzione user / kernel

Capitolo 2: Strutture dei sistemi di calcolo

Università degli Studi di Cassino e del Lazio Meridionale

BIU - Bus Interface Unit. EU - Execution Unit. indipendente e asincrono: Costituito da due unità che operano in modo parzialmente

Elementi di informatica

5. I device driver. Device driver - gestori delle periferiche. Struttura interna del sistema operativo Linux. Tipi di periferiche. Tipi di periferiche

Criteri di caratterizzazione di una memoria

Bootstrap. Bootstrap. Shutdown. Struttura di un SO. Elementi principali di un SO:

GESTIONE DELLE PERIFERICHE D INGRESSO/USCITA COMPITI DEL SOTTOSISTEMA DI I/O ARGOMENTI

Memoria cache, interrupt e DMA

Si pone allora il problema fondamentale: come far dialogare la CPU con le periferiche nel modo più efficiente possibile CPU

Transcript:

Il sottosistema di I/O Il sottosistema di I/O consente la comunicazione fra il calcolatore ed il mondo esterno. Fanno parte del sottosistema i dispositivi (Unità di I/O) per la comunicazione uomo/macchina (video, terminali, stampanti), quelli utilizzati per la memorizzazione permanente delle informazioni (unità a disco, nastri magnetici), la rete. Tutte le Unità di I/O sono collegate al bus di sistema mediante dispositivi detti Interfacce di I/O (o anche Periferiche, Controllori di I/O, Porte di I/O) UNITA DI I/O UNITA DI I/O MEMORIA PRINCIPALE CPU INTERFACCIA DI I/O INTERFACCIA DI I/O Bus dati Bus indirizzi Bus comandi Intro I/O 1

Input Output digitale 8088 + LATCH + TRANS BD0 ADDR CS2000* IORD* CS2000* IORD* RDSW* RDSW* 8088 + LATCH + TRANS BD0 D Q LED ADDR CS3000* IOWR* BD0:7 DATA VALID CS3000* IOWR* WRLED* WRLED* Q0 Intro I/O 2

3 Intro I/O Input Output digitale 8088 LATCH + BD0:7 1A1 1Y1 1A2 1Y2 1A3 1Y3 1A4 1Y4 2A1 2Y1 2A2 2Y2 2A3 2Y3 2A4 2Y4 1G 2G 74XX244 BD0 BD1 BD2 BD3 BD4 BD5 BD6 BD7 TRANS + CS2000* IORD* RDSW* LED 8088 LATCH + + BD0:7 BD0 BD1 BD2 BD3 BD4 BD5 D0 Q0 D1 Q1 D2 Q2 D3 Q3 D4 Q4 D5 Q5 D6 Q6 D7 Q7 OE* CLK 74XX374 BD6 BD7 CS3000* TRANS IOWR* WRLED*

4 Intro I/O Esempio di progetto ADDRESS0:15 27512 LA0:15 LA0:19 D0 D1 Q0 Q1 74XX373 A16:19 A16:19 8088 IOM* 74XX373 D7 LE OE* Q7 LA12:19 PAL CSEPROM* DATA0:7 CS* CSEPROM* BD0:7 RD* 62256 MEMRD* CSRAM1* CSSW* CSLED* BIOM* D0 D1 D7 LE OE* Q0 Q1 Q7 A8:15 A8:15 AD0:7 AD0:7 D0 D1 Q0 Q1 74XX373 A0:7 ADDRESS0:14 DATA0:7 LA0:14 BD0:7 RD* WR* CS* MEMRD* MEMWR* CSRAM1* D7 LE OE* Q7 ALE A1 A2 A8 B1 74XX245 B2 B8 BD0:7 BD0:7 74XX244 A11 A12 Y11 Y12 LED D0 Q0 74XX374 A24 Y24 OE1* OE2* BD0:7 MEMRD* MEMWR* OE* DIR DT/R* DEN* IO/M* WR* RD* IORD* IOWR* D1 D7 OE* Q1 Q7

Interfacce di I/O (1) Bus Bus comandi indirizzi SISTEMA A µp Dec Bus dati D[0:7] CS* RD* WR* A[0:n-1] INTERFACCIA DI I/O (8 bit ) S[0:k-1] MONDO ESTERNO UNITA DI I/O Interfaccia standard verso il bus di sistema Interfaccia specifica (dipendente dal tipo di unità) verso l unità di I/O Grazie a questa strutturazione l interfaccia svolge una funzione di adattamento fra la modalità di trasferimento dei dati utilizzata all interno del sistema (cicli di bus) e quella utilizzata dall Unità di I/O. Intro I/O 5

Interfacce di I/O (2) Buffer Dati Strettamente associata alla funzionalità di adattamento fra calcolatore ed unità di I/O è la presenza all interno dell interfaccia di registri di appoggio ( buffer ) utilizzati nei trasferimenti dei dati da CPU ad Unità di I/O e viceversa. Per inviare un dato all Unità di I/O la CPU effettua una scrittura del dato su un buffer dell interfaccia, da cui poi quest ultima si occupa di trasferire il dato all Unità di I/O. Per prelevare un dato dall Unità di I/O la CPU effettua una lettura da un buffer dell interfaccia, su cui quest ultima ha precedentemente appoggiato il dato proveniente dall Unità di I/O. Programmazione e Registri di Controllo Le interfacce di I/O devono poter funzionare secondo un certo insieme di modalità differenti (es.: un interfaccia per comunicazioni seriali asincrone RS232 deve poter scambiare dati con un modem impiegando trame e frequenze differenti). Conseguentemente le interfacce di I/O sono tipicamente programmabili: sono presenti cioè al loro interno un certo numero di registri di controllo che vengono scritti dalla CPU all atto dell inizializzazione del dispositivo per impostare la modalità di funzionamento desiderata. Intro I/O 6

Interfacce di I/O (3) Sincronizzazione e Registri di Stato Di norma le Unità di I/O lavorano in modo asincrono rispetto al funzionamento della CPU e sono molto più lente di quest ultima. Si rende quindi necessario introdurre all interno dell interfaccia di I/O un qualche meccanismo di sincronizzazione fra l attività svolta dalla CPU e quella svolta dalla Unità di I/O. Tipicamente le interfacce di I/O dispongono di registri di stato tramite cui vengono rese disponibili alla CPU tutte le informazioni necessarie per la sincronizzazione con l Unità di I/O. In aggiunta a ciò, i registri di stato situati all interno di una interfaccia di I/O sono spesso utilizzati per segnalare alla CPU il verificarsi di eventuali condizioni di malfunzionamento o errore (es.: errore di parità nelle comunicazioni seriali asincrone RS232). Intro I/O 7

Struttura di una generica interfaccia di I/O Bus Bus dati indirizzi OE* BufferIn CK Bus comandi BD[0:7] D[0:7] CK BufferOut OE* S[0:k-1] OE* Status CK CK Control OE* UNITA DI I/O IORDC* IOWRC* CSPER* BA0 BA1 RD* WR* CS* A0 A1 0 1 EN* DEC 2 3 A B INTERFACCIA DI I/O (8 bit, CPU con bus dati ad 8 bit, 4 registri interni, I/O mapped) Intro I/O 8

Le modalità di gestione dell I/O Affrontiamo ora in modo più approfondito la problematica della sincronizzazione fra CPU (programma in esecuzione sulla CPU) ed Unità di I/O. Come già osservato, la funzionalità di sincronizzazione è a carico dell interfaccia di I/O. Operazione di Input Operazione di Output CPU B uf f e ri Unità I/O CPU B uf f e r O Unità I/O n Interfaccia u t Interfaccia L interfaccia deve comunicare alla CPU L interfaccia deve comunicare alla CPU che l Unità di I/O ha reso disponibile un che l Unità di I/O ha prelevato da BufferOut nuovo dato su BufferIn (condizione il dato precedentemente inviato dalla CPU e di BufferIn Full ) quindi la CPU può inviare un nuovo dato (condizione di BufferOut Empty ). Le interfacce possono comunicare alla CPU le informazioni di sincronizzazione in due modi diversi, cui corrispondono due differenti modalità di gestione dell I/O dette Gestione a Polling (Controllo di Programma) e Gestione ad Interrupt (Interruzione). Intro I/O 9

Gestione a Polling Memoria BOE: BufferOut Empty BIF: BufferIn Full DatiOut Interfaccia Status BOE BIF BufferIn BufferOut CPU DatiIn L interfaccia rende disponibili le informazioni di sincronizzazione su 2 bit del registro di stato. La CPU, ogni qual volta deve eseguire un trasferimento, va prima a leggere il registro di stato (BIF oppure BOE) per verificare se l interfaccia è pronta per il trasferimento. Se l interfaccia è pronta la CPU esegue il trasferimento, viceversa legge in continuazione il registro di stato fino a che questo non segnala che l interfaccia è pronta, quindi esegue il trasferimento. Il trasferimento del dato da parte della CPU (lettura di BufferIn o scrittura di (BufferOut) provoca il CLEAR del bit di sincronizzazione (BIF o BOE) Intro I/O 10

Flusso di un programma che esegue una Operazione di Input a Polling. (1) (2) (3) Inizializzazione Operazione di I/O Lettura Registro Status BIF=1 No Codifica in Assembler (1) MOV SI, 0 (2) WaitDato: IN AL, Status (3) TEST AL, 1 JZ WaitDato (4) IN AL, BufferIn (5) MOV DatiIn[SI], AL INC SI (6) CMP SI, N JNE WaitDato (4) (5) (6) Si Lettura Registro BufferIn Scrittura Vettore DatiIn e incremento indice Fine Operazione di I/O No Si Intro I/O 11

Considerazioni sulla Gestione a Polling Nella Gestione a polling la CPU è periodicamente impegnata ad osservare lo stato della periferica al fine di eseguire un trasferimento non appena quest ultima risulta pronta. Conseguentemente, la CPU ha una scarsa efficianza se si verificano molti tentativi a vuoto di accedere alle periferiche che non abbiano ancora dati né da fornire né da chiedere. Più la periferica risulta lenta rispetto alla frequenza con la quale la CPU effettua il polling su di essa, più le prestazioni della CPU peggiorano. D altra parte, abbassare la frequenza di polling significa degradare le prestazioni delle periferiche lente che sono costrette a lunghe attese prima di poter scambiare un dato dal momento in cui sono pronte, fintanto che la CPU non effetua il polling. Il polling risulta quindi adatto a periferiche in grado di sostenere accessi con una frequenza costante, elevata e simile a quella di polling. La Gestione ad Interrupt, che vedremo successivamente, differisce dal polling perché l iniziativa per l accesso spetta alla periferica che, quando è pronta, chiede alla CPU di effettuare il trasferimento. Per contro, rispetto al polling, un trasferimento dati fatto ad interrupt comporta un maggior numero di operazioni iniziali e finali (quindi tempi più lunghi) e va quindi usato solo se la frequenza delle richieste di interrupt è bassa rispetto a quella di CPU, altrimenti conviene il polling. Intro I/O 12

Gestione ad Interrupt µp DISP I/O INTR ATTENTION S DATA BUS Intro I/O 13

Gestione ad Interrupt Memoria Interfaccia Priority/Enable INTR DatiOut Status BOE BIF BufferIn BufferOut CPU INT DatiIn Quando l interfaccia è pronta ad eseguire un nuovo trasferimento invia alla CPU una richiesta di servizio (detta Interrupt) mediante un apposito segnale (INTR, che per ora possiamo considerare connesso all ingresso INT della CPU). All atto della ricezione della richiesta di servizio la CPU interrompe il programma in esecuzione e trasferisce il controllo (secondo un meccanismo che studieremo successivamente) ad una apposita procedura di servizio (detta Interrupt Handler) che si occupa di effettuare il trasferimento del dato. Una volta effettuato il trasferimento la procedura di servizio restituisce il controllo al programma che era in esecuzione all atto della ricezione dell Interrupt. Nella Gestione ad Interrupt la CPU può eseguire qualsiasi attività durante gli intervalli di tempo che intercorrono fra due situazioni successive di interfaccia pronta (cioè fra due interrupt). Intro I/O 14

Flusso della gestione ad Interrupt Programma principale Subroutine di interruzione Intro I/O 15

Flusso della gestione ad Interrupt di una Operazione di Input Main Program (2) Interrupt Handler Prologo della Procedura (1) Inizializzazione Operazione di I/O (3) Lettura Registro BufferIn INT Attività Utile (4) Scrittura Vettore DatiIn e incremento indice (8) Fine Operazione di I/O Si No (5) (7) Ultimo Dato No Epilogo della Procedura Si Segnalazione Fine Op. di I/O (6) Intro I/O 16

Intr: codifica in Assembler INT Main Program (1) MOV Index, 0 MOV FineOp,0 Attività Utile (8) WaiitFineOp: CMP FineOp, 1 JNE WaitFineOp Interrupt Handler (2) PUSH AX PUSH SI MOV SI, Index (3) IN AL, BufferIn (4) MOV DatiIn[SI], AL INC SI MOV Index, SI (5) CMP SI, N JNE Epilogue (6) MOV FineOp, 1 (7) Epilogue: POP SI POP AX IRET Intro I/O 17

Interrupt Controller µp IREQ1 DISP I/O 1 INTR INTR CONTROLLER IREQ2 DISP I/O 2 INTA* IREQN DISP I/O N DATA BUS Intro I/O 18

Considerazioni sulla Gestione a Interrupt La Gestione ad Interrupt consente un utilizzo efficiente della CPU: la CPU può essere impegnata in altre attività durante i tempi morti che intercorrono fra gli istanti in cui l interfaccia è pronta ad eseguire un nuovo trasferimento. E opportuno sottolineare che se l Operazione di I/O richiede il trasferimento di N dati l interfaccia genererà N richieste di servizio (cioè N Interrupt) e conseguentemente l Interrupt Handler verrà eseguito N volte. Ad ogni esecuzione l Interrupt Handler trasferisce un solo dato. Poiché i trasferimenti sono eseguiti dall Interrupt Handler, è necessario prevedere un meccanismo di sincronizzazione fra quest ultimo ed il Main Program. Nell esempio mostrato la sincronizzazione è effettuata tramite la variabile FineOp, azzerata dal Main Program nella fase di inizializzazione e messa a 1 dall Interrupt Handler quando ha completato l Operazione di I/O. La Gestione ad Interrupt è particolarmente adatta ai Sistemi Multitasking: un task (programma), dopo aver lanciato l Operazione di I/O viene sospeso dal Sistema Operativo e la CPU viene assegnata ad un altro task. Il task sospeso viene poi rimesso in esecuzione quando l Operazione di I/O è stata completata dall Interrupt Handler (che fa parte del kernel del Sistema Operativo). Intro I/O 19

Gestione in DMA MONDO ESTERNO MEM µp DISP I/O DATA BUS Intro I/O 20

DMA Controller ADDRESS BUS MEM µp HOLD HOLDA DMA CONTR ATT DISP I/O MEMWR* IORD* DATA BUS Intro I/O 21

Generico dispositivo di IO BD0 BD1 DATA0 DATA1 Interfaccia verso il µp BD7 CS2000* IORD* IOWR* DATA7 CS* RD* WR* Interfaccia verso il mondo esterno LA0 LA1 A0 A1 ATT1 ATT2 Intro I/O 22

Disp I/O - Collegamento al µp µp A8:15 A8:15 PAL AD0:7 AD0:7 LATCH LA0:15 DISP I/O BIOM CS2000* CS* ALE LE OE* 74XX245 LA0 LA1 A0 A1 A1 A2 B1 B2 BD0:7 DATA0:7 A8 B8 DIR OE* DT/R* DEN* RD* IO/M* IORD* RD* WR* WR* IOWR* Intro I/O 23

Disp I/O - Registri interni selezionati con le sole linee di indirizzo (1) DISP I/O PAL LA2:15 CS2000* CS* REG.3 REG.2 REG.1 LA0 LA1 A0 A1 REG.0 Intro I/O 24

Accesso ai registri interni dell interfaccia con selezione dell indirizzo (2) Hyp. (1) : CSPER = A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 La CPU vede i 4 registri interni dell interfaccia agli indirizzi: BufferIn: 80H (128), BufferOut: 81H (129), Status: 82H (130), Control: 83H (131) Hyp. (2) : La configurazione binaria (Control Word) che è necessario scrivere nel registro di controllo per far si che l interfaccia funzioni nel modo desiderato è 11010100 (D4H). Un programmatore che deve scrivere un programma Assembler (IA16) che ha la necessità di accedere ai registri dell interfaccia utilizzerà (tipicamente) la direttiva EQU per definire degli identificatori associati alle costanti che rappresentano gli indirizzi dei registri e la Control Word: BufferIn BufferOut StatusRegister ControlRegister ControlWord EQU 80H EQU 81H EQU 82H EQU 83H EQU D4H Intro I/O 25

Accesso ai registri interni dell interfaccia con selezione dell indirizzo (3) Programmazione dell interfaccia Nella porzione di programma che si occupa di inizializzare tutte le periferiche programmabili presenti nel sistema il programmatore inserirà le seguenti istruzioni: MOV AL, ControlWord OUT ControlRegister, AL ; caricamento in AL della costante ControlWord ; trasferimento del contenuto di AL nel registro ; mappato all indirizzo ControlRegister dello spazio di I/O Lettura dello stato Ogni qual volta il programma ha la necessità di leggere lo stato della periferica (ad esempio per controllare se si sono verificati degli errori oppure, come vedremo meglio in seguito, per sincronizzare il programma con l Unità di I/O connessa al sistema tramite l interfaccia) il programmatore inserirà la seguente istruzione: IN AL, StatusRegister ; caricamento in AL del contenuto del registro mappato ; all indirizzo StatusRegister dello spazio di I/O Intro I/O 26

Accesso ai registri interni dell interfaccia con selezione dell indirizzo (4) Trasferimento di dati (Input) Supponiamo che il programma debba ricevere una sequenza di dati dall Unità di I/O e memorizzarli nel vettore DatiIn (Operazione di Input). Supponiamo inoltre che il programma sia opportunamente sincronizzato con l Unità di I/O (il programma va a leggere un dato dall interfaccia quando questo è stato effettivamente reso disponibile in BufferIn dall Unità di I/O). In queste ipotesi il programmatore inserirà le seguenti istruzioni al fine di prelevare l i-esimo dato della sequenza: IN AL, BufferIn MOV DatiIn[SI], AL INC SI ; trasferimento in AL del contenuto del registro ; mappato all indirizzo BufferIn dello spazio di I/O ; trasferimento del contenuto di AL nella cella di indice SI del vettore DatiIn. Se il programma ; sta prelevando l i-esimo dato SI, che è stato opportunamente inizializzato, contiene il valore i-1 ; incremento dell indice del vettore, che così punta alla cella di memoria in cui deve essere ; inserito il prossimo dato prelevato dall interfaccia Intro I/O 27

Accesso ai registri interni dell interfaccia con selezione dell indirizzo (5) Trasferimento di dati (Output) Supponiamo che il programma debba inviare una sequenza di dati memorizzati nel vettore DatiOut all Unità di I/O (Operazione di Output). Supponiamo inoltre che il programma sia opportunamente sincronizzato con l Unità di I/O (il programma va a scrivere un dato sul registro BufferOut dall interfaccia quando questo registro è vuoto, cioè quando l Unità di I/O ha ricevuto il dato inviato precedentemente). In queste ipotesi il programmatore inserirà le seguenti istruzioni al fine di inviare l i-esimo dato della sequenza: MOV AL, DatiOut[SI] INC SI ; trasferimento in AL del contenuto della cella di indice SI del vettore ; DatiOut. Se il programma sta inviando l i-esimo dato SI, che è stato ; opportunamente inizializzato, contiene il valore i-1 OUT BufferOut, AL ; trasferimento del contenuto di AL nel registro mappato all indirizzo ; BufferOut dello spazio di I/O. ; incremento dell indice del vettore, che così punta alla cella di memoria ; da cui deve essere prelevato il prossimo dato da inviare all interfaccia Intro I/O 28

1 2 Disp I/O - Registri interni selezionati con indirizzi e segnali di comando (1) BD0:7 REG. OUT INTERF. CS* WR* SIST. A0 REG. IN INTERF. REMOTO RD* OE* Intro I/O 29

Disp I/O - Registri interni selezionati con indirizzi e segnali di comando (2) BD0:7 REG. OUT INTERF. CS* WR* A0 REG. IN INTERF. SIST. REMOTO RD* OE* COMMAND REG. STATUS REG. OE* Intro I/O 30

Disp I/O - Registri interni selezionati con decodifica sequenziale DISP I/O RES CONT X 3 SEL0 SEL1 DEC REG.0 REG.1 REG.2 CS* WR* A0 D0:7 Intro I/O 31

Disp I/O - Registri interni selezionati con decodifica indiretta DISP I/O D0:7 D6:7 DEC REG.0 REG.1 REG.2 D0:5 CS* WR* A0 Intro I/O 32