Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo:...

33
Comandi ai dispositivi di I/O Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory mapped)

Transcript of Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo:...

Page 1: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Comandi ai dispositivi di I/O

Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory mapped)

Page 2: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Istruzioni specifiche contengono:

Lidentificatore del dispositivo e una parola di comando Identificatore del dispositivo: la CPU comunica

lidentificatore per mezzo di fili dedicati che fanno parte del bus di I/

Parola di comando: normalmente viaggia sui fili dedicati ai dati

Page 3: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Memory-mapped I/O:

Parte dello spazio di indirizzamento ₩ dedicato allI/O

Letture e scritture agli indirizzi di I/O sono interpretati come comandi di I/O

I programmi utente non possono eseguire direttamente operazioni di I/O: Lo spazio di inidirizzamento di I/O ₩ protetto per

mezzo della protezione degli spazi di indirizzamento (vedere in seguito largomento memoria virtuale)

Page 4: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Significato degli indirizzi

A ciascun indirizzo sono assegnati uno o piu dati e/comandi

Leggere e scrivere hanno spesso degli effetti collaterali, ad esempio svuotare un buffer.

Page 5: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Esempio di lettura da tastiera generica

I dati arrivano a intervalli casuali e uno alla volta

I dati arrivano lentamenteLa tastiera puo avere o non avere un dato

disponibileLa tastiera puo essere rotta

Page 6: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Esempio di lettura da tastiera generica, cont.

Registri (logici) di interfaccia: Ready (un carattere disponibile) 1 bit Errori (overrun cioe carattere perso e errore hardware)

2 bit Dati in uscita 7-8 bit Quanti indirizzi? Anche uno solo in sola lettura Comandi? Se carattere disponibile allora cancella il

dato dal buffer Mappabili in un solo word!

Page 7: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Esempio di scrittura su terminale seriale

I dati si possono mandare quando si vuole ma non se il dispositivo sta ancora processando il carattere precedente

Non occorre mandare i dati molto velocemente

Il terminale puo essere rotto

Page 8: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Esempio di scrittura su terminale seriale, cont.

Registri (logici) di interfaccia: Busy, non puo accettare un nuovo carattere; 1

bit Errore: malfunzionamento generico, fornito

carattere troppo presto; 2 bit Dati in ingresso: 7-8 bit Quanti indirizzi? Uno solo ma in lettura e

scrittura: leggi i bit di stato e scrivi i dati

Page 9: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Come i dispositivi di I/O comunicano con lOSLOS deve sapere quando:

Un dispositivo ha completato unoperazione Unoperazione ha causato un errore

Ci sono due modi di implementare questa comunicazione tra OS e dispositivo: Polling Interrupt

Page 10: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Polling:

Il dispositivo mette le informazioni in un registro di stato (possibilmente mappato in memoria)

LOS controlla periodicamente il registro di stato

Page 11: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Interrupt: Quando un dispositivo ha bisogno dellattenzione

della CPU fa in modo di interrompere lesecuzione delle istruzioni e fa passare lOS a gestire il dispositivo (vedere in seguito come questo ₩ possibile).

Linterruzione avviene SEMPRE tra unistruzione e laltra.

Il programma interrotto non si accorge di nulla (a meno che le cause per linterruzione abbiano a che fare con il programma stesso)

Page 12: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Polling: I/O programmato

Vantaggi: Semplice: la CPU ₩ totalmente in controllo e fa tutto il

lavoro Svantaggi:

Loverhead di polling può sprecare molte risorse

CPU

controllore

dispositivo

Memoria

Dati pronti?

Leggidati

Memorizzadati

si no

finito? no

si

busy loop, pocoEfficiente soprattuttoSe la CPU ₩ veloce

I controlli dello statoDi I/O possono essere

Inseriti tra codice computeIntensive

Page 13: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Polling, esempio di prestazioni

Assumiamo 400 cicli per ciascuna operazione di polling, compreso riattivazione del programma utente e un processore che esegue 500 milioni di istruzioni al secondo

Mouse: 30 eventi al secondo, 30 x 400 = 12000 cicli al secondo; 12 mila / 500 milioni = 0.002 %

Page 14: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Polling, esempio di prestazioni, cont.

