Udostępnij za pośrednictwem


Obsługa wieloprocesorowa w sterownikach sieciowych

Aby napisać sterownik przenośny dla wszystkich wersji systemu Microsoft Windows, należy napisać kod w celu bezpiecznego uruchamiania na komputerach z wieloma współbieżnymi procesorami. Sterownik sieciowy musi być bezpieczny wieloprocesorowo i musi korzystać z udostępnionych funkcji biblioteki NDIS.

W środowisku jednoprocesorowym pojedynczy procesor uruchamia jednocześnie tylko jedną instrukcję komputera, mimo że istnieje możliwość przerwania bieżącego strumienia wykonywania przez kartę sieciową lub inne urządzenie w przypadku odebrania pakietów lub przerwania czasomierza. Zazwyczaj podczas manipulowania strukturami danych, takimi jak kolejki pakietów, sterownik wyłącza przerwania na karcie sieciowej, wykonuje manipulację, a następnie przywraca przerwania. Wiele wątków w środowisku jednoprocesorowym wydaje się działać jednocześnie, ale faktycznie działa w wycinkach czasu przeplatanych.

W środowisku wieloprocesorowym procesory jednocześnie uruchamiają kilka instrukcji komputera. Sterownik musi się zsynchronizować, aby gdy jedna funkcja sterownika manipuluje typowymi strukturami danych, ta sama lub inna funkcja sterownika na innym procesorze nie próbuje jednocześnie modyfikować udostępnionych danych. Cały kod sterownika jest reentrantny w symetrycznym komputerze wieloprocesorowym SMP. Aby wyeliminować ten problem z ochroną zasobów, sterowniki urządzeń z systemem Windows używają blokad spinowych. Aby uzyskać więcej informacji, zobacz Synchronizacja i powiadomienia w sterownikach sieciowych.