Supporto multiprocessore nei driver di rete

Per scrivere un driver portabile per tutte le versioni di Microsoft Windows, è necessario scrivere codice per l'esecuzione sicura nei computer con più processori in esecuzione simultaneamente. Un driver di rete deve essere multiprocessore sicuro e deve usare le funzioni della libreria NDIS fornite.

In un ambiente uniprocessore, un singolo processore esegue una sola istruzione del computer alla volta, anche se è possibile che una scheda di interfaccia di rete (NIC) o un altro dispositivo interrompa il flusso di esecuzione corrente quando arrivano i pacchetti o quando si verificano interruzioni timer. In genere, quando si modificano strutture di dati come le code di pacchetti, un driver disabilita le interruzioni nella scheda di interfaccia di rete, esegue la manipolazione e quindi riabilita le interruzioni. Molti thread in un ambiente uniprocessore sembrano essere eseguiti contemporaneamente, ma in realtà vengono eseguiti in intervalli di tempo interleaved.

In un ambiente multiprocessore, i processori eseguono simultaneamente diverse istruzioni sul computer. Un driver deve eseguire la sincronizzazione in modo che quando una funzione driver modifica le strutture di dati comuni, la stessa o un'altra funzione driver in un altro processore non tenta di modificare i dati condivisi contemporaneamente. Tutto il codice driver è reentrant in un computer multiprocessore simmetrico (SMP). Per eliminare questo problema di protezione delle risorse, i driver di dispositivo Windows usano blocchi di rotazione. Per altre informazioni, vedere Sincronizzazione e notifica nei driver di rete.