Структура, используемая для установки параметров безопасности адаптивного планировщика
#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 системной библиотеки