Получение статистических сведений о системе через API библиотеки libkos

12 января 2026

ID sys_inf_libkos

Библиотека libkos предоставляет API, который позволяет получить статистические сведения об использовании процессорного времени и памяти, а также о процессах и потоках исполнения. Этот API определен в заголовочном файле sysroot-*-kos/include/coresrv/stat/stat_api.h из состава KasperskyOS SDK.

API включает функции KnGroupStatGetParam(), KnCpuStatGetParam(), KnTaskStatGetParam(), которые запрашивают значения счетчиков производительности. Чтобы использовать эти функции, нужно собрать решение с версией ядра KasperskyOS, которая поддерживает полный набор счетчиков производительности (подробнее см. "Библиотека image"). Исключение составляют вызовы функции KnGroupStatGetParam() со значениями GROUP_PARAM_MEM_FREE и GROUP_PARAM_MEM_TOTAL в параметре param (см. таблицу ниже со сведениями об использовании памяти), для успешного выполнения которых не требуется специальная версия ядра.

Получение сведений об использовании процессорного времени

Время работы процессоров (вычислительных ядер) отсчитывается с момента запуска ядра KasperskyOS.

Чтобы получить сведения об использовании процессорного времени, нужно использовать функции KnGroupStatGetParam(), KnTaskStatGetParam() и KnCpuStatGetParam(). При этом через параметр param этих функций нужно передать значения, приведенные в таблице ниже. Процессорное время, полученное вызовом функции KnGroupStatGetParam(), KnTaskStatGetParam() или KnCpuStatGetParam(), представлено в наносекундах. Входным параметром функции KnCpuStatGetParam() является индекс процессора (нумерация начинается с нуля). Чтобы получить общее число процессоров (вычислительных ядер) на аппаратной платформе, нужно вызвать функцию KnHalGetCpuCount() из API hal_env.h.

Сведения об использовании процессорного времени

Получение сведений об использовании памяти

Чтобы получить сведения об использовании памяти, нужно использовать функции KnGroupStatGetParam() и KnTaskStatGetParam(). При этом через параметр param этих функций нужно передать значения, приведенные в таблице ниже. Размер памяти, полученный вызовом функции KnGroupStatGetParam() или KnTaskStatGetParam(), представляет собой число страниц памяти. Размер страницы памяти составляет 4 КБ для всех аппаратных платформ, поддерживаемых KasperskyOS.

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

Сведения об использовании памяти

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

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

Сведения о процессах и потоках исполнения

Кроме функций KnGroupStatGetParam() и KnTaskStatGetParam() для получения сведений о процессах и потоках исполнения можно использовать следующие функции:

  • KnTaskStatGetName() позволяет получить имя заданного процесса.
  • KnTaskStatGetPath() позволяет получить имя исполняемого файла в ROMFS, из которого запущен заданный процесс.

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

  • KnTaskStatGetId() позволяет получить идентификатор заданного процесса (PID).
  • KnTaskGetIdByName() позволяет получить идентификатор процесса (PID) с заданным именем.

Получение сведений об использовании процессорного времени и памяти каждым процессом

Чтобы получить сведения об использовании процессорного времени и памяти каждым процессом, нужно выполнить следующие действия:

  1. Получить список процессов вызовом функции KnGroupStatGetTaskList().
  2. Получить число элементов списка процессов вызовом функции KnTaskStatGetTasksCount().
  3. Выполнить в цикле следующие действия:
    1. Получить элемент списка процессов вызовом функции KnTaskStatEnumTaskList().
    2. Получить имя процесса вызовом функции KnTaskStatGetName().

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

    3. Получить сведения об использовании процессорного времени и памяти процессом вызовами функции KnTaskStatGetParam().
    4. Проверить, что процесс не завершился. Если процесс завершился, то отбросить полученные сведения об использовании процессорного времени и памяти этим процессом.

      Чтобы проверить, что процесс не завершился, нужно вызвать функцию KnTaskStatGetParam() с передачей через параметр param значения TASK_PARAM_STATE. Должно быть получено значение, отличное от TaskStateTerminated.

    5. Завершить работу с элементом списка процессов вызовом функции KnTaskStatCloseTask().
  4. Завершить работу со списком процессов вызовом функции KnTaskStatCloseTaskList().

Расчет загрузки процессоров

Показателями загрузки процессоров (вычислительных ядер) могут быть следующие значения:

  • процент загрузки всех процессоров;
  • процент загрузки всех процессоров каждым процессом;
  • проценты загрузки каждого процессора.

Расчет этих показателей выполняется для интервала времени, в начале и конце которого были получены сведения об использовании процессорного времени. (Например, может выполняться мониторинг загрузки процессоров с периодическим получением сведений об использовании процессорного времени.) Из значений, полученных в конце интервала, нужно вычесть значения, полученные в начале интервала. То есть для интервала нужно получить следующие приращения:

  • TK – время работы всех процессоров в режиме ядра;
  • TKi [i=1,2,...,n] – время работы i-го процессора в режиме ядра;
  • TU – время работы всех процессоров в пользовательском режиме;
  • TUi [i=1,2,...,n] – время работы i-го процессора в пользовательском режиме;
  • TIDLE – время работы всех процессоров в режиме бездействия;
  • TIDLEi [i=1,2,...,n] – время работы i-го процессора в режиме бездействия;
  • Tj [j=1,2,...,m] – процессорное время, затраченное на исполнение j-го процесса.

Процент загрузки всех процессоров рассчитывается так:

(TK+TU)/(TK+TU+TIDLE).

Процент загрузки i-го процессора рассчитывается так:

(TKi+TUi)/(TKi+TUi+TIDLEi).

Процент загрузки всех процессоров j-м процессом рассчитывается так:

Tj/(TK+TU+TIDLE).

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!