L’organizzazione della
comunicazione di I/O
G. Vercelli
 Interruzioni
 DMA
 Interfacciamento
 Device Drivers
Generalità
 capacità di scambiare dati con altri dispositivi
 dispositivi di I/O tradizionali
• tastiera di un terminale video
• schermo
stampante
• plotter
• dischi magnetici
• dispositivi per i nastri magnetici
Generalità (continua)
 applicazioni di controllo industriale, ingressi e
uscita digitale di:
•
•
•
•
•
•
voltmetro
sensore di temperatura
allarme antincendio
motore
valvola
robot
Generalità (continua)
 Un calcolatore di uso generale deve poter essere
collegato a dispositivi con caratteristiche
differenti, che operano in ambienti molto
variabili.
 le operazioni di I/O dal punto di vista del
programmatore
Dispositivi di I/O
 Organizzazione del bus
 I/O mapped I/O
 memory mapped I/O
Memory-mapped I/O
Con l'I/O associato a un indirizzo di memoria, ogni istruzione macchina che
può accedere alla memoria può essere impiegata per trasferire dati da e verso
un dispositivo di I/O. Per esempio, se DATAIN è l'indirizzo del buffer di
ingresso associato alla tastiera, l'istruzione
Move DATAIN,RO
legge il dato da DATAIN e lo memorizza nel registro RO del processore. Allo
stesso modo, l'istruzione
Move RO,DATAOUT
invia il contenuto del registro RO alla locazione DATAOUT, che può essere il
buffer dei dati in uscita di un'unità video o di una stampante.
Schemi di mappatura
 Motorola 68000: memory-mapped I/O
 Intel 80X86: istruzioni speciali di I/O e spazio
di indirizzamento a 16 bit, ma anche memorymapped I/O
 PowerPC: stesso spazio di memoria o separato
(registro speciale per cambio di contesto)
Interfaccia di I/O
 Decodificatore degli indirizzi
 Registri dei dati e di stato
 Circuiti di controllo
Registri di una Interfaccia di I/O
 Registro di Stato con:
• flag di sincronizzazione
SIN
SOUT
 Registri di Scambio Dati
• DATAIN
• DATAOUT
Problema del Busy-Waiting
Un programma che legge una riga di caratteri
dalla tastiera e la invia al terminale video.
Move
ASPETTAT TestBit
Branch = O
Move
ASPETTAV TestBit
Branch = O
Move
Move
Compare
Branch  O
CALL
#LINEA,R1 Inizializza il puntatore alla memoria.
#O,STATUS Verifica SIN.
ASPETTAT Aspetta che venga inserito un carattere.
DATAIN,RO Leggi un carattere.
#1,STATUS Verifica SOUT.
ASPETTAV Aspetta finché il video non è pronto.
RO,DATAOUT
Manda un carattere al video.
RO,(R1)+
Memorizza il carattere e incrementa il puntatore.
#$OD,RO
Controlla se c'è il ritorno a capo.
ASPETTAT Se non c'è, prendi un altro carattere.
PROCESSO Chiama una proc. per elaborare la riga in ingresso.
Esempio di I/O “controllato da programma”.
Altre soluzioni:
1) interrupt, 2) direct memory access (DMA)
Interrupt
Il meccanismo di interruzione è caratterizzato da
tre elementi:
 INTR (interrupt request, di solito attiva bassa)
= linea di richiesta di interruzione
 INTA (interrupt acknowledge, di solito attiva
bassa) = segnale di riscontro della interruzione
 Procedura di servizio della interruzione
Interruzioni
Gestione di un interrupt
 Riconoscimento dell’interrupt
 Selezione della procedura di servizio
 Salvataggio del contesto
 Esecuzione della procedura di servizio
 Ripristino del contesto
Problemi legati alle interruzioni
 Cambio del contesto = Context switch (legato
al sistema operativo, al minimo PS e PC in
modo automatico, ma anche altre informazioni
presenti nei registri)
 latenza di interrupt
 abilitazione e disabilitazione degli interrupt
Interruzioni e Programmazione
 Un interrupt non è solo un meccanismo di
coordinamento dei trasferimenti di I/O, ma
serve a gestire anche:
– eventi esterni ed interni
– trasferimento del controllo da un processo ad un
altro (scheduling in tempo reale)
Scheduling e Interrupt
 Un sistema operativo multitasking e
pre-emptive (che gestisce più processi
contemporaneamente mediante la sospensione
dell’esecuzione su eventi sincroni/asincroni)
deve poter gestire in modo efficiente gli
interrupt.
Interrupt, trap, exception, signal
 Interrupt hardware =
evento (generalmente
asincrono) legato a un
dispositivo di I/O, che
costringe il processore a
sospendere l’esecuzione
di un processo.
 Interrupt software =
