리눅스 커널 2.6.23버전부터 기존의 O(1) 스케줄러를 대체하는 CFS스케줄러를 도입하면서 스케줄러 자료구조를 모듈화하였다.



스케줄러 모듈은 위와같은 sched_class에서 요구되는 매서드들을 구현 해서 리눅스 커널 메인 코드 (schdeule() )에서 사용된다.

매서드 내용은 개략적으로 다음과같다.


 enqueue_task() : 태스크가 실행 가능한 상태로 진입할 때 호출됩니다.

dequeue_task() : 태스크가 더 이상 실행 가능한 상태가 아닐때 호출됩니다.

yield_task() : 태스크가 스스로 yield() 시스템콜을 실행했을 때 호출됩니다.

check_preempt_curr() : 현재 실행 중인 태스크를 선점(preempt)할 수 있는지 검사합니다.

pick_next_task() : 실행할 다음 태스크를 선택합니다.

put_prev_task() : 실행중인 태스크를 다시 내부 자료구조에 넣을때 호출됩니다.

load_balance() : 코어 스케줄러가 태스크 부하를 분산하고자 할때 호출됩니다.

set_curr_task() : 태스크의 스케줄링 클래스나 태스크 그룹을 바꿀때 호출됩니다.

task_tick() : 타이머 틱 함수가 호출합니다.

task_new() : 새 태스크가 생성되었을때 그룹 스케줄링을 위해 호출됩니다.



리눅스 커널에서는 기본적으로 위의 클래스로 CFS스케줄러를 구현해서 사용하고 있다.