Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O...

21
Operating System Concepts Silberschatz and Galvin1999 12.1 Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per l’I/O del kernel Trasformazione delle richieste di I/O in operazioni dell’hardware Prestazioni

Transcript of Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O...

Page 1: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.1

Il sistema di I/O

• Hardware di I/O

• Interfaccia di I/O per le applicazioni

• Sottosistema per l’I/O del kernel

• Trasformazione delle richieste di I/O in operazioni dell’hardware

• Prestazioni

Page 2: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.2

Hardware di I/O

• Esiste una incredibile varietà di dispositivi di I/O.

• Concetti comuni:

– Porta

– Bus (daisy chain o accesso diretto condiviso)

– Controller (host adapter)

• Le istruzioni di I/O controllano i dispositivi.

• I dispositivi hanno indirizzi usati da:

– Istruzioni dirette di I/O

– Memory-mapped I/O

Page 3: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.3

Polling

• Determina lo stato di un dispositivo:– command-ready– busy– error

• Si ha un ciclo busy-wait per attendere l’I/O dal dispositivo.

Page 4: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.4

Interrupt

• La linea di richiesta dell’interrupt della CPU viene settata dal dispositivo di I/O.

• Il gestore di interrupt (interrupt–handler) riceve gli interrupt.

• Alcuni tipi di interrupt possono essere mascherati, per ignorarli definitivamente o rimandarne il servizio.

• Il vettore degli contiene gli indirizzi di memoria dei gestori specializzati.

– Basato su priorità

– Alcuni sono non mascherabili

• Il meccanismo di interrupt viene impiegato anche per le eccezioni.

Page 5: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.5

Ciclo di I/O guidato da interrupt

Page 6: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.6

Accesso diretto alla memoria – DMA

• Viene impiegato per evitare l’I/O programmato (PIO) per trasferimenti di grandi quantità di dati.

• Richiede un controller di DMA.

• Si evita così di sovraccaricare di compiti la CPU: è il controller di DMA che si occupa di trasferire i dati direttamente tra il dispositivo di I/O e la memoria.

Page 7: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.7

Passi di un trasferimento DMA

Page 8: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.8

Interfaccia di I/O per le applicazioni

• Le chiamate di sistema di I/O incapsulano i comportamenti dei dispositivi in classi generali.

• Lo strato dei driver dei dispositivi nasconde al sottosistema di I/O del kernel le differenze fra i controller dei dispositivi di I/O.

• I dispositivi possono differire per molteplici aspetti:

– Character–stream o block–stream (trasferimento a flusso di caratteri o di blocchi);

– Accesso sequenziale o casuale;

– Dispositivo sincrono o asincrono, condivisibile o dedicato;

– Velocità di funzionamento;

– Lettura e scrittura, sola lettura o sola scrittura.

Page 9: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.9

Dispositivi con trasferimento a blocchi o a caratteri

• Dispositivi con traserimento a blocchi comprendono principalmente drive di dischi:

– Il dispositivo comprende istruzioni del tipo read, write, seek;

– Raw I/O (I/O di basso livello);

– Possibilità di accesso ai file mappato in memoria.

• Dispositivi a caratteri comprendono tastiere, mouse, porte seriali:

– Comandi classici sono get, put;– Con l’uso di librerie appropriate permettono l’accesso per

righe e la gestione di un buffer.

Page 10: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.10

Dispositivi di rete

• Variano molto dai dispositivi per il trasferimento di I/O a blocchi e/o caratteri fino a presentare una propria interfaccia specifica.

• Unix e Windows/NT comprendono un’interfaccia socket:

– Separa il protocollo di rete dalle operazioni di rete;

– Include la funzionalità select.

• Gli approcci variano molto (pipe half–duplex, FIFO full–duplex, stream full–duplex, code di messaggi, socket)

Page 11: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.11

Clock e Timer

• Forniscono il tempo corrente, il tempo trascorso, regolano un timer per avviare l’operazione X al tempo T.

• Se impiega un interval timer per la tempificazione: con questo meccanismo è possibile avere interrupt periodici.

• La system call ioctl (su UNIX) controlla vari aspetti di I/O come clock e timer.

Page 12: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.12

I/O bloccante e non bloccante

• I/O bloccante: il processo viene sospeso fino al completamento dell’operazione di I/O.

– Facile da usare e da comprendere;– Per alcuni scopi è insufficiente.

