임베디드 OS와 RTOS 선택: 자원 제약 환경의 운영체제 구조

임베디드 OS의 실시간성·자원 제약·커널 아키텍처를 정리하고 FreeRTOS, QNX, Embedded Linux 선택 기준을 다룬다.

2026-08-14 · 최초 발행 2026-01-12

특정 목적과 제약 조건이 운영체제를 결정한다

임베디드 OS는 마이크로컨트롤러(MCU)나 마이크로프로세서(MPU)를 기반으로 한 시스템이 정해진 기능을 수행하도록 만든 운영체제다. 자동차 ECU, 스마트폰, IoT 디바이스, 의료 기기처럼 범용 컴퓨터와 다른 목적을 가진 장치가 대상이다.

이 환경에서는 RAM이 수 KB수 MB로 제한될 수 있고, CPU 성능과 저장 공간도 넉넉하지 않다. Flash 역시 수 KB수 GB 범위의 제약을 받는다. 배터리 구동 장치라면 전력 관리도 운영체제의 핵심 책임이 된다.

실시간 응답이 필요할 때는 RTOS(Real-Time Operating System)를 사용한다. FreeRTOS, VxWorks, QNX는 결정론적 스케줄링과 빠른 인터럽트 처리를 통해 하드 리얼타임 또는 소프트 리얼타임 요구를 지원한다. 반면 Embedded Linux는 범용 OS 기능과 풍부한 생태계를 제공하며, Android는 모바일 장치에 맞춰져 있다. Zephyr와 ThreadX는 IoT 디바이스에 적합한 선택지다.

특성 임베디드 OS 일반 OS (Windows, Linux Desktop)
목적 특정 기능 수행 범용 작업
자원 제한적 (KB~MB RAM) 풍부 (GB RAM)
실시간성 필수 (RTOS) 선택적
크기 작음 (수 KB ~ 수 MB) 큼 (수 GB)
사용자 인터페이스 제한적 또는 없음 GUI 풍부
안정성 매우 높음 높음
전력 소비 최소화 상대적으로 높음
임베디드 시스템응용 프로그램임베디드 OS(RTOS/Embedded Linux)HAL(Hardware AbstractionLayer)하드웨어(MCU/MPU, 센서,액추에이터)

데드라인, 자원, 전력의 균형

하드 리얼타임 시스템에서는 데드라인을 반드시 지켜야 한다. 자동차 브레이크 시스템과 비행 제어가 여기에 해당한다. 소프트 리얼타임은 데드라인 준수가 바람직하지만 간헐적인 지연을 허용하며, 멀티미디어 스트리밍이 예다. 두 경우 모두 예측 가능한 응답 시간과 우선순위 기반 선점형 스케줄링이 중요하다.

코드와 런타임 데이터는 각각 ROM/Flash와 RAM에 올라간다. ROM/Flash는 수십 KB수 MB, RAM은 수 KB수 MB가 일반적인 제약 범위다. CPU는 수 MHz~수백 MHz의 낮은 클럭 속도와 제한된 명령어 세트를 가질 수 있으므로, 코드 크기와 메모리 사용량을 줄이는 작업이 필요하다.

산업 제어 시스템처럼 수년간 재부팅 없이 동작해야 하는 장치에서는 안정성과 오류 복구가 우선된다. Watchdog Timer, 예외 처리, 엄격한 검증이 이 요구를 뒷받침한다. IoT 디바이스는 수년 동작하는 배터리 수명을 목표로 할 수 있어 Sleep, Deep Sleep, 동적 전력 관리도 함께 설계해야 한다.

RTOS와 범용 임베디드 OS의 역할

RTOS는 실시간 응답, 결정론적 스케줄링, 빠른 인터럽트 처리가 필요한 장치에 맞는다. 자동차·항공우주·의료 기기와 산업 자동화에서 사용하며, FreeRTOS, VxWorks, QNX, ThreadX, Zephyr가 대표적이다.

Embedded Linux, Windows Embedded, Android는 범용 OS 기능과 유연성을 제공하지만 실시간성은 상대적으로 약하다. 스마트폰과 태블릿, 네트워크 장비, 스마트 TV처럼 풍부한 기능이나 생태계가 필요한 장치가 주된 대상이다.

운영체제별 성격과 적용 대상

FreeRTOS는 작은 footprint(수 KB)를 가진 오픈소스 RTOS다. 우선순위 기반 선점형 스케줄링을 제공하며 ARM Cortex-M, Cortex-A, AVR, PIC, RISC-V를 지원한다. IoT와 마이크로컨트롤러 환경에서 활용되고 MIT License를 따른다.

VxWorks는 Wind River Systems가 개발한 상용 RTOS다. Hard Real-Time과 높은 안정성을 특징으로 하며, NASA Mars Rover를 포함한 항공우주와 네트워크 장비에 사용된다.

QNX는 Microkernel 기반 RTOS로 POSIX 호환성과 높은 안정성을 제공한다. 자동차 인포테인먼트와 의료 기기에 쓰이며, 라이선스는 상용이고 일부 오픈소스가 있다.

Embedded Linux는 Linux 커널을 바탕으로 범용 OS 기능과 풍부한 생태계를 제공한다. Yocto Project, Buildroot, OpenWrt를 배포판으로 사용하며 네트워크 장비, 라우터, 스마트 TV, 산업용 컴퓨터에 적용된다. 라이선스는 GPL이다.

Windows Embedded는 Windows 기반 운영체제로 풍부한 개발 도구를 제공한다. Windows Embedded Compact와 Windows IoT Core가 있으며 POS 시스템과 산업용 PC에 사용된다.