evento (generalmente
asincrono) legato a una
condizione anomala
(trap, exception, signal)
che si verifica
nell’esecuzione di una
istruzione.
Caso: singolo Interrupt da un
dispositivo
Possibile problema: annidamento degli interrupt
(durante l’esecuzione della procedura di servizio
sopraggiunge un nuovo interrupt).
1 soluzione : ignora tramite disabilitazione
2 soluzione : disabilitazione automatica ma con
mascheramento
3 soluzione : edge-triggered
Scenario tipico (poco efficiente)
1.
2.
3.
4.
5.
6.
il dispositivo produce una richiesta di interrupt (INTR);
il processore interrompe il programma in esecuzione in
quel momento;
gli interrupt vengono disabilitati (DI);
si informa il dispositivo che la sua richiesta è stata
riconosciuta (INTA), e come risposta, il dispositivo
disattiva il segnale di richiesta di interrupt;
l'azione richiesta dall'interrupt viene eseguita dalla
procedura di servizio degli interrupt;
si ripristina l'esecuzione del programma interrotto,
abilitando nuovamente gli interrupt (EI).
Gestione di più dispositivi di I/O
1.
Come può il processore riconoscere da quale dispositivo
proviene 1' interrupt?
R.: linea comune oppure linee separate
2.
Come deve operare il processore per ottenere l'indirizzo
di partenza della procedura appropriata per gestire un
determinato interrupt, considerando che differenti
dispositivi probabilmente richiedono procedure diverse
di servizio degli interrupt?
R.: interrupt vector table
3.
Come un dispositivo riesce ad interrompere il
processore mentre questo sta servendo un altro
interrupt? Come possono essere gestite due o più
richieste contemporanee di interrupt?
R.: livelli di priorità
Generazione del segnale IRQ
Identificazione del dispositivo
 Viene cambiato lo stato del dispositivo
interrompente (IRQ alto)
 Soluzione del problema di identicazione:
1. Polling = interrogazione ciclica dei dispositivi
2. Interrupt vettorizzati (autoidenticazione tramite
interrupt vector)
Problemi di efficienza
 Un lungo ritardo nella emissione di INTA può
provocare errori nella gestione del tempo reale
(ad es. real time clock)
 Soluzione: organizzazione dei dispositivi
secondo (classi di) PRIORITÀ e
mascheramento selettivo
Arbitraggio delle priorità
Schemi di Interrupt
 Daisy Chain = soluzione in caso di
richieste simultanee di interrupt
Schemi di Interrupt
 Gruppi di priorità + daisy chain: maggiore
flessibilità
Eccezioni
 Le interruzioni sono un tipo particolare di
“eccezioni”.
 Gestione degli errori (TRAP): controllo di
parità, istruzioni non ammissibili, divisioni per
zero, violazione di indirizzamento, eccezioni di
privilegio (modo kernel)
 DEBUGGING: trace e breakpoints
Gestione delle eccezioni software
 Linguaggio C: SIGNAL HANDLERS
 C++ e JAVA:
try {…}except {…} catch {…}
DMA: Accesso diretto alla memoria
 Approccio alternativo a polling e interrupt per
il trasferimento di grandi quantità di dati ad alta
velocità (DATA BLOCK TRANSFER).
 Il controllo del trasferimento dati è delegato dal
processore a uno o più DMA CONTROLLER.
 Il processore comunica al controller: l’indirizzo
di partenza del blocco, il numero di byte da
trasferire e la direzione del trasferimento.
DMA
 segnali di STATO utilizzati nel DMA:
IRQ, IE, Done
 registri: BASE e COUNTER
In caso di più controllori DMA, si usano le
tecniche di daisy chain e abitraggio delle
priorità per gestire i vari dispositivi I/O
R/W,
Furto di ciclo (Cycle Stealing)
 In generale può sorgere un conflitto sul
possesso del bus tra processore e controller
DMA.
 Per risolvere i conflitti si usa un ARBITRO del
BUS: quando il DMA acquisisce il controllo sul
bus, si dice che “ruba” i cicli di accesso in
memoria al processore.
Arbitraggio del bus 1
Meccanismo centralizzato:
 Un controller DMA fa richiesta del bus (BUS
REQUEST)
 Se non vi sono conflitti, l’arbitro (il processore)
concede il bus (BUS GRANT)
 Il controller richiedente diventa BUS MASTER
attivando il segnale BUS BUSY
Arbitraggio del bus 2
Meccanismo distribuito:
 se uno o più controller DMA richiedono il bus
attivano il segnale START-ARBITRATION,
ponendo il proprio codice di priorità sulle linee
di arbitraggio del bus (in OR tra loro)
 ognuno confronta il codice presente sul bus con
quello proprio a partire dal bit più significativo:
chi vince la contesa guadagna il bus
Circuiti di Interfaccia 1
 L’interfaccia di I/O è costituita dalla logica
necessaria a trasferire i dati fra bus a
dispositivo. Dal lato del dispositivo di I/O può
essere di tipo PARALLELA o SERIALE, dal
lato del bus è sempre parallela.
Funzioni di una interfaccia di I/O
 fornire un buffer di memoria nei confronti del processore e del




dispositivo di I/O
contenere i flag di stato utili al processore per capire se il buffer
è pieno/vuoto
decodificare gli indirizzi con cui viene identificato il dispositivo
di I/O
generare i segnali di temporizzazione richiesti dallo schema di
controllo del bus
eseguire le conversioni di formato richieste per il trasferimento
dei dati (es. seriale - parallelo)
Esempio di Interfaccia di I/O
Scarica

disp_IO