sched_setscheduler(2) - wariua/manpages-ko GitHub Wiki

NAME

sched_setscheduler, sched_getscheduler - ์Šค์ผ€์ค„๋ง ์ •์ฑ…/๋งค๊ฐœ๋ณ€์ˆ˜ ์„ค์ •ํ•˜๊ณ  ์–ป๊ธฐ

SYNOPSIS

#include <sched.h>

int sched_setscheduler(pid_t pid, int policy,
                       const struct sched_param *param);

int sched_getscheduler(pid_t pid);

DESCRIPTION

sched_setscheduler() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์€ pid๋กœ ์ง€์ •ํ•œ ID์˜ ์Šค๋ ˆ๋“œ๋ฅผ ์œ„ํ•œ ์Šค์ผ€์ค„๋ง ์ •์ฑ…๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชจ๋‘๋ฅผ ์„ค์ •ํ•œ๋‹ค. pid๊ฐ€ 0์ด๋ฉด ํ˜ธ์ถœ ์Šค๋ ˆ๋“œ์˜ ์Šค์ผ€์ค„๋ง ์ •์ฑ…๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜๊ฒŒ ๋œ๋‹ค.

์Šค์ผ€์ค„๋ง ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ param ์ธ์ž๋กœ ์ง€์ •ํ•˜๋Š”๋ฐ, ์ด๋Š” ๋‹ค์Œ ํ˜•ํƒœ์˜ ๊ตฌ์กฐ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์ด๋‹ค.

struct sched_param {
    ...
    int sched_priority;
    ...
};

ํ˜„์žฌ ๊ตฌํ˜„์—์„œ ์ด ๊ตฌ์กฐ์ฒด๋Š” sched_priority ํ•„๋“œ ํ•˜๋‚˜๋งŒ ๋‹ด๊ณ  ์žˆ๋‹ค. param์˜ ํ•ด์„ ๋ฐฉ์‹์€ ์„ ํƒํ•œ ์ •์ฑ…์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.

policy์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์œผ๋กœ ํ˜„์žฌ ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” ๋‹ค์Œ์˜ "์ผ๋ฐ˜" (์ฆ‰ ๋น„์‹ค์‹œ๊ฐ„) ์Šค์ผ€์ค„๋ง ์ •์ฑ…๋“ค์„ ์ง€์›ํ•œ๋‹ค.

SCHED_OTHER
ํ‘œ์ค€ ๋ผ์šด๋“œ ๋กœ๋นˆ ์‹œ๊ณต์œ  ์ •์ฑ….
SCHED_BATCH
"๋ฐฐ์น˜" ๋ฐฉ์‹ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰
SCHED_IDLE
์•„์ฃผ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„์˜ ๋ฐฐ๊ฒฝ ์ž‘์—… ์‹คํ–‰

์œ„ ์ •์ฑ…๋“ค ๊ฐ๊ฐ์—์„œ param->sched_priority๊ฐ€ 0์ด์–ด์•ผ ํ•œ๋‹ค.

์‹คํ–‰ ๊ฐ€๋Šฅ ์Šค๋ ˆ๋“œ๋“ค ๊ฐ€์šด๋ฐ ์‹คํ–‰ํ•  ๊ฒƒ์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ์‹์„ ์ •๋ฐ€ํ•˜๊ฒŒ ์ œ์–ดํ•ด์•ผ ํ•˜๋Š” ํŠน์ˆ˜ํ•œ ์‹œ๊ฐ„ ์ œ์•ฝ์  ์‘์šฉ๋“ค์„ ์œ„ํ•ด ๋‹ค์–‘ํ•œ "์‹ค์‹œ๊ฐ„" ์ •์ฑ…๋“ค๋„ ์ง€์›ํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค์—์„œ ์–ธ์ œ ์ด ์ •์ฑ…๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๊ทœ์น™์€ sched(7)๋ฅผ ๋ณด๋ผ. policy์— ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์‹œ๊ฐ„ ์ •์ฑ…๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

SCHED_FIFO
์„ ์ž…์„ ์ถœ ์ •์ฑ…
SCHED_RR
๋ผ์šด๋“œ ๋กœ๋นˆ ์ •์ฑ…

