MCU는 CPU나 GPU와 다르게 낯설지만, 가장 많이 사용되는 반도체 중 하나다. ST 시스템 솔루션 랩의 유지 카와노 매니저에게 MCU의 활용성과 가능성이 얼마나 큰지 들어보자.
“RTOS 지정된 시간 범위 내 처리 완료”
사전 설정 우선순위 따라 태스크 처리
실시간 처리 성능외 다양한 기능 필요
[편집자주]일반적으로 반도체라 하면 컴퓨터의 CPU와 메모리처럼 일반인에게 익숙한 반도체를 떠올리기 마련이다. 반면에 전자제품 구동을 위해서 핵심 반도체로 쓰이는 MCU(Micro Controller Unit)의 경우 일반적으로 우리가 쉽게 접하는 모든 전자제품에서 사용되고 있으면서도 일반인에게는 아직 낯선 반도체다. 이런 MCU가 최근 반도체 부족 사태로 인해 언론에 오르내리며, 일반인들에게 주목받기 시작했다. 이에 본지는 MCU 반도체 전문기업인 ST마이크로일렉트로닉스의 유지 카와노 매니저의 연재기고를 통해 MCU에 대해 전문적으로 알아보는 자리를 마련했다.
이제 목적과 환경에 맞는 적당한 MCU 소프트웨어를 고르는 것이 얼마나 중요한지 알 수 있을 것이다. 오늘은 OS에 대한 이야기를 좀더 해보려고 한다. OS의 역할과 기능에 대한 이해를 높일 수 있을 것이다.
지난 10회차에서 OS가 애플리케이션 소프트웨어와 미들웨어의 다양성(versatility) 향상을 위해 설치하는 소프트웨어의 일종이라고 설명했었다. 근본적으로 OS는 하드웨어를 추상화함으로써 시스템의 디바이스 의존성을 없애준다.
OS라는 단어를 들었을 때, 가장 먼저 머리속에 떠오르는 것이 무엇인가? 대부분의 사람들과 마찬가지로 당신 역시 윈도우(Windows)를 떠올릴 것이다. 이 대중적인 OS는 가정용 컴퓨터를 포함하여 많은 PC에 설치되어 있으며 TV 광고를 통해서도 많이 알려져 있다. 또한 여러분은 요즘 인기를 모으고 있는 스마트폰과 테이블릿PC를 지원하는 안드로이드(Android) 또는 iOS도 생각해 볼 수 있다. 임베디드 소프트웨어를 다루는 엔지니어들은 아마도 리눅스(Linux), ITRON, 심비안(Symbian), T-kernel, VxWorks와 같은 다른 많은 OS를 떠올릴 것이다.
가용한 다양한 OS를 크게 두 가지 종류로 분류할 수 있다. 즉 범용 OS(universal OS)와 실시간 OS(RTOS, real-time OS)이다.
범용 OS와 실시간OS 간의 차이가 아래에 설명되어 있지만, 그 보다 우선 ‘실시간’이 무엇을 의미하는 지 고려해야 한다.
■ ‘실시간’의 의미
실시간 기능에 대해 보다 쉽게 이해할 수 있도록 다음 예제를 살펴보기로 하자. 실시간 컴퓨터와 비-실시간 컴퓨터를 가지고 있고, 모두 동일한 연산을 수행한다고 가정하자. 결과적으로 우리는 동일한 결과를 얻겠지만 차이점은 무엇인가? 차이는 비-실시간 컴퓨터의 경우에 정확한 결과를 얻은 것을 기준으로 태스크를 성공적으로 완료한 것으로 간주하지만, 실시간 컴퓨터의 경우에는 그렇지 않다. 실시간 컴퓨터는 정확한 결과를 생성하는 것 외에도 계산을 제한 시간 내에 완료해야만 한다. 이 예에서 제한 시간은 1분이기 때문에 실시간 컴퓨터는 1분 이내에 계산을 완료해야만 태스크를 성공적으로 완료한 것으로 간주한다.
따라서 실시간 컴퓨터로 생각되는 컴퓨터는 제한 시간이 지정되어 있어야 하고, 이를 충족시켜야 한다(그림 1 참조).
이 설명을 기반으로, 범용 OS는 엄격한 처리 시간이 부과되어 있지 않지만, RTOS는 지정된 시간 범위 내에서 처리를 완료해야 한다는 것을 알 수 있다.
▲그림1 : 실시간 처리
■ 범용 OS의 특징
일반적으로 범용 OS는 멀티 태스크를 병렬로 수행할 때 시간-분할(time-sharing) 방식을 이용한다. 이 방식에서는 새로운 태스크 요청이 발생했는데 OS가 이미 다른 태스크를 수행하고 있었다면 지정된 시간이 될 때까지 새로운 태스크 처리에 착수하지 않는다(그림 2 참조). 라운드-로빈(round-robin) 방식이라고도 알려진 이 시간-분할 방식 하에서 OS는 특정 시간에만 하나의 태스크에서 다른 태스크로 전환한다.
윈도우와 리눅스와 같은 많은 PC OS가 범용 OS이다.
▲그림2 : 범용 및 실시간 OS
■ RTOS 기능
복수의 태스크를 병렬로 처리하기 위해서 RTOS는 범용 OS의 시간-분할 방식이 아닌 사전 설정된 우선순위(preset priorities)에 따라서 태스크를 처리해야 한다. 이를 통해 시스템은 지정된 제한 시간 내에 각각의 태스크를 끝낼 수 있다. 그림 2에 나타낸 바와 같이 범용 OS와 RTOS가 동일한 3개의 태스크를 각기 다른 순서로 끝낼 수 있다. RTOS는 다른 태스크를 완료하기 전에 우선순위가 더 높은 태스크를 완료한다.
MCU의 경우 일반적으로 RTOS를 선택한다. 전형적인 RTOS의 예로는uCOS-II나 embOS가 있으며, 이것은 ST마이크로일렉트로닉스의 32 비트 MCU인 STM32 시리즈의 여러 제품에 탑재되어 있다. 내장 플래시 메모리를 제공하는 MCU에 설치된 RTOS는 소형 OS 풋프린트(즉, 적은 용량의 ROM 및 RAM)를 지원해야만 한다
■ RTOS의 필요 기능
알고 있다시피 RTOS에서 가장 중요한 것은 실시간 처리 성능이지만, 실제적으로 다음과 같은 기능들 역시 필요하다.
▷병렬 처리 기능
그림 2는 3개의 태스크가 RTOS에 의해 처리되는 방법을 보여준다. 이들 3개의 태스크를 병렬로 동시에 처리하기 위해서, OS는 각 태스크의 상태를 결정하고 그에 맞춰 태스크 스위칭 및 태스크 스케줄링을 수행해야 한다. 이러한 프로세스를 수행하기 위한 RTOS 기능을 병렬 처리 기능(또는 태스크 제어 기능)이라고 한다. 다양한 태스크 상태로는 실행(executing), 휴식(resting), 준비(ready), 대기(waiting) 등이 있다.
▷동기화 기능
동기화 기능은 다른 태스크의 처리가 시작되기 전에 하나의 태스크가 완료되어야 할 경우와 같이 상호 연관된 처리 시간을 갖는 서로 다른 태스크들을 동기화한다. 동기화 방법은 세마포어(semaphore)와 이벤트 플래그 등이 있다.
▷통신 기능
통신 기능은 동기화 기능과 다소 유사하지만, 처리 시간 정보뿐만 아니라 하나의 태스크에서 처리된 데이터가 다음 태스크에서 사용되는 경우와 같이 관련된 태스크에 대한 태스크 데이터들을 교환한다. 통신 방법은 데이터 큐와 메일박스가 있다.
▷시간 제어 기능
RTOS는 시간 제어 기능을 사용하여 태스크의 일시 중단, 주기적인 태스크 호출 등과 같은 시간 관련 동작을 수행한다. 이 기능은 시스템 클록을 설정 및 참조할 뿐만 아니라 지연 태스크 처리, 타임-아웃 처리 등을 수행한다.
▷인터럽트 제어 기능
인터럽트가 태스크들 사이에 생성될 때, RTOS는 현재 태스크의 처리를 일시적으로 중단하고 인터럽트에 해당하는 프로세스로 전환해야 한다. 이러한 경우에 인터럽트 제어 기능이 실행 인터럽트 핸들러와 경로를 제어한다. 이러한 프로세스는 인터럽트 핸들러의 정의, 인터럽트 경로 생성 및 제거, 인터럽트 경로 상태 참조, 인터럽트 허가 및 금지, 인터럽트 마스킹 등이 있다.
▷메모리 제어 기능
메모리는 제한된 자원이기 때문에, 이 기능은 동적으로 각 태스크의 메모리 사용을 관리한다. 제어 방법은 고정-길이 메모리 풀과 가변-길이 메모리 풀이 있다.
다양한 OS는 RTOS 또는 범용 OS로 구분할 수 있다. 일반적으로 RTOS는 소형 OS 풋프린트가 요구되는 MCU에 설치된다. 또한 RTOS는 필요한 애플리케이션 소프트웨어를 구성하는 데 사용되는 특정 기본 기능들을 제공해야만 한다.