리얼타임 시스템(RealTime System)

Poby’s Home
6 min readDec 3, 2020

--

What is a Realtime System?

리얼 타임 시스템은, 외부 입력을 처리하기 위해 행하여진 연산이 논리적으로 정확해야 할뿐만이 아니라, 정해진 시간내에 처리되어야 하는 시스템으로 정의 된다. 즉, 외부 세계와의 상호작용, 계산의 정확성, 시간의 제약성, 이 세가지의 요구사항을 가지는 시스템이다.
특히 시간의 제약성을 어느 정도 수준으로 만족시키느냐에 따라 리얼 타임 시스템은 다음의 두가지로 나뉘어 진다.

소프트 리얼타임 시스템
외부입력을 정해진 시간내에 처리를 만족시키지 못하여도 치명적인(Critical) 결과를 초래하지 않는 시스템.
예) 휴대폰, 미디어 플레이어, 셋탑박스등등.

하드 리얼타임 시스템
외부입력을 정해진 시간내에 처리를 만족시키지 못하면 치명적인(Critical) 결과를 초래하는 시스템.
예) 항공기의 비행 제어 시스템, 수술용 의료 장비등등.

리얼 타임 오퍼레이팅 시스템

그렇다면, 이 블로그에서 설명하고자하는 리얼 타임 오프레이팅 시스템(이하 RTOS)란 무었인가?
먼저 말해두고 싶은것은 모든 리얼 타임 시스템이 반드시 오퍼레이팅 시스템(이하 OS)을 필요로하는것은 아니라는 것이다.
즉 OS를 갖추지 않아도 될만한 처리에서 실시간성을 요구하는 경우에는 OS없이 실시간성만을 만족시키는 시스템을 만들수 있기 때문이다.

예를 들면, 앞에서도 설명하였지만, OS없이 커다란 루프안에 실행할 루틴만을 집어넣어서 동작시켜도, 연산의 결과가 정확하고, 주어진 시간내에 처리될 수 있다면, 이 또한 실시간 시스템이라 부를 수 있을 것이다.
물론 OS없이 실시간 시스템을 구성할수도 있겠지만, 이는 과거의 극히 제한된 목적에서, 제한된 처리만을 하는 시스템에서만 사용될 수 있을것이다.
현재의 실시간 시스템은 시스템이 충족시켜야할 요구사항이 방대하고 복잡하기 때문에, 이를 정확히, 주어진 시간내에, 또한 효율적으로 처리하기 위해, OS를 필요로 하게 된다.

그럼 여기서 리얼 타임 시스템을 위한 OS, 즉 RTOS가 어떠한 기능을 가지고 있어야 하는지 살펴보자.

RTOS의 필수 기능

  • 외부 입력에 반응 (Response to External Event)
  • 예측가능한 시간내의 처리 (Deterministic response time)
  • 우선순위 기반 멀티 태스킹 (Priority-based Multi-tasking)
  • 선점형 스케줄링 (Pre-emptive scheduling)
  • 통신 및 동기화 (Communication and Synchronization)

위부 입력에의 반응
여기서 외부입력이라는것은, 센서등을 통해 입력된 외부의 이벤트일 수도 있고, 혹은, 시스템내의 다른 디바이스로부터의 입력일수 도 있다.
이러한 입력들에 반응하여 처리를 행하는것은 기본적인 일이 될것이다.

예측가능한 시간내의 처리
RTOS와 일반적인 OS를 구별하게 만드는 가장 큰 요소가 바로 이 예측가능한 시간내에 처리한다는 것이다.
예측가능하다는 것은, 각각의 경우에 얼마의 시간이 걸릴것인가를 모두 예측한다는 뜻이 아니라, 최악의 케이스, 즉 worst case의 처리시간이 정해져 있어서, 어떠한 경우에서라도, 이 시간내에서는 처리가 행하여질수 있다는것을 보증한다는 것이다. 즉, 어떤 인풋이 들어갔을때 처리에 걸리는 시간의 맥시멈을 정해져 있다라는 뜻이다.
예를 들면, 어떤 시스템에서, 한 시점에서 A라는 인풋을 처리하는데는 1usec가 걸렸는데, 다른 시점에서 A를 처리하는데 3usec가 걸렸다고 하자.
이때 예측가능하다는 의미는, A가 처리되는게 어떤 시점에서는 1usec이 걸리것이고, 또 다른 시점에서는 3 usec이 걸릴것이라는 것을 예측하는것이 아니라, 어떠한 경우에도 A의 인풋을 받았을때의 걸리는 시간이, 언제나 5usec 이내라는것을 보증한다는 것이다. 이런의미에서 영어로는 Deterministic이라는 표현을 쓴다. 즉 결정적이라는 의미이다.

