Operating System Concepts 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 Operating System Concepts
Operating System Concepts 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 Operating System Concepts
Operating System Concepts Polling Determina lo stato di un dispositivo: command-ready busy error Si ha un ciclo busy-wait per attendere l’I/O dal dispositivo. Operating System Concepts
Operating System Concepts 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. Operating System Concepts
Ciclo di I/O guidato da interrupt Operating System Concepts
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. Operating System Concepts
Passi di un trasferimento DMA Operating System Concepts
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. Operating System Concepts
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. Operating System Concepts
Operating System Concepts 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) Operating System Concepts
Operating System Concepts 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. Operating System Concepts
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. Operating System Concepts
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”. Operating System Concepts
Operating System Concepts 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. Operating System Concepts
Operating System Concepts 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. Operating System Concepts
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. Operating System Concepts
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. Operating System Concepts
Schema di esecuzione di una richiesta di I/O Operating System Concepts
Operating System Concepts 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. Operating System Concepts
Comunicazione fra computer Operating System Concepts
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. Operating System Concepts