Android(AOSP)는 Linux 커널 기반으로 모바일 환경에 최적화되어 있고 풍부한 앱 생태계를 갖춘다. 스마트폰, 태블릿, 스마트 TV, 자동차에 사용되며 Apache 2.0 라이선스를 따른다.

Zephyr는 모듈형 아키텍처를 가진 오픈소스 RTOS다. ARM, RISC-V, x86을 지원하며 IoT와 웨어러블에 적합하다. 라이선스는 Apache 2.0이다.

ThreadX는 작은 footprint와 우선순위 기반 선점형 스케줄링을 제공한다. Microsoft가 Azure RTOS로 개발했으며, 2019년 이후 MIT License를 사용한다.

커널 경계가 성능과 격리 방식을 바꾼다

Monolithic Kernel은 모든 기능을 커널 공간에서 실행하고 단일 주소 공간을 사용한다. Embedded Linux와 일부 버전의 VxWorks가 이 구조에 속한다. 시스템 콜이 빠른 대신 드라이버 오류가 시스템 전체 충돌로 이어질 수 있어 안정성 측면에서 불리하다.

Microkernel은 최소한의 기능만 커널에 남기고 드라이버와 파일 시스템을 User Space에서 실행한다. QNX와 Minix가 예다. 모듈화와 높은 안정성이 장점이지만 IPC 오버헤드를 감수해야 한다.

Bare-Metal은 OS 없이 하드웨어를 직접 제어하고 최소한의 런타임 라이브러리만 사용한다. 극도로 자원이 제한된 환경과 초저전력 디바이스에 적합하다. 최대 성능과 최소 메모리 사용이 가능하지만, 개발 복잡도가 높고 멀티태스킹 구현도 어렵다.

스케줄러부터 HAL까지

태스크는 보통 우선순위에 따라 실행된다. 높은 우선순위 태스크가 먼저 실행되고, 선점형 스케줄링에서는 높은 우선순위 태스크가 낮은 우선순위 태스크를 중단할 수 있다. 같은 우선순위의 태스크는 시간 할당량에 따라 Round-Robin 방식으로 순환한다.

FreeRTOS 태스크 구성 예시는 다음과 같다.

void vTask1(void *pvParameters) {
    while(1) {
        // Task 1 작업
        vTaskDelay(100 / portTICK_PERIOD_MS);  // 100ms 대기
    }
}

void vTask2(void *pvParameters) {
    while(1) {
        // Task 2 작업
        vTaskDelay(200 / portTICK_PERIOD_MS);  // 200ms 대기
    }
}

int main(void) {
    xTaskCreate(vTask1, "Task1", 128, NULL, 2, NULL);  // 우선순위 2
    xTaskCreate(vTask2, "Task2", 128, NULL, 1, NULL);  // 우선순위 1
    vTaskStartScheduler();
}

인터럽트가 발생하면 ISR(Interrupt Service Routine)을 실행해 즉시 처리한다. 인터럽트 우선순위와 네스티드 인터럽트를 관리하고, ISR이 끝난 뒤 스케줄러가 더 높은 우선순위 태스크로 전환할 수 있다.

메모리는 컴파일 타임에 확보하는 정적 할당으로 예측 가능성을 높일 수 있다. 런타임의 동적 할당은 malloc/free를 제한적으로 사용한다. 대부분의 마이크로컨트롤러에는 MMU가 없어 가상 메모리 지원도 제한된다. 고정 크기 블록을 쓰는 메모리 풀은 단편화 방지에 사용된다.

디바이스 드라이버는 GPIO, UART, SPI, I2C, ADC, PWM과 센서·액추에이터를 제어한다. HAL(Hardware Abstraction Layer)은 하드웨어를 추상화해 이식성을 높인다.

요구사항에서 선택 기준을 좁히기

Hard Real-Time 요구에는 FreeRTOS, VxWorks, QNX 같은 RTOS가 맞고, Soft Real-Time 또는 실시간성이 필요하지 않은 경우에는 Embedded Linux나 Android를 고려할 수 있다.

하드웨어 자원도 기준이 된다. RAM < 64KB처럼 극도로 제한된 환경은 FreeRTOS, Zephyr, Bare-Metal에 맞고, RAM이 수 MB인 경우에는 FreeRTOS, ThreadX, Embedded Linux가 대상이 된다. RAM이 수십 MB 이상으로 풍부하면 Embedded Linux와 Android를 선택할 수 있다.

라이브러리와 개발 생태계가 중요하다면 Embedded Linux나 Android가 유리하다. 실시간성과 커뮤니티를 함께 고려하면 FreeRTOS와 Zephyr가 후보가 된다. 라이선스 측면에서는 FreeRTOS(MIT), Zephyr(Apache 2.0), Embedded Linux(GPL)가 오픈소스 선택지이며, VxWorks와 QNX는 일부 오픈소스를 포함한 상용 선택지다.

타겟 장치를 위한 개발 환경

크로스 컴파일러는 개발 PC(x86)에서 타겟 플랫폼(ARM)용 코드를 생성한다. ARM GCC, Keil MDK, IAR Embedded Workbench가 사용된다.

JTAG/SWD는 브레이크포인트와 단계 실행을 지원하는 하드웨어 디버거다. GDB는 GNU Debugger로 원격 디버깅에 사용한다. QEMU는 타겟 하드웨어 없이 임베디드 시스템을 테스트할 수 있는 에뮬레이터다.

임베디드 OSRTOS운영체제임베디드 시스템IoT