RTOS 가 여러 태스크를 번갈아 돌리는 실제 동작이다.
현재 태스크의 레지스터를 그 태스크 스택에 저장
↓
다음 태스크의 스택에서 레지스터를 복원
↓
그 태스크가 멈췄던 지점부터 이어서 실행
Cortex-M 에서는 예외 진입·복귀 메커니즘을 그대로 활용하고, 보통 PendSV 라는 가장 낮은 우선순위 예외에서 수행한다. 다른 인터럽트를 방해하지 않기 위해서다.
비용
레지스터 저장·복원 수십 사이클
FPU 를 쓰면 더 크다 부동소수점 레지스터까지 저장해야 한다
캐시·파이프라인 효과 간접 비용
태스크를 잘게 쪼갤수록 이 비용이 늘어난다. 태스크 수가 많다고 좋은 설계가 아니다.
언제 일어나나
틱 인터럽트에서 더 높은 우선순위 태스크가 준비됨
블로킹 API 호출 (큐 대기, 딜레이)
ISR 이 태스크를 깨움
FPU 주의
부동소수점을 한 태스크만 쓰더라도 컨텍스트 저장 설정을 켜지 않으면 값이 깨진다. "가끔 계산 결과가 이상하다" 의 원인이 여기인 경우가 있다.