Suporte a vários processadores em drivers de rede

Para escrever um driver portátil para todas as versões do Microsoft Windows, você precisa escrever código para ser executado com segurança em computadores com vários processadores em execução simultânea. Um driver de rede deve ser multiprocessador seguro e deve usar as funções de biblioteca NDIS fornecidas.

Em um ambiente uniprocessador, um único processador executa apenas uma instrução de computador por vez, embora seja possível que um adaptador de rede cartão (NIC) ou outro dispositivo interrompa o fluxo de execução atual quando os pacotes chegam ou à medida que ocorrem interrupções do temporizador. Normalmente, ao manipular estruturas de dados, como filas de pacotes, um driver desabilita interrupções na NIC, executa a manipulação e, em seguida, reabilita as interrupções. Muitos threads em um ambiente uniprocessador parecem ser executados simultaneamente, mas, na verdade, são executados em fatias de tempo intercaladas.

Em um ambiente multiprocessador, os processadores executam simultaneamente várias instruções de computador. Um driver deve sincronizar para que, quando uma função de driver manipula estruturas de dados comuns, a mesma função de driver em outro processador não tente modificar dados compartilhados ao mesmo tempo. Todo o código do driver é reentrante em um computador SMP (multiprocessador simétrico). Para eliminar esse problema de proteção de recursos, os drivers de dispositivo Windows usam bloqueios de rotação. Para obter mais informações, consulte Sincronização e notificação em drivers de rede.