sched_setparam 서브루틴
용도
예약 매개변수를 설정합니다.
라이브러리
표준 C 라이브러리(libc.a)
구문
#include <sched.h>
int sched_setparam (pid, param)
pid_t pid;
const struct sched_param *param; 설명
Sched_setparam 서브루틴은 pid 파라미터로 지정된 프로세스의 스케줄링 파라미터를 param 파라미터가 가리키는 sched_param 구조가 지정한 값으로 설정합니다. Sched_param 구조의 sched_priority 멤버 값은 현재 스케줄링 정책의 포괄적 우선순위 범위 내의 임의의 정수입니다. 우선순위의 수치가 높을수록 우선순위가 높다는 것을 의미합니다.
Pid 매개 변수로 지정된 프로세스가 존재하고 호출 프로세스에 권한이 있는 경우 프로세스 ID가 pid 매개 변수의 값과 같은 프로세스에 대해 스케줄링 매개 변수가 설정됩니다.
Pid 매개변수가 0이면 호출 프로세스에 대한 스케줄링 매개변수가 설정됩니다.
호출자가 프로세스를 선호하는 경우 해당 프로세스에 SET_PROC_RAC 권한이 있어야 합니다. 호출자는 프로세스의 우선순위를 수정할 수 있는 유효 또는 실제 사용자 ID 또는 BYPASS_DAC_WRITE 권한이 동일해야 합니다.
구현을 위해서는 요청 프로세스가 자체 또는 다른 프로세스의 스케줄링 매개변수를 설정할 수 있는 적절한 권한을 가져야 할 수 있습니다.
대상 프로세스는 실행 중이든 실행되지 않든 관계없이 우선순위에 따라 스레드 목록의 맨 끝으로 이동합니다.
Pid 매개 변수로 지정된 프로세스의 우선 순위가 실행 중인 가장 낮은 우선 순위 프로세스의 우선 순위보다 높게 설정되어 있고 지정된 프로세스를 실행할 준비가 되면 pid 매개 변수로 지정된 프로세스가 가장 낮은 우선 순위로 실행 중인 프로세스를 선점합니다. 마찬가지로 sched_setparam 서브루틴을 호출하는 프로세스가 비어 있지 않은 다른 하나 이상의 프로세스 목록보다 자신의 우선순위를 낮게 설정하면 우선순위가 가장 높은 목록의 머리인 프로세스도 호출 프로세스를 선점합니다. 따라서 원래 프로세스는 우선순위가 더 높은 프로세스가 실행될 때까지 요청된 우선순위 변경이 완료되었다는 알림을 받지 못할 수 있습니다.
다른 스케줄링 정책(예: SCHED_FIFO2, SCHED_FIFO3, SCHED_FIFO4)은 고정 우선순위 스케줄링 정책(예: SCHED_FIFO 및 SCHED_RR)처럼 작동합니다.
- Sched_setparam 서브루틴은 시스템 스케줄링 경합 범위를 가진 스레드의 스케줄링에는 영향을 미치지 않습니다.
- 프로세스 스케줄링 경합 범위가 있는 스레드의 경우 스레드의 스케줄링 매개변수는 영향을 받지 않습니다. 그러나 다른 프로세스의 스레드에 대한 이러한 스레드의 스케줄링은 해당 프로세스의 스케줄링 매개변수에 따라 달라질 수 있으며, 이는 sched_setparam 서브루틴을 사용하여 관리됩니다.
구현이 라이브러리 스레드가 여러 커널 스케줄링된 엔티티 위에 다중화되는 2단계 스케줄링 모델을 지원하는 경우, 시스템 경합 범위 스레드의 기본 커널 스케줄링 엔티티는 sched_setparam 서브루틴의 영향을 받지 않습니다.
프로세스 경합 범위 스레드에 대한 기본 커널 스케줄링 엔티티의 스케줄링 매개변수가 param 매개변수에 지정된 값으로 변경됩니다. 이 호출이 완료된 후 생성된 프로세스 경합 범위 스레드에서 사용하기 위한 커널 예약 엔티티는 프로세스에서 해당 스케줄링 정책 및 관련 스케줄링 매개 변수를 상속합니다.
Sched_setparam 서브루틴은 프로세스의 다른 스레드에 대해 원자적이지 않습니다. 이 서브루틴 호출이 기본 커널 스케줄링 엔티티에 대한 스케줄링 정책을 변경하는 동안 스레드가 계속 실행될 수 있습니다.
매개변수
| 항목 | 설명 |
|---|---|
| pid | 스케줄링 매개변수가 설정되는 프로세스를 지정합니다. |
| 매개변수 | Sched_param 구조를 가리킵니다. |
리턴 값
성공하면 sched_setparam 서브루틴이 0을 반환합니다.
Sched_setparam 서브루틴이 실패하면 우선 순위는 변경되지 않고 서브루틴은 -1 값을 반환하고 오류를 나타내는 errno를 설정합니다.
오류 코드
| 항목 | 설명 |
|---|---|
| EINVAL | 요청된 스케줄링 매개 변수 중 하나 이상이 지정된 프로세스 ID의 스케줄링 정책에 정의된 범위를 벗어난 경우. |
| EINVAL | 파라미터가 널이거나 잘못된 주소입니다 |
| ENOTSUP | 이 인터페이스는 체크포인트가 가능한 프로세스를 지원하지 않습니다. |
| EPERM | 요청 프로세스에 지정된 프로세스에 대한 스케줄링 매개변수를 설정할 권한이 없거나 sched_setparam 서브루틴을 호출할 수 있는 적절한 권한이 없는 경우입니다. |
| ESRCH | Pid 매개 변수가 음수이거나 pid 매개 변수로 지정된 프로세스에 해당하는 프로세스를 찾을 수 없는 경우입니다. |