본문 바로가기
CS/운영체제

[OS] 리눅스 스케줄링

by yoon_seon 2023. 9. 8.

리눅스 스케줄링 정책

실시간 정책 스케줄링(우선순위 높음)

  • 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값을 토대로 연산된다.

'CS > 운영체제' 카테고리의 다른 글

[OS] 뮤텍스 락과 세마포어  (0) 2023.09.09
[OS] 프로세스 동기화  (0) 2023.09.09
[OS] CPU 스케줄링 알고리즘  (0) 2023.09.08
[OS] CPU 스케줄링  (0) 2023.09.08
[OS] 스레드  (0) 2023.09.08

댓글