Ciao, e benvenuto nella settima puntata della settantesima stagione. Finora il sistema operativo ha gestito cose interne: il tempo del processore, la memoria, il disco. Ma un computer non è un'isola: deve parlare col mondo esterno. La tastiera, lo schermo, la rete, la stampante, il microfono. Ognuno di questi dispositivi è diverso, capriccioso, con il suo modo tutto suo di funzionare. Oggi vediamo come il sistema operativo mette ordine anche qui, e trasforma un guazzabuglio di aggeggi in qualcosa di uniforme e maneggevole.
Partiamo dal problema, perché è enorme. Esistono migliaia di dispositivi diversi, di mille marche, ognuno con un linguaggio suo. Una scheda di rete di un produttore parla in modo diverso da quella di un altro. Se ogni programma dovesse conoscere i dettagli di ogni singolo pezzo di hardware là fuori, sarebbe l'inferno: nessuno riuscirebbe mai a scrivere niente. Serve qualcuno che faccia da mediatore, che conosca il linguaggio segreto di ciascun aggeggio, e offra a tutti gli altri un modo unico e semplice per usarlo. Quel mediatore, per ogni dispositivo, si chiama driver.
Vediamo cos'è un driver, perché è un'idea splendida. Un driver è un piccolo pezzo di software, di solito fornito da chi costruisce il dispositivo, che sa parlare la lingua di quel dispositivo specifico. Da un lato conosce tutti i dettagli sporchi dell'hardware; dall'altro espone al sistema operativo un'interfaccia pulita e standard. È un traduttore, un interprete. Il sistema operativo dice al driver "leggi questi dati", nel suo linguaggio generale, e il driver traduce quell'ordine nei comandi precisi che quello specifico pezzo di ferro capisce. Aggiungi un dispositivo nuovo? Ti basta il suo driver, e il resto del sistema non deve cambiare di una virgola. È per questo che puoi attaccare una stampante mai vista prima e, se c'è il driver giusto, funziona subito.
E qui arriva un'astrazione così bella che vale da sola la puntata. In molti sistemi, soprattutto quelli di stampo Unix, c'è una regola quasi filosofica: tutto è un file. La tastiera è vista come un file da cui leggi. Lo schermo è un file su cui scrivi. Persino la rete, i dischi, i dispositivi più strani, vengono presentati con la stessa faccia semplice di un file: qualcosa che puoi aprire, leggere, scrivere, chiudere. È un colpo di genio: invece di imparare mille modi diversi per mille dispositivi diversi, ne impari uno solo, quello del file, e con quello parli con quasi tutto. La complessità del mondo esterno viene nascosta dietro un'unica, familiare maschera.
Nota adesso un problema di tempi, perché i dispositivi sono lentissimi rispetto al processore. Il processore fa miliardi di operazioni al secondo; la tastiera aspetta che tu prema un tasto, magari per secondi interi. Come fa il sistema a non sprecare tutto quel tempo ad aspettare? Una via ingenua sarebbe controllare di continuo: c'è un tasto? no. c'è un tasto? no. c'è un tasto? È come un bambino che ogni dieci secondi chiede se siamo arrivati. Uno spreco enorme di energie. Deve esserci un modo migliore, e c'è.
Il modo migliore è ribaltare la faccenda, ed è uno dei meccanismi più eleganti di tutta la macchina: l'interruzione. Invece di controllare in continuazione, il sistema operativo dice al dispositivo: fai i tuoi comodi, e quando hai qualcosa per me, bussami alla porta. Poi si dimentica di lui e va a fare altro lavoro utile. Quando finalmente premi un tasto, il dispositivo manda un colpo alla porta, un'interruzione, e il processore smette all'istante quello che stava facendo per correre a occuparsene. È il campanello di casa: non stai tutto il giorno a guardare dallo spioncino se arriva qualcuno; vai a fare le tue cose, e quando suonano, vai ad aprire.
Voglio lasciarti con l'immagine che unisce tutto, quella di un grande ufficio con un unico sportello. Immagina che dietro quello sportello ci sia un mondo caotico di magazzini diversi, ognuno gestito da persone che parlano lingue diverse, con regole diverse. Tu, all'esterno, non vuoi sapere niente di tutto questo: vai allo sportello, chiedi una cosa in modo semplice, e la ottieni. Dietro, gli impiegati, cioè i driver, traducono la tua richiesta per il magazzino giusto. E siccome i magazzini sono lenti, non ti fanno aspettare in piedi: prendi un numero, vai a sederti, e quando la tua roba è pronta ti chiamano. Lo sportello unico è l'astrazione del file, gli impiegati sono i driver, e la chiamata quando è pronto è l'interruzione.
Per oggi ci fermiamo qui. Abbiamo visto come il sistema operativo fa parlare la macchina col mondo esterno, pieno di dispositivi diversi e capricciosi. Il mediatore per ciascun aggeggio è il driver: un traduttore che da un lato conosce i dettagli sporchi dell'hardware e dall'altro offre al sistema un'interfaccia pulita e uniforme. Su molti sistemi questa uniformità arriva fino in fondo con l'idea che tutto è un file, così impari un solo modo di parlare e con quello raggiungi quasi tutto. E poiché i dispositivi sono lentissimi, il sistema non sta ad aspettarli: usa le interruzioni, il colpo alla porta con cui il dispositivo avverte quando è pronto, come il campanello di casa che ti lascia libero di vivere. Nella prossima puntata: perché il tuo programma è lento. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.