실시간 운영체제 — Hard/Soft Real-Time, 스케줄링
실시간 시스템은 "빠른 시스템"이 아니라 "정해진 시간 안에 반드시 응답하는 시스템"입니다. 에어백, 항공기 제어, 산업 로봇 등 마감 시간(deadline)을 놓치면 안 되는 시스템에서 사용됩니다.
실시간 시스템이란
주어진 시간 제약(deadline) 안에 연산을 완료하는 것이 보장 되는 시스템입니다.
중요한 것은 평균 응답 시간이 아니라 최악의 응답 시간(WCET, Worst Case Execution Time) 입니다.
Hard Real-Time vs Soft Real-Time
| 항목 | Hard Real-Time | Soft Real-Time |
|---|---|---|
| 데드라인 위반 | 시스템 실패 (치명적) | 성능 저하 (허용) |
| 예시 | 에어백, ABS, 항공기 제어, 의료기기 | 비디오 스트리밍, 게임, VoIP |
| 보장 수준 | 100% 데드라인 충족 | 통계적으로 대부분 충족 |
| OS 예시 | VxWorks, QNX, FreeRTOS | 일반 Linux (PREEMPT_RT 패치) |
Hard: 에어백이 100ms 안에 터져야 함 → 101ms에 터지면 의미 없음
Soft: 영상이 33ms마다 프레임을 보여야 함 → 가끔 넘기면 끊기지만 치명적이지 않음
RTOS의 특징
일반 OS와 RTOS의 차이:
| 항목 | 일반 OS (Linux, Windows) | RTOS |
|---|---|---|
| 목표 | 처리량(throughput) 최대화 | 응답 시간 보장 |
| 스케줄링 | 공정성 (CFS 등) | 우선순위 기반 선점형 |
| 인터럽트 지연 | 가변적 | 최소, 예측 가능 |
| 커널 선점 | 제한적 | 완전 선점 가능 |
| 메모리 관리 | 가상 메모리 (페이지 폴트 지연) | 고정 메모리 할당 |
실시간 스케줄링 알고리즘
Rate Monotonic Scheduling (RMS)
주기가 짧은 태스크에 높은 우선순위 를 부여합니다. 정적 우선순위 방식입니다.
태스크 A: 주기 = 20ms, 실행 시간 = 5ms → 우선순위 높음
태스크 B: 주기 = 50ms, 실행 시간 = 10ms → 우선순위 낮음
태스크 C: 주기 = 100ms, 실행 시간 = 20ms → 우선순위 가장 낮음
타임라인:
0 5 10 15 20 25 30
|AAA||BBB|BBBBB|CC|AAA||BBB|...
A실행 B실행 C실행 A다시
스케줄링 가능 조건 (Liu & Layland 정리):
CPU 활용률 ≤ n(2^(1/n) - 1)
n=2: 약 82.8%
n=3: 약 78.0%
n→∞: 약 69.3% (ln2)
이 조건을 만족하면 RMS로 모든 데드라인을 지킬 수 있습니다.
Earliest Deadline First (EDF)
데드라인이 가장 가까운 태스크를 우선 실행 합니다. 동적 우선순위 방식입니다.
현재 시간: 10ms
태스크 A: 데드라인 = 25ms → 우선순위 중간
태스크 B: 데드라인 = 15ms → 우선순위 높음 (가장 급함)
태스크 C: 데드라인 = 50ms → 우선순위 낮음
→ B를 먼저 실행
- 이론적으로 최적: CPU 활용률 100%까지 스케줄링 가능
- RMS보다 활용률이 높지만 구현이 복잡 (우선순위가 계속 변경)
RMS vs EDF 비교
| 항목 | RMS | EDF |
|---|---|---|
| 우선순위 | 정적 (주기 기반) | 동적 (데드라인 기반) |
| 최대 CPU 활용률 | ~69% (n→∞) | 100% |
| 구현 복잡도 | 낮음 | 높음 |
| 과부하 시 동작 | 예측 가능 (저우선순위만 실패) | 도미노 효과 가능 |
리눅스의 실시간 지원
리눅스는 범용 OS이지만 PREEMPT_RT 패치 로 Soft Real-Time 수준을 지원합니다.
# 실시간 스케줄링 정책 확인
chrt -m
# 프로세스에 실시간 우선순위 부여
chrt -f 99 ./my_realtime_app # SCHED_FIFO, 우선순위 99
chrt -r 50 ./my_realtime_app # SCHED_RR, 우선순위 50
리눅스 스케줄링 정책:
SCHED_FIFO: 선점형 FIFO — 같은 우선순위 내에서 FIFOSCHED_RR: 라운드 로빈 — 같은 우선순위 내에서 타임 슬라이스SCHED_DEADLINE: EDF 기반 — 리눅스 3.14부터
핵심 포인트
- Hard vs Soft: "시간을 놓치면 어떻게 되느냐"가 구분 기준
- RMS는 최적인가: 정적 우선순위 중에서는 최적이지만, EDF(동적)가 이론적으로 더 우수
- 리눅스가 RTOS가 아닌 이유: 커널 내부에 비선점 구간이 있고, 페이지 폴트 등 예측 불가능한 지연이 존재
정리
실시간 OS는 "빠름"이 아니라 "예측 가능함"이 핵심입니다. 실제로는 Hard/Soft의 차이, RMS와 EDF의 비교, 리눅스의 실시간 한계를 설명할 수 있으면 충분합니다.