int sched_setaffinity(pid_t pid, unsigned int len, unsigned long *mask);
int sched_getaffinity(pid_t pid, unsigned int len, unsigned long *mask);
ОПИСАНИЕ
sched_setaffinity
устанавливает процессорную маску соответствия для процесса с идентификатором
pid.
Если
pid
равен нулю, то берется текущий процесс.
Маска соответствия является битовой маской, хранящейся в
mask.
Младший значимый бит соответствует первому логическому номеру процессора
в системе, а самый старший значимый бит соответствует последнему логическому
номеру процессора в системе.
Установка бита соответствует легальному режиму работы процессора, а
снятие бита определяет не соответствие режиму работы процессора.
Другими словами, процесс привязан и будет работать только на тех процессорах,
для которых выставлен соответствующий бит. Обычно в маске установлены все биты.
Аргумент
len
является длиной данных, на которые указывает
mask.
Обычно это размер слова в системе. Для совместимости с будущими версиями ядер Linux
(и так как этот размер может изменяться) поддерживаемая битовая маска должна быть
не меньше маски соответствия, хранящейся в ядре.
Функция
sched_getaffinity
записывает на указатель, полученный от
mask
размер
len
маски соответствия процесса
pid.
Если
pid
равен нулю, то возвращается маска текущего процесса.
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
При нормальном завершении работы
sched_setaffinity
и
sched_getaffinity
возвращают 0.
При ошибках возвращается -1 и
errno
устанавливается соответственно ошибке.
НАЙДЕННЫЕ ОШИБКИ
EFAULT
Указанный адрес памяти некорректен.
ESRCH
Процесс, чей идентификатор ID равен pid не может быть найден.
EPERM
Вызывающий процесс не имеет достаточных прав и привилегий.
Процесс, вызывающий
sched_setaffinity,
должен иметь действующий идентификатор пользователя uid,
равный euid или uid процесса, идентифицируемого по
pid,
или должен обладать возможностью
CAP_SYS_NICE.
EINVAL
Битовая маска соответствия
mask
не содержит процессоров, физически присутствующих в сиситеме, или длина
len
меньше, чем размер маски соответствия, используемой ядром.
ПРИМЕЧАНИЯ ПО ИСТОРИИ
Системные вызовы affinity были представлены в ядре Linux 2.5.8.