Слушайте изменения переменных в потоке ядра с производительностью - PullRequest
0 голосов
/ 07 марта 2019

Этот вопрос является продолжением ранее заданного вопроса:

Медленная связь с использованием общей памяти между пользовательским режимом и ядром

Я запускаю поток в ядре Windows, взаимодействующий с приложением через общую память. Мне интересно, является ли нынешний способ зацикливания и ожидания изменения переменной BOOLEAN наиболее эффективным? Требуется снизить его до 50-100 микросекунд или ниже, если это возможно.

КОД ЯДРА

typedef struct _SHARED_MEMORY
{
    BOOLEAN mutex;
    CHAR data[BUFFER_SIZE];
} SHARED_MEMORY, *PSHARED_MEMORY;

ZwCreateSection(...)
ZwMapViewOfSection(...)

while (TRUE) {
    if (((PSHARED_MEMORY)SharedSection)->mutex == TRUE) {
      //... do work...
      ((PSHARED_MEMORY)SharedSection)->mutex = FALSE;
    }
    KeDelayExecutionThread(KernelMode, FALSE, &PollingInterval);
}

Я рассмотрел KeStallExecutionProcessor, поскольку он должен использоваться для циклов менее 50 микросекунд, но, насколько я понимаю, он все еще потребляет ресурсы процессора.

Кроме того, поскольку BOOLEAN используется нестабильно, вы видите какие-либо недостатки или проблемы с текущей процедурой чтения / записи? Возможно, изменить приоритет потока на низкий?

...