Linux Kernel(4.19) Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

230224
1178
109352


[리눅스커널] 스케줄링: 스케줄링 정책이란 10. Process Scheduling

스케줄링은 실행 대기 상태에 있는 프로세스 목록 중 하나를 선택해서 CPU를 실행하는 동작입니다. 여기서 한 가지 의문이 생깁니다. 
  | 실행 대기 상태 프로세스들 중 하나를 선택한 후 CPU 실행 상태로 어떤 방식으로 바꿔줄까?


스케줄링 세부 구현을 할 때 다음 그림과 같이 Process A ~ Proces D 프로세스를 어떤 방식으로 선택해서 CPU에 실행할지 결정을 해야 하는 문제가 있는 것입니다.
 

스케줄링 동작을 구현할 때 어떤 프로세스를 어떤 방식으로 선택하느냐 중요한 설계 요소입니다. 이를 스케줄링 정책이라고 이야기를 합니다. 스케줄링 정책은 크게 다음과 같이 분류 할 수 있습니다. 
+ 우선 순위가 높은 프로세스가 계속 CPU를 점유하면서 실행합니다.
+ 실행 대기 상태에 있는 프로세스들에게 공평하게 실행 기회를 부여합니다.

리눅스 커널에서는 다음 해더 파일에서 스케줄링 정책을 정의합니다.
[https://elixir.bootlin.com/linux/v4.14.70/source/include/uapi/linux/sched.h]
#define SCHED_NORMAL 0
#define SCHED_FIFO 1
#define SCHED_RR 2
#define SCHED_BATCH 3
#define SCHED_IDLE 5
#define SCHED_DEADLINE 6

커널은 평상 시 일반 프로세스들은 SCHED_NORMAL 정책으로 관리합니다. 실행 대기 상태에 있는 프로세스를 공평하게 실행을 할 수 있는 기회를 부여하는 것입니다.

하지만, 가끔 우선 순위가 높아서 일을 마무리 할 때까지 CPU를 점유해야 하는 프로세스가 있을 수 있습니다. 이럴 때 해당 프로세스에겐 SCHED_FIFO 정책을 적용합니다.

  | SCHED_FIFO 정책으로 실행하는 프로세스를 보통 RT(Real-Time) 프로세스라고 말합니다.


"혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!" 

Thanks,
Austin Kim(austindh.kim@gmail.com)

Reference(프로세스 스케줄링)

스케줄링 소개
프로세스 상태 관리
   어떤 함수가 프로세스 상태를 바꿀까?
스케줄러 클래스
런큐
CFS 스케줄러
   CFS 관련 세부 함수 분석  
선점 스케줄링(Preemptive Scheduling)   
프로세스는 어떻게 깨울까?
스케줄링 핵심 schedule() 함수 분석
컨택스트 스위칭
스케줄링 디버깅
   스케줄링 프로파일링
     CPU에 부하를 주는 테스트   
     CPU에 부하를 주지 않는 테스트 

핑백

덧글

댓글 입력 영역