Sistema operativo - Hardware I / O

Uno dei compiti importanti di un sistema operativo è quello di gestire vari dispositivi I / O tra cui mouse, tastiere, touch pad, unità disco, adattatori display, dispositivi USB, schermo bitmap, LED, convertitore analogico-digitale, On / interruttore di spegnimento, connessioni di rete, I / O audio, stampanti ecc.

È necessario un sistema di I / O per accettare una richiesta di I / O dell'applicazione e inviarla al dispositivo fisico, quindi prendere la risposta che arriva dal dispositivo e inviarla all'applicazione. I dispositivi I / O possono essere suddivisi in due categorie:

  • Block devices- Un dispositivo a blocchi è quello con cui il conducente comunica inviando interi blocchi di dati. Ad esempio, dischi rigidi, fotocamere USB, Disk-On-Key ecc.

  • Character devices- Un dispositivo a caratteri è quello con cui il conducente comunica inviando e ricevendo singoli caratteri (byte, ottetti). Ad esempio, porte seriali, porte parallele, schede audio ecc

Controller del dispositivo

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.

Il controller del dispositivo funziona come un'interfaccia tra un dispositivo e un driver di dispositivo. Le unità I / O (tastiera, mouse, stampante, ecc.) Sono tipicamente costituite da un componente meccanico e un componente elettronico in cui il componente elettronico è chiamato controller del dispositivo.

C'è sempre un controller di dispositivo e un driver di dispositivo per ogni dispositivo per comunicare con i sistemi operativi. Un controller di dispositivo potrebbe essere in grado di gestire più dispositivi. Come interfaccia, il suo compito principale è convertire il flusso di bit seriale in un blocco di byte, eseguire la correzione degli errori se necessario.

Qualsiasi dispositivo connesso al computer è collegato tramite una spina e una presa e la presa è collegata a un controller del dispositivo. Di seguito è riportato un modello per il collegamento di CPU, memoria, controller e dispositivi I / O in cui CPU e controller dei dispositivi utilizzano tutti un bus comune per la comunicazione.

I / O sincrono vs asincrono

  • Synchronous I/O - In questo schema, l'esecuzione della CPU attende mentre l'I / O procede

  • Asynchronous I/O - L'I / O procede contemporaneamente all'esecuzione della CPU

Comunicazione con i dispositivi I / O

La CPU deve disporre di un modo per passare le informazioni a e da un dispositivo I / O. Sono disponibili tre approcci per comunicare con la CPU e il dispositivo.

  • Istruzione speciale I / O
  • I / O mappato in memoria
  • Accesso diretto alla memoria (DMA)

Istruzione speciale I / O

Utilizza le istruzioni della CPU create appositamente per il controllo dei dispositivi I / O. Queste istruzioni in genere consentono l'invio di dati a un dispositivo I / O o la lettura da un dispositivo I / O.

I / O mappato in memoria

Quando si utilizza l'I / O mappato in memoria, lo stesso spazio degli indirizzi è condiviso dalla memoria e dai dispositivi I / O. Il dispositivo è collegato direttamente a determinate posizioni di memoria principale in modo che il dispositivo I / O possa trasferire blocchi di dati alla / dalla memoria senza passare attraverso la CPU.

Durante l'utilizzo di IO mappato in memoria, il sistema operativo alloca il buffer in memoria e informa il dispositivo I / O di utilizzare quel buffer per inviare dati alla CPU. Il dispositivo I / O funziona in modo asincrono con la CPU, interrompe la CPU al termine.

Il vantaggio di questo metodo è che ogni istruzione che può accedere alla memoria può essere utilizzata per manipolare un dispositivo I / O. L'I / O con mappatura in memoria viene utilizzato per la maggior parte dei dispositivi I / O ad alta velocità come dischi e interfacce di comunicazione.

Accesso diretto alla memoria (DMA)

I dispositivi lenti come le tastiere generano un interrupt alla CPU principale dopo il trasferimento di ogni byte. Se un dispositivo veloce come un disco generava un interrupt per ogni byte, il sistema operativo impiegherebbe la maggior parte del suo tempo a gestire questi interrupt. Quindi un tipico computer utilizza l'hardware di accesso diretto alla memoria (DMA) per ridurre questo sovraccarico.

Direct Memory Access (DMA) significa che la CPU concede l'autorizzazione al modulo I / O per leggere o scrivere nella memoria senza coinvolgimento. Il modulo DMA stesso controlla lo scambio di dati tra la memoria principale e il dispositivo I / O. La CPU è coinvolta solo all'inizio e alla fine del trasferimento e viene interrotta solo dopo che l'intero blocco è stato trasferito.

Direct Memory Access necessita di un hardware speciale chiamato controller DMA (DMAC) che gestisce i trasferimenti di dati e arbitrare l'accesso al bus di sistema. I controllori sono programmati con puntatori sorgente e destinazione (dove leggere / scrivere i dati), contatori per tenere traccia del numero di byte trasferiti e impostazioni, che includono I / O e tipi di memoria, interrupt e stati per i cicli della CPU.

Il sistema operativo utilizza l'hardware DMA come segue:

Passo Descrizione
1 Al driver del dispositivo viene chiesto di trasferire i dati del disco a un indirizzo di buffer X.
2 Il driver del dispositivo indica quindi al controller del disco di trasferire i dati nel buffer.
3 Il controller del disco avvia il trasferimento DMA.
4 Il controller del disco invia ogni byte al controller DMA.
5 Il controller DMA trasferisce i byte al buffer, aumenta l'indirizzo di memoria, diminuisce il contatore C finché C diventa zero.
6 Quando C diventa zero, DMA interrompe la CPU per segnalare il completamento del trasferimento.

Polling vs interrupt I / O

Un computer deve avere un modo per rilevare l'arrivo di qualsiasi tipo di input. Ci sono due modi in cui ciò può accadere, noto comepolling e interrupts. Entrambe queste tecniche consentono al processore di gestire eventi che possono verificarsi in qualsiasi momento e che non sono correlati al processo attualmente in esecuzione.

Polling I / O

Il polling è il modo più semplice per un dispositivo I / O di comunicare con il processore. Il processo di controllo periodico dello stato del dispositivo per vedere se è il momento per la successiva operazione di I / O, è chiamato polling. Il dispositivo I / O inserisce semplicemente le informazioni in un registro di stato e il processore deve venire e ottenere le informazioni.

Il più delle volte, i dispositivi non richiedono attenzione e quando uno lo fa dovrà attendere fino a quando non verrà interrogato dal programma di polling. Questo è un metodo inefficiente e gran parte del tempo dei processori viene sprecato in sondaggi non necessari.

Confronta questo metodo con un insegnante che chiede continuamente a ogni studente di una classe, uno dopo l'altro, se ha bisogno di aiuto. Ovviamente il metodo più efficiente sarebbe che uno studente informasse l'insegnante ogni volta che necessita di assistenza.

Interrompe l'I / O

Uno schema alternativo per gestire l'I / O è il metodo basato sugli interrupt. Un'interruzione è un segnale al microprocessore da un dispositivo che richiede attenzione.

Un controller di dispositivo mette un segnale di interrupt sul bus quando ha bisogno dell'attenzione della CPU quando la CPU riceve un interrupt, salva il suo stato corrente e invoca il gestore di interrupt appropriato utilizzando il vettore di interrupt (indirizzi delle routine del sistema operativo per gestire vari eventi). Quando il dispositivo di interruzione è stato risolto, la CPU continua con il suo compito originale come se non fosse mai stata interrotta.