연산장치인 CPU(core)는 한 번에 하나의 프로세스밖에 실행하지 못한다.
그러한 환경에서 좀 더 효율적인 일을 위해 프로세스 스케줄링이라는 것이 필요하다.
리눅스에서는 프로세스 스케줄링 종류 중에 우선순위 기반 라운드 로빈 스케줄링을 사용한다.
우선순위는 말 그대로 우선 실행할 순위인데, 0에 가까울수록 좋고 39에 가까울수록 나쁘다.
리눅스에서, 우선 순위로 정렬한 다음 첫 번째 오는 프로세스를 타임 퀀텀(일정 시간)동안 실행하고, 다시 정렬하여 타임 퀀텀동안 실행하는 과정을 반복한다.
우선순위(priority)는 nice값에 의해 정해진다.
(priority 값을 사용자가 직접 설정할 수는 없지만, nice 값을 설정하여 priority를 설정할 수 있다.)
priority(우선순위) = 20 + nice
우선순위가 0, 20, 39 일때 nice는 각각 -20, 0, 19이다.
우선순위 | 0 | 20 | 39 |
nice | -20 | 0 | 19 |
0 = 20 - 20
20 = 20 - 0
39 = 20 + 19
nice의 값 분류
-20 ~ 0 : negative nice (-)
0 ~ 19 : positive nice (+)
관리자(root)는 negative nice, positive nice 모두 설정 가능하다.
하지만 root를 제외한 일반 사용자는 positive nice만 설정 가능하다.
(일반 사용자의 CPU 독점이 많아지는 현상을 막기 위해)
top 명령어를 사용하여 보면 위에 PR과 NI가 있는 것을 볼 수 있다.
PR이 Priority(우선순위)이고, NI가 Nice이다.
# nice : 프로세스를 실행할 때 nice 값을 정하기 위해 사용
# renice : 프로세스 nice 값을 재정의하기 위해 사용 (인수로 프로세스 번호 사용하기)