RTOS CPU 오버헤드
이 글은 RTOS 전문가 Jean J. Labrosse가 작성했습니다.
RTOS는 CPU 사이클을 사용하여 임무를 수행합니다. 이벤트(예: 인터럽트)가 발생하면 RTOS의 스케줄러가 호출되어 해당 이벤트가 우선 순위가 더 높은 태스크가 기다리고 있는 이벤트인지 여부를 결정합니다. 이 경우 RTOS는 이러한 더 중요한 태스크로 컨텍스트 스위치를 수행합니다. 컨텍스트 스위치는 선취된 태스크(예: 우선 순위가 낮은 태스크)을 나중에 재개하기 위한 충분한 CPU 레지스터를 저장하고 새로운 태스크의 CPU 레지스터를 복원하는 것으로 구성됩니다. 사용된 CPU 사이클 수는 CPU 아키텍처에 따라 다릅니다. CPU에 FPU(부동소수점 처리장치)가 장착된 경우 태스크에 FPU가 사용되는지 여부에 따라 FPU의 레지스터도 저장/복원해야 할 수 있습니다. 마지막으로 CPU에 MMU(메모리 관리 장치) 또는 MPU(메모리 보호 장치)와 같은 하드웨어 메모리 보호 기능이 있는 경우 컨텍스트 스위치에서 이러한 레지스터도 고려해야 합니다.
예를 들어, FPU와 MPU가 모두 있는 Cortex-M에서 실행되는 RTOS의 컨텍스트 스위치 오버헤드는 대략 다음과 같습니다:
- 스케줄러의 경우 200~
- 정수 레지스터 저장/복원의 경우 80~
- FPU 레지스터 저장/복의 경우 80~
- 새로운 태스크를 위한 MPU 설정의 경우60~
참고: 클럭 사이클을 의미함.
합계가 총 420 클럭 사이클이 되고(대기 상태가 0이라고 가정) CPU가 100MHz에서 실행되며, 시스템이 컨텍스트 스위치를 수행하는 데 4마이크로초 이상이 필요합니다. 달리 보면, 응용 프로그램이 RTOS 스위치 태스크를 초당 5,000번 수행할 경우 오버헤드는 2%가 됩니다. 이것은 다음에 실행할 태스크를 결정하고, 교환되는 태스크의 레지스터를 저장하고, 새 태스크의 레지스터를 복원하는 것과 관련된 오버헤드일 뿐입니다!
이벤트가 발생했음을 알리고, 태스크에 메시지를 보내고, 태스크 실행을 지연시키는 등 RTOS의 서비스가 호출될 때마다 CPU 사이클이 소모됩니다. 오버헤드는 수행 중인 서비스에 따라 다릅니다.
일반적으로 RTOS는 이벤트 기반입니다. 즉, 기다리던 이벤트가 결국 일어날 때만 태스크가 실행됩니다. 응용 프로그램의 모든 태스크가 이벤트를 처리했을 때 RTOS가 CPU 또는 MCU의 저전력 모드 중 하나로 쉽게 들어갈 수 있으므로 에너지를 절약하여 배터리 구동 응용 프로그램에 이상적입니다.
RTOS를 사용할 때 보수적인 수치는 RTOS가 서비스를 수행할 수 있도록 CPU 클록 사이클의 10%~30%로 할당하는 것입니다. 달리 말하면 CPU를 계획할 때 원래 계획했던 것보다 11%~43% 빠른 CPU를 선택하십시오.
나쁘게 들릴지 모르지만, RTOS를 사용하면 단점보다 이점이 훨씬 더 많습니다!
저자 소개
본 기사는 RTOS 개발 애플리케이션에 관한 시리즈의 일부입니다.
Jean Labrose는 높은 인지도를 가진 uC/OS-II와 uC/OS-III 커널의 저자이자 Micrium의 설립자로, 임베디드 소프트웨어의 uC/라인의 발전에 적극적으로 관여하고 있습니다.
Jean은 풍부한 경험과 임베디드 시스템 시장에 대한 깊은 이해를 바탕으로 Weston Embedded Solutions의 수석 조언자 및 컨설턴트로 재직하고 있으며, 현재 RTOS 제품의 향후 보다 발전된 제안을 마련하는데 기여하고 있습니다. Weston Embedded Solutions는 Micrium 코드베이스에서 파생된 매우 안정적인 Cesium RTOS 제품군의 지원 및 개발을 전문으로 합니다.
Jean.Labrosse@Weston-Embedded.com.