본문 바로가기
Embedded/RTOS

[FreeRTOS] Task States

by poin 2022. 2. 3.

State Diagram

FreeRTOS에서 task의 state는 4가지로 구성되어 있다. Scheduler는 각 task가 어떤 state에 있는지 기록함으로써 이를 관리한다.

1. Ready

task가 생성되면, 해당 task는 자동으로 Ready State로 진입한다. Ready State에서 task는 scheduler에게 언제나 실행(run)될 준비가 되었음을 의미한다.

2. Running

- Scheduler는 더 높은 priority의 다른 task가 없다면, Ready State에 있는 task를 Running State로 옮긴다. 해당 task는 processor에 의해 수행되는 동안 Running State에 존재한다.

- processor가 하나의 core만 갖고 있다면(single core), 특정 시간에 Running State에 있는 task는 오직 1개 뿐이다.

- 각 tick마다 필요에 따라 Ready State와 Running State 양방향으로 전환이 가능하다.

3. Blocked

Running State에서 Blocking API function이 호출되면 Blocked State로 state가 전환된다. Blocking API function의 예시로는 queue, semaphore의 대기상태나 vTaskDelay() 같은 경우가 있다.

Blocked State에 있는 task는 processor에서 수행되지 않으며, Running State로 전환될 수 없다. Blocked State에 있는 task는 unblocking event가 발생할때까지 Blocked State에 갇혀 있다. unblocking event로는 delay timer 만료, semaphore release 등이 있다.

4. Suspended

FreeRTOS에서는 vTaskSuspend()를 통해 task가 다른 state들에서 Suspended State로 진입할 수 있다. Suspended State에서도 Blocked State와 마찬가지로 Running State로 들어갈 수 없다.

Suspended State에서는 vTaskResume() 함수를 통해서만 Ready State로 돌아갈 수 있다. 따라서 Blocked State와 다르게, timer에 의존하고 싶지 않을 경우, 일종의 sleep mode에 진입하도록 할 수 있다.

Reference

Introduction to RTOS Part 3 - Task Scheduling | Digi-Key Electronics - YouTube

'Embedded > RTOS' 카테고리의 다른 글

ESP-IDF에서 FreeRTOS Task로 ESP32 LED Blinking하기  (0) 2022.01.04

댓글