• I/O non-bloccante: la chiamata ad I/O ritorna appena possibile (dopo aver iniziato il trasferimento di dati).

– Utile per processi utente, e per trasferimento dati, ad esempio da disco a schermo (I/O bufferizzato);

– Viene implementato per mezzo di multi-threading;– Ritorna rapidamente con il numero di byte letti o scritti.

• I/O asincrono: il processo prosegue mentre avviene l’I/O. – Difficile da usare;– Il sottosistema di I/O segnala al processo il completamento

dell’I/O.

Page 13: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.13

Sottosistema di I/O del kernel

• Scheduling

– Alcune richieste di I/O sono ordinate per mezzo di code in ciascun dispositivo;

– Il sistema operativo è equo: nessuna applicazione deve ricevere un servizio carente, da maggiore priorità ad applicazioni inficiate da un ritardo nel servizio.

• Buffering: si memorizzano i dati in memoria mentre avviene il trasferimento fra dispositivi.

– Utile per gestire la differenza di velocità dei dispositivi;

– Per gestire la differenza di dimensione dei blocchi di trasferimento dei dispositivi;

– Per mantenere la “semantica di copia”.

Page 14: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.14

Kernel I/O Subsystem

• Caching: una regione di memoria veloce che serve per mantenere copie di certi dati. L’accesso a queste copie è più rapido che l’accesso agli originali.

• Spooling: è un buffer contenente output per un dispositivo che non può accettare flussi interfogliati di dati (ad esempio, una stampante).

• Prenotazione di un dispositivo: fornisce accesso esclusivo ad un dispositivo.

– System call per allocazione e deallocazione dei dispositivi;

– Responsabilità di evitare i deadlock.

Page 15: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.15

Gestione degli errori

• Un sistema operativo che usi la protezione della memoria può recuperare varie situazioni di errore, ad esempio, errori di lettura di un disco, errori per dispositivi non disponibili o errori di scrittura momentanei.

• La maggior parte dei sistemi operativi restituisce un codice di errore quando una richiesta di I/O fallisce.

• I file log di errori possono essere consultati per avere statistiche sul funzionamento del sistema.

Page 16: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.16

Strutture dati del kernel

• Il kernel mantiene informazioni sullo stato dei componenti coinvolti nelle operazioni di I/O, come la tabella dei file aperti e la tabella delle socket.

• Moltissime strutture dati complesse tengono traccia dell’allocazione dei vari buffer, dell’allocazione della memoria e dei blocchi “dirty”.

• Alcuni sistemi operativi utilizzano metodologie object-oriented e message passing per l’implementazione dell’I/O.

Page 17: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.17

Trasformazione delle richieste di I/O in operazioni hardware

• Si consideri la lettura di un file su disco da parte di un processo:

– Si determina il dispositivo su cui il file è memorizzato;

– Si opera la traduzione fra nome del dispositivo e suo driver fisico;

– Si leggono i dati dal disco in un buffer;

– Si rendono i dati disponibili al processo che li ha richiesti;

– Si ritorna il controllo al processo richiedente.

Page 18: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.18

Schema di esecuzione di una richiesta di I/O

Page 19: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.19

Prestazioni

• L’I/O è un fattore fondamentale per le prestazioni dell’intero sistema:

– Richiede un notevole impegno della CPU per l’esecuzione del codice dei driver e per lo scheduling dei processi;

– Produce numerosi context switch dovuti agli interrupt;

– Sovraccarica il bus della memoria durante i trasferimenti di dati tra i controller e la memoria fisica e tra i buffer del kernel e lo spazio di indirizzamento delle applicazioni.

Page 20: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.20

Comunicazione fra computer

Page 21: Silberschatz and Galvin 1999 12.1 Operating System Concepts Il sistema di I/O Hardware di I/O Interfaccia di I/O per le applicazioni Sottosistema per lI/O.

Operating System Concepts Silberschatz and Galvin1999 12.21

Come migliorare le prestazioni

• Ridurre il numero di context switch.

• Ridurre il numero di trasferimenti di dati.

• Ridurre il numero di interrupt, trasferendo grossi volumi di dati, utilizzando controller intelligenti e polling.

• Utilizzare il DMA

• Equilibrare le prestazioni della CPU, della memoria, del bus e dell’I/O, dato che il sovraccarico di una componente qualsiasi provoca il basso utilizzo delle altre.