Assumiamo 400 cicli per ciascuna operazione di polling, compreso riattivazione del programma utente e un processore che esegue 500 milioni di istruzioni al secondo

Floppy: 50 Kbyte/sec, due byte alla volta, circa 25 mila accessi/sec X 400 =10 milioni di istruzioni al secondo o 2% del processore

CHIARAMENTE la gestione di un disco in polling non ha senso

Page 15: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Polling, esempio di prestazioni, cont.

Assumiamo 400 cicli per ciascuna operazione di polling, compreso riattivazione del programma utente e un processore che esegue 500 milioni di istruzioni al secondo

Disco: 4 Mbyte/sec in 16 byte alla volta da 250K operazioni al secondo X 400 = 100 milioni di istruzioni al secondo o 20% della CPU

Page 16: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Trasferimento con interrupt

Vantaggi: Lavanzamento del programma utente si ferma solo

durante il trasferimento effettivo Svantaggi, ci vuole hardware particolare per:

Generare un interrupt (nel dispositivo) Riconoscere un interrupt (CPU) Salvare lo stato per riprendere dopo linterrupt (CPU)

addsubandornop

readstore...rti

memoria

Programmautente(1) I/O

interrupt

(2) salva PC

(3) IndirizzoDi gestioneinterrupt

ProceduraDi serviziointerrupt(4)

ritorno

CPU

controllore

dispositivo

Memoria

:

Page 17: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Interrupt, esempio di prestazioni

Come per il disco dellesempio di polling precedente: 500 istruzioni per gestire linterrupt ed

acquisire 16 byte, 250K X 500 = 25% della CPU

MA se il disco e attivo solo il 5% del tempo in questo caso il 5% di 25% = 1.25% !!

Linterrupt vince perche una periferiche non e mai SEMPRE attiva.

Page 18: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Eccezioni, come per linterrupt

Interruzioni del flusso di esecuzione per cause legate allesecuzione stessa (invece che cause legate a eventi INDIPENDENTI)

Esempi: Divisione per zero Passaggio al sistema operativo (trap, system

call)

Page 19: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Gestione delle eccezioni, sospensione programma corrente

Il processore deve terminare (se puo) lesecuzione dellistruzione corrente o comunque andare in uno stato ben definito (cio e talvolta difficile in processori implementati in modo molto sofisticato)

Il program counter deve essere salvato Lo stato deve essere salvato

Page 20: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Salvataggio stato, cont.

Lo stato deve essere salvato in una struttura a pila o tale da garantire la possibilita di salvare piu volte prima di ritornare, cioe quando un interrupt interrompe la gestione di un altro interrupt.

Page 21: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Salvataggio stato

Puo essere fatto sia in hardware che con un misto di hardware e software.

E critico che, se fatto in software, lhardware provveda a salvare quanto il sofware non puo (tipicamente almeno il program counter).

Il sofware deve essere molto attento a non modificare lo stato prima di salvarlo

Page 22: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Gestione delle eccezioni, gestione del problema

La seconda fase dopo aver salvato lo stato e individuare il problema e decidere quale codice eseguire.

Anche qui la gestione puo essere preminentemente software o hardware Registro di stato (es. MIPS)

» Un registro contiene un codice che identifica lerrore Vettore (es. X86)

» Lhardware forza lesecuzione a un indirizzo che dipende dal tipo di errore (e dove presumibilmente si e messo del codice apposito)

Page 23: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Gestione del problema

Sarebbe pericoloso gestire il problema (o lI/O) nello stesso spazio di esecuzione dellutente e quindi ci vuole un passaggio di livello che viene implementato al momento della chiamata al codice di gestione dellinterrupt (questa e unaltra funzione implementabile solo in hardware)

Page 24: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Ritorno da interrupt

Infine bisogna tornare, se possibile, al programma utente ripristinando il suo stato. Hardware: cambiamento di livello Software o hardware: ripristino stato.

Page 25: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Priorita Dalla descrizione precedente e chiaro che un

interrupt potrebbe essere interrotto a sua volta. Occorre: Stabilire una gerarchia di interrupt per evitare che si

creino dei problemi » Logici se il codice interrotto esegue delle funzioni che

