Compatibilidad con varios procesadores en controladores de red
Para escribir un controlador portátil para todas las versiones de Microsoft Windows, debe escribir código para ejecutarse de forma segura en equipos con varios procesadores en ejecución simultánea. Un controlador de red debe ser seguro para varios procesadores y debe usar las funciones de biblioteca NDIS proporcionadas.
En un entorno de un uniprocesador, un único procesador ejecuta solo una instrucción de equipo a la vez, aunque sea posible que se produzca una tarjeta de interfaz de red (NIC) u otro dispositivo para interrumpir el flujo de ejecución actual cuando llegan paquetes o cuando se producen interrupciones del temporizador. Normalmente, al manipular estructuras de datos como colas de paquetes, un controlador deshabilita las interrupciones en la NIC, realiza la manipulación y, a continuación, vuelve a habilitar las interrupciones. Muchos subprocesos de un entorno de un uniprocesador parecen ejecutarse simultáneamente, pero realmente se ejecutan en segmentos de tiempo intercalados.
En un entorno de varios procesadores, los procesadores ejecutan simultáneamente varias instrucciones del equipo. Un controlador debe sincronizarse para que cuando una función del controlador manipule estructuras de datos comunes, la misma u otra función de controlador en otro procesador no intente modificar los datos compartidos al mismo tiempo. Todo el código de controlador es reentrant en un equipo con varios procesadores simétricos (SMP). Para eliminar este problema de protección de recursos, los controladores de dispositivos Windows usan bloqueos de número. Para obtener más información, consulte Sincronización y notificación en controladores de red.