Prise en charge du multiprocesseur dans les pilotes réseau
Pour écrire un pilote portable pour toutes les versions de Microsoft Windows, vous devez écrire du code pour qu’il s’exécute en toute sécurité sur des ordinateurs avec plusieurs processeurs exécutés simultanément. Un pilote réseau doit être multiprocesseur sécurisé et doit utiliser les fonctions de bibliothèque NDIS fournies.
Dans un environnement de monoprocesseur, un seul processeur exécute une seule instruction d’ordinateur à la fois, même s’il est possible qu’un carte d’interface réseau (NIC) ou un autre appareil interrompe le flux d’exécution actuel lorsque des paquets arrivent ou que des interruptions du minuteur se produisent. En règle générale, lors de la manipulation de structures de données telles que des files d’attente de paquets, un pilote désactive les interruptions sur la carte réseau, effectue la manipulation, puis réactive les interruptions. De nombreux threads dans un environnement de monoprocesseur semblent s’exécuter simultanément, mais s’exécutent en fait dans des tranches de temps entrelacées.
Dans un environnement multiprocesseur, les processeurs exécutent simultanément plusieurs instructions d’ordinateur. Un pilote doit se synchroniser de sorte que lorsqu’une fonction de pilote manipule des structures de données courantes, la même fonction de pilote ou une autre fonction de pilote sur un autre processeur n’essaie pas de modifier les données partagées en même temps. Tout le code du pilote est réentrant dans un ordinateur multiprocesseur symétrique (SMP). Pour éliminer ce problème de protection des ressources, les pilotes de périphérique Windows utilisent des verrous de rotation. Pour plus d’informations, consultez Synchronisation et notification dans les pilotes réseau.