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


Состояния очереди виртуальных машин NDIS

В этом разделе представлен обзор операционных состояний очередей виртуальных машин NDIS (VMQs). Для получения дополнительной информации о состояниях очередей см. тему Состояния очередей и операций в разделе Написание драйверов VMQ.

Для каждой очереди сетевой адаптер должен поддерживать следующий набор операционных состояний:

  • Неопределенный

  • Выделенных

  • Набор

  • Приостановлена

  • Бег

  • Остановка DMA

  • Освобождение

На следующем рисунке показаны связи между этими состояниями.

схема, демонстрирующая состояния очереди виртуальных машин NDIS и их связи.

Ниже определены состояния адаптера:

неопределенный
неопределенный — начальное состояние очереди. В этом состоянии очередь не выделяется. Очередь (за исключением очереди по умолчанию, которая всегда существует) не определена, пока драйвер мини-порта не получит запрос на выделение очереди. Кроме того, он не определен после завершения операции освобождения, и любые индикации приёма, которые были запущены, завершены.

выделено
Очередь находится в состоянии «выделено» после запроса на выделение и перед тем, как на очередь установлены какие-либо фильтры. Фильтр также может ввести выделенное состояние, если очередь находится в состоянии Set, а последний фильтр очищается в очереди. Очередь переходит в состояние паузы, если драйвер минипорта получает запрос на завершение выделения, находясь в состоянии "Выделенный". Очередь входит в состояние остановки DMA, если драйвер минипорта получает запрос освобождения очереди.

набор
В состоянии Set выделена очередь, а в очереди установлен хотя бы один фильтр, но драйвер мини-порта еще не получил полный идентификатор выделения. Очередь переходит в состояние "Выполнение", если она получает запрос на завершение выделения. Очередь переходит в состояние "Выделено", если последний фильтр в очереди очищен. Обратите внимание, что очередь не может быть освобождена при наличии фильтров, установленных в очереди.

приостановлено
В приостановленном состоянии очередь выделяется, но её минипорт-драйвер не сигнализирует о полученных пакетах, так как в очереди нет установленных фильтров. Минипорт-драйвер может перейти в состояние паузы либо из выделенного состояния, либо из состояния выполнения. Очередь переходит в состояние "Выполнение" при получении запроса на установку фильтров. Очередь переходит в состояние остановки DMA при получении запроса от свободной очереди.

Запуск
В рабочем состоянии очередь имеет набор фильтров, выделение очереди завершено, а сетевой адаптер указывает на принимаемые пакеты. Очередь переходит в состояние паузы, если последний фильтр в очереди очищается. Обратите внимание, что очередь не может быть освобождена при наличии фильтров, установленных в очереди. Кроме того, минипорт-драйвер может остановить DMA, если последний фильтр очищен. Однако в этом случае драйвер минипорта не должен отправлять данные о состоянии остановленного DMA.

остановка DMA
В состоянии остановка DMA драйвер минипорта получил запрос на освобожденную очередь, и активность DMA должна быть приостановлена. Минипорт-драйвер должен отправить сообщение об остановленном состоянии DMA. После того как драйвер минипорта отправляет индикацию состояния, очередь переходит в состояние освобождения. Обратите внимание, что DMA, вероятно, уже был остановлен, когда последний фильтр был очищен. Однако минипорт-драйвер должен отправлять индикацию состояния только при получении запроса на освобождение очереди.

освобождение
В состоянии освобождения минипорт-драйвер ожидает завершения всех незавершённых уведомлений о получении в очереди и освобождает ресурсы, связанные с этой очередью. После освобождения всех ресурсов очередь переходит в неопределенное состояние.