Очистка кеша процессора и получение сведений о кеше процессора (cpucache.h)

API определен в заголовочном файле sysroot-*-kos/include/kos/cpucache.h из состава KasperskyOS SDK.

API позволяет очищать кеш процессора, а также получать сведения о кеше процессора.

Сведения о функциях API приведены в таблице ниже.

Очистка кеша процессора

Чтобы очистить кеш процессора, нужно вызвать функцию KosCpuCacheFlush(). Функция очищает кеш процессора всех доступных уровней. При этом можно очистить кеш данных и кеш инструкций, соответствующие заданному региону виртуальной памяти. К примеру, драйверу требуется очищать кеш данных процессора, который соответствует памяти, используемой для DMA, поскольку в результате кеширования содержимое этой памяти с позиции драйвера может отличаться от действительного содержимого, видимого устройству.

Также для очистки кеша процессора можно использовать функцию KnHalFlushCache() из API hal_api.h. При этом следует учитывать, что функция KnHalFlushCache() всегда выполняет системный вызов для очистки кеша процессора, а функция KosCpuCacheFlush() делает так только в том случае, если нет возможности выполнить очистку без этого системного вызова.

Получение сведений о кеше процессора

Чтобы получить сведения о кеше процессора, нужно вызвать функцию KosCpuCacheGetInfo(). Эти сведения содержат максимальные и минимальные размеры линий кеша (в байтах) и информацию об ограничениях реализации кеша на используемой процессорной архитектуре. Потребность в этих сведениях возникает при реализации низкоуровневых механизмов управления кешем процессора, например, в драйверах. При реализации таких механизмов, к примеру, может потребоваться определить границы линий кеша или узнать, возможно ли управлять кешем в пользовательском режиме.

Наличие максимального и минимального размера линий кеша обусловлено тем, что вычислительная платформа может включать в своем составе вычислительные ядра с разным размером линий кеша, а также внешний контроллер кеша процессора.

Ограничения реализации кеша делятся на общие для всех процессорных архитектур и специфичные для разных процессорных архитектур. Флаги, отражающие общие ограничения, определены в заголовочном файле sysroot-*-kos/include/rtl/cpucache.h из состава KasperskyOS SDK. Флаги, отражающие специфичные ограничения, определены в заголовочных файлах sysroot-*-kos/include/rtl/<процессорная архитектура>/cpucache.h из состава KasperskyOS SDK (например, sysroot-*-kos/include/rtl/arm64/cpucache.h).

Сведения о функциях API

Функции cpucache.h

Функция

Сведения о функции

KosCpuCacheFlush()

Назначение

Очищает кеш процессора.

Параметры

  • [in] type – значение, задающее тип кеша (кеш данных, кеш инструкций, кеш данных и кеш инструкций совместно). Тип параметра определен в заголовочном файле sysroot-*-kos/include/rtl/cpucache.h из состава KasperskyOS SDK.
  • [in] va – указатель на регион виртуальной памяти. Кеш, соответствующий этому региону, будет очищен.
  • [in] size – размер региона виртуальной памяти в байтах. Кеш, соответствующий этому региону, будет очищен.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

KosCpuCacheGetInfo()

Назначение

Позволяет получить сведения о кеше процессора.

Параметры

  • [out] outInfo – указатель на структуру со сведениями о кеше процессора. Тип структуры определен в заголовочном файле sysroot-*-kos/include/rtl/cpucache.h из состава KasperskyOS SDK.

Возвращаемые значения

В случае успеха возвращает rcOk, иначе возвращает код ошибки.

В начало