CS/운영체제
[OS] 리눅스 스케줄링
yoon_seon
2023. 9. 8. 23:34
리눅스 스케줄링 정책
실시간 정책 스케줄링(우선순위 높음)
- SCHED_FIFO : 선입 선처리 스케줄링
- SCHED_RR : 라운드로빈 스케줄링
일반정책 스케줄링(우선순위 낮음)
- SCHED_OTHER / SCHED_NORMAL
- SCHED_BATCH
- SCHED_IDLE
리눅스의 CFS 스케줄러
비실시간 프로세스를 대상으로 하는 스케줄링 → linux kernel 2.6.23 버전부터 사용(그 전에는 O(1) 사용했음)
vruntime(virtual runtime)
- 프로세스가 그동안 실행한 시간을 정규화한 정보
- vruntime이 작은 프로세스를 다음 실행할 프로세스로 삼는다.
- vruntime 별 태스크를 고르는 과정에서 RBtree를 사용
타임 슬라이스
- nice 값에 비례해서 가중치를 할당, 가중치를 바탕으로 타임 슬라이스 할당
- nice : 사용자 영역에서 설정한 프로세스 우선순위
- 사용자 영역에서의 값은 -20 ~ 19
- 커널 영역에서의 값은 0 ~ 139
→ 실시간 스케줄링 되는 프로세스 : 0 ~ 99
→ CFS 프로세스 : 100 ~ 139
nice 명령어
새 프로세스를 실행할 때 해당 프로세스의 우선순위 부여(기본적으로 설정된 nice 값은 0)
$ nice -n [우선순위] [program]
$ nice -n 19 uptime
renice 명령어
이미 실행 중인 프로세스의 우선순위 변경
$ renice [우선순위] [program]
$ renice +5 1234
정리
리눅스 스케줄링에서는 실시간 정책으로서 선입선처리, 라운드로빈 스케줄링이 사용되고 일반적인 비 실시간 프로세스 경우 CFS 스케줄러가 이용된다. CFS 스케줄러에는 중요한 개념은 vruntime과 타임슬라이스인데 vruntime이 작은 프로세스를 다음 실행 프로세스로 삼고 타임슬라이스는 nice값을 토대로 연산된다.