Главная » 2017 » Ноябрь » 21 » man 2 sched_setattr
01:41
man 2 sched_setattr

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


sched_setattr, sched_getattr - назначает и возвращает алгоритм планирования и
атрибуты



ОБЗОР


#include <sched.h>

int sched_setattr(pid_t pid, struct sched_attr *attr,
unsigned int flags);

int sched_getattr(pid_t pid, struct sched_attr *attr,
unsigned int size, unsigned int flags);



ОПИСАНИЕ


sched_setattr()
Системный вызов sched_setattr() задаёт алгоритм планирования и соответствующие
атрибуты для нити с идентификатором pid. Если pid равно нулю, то будет изменён
алгоритм и атрибуты планирования вызывающей нити.

В настоящее время в Linux поддерживаются следующие «обычные» (т. е. не реального
времени) алгоритмы планирования, которые можно указать в policy:

SCHED_OTHER алгоритм циклического обслуживания с разделением времени;

SCHED_BATCH «пакетный» стиль выполнения процессов;

SCHED_IDLE для выполнения фоновых заданий с очень низким приоритетом.

Также поддерживаются различные алгоритмы «реального времени», для специальных,
критичных ко времени приложений, которым требуется точное управление методом
выбора приложением исполняемых нитей. Правила управления, когда процесс может
использовать эти алгоритмы, смотрите в sched(7). Алгоритмы реального времени,
которые могут быть указаны в policy:

SCHED_FIFO алгоритм «первым вошёл — первым вышел»;

SCHED_RR алгоритм циклического обслуживания.

В Linux также предоставляются следующий алгоритм планирования:

SCHED_DEADLINE
алгоритм планирования с предельным сроком; смотрите sched(7).

Аргумент attr является указателем на структуру, в которой определяется новый
алгоритм планирования и атрибуты, для заданной нити. Данная структура имеет
следующий вид:

struct sched_attr {
u32 size; /* размер этой структуры */
u32 sched_policy; /* алгоритм (SCHED_*) */
u64 sched_flags; /* флаги */
s32 sched_nice; /* значение уступчивости (SCHED_OTHER,
SCHED_BATCH) */
u32 sched_priority; /* статический приоритет (SCHED_FIFO,
SCHED_RR) */
/* остальные поля нужны для SCHED_DEADLINE */
u64 sched_runtime;

представляемая структура больше ядерной, то ядро проверяет, что все
дополнительные поля равны 0; если нет, то sched_setattr() завершается с
ошибкой E2BIG и заменяет значение size размером структуры ядра.

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

sched_policy
В этом поле задаётся алгоритм планирования в виде значений SCHED_*,
перечисленных выше.

sched_flags
В этом поле содержатся флаги, управляющие поведением планирования. Пока
доступен только один флаг: SCHED_FLAG_RESET_ON_FORK. При указании этого
флага потомки, созданные fork(2), не наследуют привилегированные алгоритмы
планирования. Подробней смотрите в sched(7).

sched_nice
В этом поле задаётся значение уступчивости, которое будет назначено при
указании в sched_policy значения SCHED_OTHER или SCHED_BATCH. Значение
уступчивости представляет собой число в диапазоне от -20 (высший приоритет)
до +19 (низший приоритет); смотрите sched(7).

sched_priority
В этом поле указывается статический приоритет, который будет установлен при
указании в sched_policy значения SCHED_FIFO или SCHED_RR. Допустимый
диапазон приоритетов для этих алгоритмов можно определить с помощью
sched_get_priority_min(2) и sched_get_priority_max(2). Для других
алгоритмов значение этого поля должно быть равно 0.

sched_runtime
В этом поле задаётся параметр «Runtime» для планирования с предельным
сроком. Значение выражается в наносекундах. Это и два следующих поля
используются только при алгоритме SCHED_DEADLINE; подробности смотрите в
sched(7).

sched_deadline
В этом поле задаётся параметр «Deadline» для планирования с предельным
сроком. Значение выражается в наносекундах.

sched_period
В этом поле задаётся параметр «Period» для планирования с предельным
сроком. Значение выражается в наносекундах.

Аргумент flags предназначен для расширения интерфейса в будущем; в текущей
реализации его значение должно быть равно 0.

sched_getattr()
Системный вызов sched_getattr() возвращает алгоритм планирования и соответствующие
атрибуты для нити с идентификатором pid. Если pid равно нулю, то будет возвращён
алгоритм и атрибуты планирования вызывающей нити.
Если буфер attr, предоставленный вызывающим, больше структуры ядра sched_attr, то
лишние байты в структуре пользовательского пространства не изменяются. Если
структура, предоставленная вызывающим, меньше ядерной структуры sched_attr и ядру
необходимо вернуть значение вне предоставляемого пространства, то sched_getattr()
завершается с ошибкой E2BIG. Как и для sched_setattr(), такая семантика позволяет
расширить интерфейс в будущем.

Аргумент flags предназначен для расширения интерфейса в будущем; в текущей
реализации его значение должно быть равно 0.



ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ


При успешном выполнении sched_setatt() и sched_getattr() возвращается 0. При
ошибке возвращается -1, а в errno содержится причина ошибки.



ОШИБКИ


Вызовы sched_getattr() и sched_setattr() могут завершиться с ошибкой по следующим
причинам:

EINVAL Значение attr равно NULL; или значение pid отрицательно; или значение flags
не равно 0.

ESRCH Нить с идентификатором pid не найдена.

Также sched_getattr() может завершиться с ошибкой по следующим причинам:

E2BIG Буфер, задаваемый size и attr, слишком мал.

EINVAL Некорректное значение size; то есть, оно меньше чем первая версия структуры
sched_attr (48 байт) или больше размера системной страницы.

Также sched_setattr() может завершиться с ошибкой по следующим причинам:

E2BIG Буфер, заданный size и attr, больше структуры ядра и один или более
превышающих байт не равны нулю.

EBUSY Ошибка контроля допуска SCHED_DEADLINE, смотрите sched(7).

EINVAL Значение attr.sched_policy не является одним из возможных алгоритмов; в
attr.sched_flags содержится флаг отличный от SCHED_FLAG_RESET_ON_FORK;
некорректное значение attr.sched_priority; значение attr.sched_policy равно
SCHED_DEADLINE и есть некорректные параметры алгоритм планирования с
предельным сроком в attr.

EPERM Вызывающий не имеет соответствующих прав.

EPERM В процессорной маске увязывания нити, заданной в pid, отсутствуют все ЦП
системы (смотрите sched_setaffinity(2)).



ВЕРСИИ


Данные системные вызовы впервые появились в Linux 3.14.



СООТВЕТСТВИЕ СТАНДАРТАМ


Данные системные вызовы являются нестандартными расширениями Linux.



ЗАМЕЧАНИЯ


Вызов sched_setattr() предоставляет весь набор возможностей sched_setscheduler(2),
sched_setparam(2), nice(2) и (всё кроме способности задавать приоритет всем
chrt(1), nice(2), sched_get_priority_max(2), sched_get_priority_min(2),
sched_getaffinity(2), sched_getparam(2), sched_getscheduler(2),
sched_rr_get_interval(2), sched_setaffinity(2), sched_setparam(2),
sched_setscheduler(2), sched_yield(2), setpriority(2), pthread_getschedparam(3),
pthread_setschedparam(3), pthread_setschedprio(3), capabilities(7), cpuset(7),
sched(7)



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 393 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar