임베디드 용어 사전
구조·RTOS

컨텍스트 스위칭

실행 중인 태스크의 레지스터와 스택 포인터를 저장하고 다른 태스크의 것을 복원하는 과정.

RTOS 가 여러 태스크를 번갈아 돌리는 실제 동작이다.

현재 태스크의 레지스터를 그 태스크 스택에 저장
   ↓
다음 태스크의 스택에서 레지스터를 복원
   ↓
그 태스크가 멈췄던 지점부터 이어서 실행

Cortex-M 에서는 예외 진입·복귀 메커니즘을 그대로 활용하고, 보통 PendSV 라는 가장 낮은 우선순위 예외에서 수행한다. 다른 인터럽트를 방해하지 않기 위해서다.

비용

레지스터 저장·복원      수십 사이클
FPU 를 쓰면 더 크다     부동소수점 레지스터까지 저장해야 한다
캐시·파이프라인 효과     간접 비용

태스크를 잘게 쪼갤수록 이 비용이 늘어난다. 태스크 수가 많다고 좋은 설계가 아니다.

언제 일어나나

틱 인터럽트에서 더 높은 우선순위 태스크가 준비됨
블로킹 API 호출 (큐 대기, 딜레이)
ISR 이 태스크를 깨움

FPU 주의

부동소수점을 한 태스크만 쓰더라도 컨텍스트 저장 설정을 켜지 않으면 값이 깨진다. "가끔 계산 결과가 이상하다" 의 원인이 여기인 경우가 있다.

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — RTOS — 선점과 블로킹을 되찾는다