임베디드/임베디드 프로젝트

FreeRTOS 들여다보기1 - RTOS란?

fish9903 2023. 8. 11. 17:58

이전 프로젝트를 진행하면서 RTOS에 대해 알게 되었고, RTOS에 대해 알아보고자 한다.

 

1. Real Time

RTOS는 Real Time OS로, 직역하면 실시간 운영체제라고 할 수 있다. OS는 OS인데 real time이 무슨 뜻일까?

 

단어 자체로만 보면 '실시간'이라 뭔가 빠를 것 같은 느낌이 든다.

 

Real time은 fast, high performance와 같은 의미가 아니다

 

하지만 real time 뜻은 fast가 아닌 in time이다.

정확히 말하면, "제한된 시간 조건 내에 주어진 작업완료를 보장하는 것" 이다.

속도가 빠르면 좋겠지만, Real time에서 속도보다 중요한 것 주어진 작업을 정해진 시간 내에 완료하는 것을 보장하는 것이 더 중요한 특성이다.

 

이런 특징을 가지는(가져야 하는) 어플리케이션을 Real time application(RTA)라고 부른다.

RTA는 event에 대한 response time이 일정하다는 특징을 가지고 있다.

이는 다른 말로 response time이 guaranted된다는 것이다.

이 특징을 다른 관점에서 보면 response time을 prediction할 수 있고, time deterministic하다고 해석할 수도 있다.

 

Response time이 얼마나 엄격하냐에 따라 soft, hard로도 나눌 수 있다. 

Soft RTA는 response time에 약간의 편차를 허용하고, Hard RTA는 더 엄격해야 한다.

 

Hard RTA의 예시로는 자동차 에어백 시스템, soft RTA의 예시로는 비디오 스트리밍이 있다.

 

Hard RTA는 주어진 시간(deadline)에 무조건 특정 결과를 도출해야 한다. 그 이후에 나오는 결과는 아무 의미가 없다. 자동차 에어백 시스템을 보면 사고 발생(event)후 특정 시간 내(deadline, time constraint) 에어백이 펼쳐져야(결과) 한다. 그렇지 않으면 이 시스템은 아무 의미가 없다.

 

Soft RTA도  주어진 시간에 특정 결과를 도출하는 시스템이다. Hard RTA와 차이점은 deadline 이후에 나오는 결과는 의미는 떨어지지만 아무 의미가 없는 것은 아니다는 것이다. 비디오 스트리밍은 시간내 특정 프레임을 만족해야 사용자가 깔끔한 화면을 볼 수 있지만, 이 특정 프레임 조건을 약간 벗어나더라도 서비스가 불가능한건 아니다. 물론 오차가 너무 크면 서비스가 불가능하다.

 

2. RTOS와 GPOS

이런 Application들을 높은 수준의 안전성으로 정확한 타이밍으로 실행(제어)하도록 설계된 OS가 RTOS이다.

RTOS가 가지는 특징을 GPOS(General Purpose OS)와 비교하여 보면 다음과 같다.

 

GPOS와 RTOS

첫번째, task scheduling 관점

GPOS는 task scheduling을 항상 priority 기반으로 하지 않지만, RTOS는 항상 priority 기반으로 한다.

RTOS는 항상 priority 기반으로 scheduling을 하기 때문에, 대부분 preemptive scheduling을 사용한다.

 

또한 scheduling에서 GPOS와 RTOS가 중요시하는 부분에서도 차이가 존재한다.

 

GPOS는 높은 throughput을 중요시 한다. 높은 throughput이란 특정 시간 내에 최대한 많은 process를 완료하는 것이다. 따라서 이 높은 throughput을 위해, 때때로 low priority task가 high priority task보다 먼저 실행될 수도 있다. 이를 priority inversion이라고 한다.

 

RTOS는 time predictability를 중요시 한다. 이는 높은 throughput보다 중요한 특징으로, 중요한 task(high priority)가 다른 low priority task에 밀려 늦게 실행되는 상황이 발생하지 않도록 한다. RTOS에서 high priority task는 주어진 deadline 내에 실행되어야 하기 때문이다. 따라서 low priority task가 실행중일 때, 보다 높은 priority task가 실행되어야 한다면(schedule queue, list에 들어온다면) high priority task가 CPU를 take over한다(preemptive). 

 

두번째, latency 관점

Latency는 어떤 사건의 발생과 그 사건에 대한 응답(반응)이 일어나는데 걸리는 시간을 의미한다.

 

Computing에서의 latency

따라서 task latency는 event 발생과 그 event를 handle하는 task가 동작하는 시간의 차이를 의미한다.

 

GPOS에선 이런 task latency는 현재 실행중인(실행 대기 중인) task가 많을 수록 길어지는 경향이 있지만, RTOS에선 task latency가 항상 일정해야 한다.

 

다른 latency로는 interrupt latency가 있다. Task latency와 똑같이 interrupt가 발생하고, ISR(Interrupt Service Routine)이 실행되기 전까지의 시간 차이인데, 이 latency 또한 GPOS에선 크게 상관하지 않지만 RTOS에선 이 gap이 작을수록 좋고 작게 해야한다.

 

세번째, priority inversion 관점

위에서 priority inversion 단어를 썼었다. Priority inversion은 high priority task가 low priority task가 끝날때까지 기다리는 현상을 말한다. Priority 단어 의미로만 보면 항상 high priority task가 먼저 실행되어야 하지만, 반대의 상황이 나오기 때문에 priority inversion이라고 한다.

 

Shared resource를 low priority task가 사용하고 있어서 이를 사용하는 high priority task가 실행되지 못하는 경우가 해당된다. 

GPOS에서는 이를 크게 신경쓰지 않지만, high priority task가 중요한 RTOS에서는 이 문제를 해결해야 한다. 따라서 RTOS는 preemptive scheduling을 많이 사용하고, rescheduling 같은 방법을 쓴다.

 


 

 

이후에는 FreeRTOS코드를 STM32 보드와 함께 분석하면서 이런 목적 달성을 위해 RTOS가 어떻게 구현되고 동작되는지 살펴볼 예정이다.