Condividi tramite


Supporto del 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 indipendente dal multiprocessore 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 gli interrupt nella scheda di interfaccia di rete, esegue la manipolazione e quindi riattiva gli interrupt. Molti thread in un ambiente uniprocessore sembrano essere eseguiti contemporaneamente, ma vengono effettivamente eseguiti in intervalli di tempo alternati.

In un ambiente multiprocessore, i processori eseguono contemporaneamente diverse istruzioni del computer. Un driver deve essere sincronizzato in modo che quando una funzione driver modifica 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 dei driver è rientrante in un computer multiprocessore simmetrico (SMP). Per eliminare questo problema di protezione delle risorse, i driver di dispositivo Windows usano gli spinlock. Per altre informazioni, vedere Sincronizzazione e notifica nei driver di rete.