์œ„ ์ •์ฑ…๋“ค ๊ฐ๊ฐ์—์„œ param->sched_priority๊ฐ€ ์Šค๋ ˆ๋“œ์˜ ์Šค์ผ€์ค„๋ง ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•œ๋‹ค. ์ด ๊ฐ’์€ ์ง€์ •ํ•œ policy๋กœ sched_get_priority_min(2)๊ณผ sched_get_priority_max(2)๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋ฐ˜ํ™˜๋ฐ›์€ ๋ฒ”์œ„ ๋‚ด์˜ ์ˆ˜์ด๋‹ค. ๋ฆฌ๋ˆ…์Šค์—์„œ ์ด ์‹œ์Šคํ…œ ํ˜ธ์ถœ๋“ค์€ ๊ฐ๊ฐ 1๊ณผ 99๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋ฆฌ๋ˆ…์Šค 2.6.32๋ถ€ํ„ฐ sched_setscheduler()๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ policy์— SCHED_RESET_ON_FORK ํ”Œ๋ž˜๊ทธ๋ฅผ OR ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋ฅผ ํฌํ•จ์‹œํ‚ค๋ฉด fork(2)๋กœ ์ƒ์„ฑ๋œ ์ž์‹์ด ํŠน๊ถŒ์  ์Šค์ผ€์ค„๋ง ์ •์ฑ…์„ ๋ฌผ๋ ค๋ฐ›์ง€ ์•Š๋Š”๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ sched(7)๋ฅผ ๋ณด๋ผ.

sched_getscheduler()๋Š” pid๊ฐ€ ๋‚˜ํƒ€๋‚ด๋Š” ์Šค๋ ˆ๋“œ์˜ ํ˜„์žฌ ์Šค์ผ€์ค„๋ง ์ •์ฑ…์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. pid๊ฐ€ 0์ด๋ฉด ํ˜ธ์ถœ ์Šค๋ ˆ๋“œ์˜ ์ •์ฑ…์„ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋œ๋‹ค.

RETURN VALUE

์„ฑ๊ณต ์‹œ sched_setscheduler()๋Š” 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์„ฑ๊ณต ์‹œ sched_getscheduler()๋Š” ์Šค๋ ˆ๋“œ์˜ ์ •์ฑ…(์Œ์ˆ˜ ์•„๋‹Œ ์ •์ˆ˜)์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์˜ค๋ฅ˜ ์‹œ ๋‘ ํ˜ธ์ถœ ๋ชจ๋‘ -1์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ errno๋ฅผ ์ ์ ˆํžˆ ์„ค์ •ํ•œ๋‹ค.

ERRORS

EINVAL
์œ ํšจํ•˜์ง€ ์•Š์€ ์ธ์ž: pid๊ฐ€ ์Œ์ˆ˜์ด๊ฑฐ๋‚˜ param์ด NULL์ด๋‹ค.
EINVAL
(sched_setscheduler()) policy๊ฐ€ ์•Œ๋ ค์ง„ ์ •์ฑ…์ด ์•„๋‹ˆ๋‹ค.
EINVAL
(sched_setscheduler()) ์ง€์ •ํ•œ policy์— ๋Œ€ํ•ด param์ด ๋ง์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.
EPERM
ํ˜ธ์ถœ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ์ ˆํ•œ ํŠน๊ถŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค.
ESRCH
ID๊ฐ€ pid์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค.

CONFORMING TO

POSIX.1-2001, POSIX.1-2008 (ํ•˜์ง€๋งŒ ์•„๋ž˜ BUGS ์ฐธ๊ณ ). SCHED_BATCH ๋ฐ SCHED_IDLE ์ •์ฑ…์€ ๋ฆฌ๋ˆ…์Šค ์ „์šฉ์ด๋‹ค.

NOTES

์œ„์˜ "์ผ๋ฐ˜" ๋ฐ "์‹ค์‹œ๊ฐ„" ์Šค์ผ€์ค„๋ง ์ •์ฑ…๋“ค ๋ชจ๋‘์˜ ๋” ์ž์„ธํ•œ ์˜๋ฏธ๋ก ์„ sched(7) ๋งค๋‰ด์–ผ ํŽ˜์ด์ง€์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ํŽ˜์ด์ง€์—์„œ๋Š” sched_setattr(2)์„ ํ†ตํ•ด์„œ๋งŒ ์„ค์ • ๊ฐ€๋Šฅํ•œ SCHED_DEADLINE์ด๋ผ๋Š” ์ •์ฑ…๋„ ์ถ”๊ฐ€๋กœ ๊ธฐ์ˆ ํ•œ๋‹ค.

