5. Free RTOS - Task 상태와 동작

728x90
반응형

https://vuzwa.tistory.com/entry/4-Free-RTOS-Task-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0-Multi-Taskwith-STM32L475VGT-B-L475E-IOT01A1

 

4. Free RTOS - Task 생성하기, Multi Task(with STM32L475VGT, B-L475E-IOT01A1)

https://vuzwa.tistory.com/entry/2-Free-RTOS-UART-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0with-STM32L475VGT-B-L475E-IOT01A1 2. Free RTOS - UART 사용하기(with STM32L475VGT, B-L475E-IOT01A1) 이전 포스팅에서는 RTOS 프로젝트 생성까지 확인해

vuzwa.tistory.com

 

 

이전 포스팅까지는 RTOS를 사용하기 위한 가장 기초적인 Task 생성, Uart 데이터 송수신을 알아봤다. 이번 포스팅에서는 RTOS에서 Task가 어떻게 동작하는지에 대해 알아보도록 하겠다.

 

아래 그림은 Task의 동작을 표현한 Block diagram이다.

구조가 생각보다(?) 복잡하지 않다. 총 4가지의 상태로 Runing, Ready Suspended, Blocked 상태가 있다.

 

 


Running

Task 가 CPU(MCU or MPU)의 자원을 활용하 동작하고 있는 상태, 이 상태에서 Blocked, Suspended 상태로 전환할 수 있다. OS가 올라가지 않은 펌웨어에서는 main 함수의 while(1) 루프와 같다고 보면 된다. 

 


Ready

Task가 만들어진 직후나 실행되기 전 상태다. 우선순위에 따라 Running 상태로 바뀐다. 여러 개의 Task가 생성되었을 때 다른 Task가 CPU를 점유 중이라면 Task는 Ready 상태로 바뀐다.

 


Suspended

Task가 일시 정지된 상태다.  vTaskSuspend() 함수를 통해 일시정지시킬 수 있고, 일시정지된 Task를 다시 시작하기 위해서는 다른 Task에서 vTaskResume("재시작 Task Handle") 이와 같은 방식으로 다시 시작할 수 있다.

 


Blocked

어떤 FreeRTOS API 호출로 Task가 잠시 정지되었다가 발생되는 이벤트에 의해 다시 동작하는 상태를 말한다. 가장 쉬운 예는 vTaskDelay() 함수다. 

흔히 사용하는 NOP()이나 기타 Delay 함수와는 다르게 RTOS에서 vTaskDelay() 함수는 CPU의 자원을 소모하지 않고 Delay 시간 동안 다른 Task가 CPU의 자원을 활용해 동작하다가 Delay시간이 지나면 이벤트가 발생해 vTaskDelay() 함수를 호출한 Task를 실행한다. 

 

이 4가지 상태는 반드시 기억해두자!

 

다음 포스팅부터는 Task의 상태 전환에 대해 알아보겠다.

 

- 끝 -

 

728x90
반응형