RTOS(Real-Time Operating System)는 사건에 제때, 결정적으로 응답하는 것을 주목적으로 하는 운영체제다.[1][2] RTOS는 흔히 우선순위 기반 선점형 스케줄러를 두고, 실행할 수 있는 태스크 가운데 우선순위가 가장 높은 것을 실행한다.[3][4] 실시간이라는 요구는 실시간 시스템에서 다룬다.
Superloop
운영체제를 쓰지 않는 임베디드 소프트웨어는 흔히 superloop 구조를 쓰며, 복잡도가 낮은 작은 시스템이 대개 이렇게 설계된다. superloop는 무한 루프 안에서 할 일을 맡은 모듈의 함수를 호출한다. 루프 밖의 인터럽트 처리기는 비동기 사건을 맡고, 시간이 급한 일을 제때 하려면 인터럽트 처리기에서 해야 한다. 인터럽트가 넘긴 일도 루프가 그 모듈의 차례에 이르러야 처리되므로, 최악의 응답 시간은 루프 한 바퀴의 실행 시간에 달린다.[5][6]
Microchip MPLAB Harmony의 main 함수는 모든 모듈을 초기화한 뒤, 무한 루프에서 각 모듈의 상태 기계 함수를 차례로 호출한다.[6]
MPLAB Harmony 문서에 따르면 폴링 superloop는 가장 이해하기 쉬운 구성이다.[6] 대신 superloop에 모듈이 늘수록 모든 일의 시간 요구를 맞추기 어려워지고, 코드를 고치면 루프의 타이밍이 바뀐다.[5][6]
Microchip 앱노트 AN2751에 따르면 superloop의 태스크마다 실행 주기가 다르면 복잡도가 커진다. 루프 한 바퀴는 시스템이 요구하는 지연보다 길 수 없고, 루프를 돌 때 그 태스크를 지금 실행할지 가리는 상태 기계 같은 제어 코드가 더 필요하다.[7]
구성
µC/OS-III 문서는 실시간 커널에 파일 관리, 프로토콜 스택, 그래픽 사용자 인터페이스 같은 상위 서비스를 더한 것을 RTOS라 부른다.[8]
스케줄러는 커널에서 어느 태스크를 언제 실행할지 정하는 부분이다.[3][5] RTOS가 다른 태스크를 실행하기로 하면 context switch가 일어나, 지금 태스크를 내보내고 새 태스크를 들인다.[3][4] 스케줄링 방식은 실시간 스케줄링에서 다룬다.
RTOS는 흔히 주기적인 타이머 인터럽트인 시스템 틱으로 시간을 잰다.[4][9]
RTOS를 쓰면 틱을 돌리고 태스크를 전환하는 데 CPU 시간이 더 든다.[1][4] Silicon Labs 자료에 따르면 RTOS의 서비스 부담은 대개 CPU 사이클의 2~10%이고, RTOS 코드는 플래시를 대개 6~20 KB 더 쓰며, 태스크마다 스택과 TCB(Task Control Block)로 RAM(Random-Access Memory)을 더 쓴다.[4] µC/OS-III 문서는 RTOS 전체가 아니라 커널만 놓고, 잘 설계된 애플리케이션에서 커널이 CPU 시간의 2~4%를 쓴다는 값을 제시한다.[10]
RTOS는 태스크 사이의 동기화와 통신에 세마포어, 뮤텍스, 메시지 큐, 이벤트 플래그 같은 객체를 제공한다.[4][11] 인터럽트 처리기는 태스크를 깨워 처리를 그 태스크에 넘길 수 있다.[4][12]
차량용 RTOS
ISO 17356-3:2005는 차량용 멀티태스킹 실시간 운영체제인 OSEK OS의 개념을 기술하고, 그 API(Application Programming Interface)를 정한다.[13] OSEK/VDX OS 2.2.3 명세에 따르면 이 명세를 따르는 구현은 여럿이고, 인증 절차로 각 구현이 명세에 맞는지 확인한다.[14]
AUTOSAR Classic Platform R25-11의 운영체제 명세는 ISO 17356-3을 바탕으로 두고 이를 확장하거나 제한한다.[15]
AUTOSAR Adaptive Platform은 주로 고성능 연산과 통신 기능을 제공하는 플랫폼이고, 그 설계 설명서는 이 플랫폼의 운영체제가 다중 프로세스 POSIX 운영체제 기능을 제공하도록 한다.[16] 운영체제 인터페이스는 IEEE 1003.13-2003의 PSE51 인터페이스로 운영체제 기능을 제공한다.[17]
비실시간 시스템과의 차이
FreeRTOS 문서에 따르면 비실시간 다중 사용자 시스템의 스케줄링 정책은 각 태스크에 처리기 시간을 공정하게 나눈다.[3] RTOS의 스케줄링 정책은 실세계 사건의 마감 시한을 모두 지키도록 처리기 시간을 나눠야 한다.[3][18]