Co je RTOS a proč jej používat
RTOS (Real-Time Operating System) je operační systém navržený pro deterministické chování – tedy schopnost garantovat časově omezenou odezvu na události. Na rozdíl od obecného OS (Windows, Linux bez real-time rozšíření) klade RTOS důraz na přesné plánování úloh, predikovatelnost latencí a řízení zdrojů tak, aby kritické funkce systému (řízení motoru, brzd, ovládání robotu, audio pipeline, rádiová komunikace) splnily své deadliny.
- Determinismus: chování úloh je analyticky předvídatelné (WCET, response time).
- Malá stopa: nízké nároky na paměť (desítky až stovky kB), běh na MCU bez MMU.
- Modularita: jádro, plánovač, synchronizační primitiva, IPC, časovače, drivery.
- Bezpečnost: izolace, MPU/MMU, watchdog, fault-handling, certifikované varianty.
Typy real-time požadavků
- Hard real-time: zmeškání deadlinu je nepřijatelné (brzdový systém, pacemaker). Návrh musí prokázat splnitelnost termínů v nejhorším případě.
- Firm real-time: občasné zmeškání je tolerovatelné, ale snižuje užitek (síťová brána s QoS).
- Soft real-time: preferuje se nízká latence a jitter, ale deadline není fatální (audio streaming).
Časování, latency a metriky
- WCET (Worst-Case Execution Time): horní mez doby běhu úlohy na dané konfiguraci CPU/kompilátoru.
- ISR latency: doba od vzniku přerušení k jeho obsluze (ovlivňují masky, priorita, kritické sekce).
- Scheduling latency: doba od uvolnění nejvyšší ready úlohy po její běh (kontext switch, preempce).
- Jitter: kolísání periody/odezvy; minimalizuje se výběrem plánovače, tikless módem a omezením kritických sekcí.
Plánovací algoritmy v RTOS
Volba plánovače ovlivňuje predikovatelnost a využití CPU. Běžně se používají:
- Fixní priority (preemptivní): každé úloze je přiřazena priorita; běží vždy nejvyšší ready úloha. Často doplněno priority inheritance proti inverzi priorit.
- Rate-Monotonic (RM): periodičtějším úlohám vyšší priorita (fixní); analyticky lze prokázat splnitelnost pomocí využití CPU.
- Deadline-Monotonic (DM): kratší deadline ⇒ vyšší priorita (fixní).
- Earliest Deadline First (EDF): dynamický, vždy běží úloha s nejbližším deadlinem; pro jednojádro optimální při nízké režii.
- Round-Robin: časové dělení mezi úlohami stejné priority; často v kombinaci s fixními prioritami.
Analýza splnitelnosti (schedulability)
Pro hard real-time se provádí formální ověření, že všechny úlohy splní své termíny v nejhorším případě.
- Utilizační testy (Liu & Layland): pro RM platí mez pro n periodických úloh U ≤ n(2^{1/n} − 1).
- Response Time Analysis (RTA): iterativně se počítá nejhorší odezva úlohy včetně interference vyšších priorit a blokací na mutexech.
- Jednoúčelové úlohy a sporadické servery: návrh pro obsluhu aperiodických požadavků bez ohrožení periodických úloh.
Úlohy, vlákna a stavy
- Stavy: running, ready, blocked (na semaforu/queue), suspended, delayed (časovač), terminated.
- Atributy: priorita, zásobník (stack), afinitní jádro (SMP), perioda/deadline, hook pro sledování.
- Životní cyklus: vytváření/destroy, suspend/resume, delay, change priority, event-driven běh.
Přerušení (ISR) a kontextové přepínání
ISR musí být co nejkratší: jen přečíst/uložit data, odmaskovat, notifikovat úlohu (semafor, queue, event flag). Těžší zpracování přesunout do úloh s nižší prioritou. Je nutné:
- Minimalizovat dobu se zakázanými přerušeními.
- Nepoužívat blokující RTOS volání z ISR, pokud nejsou explicitně povolená.
- Správně mapovat priority NVIC (ARM Cortex-M) a RTOS prioritní úrovně.
Synchronizační primitiva a IPC
- Mutex: exkluzivní přístup se priority inheritance nebo priority ceiling proti inverzi priorit.
- Binární semafor: signalizace události (typicky z ISR na úlohu).
- Počítaný semafor: omezená kapacita zdroje (např. DMA kanály).
- Fronty (message queues): přenos struktur/dat mezi úlohami, často s kopírováním nebo zero-copy.
- Event groups: bitová maska pro agregaci signálů z více zdrojů.
- Mailboxes/stream buffers: efektivní proudová data (UART, audio).
- Časovače (software timers): odložené akce, periodické úkoly bez aktivního čekání.
Priority inversion: detekce a mitigace
Inverze priorit nastává, když nízkoprioritní úloha blokuje vysokoprioritní kvůli sdílenému zámku. Řešení:
- Priority Inheritance: dočasné zvýšení priority držitele zámku.
- Priority Ceiling: zámek má „strop“ priority; při locku se úloha přepne na tuto hodnotu.
- Lock-free/RCU: tam, kde je to vhodné a bezpečné, volit bez-zámkové struktury.
Paměť a ochrana
- Statická alokace: preferovaná v bezpečnostně kritických systémech, předvídatelná.
- Dynamická alokace: pokud je nutná, použít deterministický alokátor (TLSF), pooly pevných bloků.
- MPU/MMU: ochrana proti přetečení zásobníku, izolace úloh/drivrů, sandboxing.
- Stack sizing: měření high watermark, guard band, detekce přetečení.
Tick vs. tickless, časování a spotřeba
- Tick-based: periodický systémový tik (např. 1 ms). Jednodušší, ale vyšší jitter a spotřeba.
- Tickless: plánovač programuje nejbližší budík; nižší spotřeba a jitter, vyšší komplexita.
- RTC/Low-power timers: pro uspání MCU a přesné buzení; nutná synchronizace s jádrem RTOS.
Drivery, DMA a práce s periferiemi
V RTOS návrhu se doporučuje vrstvit: ISR → lehký HAL/BSP → fronty/eventy → úlohy. DMA snižuje latence CPU a jitter, ale vyžaduje správu cache a bariér (na MCU s cache). Paměťové překryvy, dvojité bufferování a „ping-pong“ techniky jsou standardem pro streamy (ADC, I2S, UART).
Síťování a průmyslové protokoly
- TCP/IP stack: lwIP, IPv4/IPv6, TLS offload, MQTT.
- Průmysl: CAN/CAN-FD, LIN, Modbus, EtherCAT; důraz na přesné cykly a nízké latence.
- TSN (Time-Sensitive Networking): deterministický Ethernet (časová synchronizace, scheduling).
Multiprocesorové RTOS: SMP vs. AMP
- SMP: jedno jádro plánovače pro více CPU; sdílené fronty, afinity, locky, cache koherence.
- AMP: každé jádro běží vlastní OS/RTOS; komunikace přes RPMsg, mailboxes, shared memory.
- Heterogenní SoC: A-core (Linux) + M-core (RTOS) s remoteproc a virtio kanály.
Hypervizory a smíšeně kritické systémy
Pro konsolidaci funkcí a separaci domén lze použít lehké hypervizory (bare-metal partitioning, typ 1). Umožňují koexistenci bezpečnostně kritických partů (ASIL, DAL) s méně kritickými aplikacemi bez vzájemného rušení.
Real-time Linux vs. RTOS
- PREEMPT_RT: zlepšuje latence Linuxu; vhodný pro vyšší vrstvy a složité stacky.
- RTOS: nižší režie, menší footprint, hlubší kontrola nad časováním. Často spolupracuje s Linuxem na jiném jádře.
Bezpečnost a spolehlivost
- Watchdog a brown-out: zotavení ze záseků a poklesu napětí.
- Fail-safe a fail-operational: definujte bezpečný stav a degradované módy.
- Ochrana před útoky: secure boot, kryptografické podpisy, řízení práv úloh, ASLR (pokud je k dispozici), aktualizace OTA s rollbackem.
- Standardy: MISRA C/C++, CERT C, ISO 26262 (automotive), IEC 61508 (průmysl), DO-178C (letectví), IEC 62304 (medicína).
Volba RTOS a ekosystém
- FreeRTOS/Azure RTOS ThreadX: široká podpora MCU, velká komunita, nástroje pro trace.
- Zephyr: modulární, device tree, rozsáhlé subsystémy (BLE, TCP/IP, senzorika).
- VxWorks, QNX: komerční, certifikovatelné, bohaté nástroje a dlouhodobá podpora.
- RTEMS, NuttX, μC/OS: další osvědčené varianty dle požadavků licence a funkcí.
Build, CI/CD a aktualizace
- Reprodukovatelné buildy: pin verze toolchainu, kontejnerizace, hermetické skripty.
- Testy v CI: unit (Ceedling/CppUTest), integrační, regresní, coverage.
- HIL (Hardware-in-the-Loop): automatizované scénáře s reálnou deskou, měření latencí.
- OTA: A/B sloty, kryptografické podpisy, bezpečný bootloader, robustní rollback.
Diagnostika a tracing v RTOS
- Run-time statistiky: využití CPU na úlohu, délky front, watermarky zásobníků.
- Trace: sledování přepínání úloh, ISR, zablokování; nástroje typu ITM/SWO, ETM, trace knihovny.
- Logování bez blokování: ring buffer, DMA do UART/USB, timestampy s vysokým rozlišením.
Boot time a start systému
- Inicializace časovačů a NVIC: prioritizace kritických periferií před méně důležitými.
- Minimalizace doby do „ready“: lazy init, deferred work v nízkoprioritních úlohách.
- Self-testy: CRC FW, RAM testy, periferní sanity checks.
Návrhové vzory pro RTOS aplikace
- Producer–Consumer: ISR nebo senzory produkují data do front; zpracování v pracovní úloze.
- Command Dispatcher: fronta příkazů pro driver/komunikační stack.
- State Machine per Task: každá úloha implementuje explicitní automaty; zlepšuje čitelnost.
- Time-Triggered Architecture: cyklické spouštění úkolů s přesnými okny (major/minor cycle).
Typické pasti a jak se jim vyhnout
- Nadměrné používání mutexů ⇒ deadlocky a jitter. Preferujte fronty a bez-zámkové postupy.
- Dlouhé ISR a příliš široké maskování přerušení ⇒ vysoké latence.
- Špatné dimenzování zásobníků ⇒ záhadné pády; sledujte watermarky.
- Neřízená dynamická alokace ⇒ fragmentace; použijte pooly, statiku.
- Nezohlednění cache a bariér u DMA ⇒ nekonzistentní data.
Ukázková architektura malé RTOS aplikace
- Úlohy: CommTask (vysoká priorita) pro RX/TX, ControlTask (střední) pro regulaci, LoggerTask (nízká) pro záznam.
- ISR: UART RX ISR plní stream buffer, časovač generuje tick pro regulátor, ADC DMA ISR signalizuje dokončení.
- IPC: fronty pro příkazy, semafory pro dokončení převodů, event group pro stav subsystémů.
- Bezpečnost: watchdog, MPU segmentace zásobníků, secure boot v bootloaderu.
Testování a verifikace
- Jednotkové testy: logika stavových automatů, parsování protokolů, matematické knihovny.
- Integrační testy s RTOS: simulace zatížení, injektování ISR, testy přerušení a preempce.
- Stress a timing testy: měření latencí, jitteru, průchodu pipeline, testy hraničních stavů.
- Formální metody: model checking pro kritické části a protokoly.
Licenční a komerční aspekty
- Open-source licence: MIT/BSD (FreeRTOS kernel), Apache-2.0 (Zephyr), GPL/LGPL v některých komponentech.
- Komerční podpora: SLA, dlouhodobé LTS verze, certifikované buildy pro bezpečnostní domény.
Best practices – checklist
- Definujte kritičnost úloh a jejich deadline, proveďte RTA.
- Minimalizujte ISR; těžké zpracování delegujte do úloh.
- Používejte priority inheritance/ceiling pro sdílené zdroje.
- Měřte a logujte: latence, watermarky, délky front, CPU load.
- Preferujte statickou alokaci a deterministické alokátory.
- Zapněte MPU (pokud je k dispozici) a watchdog.
- Oddělte bezpečnostně kritické části (isolation, hypervizor/AMP).
- Automatizujte testy v CI a provozujte HIL.
Slovníček pojmů
- Deadline: čas, do kterého musí být úloha dokončena.
- Preempce: schopnost plánovače přednostně spustit vyšší prioritu.
- Schedulability: splnitelnost časových omezení celou sadou úloh.
- Tickless: režim bez periodického tiknutí, budík dle nejbližší události.
Závěr
RTOS je klíčovou stavebnicí pro embedded systémy s přísnými časovými požadavky. Úspěch reálného projektu stojí na správné volbě plánovače, disciplinovaném používání synchronizačních primitiv, promyšlené správě paměti a důsledném měření časování. Spolu s bezpečnostními a aktualizačními mechanikami tvoří RTOS solidní základ pro spolehlivá a bezpečně provozovaná zařízení v průmyslu, automobilovém sektoru, zdravotnictví i IoT.