mettono temporaneamente la macchina in uno stato non corretto, ad esempio cambiando strutture dellOS

» Prestazionali se il codice interrotto aveva delle necessita temporali che non sono piu rispettate a causa della sua interruzione

Page 26: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Eccezioni, esempi Overflow aritmetico (puo tipicamente essere

inibita) Divisione per zero Risultato non normalizzabile di unoperazione

floating-point Accesso a dati non allineati Istruzione non definita Chiamata a OS, questa ovviamente non e una

condizione di errore!! Accesso a memoria non esistente, listruzione non

puo essere terminata!! Ma deve essere ripresa dopo aver sistemato il problema

Page 27: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Interrupt rispetto a eccezioni

Un interrupt ₩ come un eccezione solo che: Un interrupt ₩ asincrono Richiede che dellinformazione ulteriore venga fornita dal

dispotivo Un interrupt non ₩ associato con una specifica istruzione Un interrupt non impedisce che unistruzione termini

» La CPU può gestire un interrupt quando desidera (ovviamente prima possibile)

Linterrupt ₩ più complicato di un eccezione: Deve acquisire lidentità del dispositivo che lha causato Le richieste di interrupt possono avere diversi livelli di

urgenza:» Le richieste di interrupt devono essere ordinate secondo priorità

Page 28: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Esempio, gestione in interrupt della tastiera

Si deve assegnare al bit di carattere disponibile un interrupt

Il codice del driver gestisce un piccolo buffer Se lutente chiede un carattere lo fornisce dal buffer o

ritorna un errore se il buffer e vuoto. NON FA ALTRO

Il codice di interrupt se viene attivato legge il carattere e lo mette nel buffer del driver. In caso di errore del dispositivo o di buffer troppo

pieno segnala al sistema operativo la condizione di errore

» LOS puo semplicemente loggare il problema o terminare il programma utente.

Page 29: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Delegazione della responsabilità

per lI/O: DMADirect Memory Access

(DMA): Esterno alla CPU Master del bus Trasferisce interi blocchi

senza lintervento della CPU

CPU

controllore

dispositivo

Memoria DMAC

La CPU comunica lindirizzo di partenzaDirezione e dimensioni al controllore.Poi dà il comando di partire

DMAC fornisce tutti i segnaliPer la memoria e per il controlloreDi I/O

Page 30: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

DMA: concetti base

Il DMA e potenzialmente indipendente dal tipo di I/O usato (memory mapping, polling, interrupt) anche se usa tipicamente linterrupt.

Il DMA non fa che eseguire quello che la CPU avrebbe eseguito.

Alla fine delloperazione il DMA si comporta rispetto alla CPU come un dispositivo che segnala la fine delloperazione.

Page 31: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Compiti del sistema operativo

Il sistema operativo agisce da interfaccia tra: Lhardware e il programma che ha chiesto lI/O

Tre caratteristiche del sistema di I/O: Condiviso da più programmi Usa linterrupt per comunicare informazioni

riguardanti lI/O.» Gli interrupt devono essere gestiti dallOS perch₩

richiedono un accesso protetto alla CPU Il controllo di un dispositivo di I/O può essere

molto complesso:» Gestione una serie di eventi concorrenti» Le necessità di un particolare dispositivo possono essere

molto complesse

Page 32: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Compiti del sistema operativo

Protegge risorse condivise Garantisce che un utente acceda a un dispositivo o a una

parte di esso solo se ne ha il diritto Fornisce unastrazione per laccesso ai dispositivi:

Fornisce funzioni per gestire un dispositivo Gestisce gli interrupt Fornisce una condivisione di accesso che garantisce

accesso a tutti gli utenti

Page 33: Comandi ai dispositivi di I/O + Si usano due metodi per mandare informazioni a un dispositivo: Istruzioni specifiche di I/O I/O mappato in memoria (memory.

Comunicazione tra I/O e OS

Il sistema operativo deve prevenire: Accesso diretto dei programmi ai dispositivi

Se gli utenti potessero fare I/O direttamente: Le risorse condivise non sarebbero protette

Tre tipi di comunicazione sono richiesti: LOS deve poter dare comandi Il dispositivo deve poter notificare lOS in caso di

terminazione o errori Deve trasferire i dati