실시간 스케줄링 (Real-Time Scheduling) — 주기 태스크 집합을 공유 자원(통상 단일 CPU)에 시간 도메인에서 할당하는 문제. 참조 모델의 세 번째 축으로, 알고리즘이 만든 Schedule이 모든 태스크의 데드라인을 만족하는지 판정한다. 세부 알고리즘 분류는 스케줄링 알고리즘 분류, FP 정책과 스케줄 가능성 판정은 고정 우선순위 스케줄링 / 응답 시간 분석 참고.
핵심 용어
| 용어 | 정의 |
|---|---|
| Schedule | Job들을 시간 도메인에서 자원에 할당한 결과 |
| Scheduler | 스케줄링 알고리즘을 구현한 OS 모듈 |
| Scheduling Algorithm | Schedule을 생성하는 규칙 |
Feasibility vs Schedulability
두 개념은 쉽게 혼동되지만 주체가 다르다.
| 개념 | 판정 대상 | 정의 |
|---|---|---|
| Feasibility | Schedule (하나의 스케줄) | 모든 태스크가 데드라인 이전에 완료되는 스케줄이면 feasible |
| Schedulability | Task Set | feasible schedule을 만들어내는 알고리즘이 적어도 하나 존재하면 schedulable |
| Schedulability (알고리즘 특정) | Task Set + Algorithm | 특정 알고리즘이 해당 태스크 집합에 대해 feasible schedule을 생성하면 “그 알고리즘에 의해 schedulable” |
즉 schedulability는 “알고리즘이 있느냐”의 존재 여부 문제, feasibility는 “이 구체적 스케줄이 되느냐”의 문제다.
선점 정책 (Preemption Policy)
태스크 수행 중 다른 태스크를 어떻게 할당할 수 있는지에 따라 구분.
| 정책 | 특성 |
|---|---|
| Preemptive | 실행 중인 태스크를 임의 시점에 중단 가능 |
| Non-preemptive | 현재 태스크가 완료될 때까지 대기해야 새 태스크 시작 가능 |
| Cooperative | 사전 정의된 시점에서만 선점 허용 (Preemptive와 Non-preemptive의 중간) |
컨텍스트 스위치 (Context Switch)
선점 스케줄링은 CPU의 컨텍스트 저장/복원 메커니즘을 전제로 한다. 대부분의 CPU가 이 기능을 제공한다. 태스크 간 전환 시 레지스터·스택 포인터·프로그램 카운터 등을 저장·복원.
TASK(task_1ms) {
A; B; C;
}
// ↕ Context Switch
TASK(task_10ms) {
a; b; c;
}VDX에서는 Task OIL의 SCHEDULE 속성(FULL=preemptable / NON=non-preemptable)으로 태스크별 선점 허용 여부를 설정한다. PreTaskHook/PostTaskHook도 컨텍스트 스위치 시점에 트리거된다 (OSEK Hook Routines 참고).
스케줄링의 목표
Real-Time 스케줄링의 핵심은 Deadline guarantee(데드라인 보장). 이 외에도 여러 목표(Fairness, Throughput, Latency, Predictability, Flexibility 등)가 있으며 서로 상충한다. Non-Real-Time 스케줄링(예: Linux CFS)은 공정 분배에 초점. 전체 목표 목록과 예시는 스케줄링 알고리즘 분류 참고.