일반 OS와 무엇이 다른가
RTOS에 대해 공부한 내용을 정리해보려 한다. 전체 흐름을 먼저 정리하고, 이후 Task, Scheduling, Synchronization 등을 하나씩 깊게 다룰 예정이다.
일반 OS와 RTOS의 가장 큰 차이점
일반 OS(Linux, Windows)와 RTOS의 가장 큰 차이점은 시간에 대한 보장(Timing Guarantee) 이다.
Windows나 Linux는 "평균적으로 빠르게" 동작하도록 설계되어 있다. 처리량(Throughput)을 최대화하는 것이 목표이기 때문에, 특정 작업이 정확히 몇 ms 안에 끝날지는 보장하지 않는다. 가끔 GC(Garbage Collection)가 끼어들거나, 페이지 폴트가 발생해 예상보다 오래 걸리는 일이 생겨도 사용자 입장에서는 크게 문제가 없다.
반면 RTOS(Real-Time Operating System)는 "항상 정해진 시간 안에" 작업이 완료되는 것을 보장하는 것이 목표다. 에어백 ECU, 모터 제어기, 드론 비행 컨트롤러처럼 타이밍이 생명과 직결되는 시스템에서는 "평균적으로 빠름"이 아니라 "항상 데드라인 안에 완료됨"이 요구된다.
정리하면 이렇다.
| 목표 | 처리량(Throughput) 최대화 | 데드라인(Deadline) 보장 |
| 스케줄러 | 공정성 / 처리량 우선 | 우선순위 기반 선점형 |
| 메모리 | 가상 메모리, 페이징 | 정적 할당 선호 |
| 인터럽트 지연 | 수십 ms 가능 | 수 μs 단위로 보장 |
| 용도 | PC, 서버, 스마트폰 | 센서, 모터, 통신 장치 |
왜 STM32 + FreeRTOS인가

임베디드 RTOS 입문으로 Nucleo-F401RE + FreeRTOS 조합을 선택했다.
STM32F401RE는 ARM Cortex-M4 코어에 84MHz 클럭, 512KB Flash, 96KB SRAM을 갖춘 칩으로, FreeRTOS를 돌리기에 충분한 리소스를 가지고 있다. Cortex-M4의 SysTick, PendSV, SVC 인터럽트 구조가 RTOS 내부 동작을 공부하기에도 적합하다.
FreeRTOS를 선택한 이유는 다음과 같다.
- STM32CubeIDE에서 미들웨어로 원클릭 추가 가능
- 레퍼런스와 튜토리얼이 풍부함
- MIT 라이선스로 상업 프로젝트에도 자유롭게 사용 가능
- IoT 임베디드 업계에서 가장 많이 쓰이는 RTOS
앞으로 다룰 내용
공부 순서대로 아래 주제들을 정리할 예정이다.
1. Task & Scheduling RTOS의 심장이다. Task가 무엇인지, 스케줄러가 어떻게 실행 순서를 결정하는지, Context Switching이 내부적으로 어떻게 일어나는지 다룬다.
2. Synchronization 여러 Task가 데이터를 공유할 때 충돌을 막는 도구들이다. Semaphore, Mutex, Queue, Event Group을 다루고, Priority Inversion 같은 함정도 살펴본다.
3. Memory Management 임베디드는 RAM이 수십 KB 수준이다. 동적 할당을 잘못 쓰면 heap fragmentation으로 시스템이 죽는다. FreeRTOS의 Heap1~5 정책과 언제 정적/동적 할당을 쓸지 판단하는 기준을 정리한다.
4. Interrupt & ISR 하드웨어와 소프트웨어가 만나는 지점이다. ISR에서 안전하게 호출할 수 있는 FreeRTOS API, Deferred Interrupt Processing 패턴, NVIC 우선순위 설정을 다룬다.
5. 실전 패턴 & 디버깅 앞의 개념들을 합쳐서 실제 시스템을 만드는 단계다. Producer-Consumer 패턴, State Machine과 RTOS 결합, Stack/CPU 사용량 모니터링까지 다룬다.
'임베디드' 카테고리의 다른 글
| STM32 LED 작동 (Nucleo-F401RE) (0) | 2026.05.13 |
|---|---|
| STM32 개발 환경 세팅 — CubeMX + CubeIDE (Nucleo-F401RE) (0) | 2026.05.06 |
| 엔코더 모터 (Encoder Motor) 제어 (0) | 2025.09.17 |
| Arduino UNO 와 Raspberry Pi 통신 (1) | 2025.08.27 |
| [AVR Programming] 아두이노 서보모터 제어 (1) | 2025.08.18 |