Поделиться через


Поддержка многопроцессоров в сетевых драйверах

Чтобы написать переносимый драйвер для всех версий Microsoft Windows, необходимо написать код для безопасного выполнения на компьютерах с несколькими одновременно работающими процессорами. Сетевой драйвер должен быть многопроцессорным и использовать предоставленные функции библиотеки NDIS.

В однопроцессорной среде один процессор выполняет только одну инструкцию компьютера за раз, даже если сетевой интерфейс карта (NIC) или другое устройство может прерывать текущий поток выполнения при поступлении пакетов или при прерывании таймера. Как правило, при управлении структурами данных, такими как очереди пакетов, драйвер отключает прерывания сетевого адаптера, выполняет манипуляции, а затем повторно включает прерывания. Многие потоки в однопроцессорной среде выполняются одновременно, но на самом деле выполняются в срезах времени с чередованием.

В многопроцессорной среде процессоры одновременно выполняют несколько инструкций компьютера. Драйвер должен синхронизироваться, чтобы, когда одна функция драйвера управляет общими структурами данных, та же или другая функция драйвера на другом процессоре не пытается одновременно изменить общие данные. Весь код драйвера повторно применяется на симметричном многопроцессорном компьютере (SMP). Чтобы устранить эту проблему с защитой ресурсов, драйверы устройств Windows используют спин-блокировки. Дополнительные сведения см. в разделе Синхронизация и уведомления в сетевых драйверах.