그라운드 임베디드 유튜브 구독

노트 / RTOS

펌웨어RTOS3 / 8

우선순위와 선점: 급한 일이 먼저

선점형 스케줄러는 더 높은 우선순위 태스크가 준비되는 즉시 CPU를 넘깁니다. 우선순위를 정하는 기준.

GROUND EMBEDDED · 정리 노트RTOS 03우선순위와 선점태스크주기 / 마감우선순위모터 속도 제어1ms높음IMU 읽기5ms중상

선점형 스케줄링

FreeRTOS 기본 동작은 "Ready 상태인 태스크 중 가장 높은 우선순위를 실행"입니다. 낮은 태스크가 실행 중이어도 높은 태스크가 깨어나면 즉시 바뀝니다. 같은 우선순위끼리는 틱마다 번갈아 실행(라운드 로빈)합니다.

우선순위 정하는 기준

마감이 짧고 엄격한 것일수록 높게 줍니다(비율 단조 스케줄링의 직관).

태스크 주기 / 마감 우선순위
모터 속도 제어 1ms 높음
IMU 읽기 5ms 중상
CAN 통신 10ms 중
화면 갱신 50ms 낮음
로그 저장 여유 가장 낮음

"중요한 것"이 아니라 "늦으면 안 되는 것"이 높은 우선순위입니다. 화면이 중요해 보여도 50ms 늦어도 문제가 없습니다.

인터럽트와의 관계

인터럽트는 어떤 태스크보다도 먼저 실행됩니다. 전류 제어처럼 10kHz 이상 루프는 태스크가 아니라 인터럽트에서 돌리고, 태스크는 그 위의 느린 루프를 맡깁니다.

굶주림

높은 우선순위 태스크가 Blocked로 가지 않고 계속 돌면 아래 태스크는 영원히 실행되지 않습니다. 모든 태스크에는 기다리는 지점(delay, 큐 대기)이 있어야 합니다.