sched_setscheduler(2) - wariua/manpages-ko GitHub Wiki
sched_setscheduler, sched_getscheduler - ์ค์ผ์ค๋ง ์ ์ฑ /๋งค๊ฐ๋ณ์ ์ค์ ํ๊ณ ์ป๊ธฐ
#include <sched.h>
int sched_setscheduler(pid_t pid, int policy,
const struct sched_param *param);
int sched_getscheduler(pid_t pid);
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์ด๋ฉด ํธ์ถ ์ค๋ ๋์ ์ ์ฑ
์ ๊ฐ์ ธ์ค๊ฒ ๋๋ค.
์ฑ๊ณต ์ sched_setscheduler()
๋ 0์ ๋ฐํํ๋ค. ์ฑ๊ณต ์ sched_getscheduler()
๋ ์ค๋ ๋์ ์ ์ฑ
(์์ ์๋ ์ ์)์ ๋ฐํํ๋ค. ์ค๋ฅ ์ ๋ ํธ์ถ ๋ชจ๋ -1์ ๋ฐํํ๋ฉฐ errno
๋ฅผ ์ ์ ํ ์ค์ ํ๋ค.
EINVAL
- ์ ํจํ์ง ์์ ์ธ์:
pid
๊ฐ ์์์ด๊ฑฐ๋param
์ด NULL์ด๋ค. EINVAL
- (
sched_setscheduler()
)policy
๊ฐ ์๋ ค์ง ์ ์ฑ ์ด ์๋๋ค. EINVAL
- (
sched_setscheduler()
) ์ง์ ํpolicy
์ ๋ํดparam
์ด ๋ง์ด ๋์ง ์๋๋ค. EPERM
- ํธ์ถ ์ค๋ ๋๊ฐ ์ ์ ํ ํน๊ถ์ ๊ฐ์ง๊ณ ์์ง ์๋ค.
ESRCH
- ID๊ฐ
pid
์ธ ์ค๋ ๋๋ฅผ ์ฐพ์ ์ ์๋ค.
POSIX.1-2001, POSIX.1-2008 (ํ์ง๋ง ์๋ BUGS ์ฐธ๊ณ ). SCHED_BATCH
๋ฐ SCHED_IDLE
์ ์ฑ
์ ๋ฆฌ๋
์ค ์ ์ฉ์ด๋ค.
์์ "์ผ๋ฐ" ๋ฐ "์ค์๊ฐ" ์ค์ผ์ค๋ง ์ ์ฑ
๋ค ๋ชจ๋์ ๋ ์์ธํ ์๋ฏธ๋ก ์ 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)์ ์ฌ์ฉํ๋ผ.)
POSIX.1์์๋ ์ฑ๊ณต ์ sched_setscheduler()
๊ฐ ์ด์ ์ค์ผ์ค๋ง ์ ์ฑ
์ ๋ฐํํด์ผ ํ๋ค๊ณ ํ๋ค. ๋ฆฌ๋
์ค์ sched_setscheduler()
๋ ์ด ์๊ตฌ ์ฌํญ์ ์ค์ํ์ง ์๋๋ฐ, ์ฑ๊ณต ์ ํญ์ 0์ ๋ฐํํ๋ค.
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