### 0.0.1 실시간 운영체제(NuttX 커널 vs ChibiOS) 차이에 따른 컨텍스트 스위칭(Context Switching) 및 I/O 지연 시간 비교
센서 드라이버 아키텍처의 철학적 차이는 필연적으로 두 비행 제어기(FC)가 뿌리를 내리고 있는 밑바탕, 즉 실시간 운영체제(RTOS, Real-Time Operating System) 의 특성에서 비롯된다.
PX4가 선택한 거대하고 정교한 NuttX와, Ardupilot이 주력으로 채택한(기존 NuttX에서 이주한) 뼈대만 남긴 경량 ChibiOS는, 동일한 시리얼 포트에서 GPS NMEA 문자열을 읽어 들이는 행위조차 역학적으로 완전히 다르게 처리한다.
본 절에서는 GPS I/O(입출력) 처리에 있어서 이 두 운영체제가 겪는 컨텍스트 스위칭(Context Switching) 오버헤드와 지연 시간(Latency) 차이를 마이크로초(\mu s) 단위로 분해하여 비교한다.
0.1 NuttX (PX4): 완전형 POSIX OS의 풍부함과 그 대가
PX4의 기반이 되는 NuttX는 임베디드 리눅스(Embedded Linux)를 지향하는 매우 성숙하고 거대한 커널이다. 파일 시스템(VFS), POSIX 표준 스레드(pthreads), 그리고 완벽한 권한 분리를 지원한다.
- 풍부한 추상화의 혜택: PX4 개발자는
open(),read(),write()같은 친숙한 리눅스 표준 함수를 사용하여 GPS 포트를 연다. 이는 눈부신 이식성(Portability)을 자랑하며, 데스크톱 리눅스(SITL) 코드를 수정 없이 그대로 Pixhawk(하드웨어)에 올려 구동할 수 있는 마법의 원천이다. - 컨텍스트 스위칭의 무게: 그러나 대가가 따른다. GPS 데몬이
read()블로킹에서 깨어나 파싱을 마친 뒤 uORB에 데이터를 발행(Publish)하고, 이를 다시 EKF2 태스크가 구독(Subscribe)하여 깨어나는 과정에는 스레드 간 컨텍스트 스위칭(Context Switching) 이 필수적으로 수반된다. - NuttX 커널이 스케줄링을 위임받아 현재 CPU 레지스터를 스택에 밀어 넣고(Push) 다음 스레드의 레지스터를 복원(Pop)하는 절차는 아무리 최적화되어도 수십 ~ 수백 마이크로초(\mu s)의 오버헤드를 발생시킨다. 여러 센서를 분산 처리하는 PX4의 모델에서는 이 스위칭 횟수가 빈번하여, 시스템 전체의 가용 CPU 사이클 중 일정 부분을 순수하게 ’운영체제 스케줄링 유지비’로 납부해야만 한다.
0.2 ChibiOS (Ardupilot): 극한의 다이어트와 결정론적(Deterministic) 속도
Ardupilot은 과거 PX4와 마찬가지로 NuttX 위에서 돌아갔으나(APM 프레임워크 시절), 펌웨어의 덩치가 커지면서 발생하는 스케줄링 오버헤드와 메모리 병목을 견디지 못하고 2018년경 이탈리아 출신의 초경량 RTOS인 ChibiOS로 대대적인 이주(Migration)를 단행했다.
- 뼈대만 남긴 메커니즘: ChibiOS는 VFS(가상 파일 시스템) 같은 무거운 추상화 레이어를 걷어내고, 오직 하드웨어 인터럽트(Interrupt)와 최단 경로의 스레드 스케줄링만을 지원하는 말 그대로 ‘초소형(Micro)’ 커널이다.
- Direct HAL 구조: Ardupilot의 GPS 라이브러리는 POSIX
read()를 거치지 않고 직접 하드웨어 추상화 계층(HAL)의 DMA(Direct Memory Access) 버퍼나 시리얼 수신 레지스터에 접근한다. - 컨텍스트 스위칭 최소화: 앞선 12.7.1절에서 확인했듯, Ardupilot은 다수의 센서를 커다란 루프(Loop) 하나에서 동기적으로 폴링(Polling)한다. 따라서 GPS를 읽고 EKF3에서 계산하는 과정이 단일 스레드 흐름 안에서 순차적으로 호출(
update())되므로, 무거운 스레드 간 컨텍스트 스위칭이 거의 일어나지 않는다. - 결과적으로 Ardupilot + ChibiOS 조합은 GPS 프레임 하나를 수신하여 최종 모터 출력(PWM)까지 뽑아내는 End-to-End 지연 시간(Latency)의 흔들림(Jitter)이 극도로 적은, 숨 막히는 결정론적 퍼포먼스(Deterministic Performance) 를 보여준다.
0.3 비교 요약: 확장성(Scalability) vs 효율성(Efficiency)
- PX4 (NuttX): GPS뿐만 아니라 향후 비전(Vision) 센서, 다중 페이로드(Payload) 등 수십 개의 드라이버가 서로 충돌 없이 동시에 구동되어야 하는 고도화된 자율주행 연구 플랫폼이나 확장성을 중시하는 환경에 압도적으로 유리하다.
- Ardupilot (ChibiOS): 아키텍처의 유연성은 떨어지더라도 마이크로초 단위의 지연 시간 단축이 생명인 곡예비행(Acrobatics) 헬리콥터, 빠른 속도로 장애물을 회피해야 하는 레이싱 드론, 혹은 자원이 몹시 제한된 초소형 하드웨어에서 최대한의 비행 성능(Efficiency)을 쥐어짜 내야 할 때 그 진가를 발휘한다.