Sistema operativo - Software I / O

Il software I / O è spesso organizzato nei seguenti livelli:

  • User Level Libraries- Fornisce un'interfaccia semplice al programma utente per eseguire input e output. Per esempio,stdio è una libreria fornita dai linguaggi di programmazione C e C ++.

  • Kernel Level Modules - Questo fornisce il driver del dispositivo per interagire con il controller del dispositivo e i moduli I / O indipendenti dal dispositivo utilizzati dai driver del dispositivo.

  • Hardware - Questo livello include hardware reale e controller hardware che interagiscono con i driver del dispositivo e rendono vivo l'hardware.

Un concetto chiave nella progettazione del software I / O è che dovrebbe essere indipendente dal dispositivo dove dovrebbe essere possibile scrivere programmi che possono accedere a qualsiasi dispositivo I / O senza dover specificare il dispositivo in anticipo. Ad esempio, un programma che legge un file come input dovrebbe essere in grado di leggere un file su un disco floppy, su un disco rigido o su un CD-ROM, senza dover modificare il programma per ogni dispositivo diverso.

I driver di periferica

I driver di dispositivo sono moduli software che possono essere collegati a un sistema operativo per gestire un particolare dispositivo. Il sistema operativo richiede l'aiuto dei driver di dispositivo per gestire tutti i dispositivi I / O. I driver di dispositivo incapsulano il codice dipendente dal dispositivo e implementano un'interfaccia standard in modo tale che il codice contenga letture / scritture di registro specifiche del dispositivo. Il driver del dispositivo, viene generalmente scritto dal produttore del dispositivo e fornito insieme al dispositivo su un CD-ROM.

Un driver di dispositivo esegue i seguenti lavori:

  • Per accettare la richiesta dal software indipendente dal dispositivo sopra ad esso.
  • Interagisci con il controller del dispositivo per acquisire e fornire I / O ed eseguire la gestione degli errori richiesta
  • Assicurarsi che la richiesta venga eseguita correttamente

Il modo in cui un driver di dispositivo gestisce una richiesta è il seguente: Supponiamo che arrivi una richiesta per leggere un blocco N. Se il driver è inattivo nel momento in cui arriva una richiesta, inizia a eseguire la richiesta immediatamente. Altrimenti, se l'autista è già impegnato con qualche altra richiesta, inserisce la nuova richiesta nella coda delle richieste in sospeso.

Gestori di interrupt

Un gestore di interrupt, noto anche come routine di servizio di interrupt o ISR, è un pezzo di software o più specificamente una funzione di callback in un sistema operativo o più specificamente in un driver di dispositivo, la cui esecuzione è attivata dalla ricezione di un interrupt.

Quando si verifica l'interruzione, la procedura di interruzione fa tutto ciò che è necessario per gestire l'interruzione, aggiorna le strutture dei dati e riattiva il processo che era in attesa di un'interruzione.

Il meccanismo di interrupt accetta un indirizzo ─ un numero che seleziona una specifica routine / funzione di gestione degli interrupt da un piccolo insieme. Nella maggior parte delle architetture, questo indirizzo è un offset memorizzato in una tabella chiamata tabella vettoriale di interrupt. Questo vettore contiene gli indirizzi di memoria di gestori di interrupt specializzati.

Software I / O indipendente dal dispositivo

La funzione di base del software indipendente dal dispositivo è eseguire le funzioni di I / O comuni a tutti i dispositivi e fornire un'interfaccia uniforme al software a livello utente. Sebbene sia difficile scrivere software completamente indipendente dal dispositivo, possiamo scrivere alcuni moduli comuni a tutti i dispositivi. Di seguito è riportato un elenco di funzioni del software I / O indipendente dal dispositivo:

  • Interfacciamento uniforme per i driver di dispositivo
  • Denominazione del dispositivo: nomi mnemonici mappati ai numeri di dispositivo principali e secondari
  • Protezione del dispositivo
  • Fornire una dimensione del blocco indipendente dal dispositivo
  • Buffering perché i dati provenienti da un dispositivo non possono essere memorizzati nella destinazione finale.
  • Allocazione dello spazio di archiviazione su dispositivi a blocchi
  • Assegnazione e rilascio di dispositivi dedicati
  • Segnalazione errori

Software I / O spazio utente

Queste sono le librerie che forniscono un'interfaccia più ricca e semplificata per accedere alle funzionalità del kernel o, in ultima analisi, interattive con i driver di dispositivo. La maggior parte del software di I / O a livello utente consiste in procedure di libreria con alcune eccezioni come il sistema di spooling, che è un modo per gestire i dispositivi I / O dedicati in un sistema multiprogrammazione.

Le librerie di I / O (ad esempio, stdio) sono nello spazio utente per fornire un'interfaccia al software di I / O indipendente dal dispositivo residente nel sistema operativo. Ad esempio putchar (), getchar (), printf () e scanf () sono esempi di stdio della libreria I / O a livello utente disponibile nella programmazione C.

Sottosistema I / O del kernel

Il sottosistema I / O del kernel è responsabile della fornitura di molti servizi relativi all'I / O. Di seguito sono riportati alcuni dei servizi forniti.

  • Scheduling- Il kernel pianifica una serie di richieste di I / O per determinare un buon ordine in cui eseguirle. Quando un'applicazione emette una chiamata di sistema I / O di blocco, la richiesta viene inserita nella coda di quel dispositivo. Lo scheduler I / O del kernel riorganizza l'ordine della coda per migliorare l'efficienza complessiva del sistema e il tempo di risposta medio sperimentato dalle applicazioni.

  • Buffering - Il sottosistema I / O del kernel mantiene un'area di memoria nota come bufferche memorizza i dati durante il trasferimento tra due dispositivi o tra un dispositivo con un'operazione dell'applicazione. Il buffering viene eseguito per far fronte a una mancata corrispondenza di velocità tra il produttore e il consumatore di un flusso di dati o per adattarsi tra dispositivi che hanno dimensioni di trasferimento dati diverse.

  • Caching- Il kernel mantiene la memoria cache che è la regione della memoria veloce che contiene copie dei dati. L'accesso alla copia cache è più efficiente rispetto all'originale.

  • Spooling and Device Reservation- Uno spool è un buffer che contiene l'output per un dispositivo, come una stampante, che non può accettare flussi di dati interlacciati. Il sistema di spool copia i file di spool accodati sulla stampante uno alla volta. In alcuni sistemi operativi, lo spooling è gestito da un processo daemon di sistema. In altri sistemi operativi, è gestito da un thread nel kernel.

  • Error Handling - Un sistema operativo che utilizza la memoria protetta può proteggersi da molti tipi di errori hardware e dell'applicazione.