sched_setscheduler()์™€ sched_getscheduler()๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” POSIX ์‹œ์Šคํ…œ์—๋Š” <unistd.h>์— _POSIX_PRIORITY_SCHEDULING์ด ์ •์˜๋˜์–ด ์žˆ๋‹ค.

POSIX.1์—์„œ๋Š” ๋น„ํŠน๊ถŒ ์Šค๋ ˆ๋“œ๊ฐ€ sched_setscheduler()๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ถŒํ•œ๋“ค์— ๋Œ€ํ•ด ์ƒ์ˆ ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๊ทธ๋ž˜์„œ ์‹œ์Šคํ…œ์— ๋”ฐ๋ผ ์„ธ๋ถ€ ์‚ฌํ•ญ์ด ๋‹ค๋ฅด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์†”๋ผ๋ฆฌ์Šค 7 ๋งค๋‰ด์–ผ ํŽ˜์ด์ง€์—์„œ๋Š” ํ˜ธ์ถœ์ž์˜ ์‹ค์ œ ์‚ฌ์šฉ์ž ID๋‚˜ ์‹คํšจ ์‚ฌ์šฉ์ž ID๊ฐ€ ๋Œ€์ƒ์˜ ์‹ค์ œ ์‚ฌ์šฉ์ž ID๋‚˜ ์ €์žฅ๋œ set-user-ID์™€ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

๋ฆฌ๋ˆ…์Šค์—์„œ ์Šค์ผ€์ค„๋ง ์ •์ฑ…๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์‚ฌ์‹ค ์Šค๋ ˆ๋“œ๋ณ„ ์†์„ฑ์ด๋‹ค. gettid(2) ํ˜ธ์ถœ์ด ๋ฐ˜ํ™˜ํ•œ ๊ฐ’์„ pid ์ธ์ž๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค. pid๋ฅผ 0์œผ๋กœ ์ง€์ •ํ•˜๋ฉด ํ˜ธ์ถœ ์Šค๋ ˆ๋“œ์˜ ์†์„ฑ์— ๋Œ€ํ•ด ๋™์ž‘ํ•˜๊ฒŒ ๋˜๊ณ  getpid(2) ํ˜ธ์ถœ์ด ๋ฐ˜ํ™˜ํ•œ ๊ฐ’์„ ์ „๋‹ฌํ•˜๋ฉด ์Šค๋ ˆ๋“œ ๊ทธ๋ฃน์˜ ์ฃผ ์Šค๋ ˆ๋“œ์˜ ์†์„ฑ๋“ค์— ๋Œ€ํ•ด ๋™์ž‘ํ•˜๊ฒŒ ๋œ๋‹ค. (POSIX ์Šค๋ ˆ๋“œ API๋ฅผ ์“ฐ๊ณ  ์žˆ๋‹ค๋ฉด sched_*(2) ์‹œ์Šคํ…œ ํ˜ธ์ถœ ๋Œ€์‹  pthread_setschedparam(3), pthread_getschedparam(3), pthread_setschedprio(3)์„ ์‚ฌ์šฉํ•˜๋ผ.)

BUGS

POSIX.1์—์„œ๋Š” ์„ฑ๊ณต ์‹œ sched_setscheduler()๊ฐ€ ์ด์ „ ์Šค์ผ€์ค„๋ง ์ •์ฑ…์„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ๋ฆฌ๋ˆ…์Šค์˜ sched_setscheduler()๋Š” ์ด ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ค€์ˆ˜ํ•˜์ง€ ์•Š๋Š”๋ฐ, ์„ฑ๊ณต ์‹œ ํ•ญ์ƒ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

SEE ALSO

chrt(1), nice(2), sched_get_priority_max(2), sched_get_priority_min(2), sched_getaffinity(2), sched_getattr(2), sched_getparam(2)]], sched_rr_get_interval(2), sched_setaffinity(2), sched_setattr(2), sched_setparam(2), sched_yield(2), setpriority(2), capabilities(7), cpuset(7), sched(7)


2017-09-15

โš ๏ธ **GitHub.com Fallback** โš ๏ธ