martedì 8 marzo 2016

Funzionamento dei dispositivi di Input/Output

Vi siete mai chiesti come fa il nostro computer a riconoscere la pressione della tastiera,i click del mouse,o l'uso di altre periferiche di I/O(Input/Output) ?  Se si, vediamo di scoprire cosa succede ,ma prima bisogna chiarire cos'è un sistema operativo e com'è fatto un dispositivo di I/O.
Sistema Operativo
Un sistema operativo è quel software che agisce da intermediario tra utente e hardware ; Ci permette di utilizzare in maniera efficiente i componenti hardware che fanno parte dei nostri computer.
Esempi di sistemi operativi sono Windows,MacOs,Linux,Unix ,ecc.  Il S.O. viene caricato in memoria all'avvio dal programma di bootstrap che si trova in una ROM o in una EEPROM . In realtà il bootstrap non carica l'intero sistema operativo,ma ne carica il kernel (nucleo) che è l'unico processo del sistema operativo sempre in esecuzione . Il bootstrap e le memorie in cui è contenuto sono dette firmware.
Dispositivi di I/O
I device di I/O sono il mouse,il monitor,la stampante,la tastiera ,ecc.
Ogni device di I/O ha al suo interno un controller (una sorta di piccolo processore) e un buffer locale che funge da memoria locale .
Ogni calcolatore è dunque composto da una CPU(Central Processing Unit o più familiarmente chiamata processore) e da questo insieme di controllori di dispositivi connessi mediante bus comuni. I sistemi operativi contengono per ogni controllore un driver del dispositivo che si coordina con il controllore e funge da interfaccia con il resto del sistema.

Vediamo ora di dare una risposta alla domanda nel titolo :
Appena il driver del controllore si accorge dell'operazione da intraprendere(per esempio click del mouse o pressione di un tasto della tastiera) ,il controllore trasferisce i dati dal dispositivo al buffer locale . Appena questa operazione finisce,il controllore manda un interrupt alla CPU. Un'interrupt non è altro che un evento asincrono , che richiede l'attenzione della CPU . Si dice asincrono perchè è in effetti impossibile sapere quando avverrà ,pensate ad un click del mouse . Appena la CPU termina il suo ciclo di clock salva il suo stato corrente e gestisce l'interruzione . Il modo più semplice per gestire le interruzioni  è attraverso il vettore di interrupt, che è  una tabella di puntatori salvata in genere nelle prime locazioni di memorie(le più basse) .L'accesso a questa sequenza di indici avviene per mezzo di un indice codificato dallo stesso segnale di interruzione,allo scopo di fornire l'indirizzo della procedura di gestione delle interrupt.
Se durante la gestione di un interrupt ne arriva un'altro quest'ultimo viene messo in coda ,la CPU infatti non gestisce gli interrupt a catena,ma in modo sequenziale . Appena termina la gestione degli interrupt la CPU riprende il suo lavoro .
Questa forma di I/O guidata dalle interruzioni è adatta al trasferimento di piccoli dati,ma pensate in caso di trasferimenti pesanti . In questo caso viene in aiuto il DMA(Direct Memory Access).Il DMA è un meccanismo che permette alla CPU di essere "sollecitata" il meno possibile . Viene infatti mandato alla CPU un interrupt "iniziale",questa delega al DMA la gestione del trasferimento in memoria (per questo accesso diretto alla memoria).
 Pensate per esempio ad una stampa di centinaia di pagine . Invece di mandare interrupt alla CPU per ogni blocco di byte,grazie al DMA viene mandato alla CPU un interrupt all'inizio e alla fine dell'operazione.

Nessun commento :

Posta un commento