-여러 개의 태스크들 중에서 다음번 수행시킬 태스크를 선택하여 CPU라는 자원을 할당하는 과정을 스케줄링 이라고 함
- 리눅스의 태스크는 실시간 태스크와 일반 태스크로 나뉘며 각각 스케줄링 알고리즘이 구현
* 리눅스가 총 140단계의 우선순위 제공
실시간 태스크 (0~99)
일반 태스크 (100~139)
(1) 런 큐와 태스크
- 운영체제는 스케줄링 작업 수행을 위해, 수행 가능한 상태의 태스크를 자료구조를 통해 관리
- 이 자료구조를 런 큐(Runqueue)라 함
- 운영체제의 구현에 따라 런큐는 한개 혹은 여러개 존재 가능
- 자료구조의 모양이나 관리 방법도 달라짐
- ~/kernel/sched/sched.h 파일 내에 struct rq라는 이름으로 정의
- 부팅 이후 각 CPU별로 하나씩의 런큐를 유지
복수개의 CPU를 가진 시스템에서 리눅스의 런큐 자료구조와 태스크의 관계
- 새로 생성된 태스크는 부모 태스크가 존재하던 런 큐로 삽입 (더 높은 캐시 친화력 (cache affinity)를 얻을 수 있기 때문에)
- 대기 상태에서 깨어난 태스크는 대기전에 수행되던 CPU의 런 큐로 삽입
* 스케줄러가 수행되면 해당 CPU의 런큐에서 다음번 수행시킬 태스크를 고를 때 고려사항
1. 어떤 태스크를 선택할 것인가
- 일반 태스크를 위해 CFS를 사용하며 실시간 태스크를 위해서 FIFO, RR, DEADLINE 정책을 제공
2. 런 큐간의 부하가 균등하지 않은 경우 어떻게 할 것인가
- 부하 균등 (load balancing)기법을 제공
# load_balance() 함수 : 특정 CPU가 많은 작업을 수행하고 있느라 매우 바빠 한가한 다른 CPU에 태스크를 이주(migration) 시켜서 성능 향상
(2) 실시간 태스크 스케줄링 (FIFO, RR and DEADLINE)
- 가장 급한 태스크를 한가한 태스크보다 먼저 수행될 수 있도록 해줌 -> 높은 반응성을 보임
- 어떤 기준에 근거하여 태스크를 골라내는지?
-> task_struct 구조체는 policy, prio, rt_priority 등의 필드가 존재
- 실시간 태스크 ( SCHED_FIFO, SCHED_RR, SCHED_DEADLINE)
- 일반 태스크 (SCHED_NORMAL) , 이와 더불어 중요하지 않은 일을 수행하는 태스크가 CPU 점유를 막기 위해 SCHED_IDLE 정책, SCHED_BATCH정책이 존재
* 리눅스 실시간 태스크란? sched_setscheduler()등의 함수를 통해 태스크의 스케줄링 정책을 위 세가지 중 하나로 바꾸게 되면 실시간 태스크가 되는 것
- 우선순위 설정을 위해 task_struct 구조체의 rt_priority 필드를 사용
-> 0~99까지의 우선순위를 가질 수 있으며 태스크가 수행을 종료하거나 스스로 중지하거나 혹은 자신의 타임 슬라이스를 다쓸때까지 CPU를 사용
=> 즉 RR인 경우 동일 우선순위를 가지는 태스크가 복수개인 경우 타임 슬라이스 기반으로 스케줄링
-
'Study Note > OS' 카테고리의 다른 글
[Linux] VMware Ubuntu 원격접속 (0) | 2016.12.27 |
---|---|
[Linux] raspbian환경에서 screen 설치 및 Manual (0) | 2016.12.20 |
[Linux] 상태 전이(State Transition)와 실행 수준 변화 (0) | 2016.03.28 |
[Linux] gcc를 사용하기위한 vim,gcc 패키지 설치 (0) | 2016.03.28 |
[Linux] Vmware 설정 및 fedora 23 설치 (0) | 2016.03.23 |