Структура, используемая для установки параметров безопасности адаптивного планировщика
#include <sys/sched_aps.h>
#include <sys/neutrino.h>
typedef struct {
_Uint32t sec_flags;
} sched_aps_security_parms;
Структура используется в функции SchedCtl() в сочетании с командой SCHED_APS_ADD_SECURITY для определения параметров безопасности адаптивного планировщика.
Структура включает следующие поля:
- sec_flags
- Флаги безопасности. Набор флагов
SCHED_APS_SEC_*
в качестве входных и выходных параметров. Для того, чтобы получить текущие флаги безопасности, необходимо установить значение 0
. Планировщик адаптивных разделов позволяет динамически создавать и изменять разделы в системе.
 | Рекомендовано настроить среду раздела во время запуска, а затем заблокировать все параметры: - в программе с помощью флага
SCHED_APS_SEC_LOCK_PARTITIONS - из командной строки, с помощью команды aps modify
|
Однако может потребоваться изменить раздел во время выполнения. В этом случае рекомендовано использовать параметры безопасности, описанные ниже.
ЗОСРВ во время запуска устанавливает параметр безопасности SCHED_APS_SEC_OFF
. Рекомендовано немедленно установить его на SCHED_APS_SEC_RECOMMENDED
. Пример кода: sched_aps_security_parms p;
APS_INIT_DATA( &p );
p.sec_flags = SCHED_APS_SEC_RECOMMENDED;
SchedCtl( SCHED_APS_ADD_SECURITY, &p, sizeof( p ) );
Ниже представлены основные параметры безопасности:
- SCHED_APS_SEC_RECOMMENDED
- Только root (суперпользователь) из системного раздела может создавать разделы или изменять параметры. Это создает двухуровневую иерархию разделов: системный раздел и его дочерние элементы. Только root, работающий в системном разделе, может присоединять свой поток к разделам. Процентные бюджеты не должны быть равны нулю.
- SCHED_APS_SEC_FLEXIBLE
- Только root в системном разделе может изменять параметры планирования или изменять критические бюджеты. Но суперпользователь, работающий в любом разделе, может создавать подразделы, объединять потоки в свои собственные подразделы и изменять подразделы. Это позволяет приложениям создавать свои собственные локальные подразделы из своих собственных бюджетов. Процентные бюджеты не должны быть равны нулю.
- SCHED_APS_SEC_BASIC
- Только root в системном разделе может изменять общие параметры планирования и устанавливать критические бюджеты.
Если требуется изменить все параметры безопасности без перезагрузки системы, исключая режим тестирования, вы должны установить хотя бы SCHED_APS_SEC_BASIC
. Параметр SCHED_APS_SEC_RECOMMENDED
более безопасен, чем SCHED_APS_SEC_FLEXIBLE
, который более безопасен, чем SCHED_APS_SEC_BASIC
. Все три позволяют создавать и изменять разделы. После настройки разделов следует использовать SCHED_APS_SEC_LOCK_PARTITIONS
, чтобы предотвратить дальнейшие несанкционированные изменения. Например: sched_aps_security_parms p;
APS_INIT_DATA( &p );
p.sec_flags = SCHED_APS_SEC_LOCK_PARTITIONS;
SchedCtl( SCHED_APS_ADD_SECURITY, &p, sizeof( p ) );
SCHED_APS_SEC_RECOMMENDED
, SCHED_APS_SEC_FLEXIBLE
и SCHED_APS_SEC_BASIC
состоят из флагов, определенных ниже (обычно удобнее использовать составные параметры):
- SCHED_APS_SEC_ROOT0_OVERALL
- Чтобы изменить общие параметры планирования в системном разделе, такие как усредненный размер окна, пользователь должен обладать правами суперпользователя (root).
- SCHED_APS_SEC_ROOT_MAKES_PARTITIONS
- Только root может создавать или изменять разделы. Применяется к командам SCHED_APS_CREATE_PARTITION, SCHED_APS_MODIFY_PARTITION и SCHED_APS_ATTACH_EVENTS.
- SCHED_APS_SEC_SYS_MAKES_PARTITIONS
- Необходимо работать в системном разделе, чтобы создавать или изменять разделы. Это относится к тем же командам, что и
SCHED_APS_SEC_ROOT_MAKES_PARTITIONS
. Присоединение событий с SCHED_APS_ATTACH_EVENTS
считается изменением раздела. - SCHED_APS_SEC_PARENT_MODIFIES
- Позволяет модифицировать разделы (
SCHED_APS_MODIFY_PARTITION
), но при этом необходимо работать в родительском разделе изменяемого раздела. “Модифицировать” означает изменить процент или критический бюджет раздела или присоединить события с помощью команды SCHED_APS_ATTACH_EVENTS
. - SCHED_APS_SEC_NONZERO_BUDGETS
- Раздел не может быть создан с нулевым бюджетом или изменен таким образом, чтобы иметь нулевой бюджет. Данный параметр безопастности следует устанавливать, например, в обработчике запросов клиентов, когда неизвестен порядок запуска адаптивных разделов
- SCHED_APS_SEC_ROOT_MAKES_CRITICAL
- Необходимо быть пользователем root, чтобы создать ненулевой критический бюджет или изменить существующий критический бюджет.
- SCHED_APS_SEC_SYS_MAKES_CRITICAL
- Необходимо работать в системном разделе, чтобы создать ненулевой критический бюджет или изменить существующий критический бюджет.
- SCHED_APS_SEC_ROOT_JOINS
- Необходимо быть пользователем root, чтобы присоединиться к потоку в разделе.
- SCHED_APS_SEC_SYS_JOINS
- Необходимо работать в системном разделе, чтобы присоединиться к потоку.
- SCHED_APS_SEC_PARENT_JOINS
- Необходимо работать в родительском разделе, к которому требуется присоединиться.
- SCHED_APS_SEC_JOIN_SELF_ONLY
- Вызывающий команду SCHED_APS_JOIN_PARTITION должен указать
0
для pid и tid. Другими словами, процесс не может присоединять другие процессы к разделу. - SCHED_APS_SEC_PARTITIONS_LOCKED
- Предотвратить дальнейшие изменения бюджета любого раздела или общих параметров планирования, таких как размер окна. Следует устанавливать после настройки разделов. Заблокировав разделы, есть возможность по-прежнему использовать SCHED_APS_JOIN_PARTITION и Команды SCHED_APS_ATTACH_EVENTS.
ЗОСРВ «Нейтрино»
SchedCtl()
Предыдущий раздел: Описание API системной библиотеки