멀티 태스킹
만약 리얼 타임 시스템에서 처리해야 할 일들이, 각각의 태스크별로 구별되어있지 않고, 큰 루프안에서 연달아서 각각의 처리를 하게 되면, 하고자하는 처리의 숫자가 늘어나거나, 혹은, 하나의 이벤트를 처리하는 시간이 매우 길어기게 되면, 인풋에 대해 반응하는 시간들이 점점 커지게 되어, 급기야는 시간제약을 못 맞추게될 가능성이 커지게 된다.
결국, 다양한 외부 세계와의 상호작용을 위해서는 각각의 처리를 구분하여 동시에 처리할 필요가 생기게 되는 것이다.
이러한 처리의 단위를 태스크로 구분하게 된다.
사람이 하는일에도 중요한 일이 있고, 덜 중요한 일이 있는것처럼, 태스크에도 우선순위가 중요하다.
이러한 우선순위가 생기는 이유는 여러가지가 있을 수 있지만, 가장 중요한 이유는, 각 처리마다, 즉 각 태스크마다의 시간의 제약이 다르기 때문이다.
A라는 인풋에대한 처리의 시간제약이 1usec이고, B에대한 시간의 제약이 10usec라면, 만약 동시에 A, B 두 인풋이 들어왔을때, 먼저 행하여할 처리는 A가 될 것이다. 그러면 이때 A는 B보다 우선순위를 높게 주어야 한다.
이렇게 태스크마다 우선순위를 다르게 주는 것을 우선순위 기반 멀티 태스킹(Priority-based multi tasking)이라고 한다.

선점형 태스크 스케줄링
여기서 만약 B의 인풋이 들어와서 B의 처리를 행하고 있는데, A인풋이 들어오면 어떻게 될까?
B의 처리는 10usec가 걸려도 되나, A의 처리는 반드시 1usec이내에 행해져야 한다. 그렇다면 이때에는 시간이 좀 걸려도 되는 B의 처리는 잠시 멈추고, A의 처리를 행한후에 B의 처리를 해야 할것이다. 그래야지, A의 시간제약인 1usec이내처리를 만족시킬수 있을 것이다.
이렇게, 우선순위가 낮은 태스크의 처리를 하고 있는동안에, 우선순위가 높은 태스크가 생기면, 우선순위 높은 태스크를 먼저 처리해주고 나중에 우선순위 낮은놈을 처리하는것을 선점형 스케줄링라고 한다.
위의 예에서 볼수 있듯이 멀티 태스크를 지원하는 RTOS가 각각 태스크의 시간제약을 항상 맞추려면 선점형 스케줄링을 지원해야 한다.
즉 중요하고 급한 일이 먼저 처리될수 있도록 OS를 만들어주어야 한다.

통신 및 동기화
처리해야 할 작업들을 태스크 기반으로 분리를 하게 되어도, 태스크 간에 서로 정보를 주고받아야 할 필요가 생긴다. 또한 시스템내의 한정된 리소스나, 데이타를 태스크들이 공유해서 사용하기 위해서는, 태스크간의 교통정리, 즉 동기화가 필요하다. 뒤에 나오는 단원에서 더욱 자세히 살펴보기로 하겠다.

잠깐! 잘못 알려진 RTOS에 대한 상식

  • 임베디드 리눅스는 RTOS이다.
    최근들어 여러 임베디드 기기에 임베디드 리눅스등을 탑재하는 경우가 많은데, 모든 임베디드 리눅스가 RTOS 인것은 아니다.
    즉 탑재한 임베디드 리눅스가 RTOS가 갖추어야 하는 조건을 갖추지 않았으면, 이는 리얼타임 시스템이 될수가 없는것이다.
    부디 리얼타임 시스템과 임베디드 시스템을 혼동하여 생각하지 말기 바란다.
  • 처리속도가 엄청나게 빠른 OS는 RTOS이다.
    리얼타임 OS는 그 자체의 처리속도가 빠르냐 느리냐가 아니라, 정해진 시간내에 처리가 끝나는것을 보장하느냐 아니냐에 따라 달라진다.

--

--

No responses yet