Che cos'è un driver?

Un driver è un componente software che consente al sistema operativo e a un dispositivo di comunicare. Ad esempio, quando un'app deve leggere i dati da un dispositivo, chiama una funzione implementata dal sistema operativo. Il sistema operativo chiama quindi una funzione implementata dal driver. Il driver, in genere sviluppato dal produttore del dispositivo, sa come comunicare con l'hardware del dispositivo per ottenere i dati. Una volta che il driver ottiene i dati, lo restituisce al sistema operativo, che quindi lo restituisce all'app.

Diagramma che mostra l'interazione tra un'applicazione, un sistema operativo e un driver.

Espansione della definizione

La nostra spiegazione semplifica il concetto di conducente. Ecco alcuni altri punti da considerare:

  • I driver non devono sempre essere sviluppati dal produttore del dispositivo. Se un dispositivo segue uno standard hardware pubblicato, Microsoft può scrivere il driver, quindi la finestra di progettazione del dispositivo non deve specificarne una.

  • Non tutti i driver comunicano direttamente con un dispositivo. Spesso, diversi driver a più livelli in uno stack di driver prendono parte a una richiesta di I/O. Il modo convenzionale per visualizzare lo stack è con il primo partecipante nella parte superiore e l'ultimo partecipante nella parte inferiore, come illustrato in questo diagramma. Alcuni driver nello stack modificano la richiesta da un formato a un altro. Questi driver non comunicano direttamente con il dispositivo. Modificano invece la richiesta e lo passano ai driver inferiori nello stack.

    Diagramma che illustra la comunicazione tra un'applicazione, un sistema operativo, tre driver e un dispositivo.

    Driver di funzione: il driver che comunica direttamente con il dispositivo viene chiamato driver di funzione.

    Driver di filtro: i driver che eseguono l'elaborazione ausiliaria sono denominati driver di filtro.

    Per altre informazioni sugli stack, vedere Stack di driver.

  • Alcuni driver di filtro osservano e registrano informazioni sulle richieste di I/O, ma non partecipano attivamente. Ad esempio, alcuni driver di filtro fungono da verificatori per assicurarsi che gli altri driver nello stack gestiscono correttamente la richiesta di I/O.

È possibile perfezionare la definizione di un driver come qualsiasi componente software che osserva o partecipa alla comunicazione tra il sistema operativo e un dispositivo.

Driver software

La definizione espansa è ragionevolmente accurata, ma è ancora incompleta perché alcuni driver non sono associati ad alcun dispositivo hardware.

Ad esempio, se è necessario scrivere uno strumento che accede alle strutture di dati principali del sistema operativo, è possibile suddividere lo strumento in due componenti. Il primo componente viene eseguito in modalità utente e presenta l'interfaccia utente. Il secondo componente viene eseguito in modalità kernel e accede ai dati principali del sistema operativo. Il componente eseguito in modalità utente viene chiamato applicazione e il componente eseguito in modalità kernel è denominato driver software. Un driver software non è associato a un dispositivo hardware.

Questo diagramma illustra un'applicazione in modalità utente che comunica con un driver software in modalità kernel.

Diagramma che illustra la relazione tra un'applicazione e un driver software.

I driver software vengono sempre eseguiti in modalità kernel. Vengono scritti principalmente per accedere ai dati protetti disponibili solo in modalità kernel. Tuttavia, non tutti i driver di dispositivo devono accedere ai dati e alle risorse in modalità kernel, quindi alcuni driver di dispositivo vengono eseguiti in modalità utente.

Per altre informazioni sulle modalità del processore, vedere Modalità utente e Modalità kernel.

Conducenti di autobus

Un altro tipo di conducente è il conducente dell'autobus. Per comprendere i driver degli autobus, è necessario comprendere i nodi del dispositivo e l'albero dei dispositivi.

Per informazioni sugli alberi dei dispositivi, i nodi del dispositivo e i driver del bus, vedere Nodi del dispositivo e stack di dispositivi.

Altre informazioni sui driver di funzione

La spiegazione finora semplifica la definizione del driver di funzione. È stato dichiarato che il driver di funzione per un dispositivo è il driver nello stack che comunica direttamente con il dispositivo. Questo vale per un dispositivo che si connette direttamente al bus PCI (Peripheral Component Interconnect). Il driver di funzione per un dispositivo PCI ottiene gli indirizzi mappati alle risorse di porta e memoria nel dispositivo. Il driver di funzione comunica direttamente con il dispositivo scrivendo in tali indirizzi.

Tuttavia, in molti casi, un dispositivo non si connette direttamente al bus PCI. Al contrario, il dispositivo si connette a una scheda bus host connessa al bus PCI. Ad esempio, un tostapane USB si connette a una scheda bus host (denominata controller host USB), che è connessa al bus PCI. Il tostapane USB ha un driver di funzione e il controller host USB ha anche un driver di funzione. Il driver di funzione per il tostapane comunica indirettamente con il tostapane inviando una richiesta al driver di funzione per il controller host USB. Il driver di funzione per il controller host USB comunica quindi direttamente con l'hardware del controller host USB, che comunica con il tostapane.

Diagramma che illustra l'interazione tra i driver di tostapane USB, il driver del controller host USB e il bus PCI.