ネットワーク ドライバーのマルチプロセッサ サポート
すべての Microsoft Windows バージョンのポータブル ドライバーを書き込むには、同時に実行される複数のプロセッサを搭載したコンピューターで安全に実行されるコードを記述する必要があります。 ネットワーク ドライバーは、マルチプロセッサ セーフでなければならず、また提供された NDIS ライブラリ関数を使用する必要があります。
ユニプロセッサ環境では、パケットが到着したときやタイマー割り込みが発生したときに、ネットワーク インターフェイス カード (NIC) またはその他のデバイスが現在の実行ストリームを中断できる場合でも、1 つのプロセッサは一度に 1 つのコンピューター命令のみを実行します。 通常、パケット キューなどのデータ構造を操作する場合、ドライバーは NIC での割り込みを無効にし、操作を実行してから割り込みを再び有効にします。 ユニプロセッサ環境の多くのスレッドは同時に実行されているように見えますが、実際にはインターリーブされたタイム スライスで実行されます。
マルチプロセッサ環境では、プロセッサは複数のコンピューター命令を同時に実行します。 ドライバーは、1 つのドライバー関数が共通のデータ構造を操作するときに、別のプロセッサ上の同じドライバー関数または別のドライバー関数が共有データを同時に変更しないように、同期する必要があります。 すべてのドライバー コードは、対称型マルチプロセッサ (SMP) コンピューターに再入されます。 このリソース保護の問題を解消するために、Windows デバイス ドライバーはスピン ロックを使用します。 詳細については、「ネットワーク ドライバーの同期と通知」を参照してください。