Un sistema operativo real-time o in tempo reale (abbreviato in RTOS) è un sistema operativo specializzato per il supporto di applicazioni su sistemi real-time. Questi sistemi vengono utilizzati tipicamente in ambito industriale (controllo di processo, pilotaggio di robot, trasferimento dati nelle telecomunicazioni) o comunque dove sia necessario ottenere una risposta dal sistema entro un tempo prefissato.
Un sistema operativo real-time non deve essere necessariamente veloce: non è importante l'intervallo di tempo in cui il sistema operativo/applicativo deve reagire; l'importante è che risponda entro un tempo massimo pre-determinato. In altre parole il sistema deve essere prevedibile o piuttosto deterministico, nel senso che nel sistema si possa conoscere il tempismo reale (nei migliori o peggiori dei casi, termini che vengono dall'inglese best case / worst case) di un determinato processo o elaborazione.
In pratica un sistema real-time deve garantire che una elaborazione (o task) termini entro un dato vincolo temporale o scadenza (detta in gergo deadline). Per garantire questo è richiesto che la schedulazione delle operazioni sia fattibile. Il concetto di fattibilità di schedulazione è alla base della teoria dei sistemi real-time ed è quello che ci permette di dire se un insieme di task sia eseguibile o meno in funzione dei vincoli temporali dati.
I task di un sistema real-time possono essere:
I task di tipo periodico sono propri di un sistema di controllo tempo discreto.
Quando si ha a che fare con task di tipo periodico si parla anche di periodo di esecuzione con il quale si intende il lasso di tempo che intercorre tra due esecuzioni di un task periodico. È uso comune far coincidere la deadline con l'inverso del periodo poiché questo è il limite massimo di esecuzione di un task.
I task di un sistema real-time possono però essere:
Sostanzialmente questa distinzione si traduce nella diversa quantificazione dei costi di una possibile inesattezza temporale del sistema. Un esempio di task soft real-time può essere un riproduttore DVD, in cui il mancato rispetto dei vincoli si traduce in un degrado della qualità del filmato, ma non pregiudica il proseguimento della riproduzione; mentre un task hard real-time può essere il controllore della temperatura del nocciolo di una centrale nucleare, dove il mancato rispetto dei vincoli temporali può provocare un evidente disastro.
Un sistema real-time dovrebbe possedere le seguenti caratteristiche:
Gli algoritmi di scheduling più utilizzati per i sistemi real time sono essenzialmente tre:
L'EDD ha le seguenti caratteristiche
L'EDF ha le seguenti caratteristiche:
RM è utilizzabile solo per task periodici, ha le seguenti caratteristiche:
La funzione U esprime il tasso di utilizzazione del processore, la funzione risulta limitata superiormente ed è SupU=1,indicato con U_lub fattore di utilizzazione minimo. Diremo che una funzione è certamente schedulabile con Rate Monotonic se U<U_lub, risulta invece non schedulabile se U>1. Se U_lub<U<1 non abbiamo certezza sulla schedulabilità. L'algoritmo EDF in alcune circostanze risulta migliore di RM perché garantisce la schedulabilità semplicemente per U<1
I prodotti delle famiglie Windows e Unix non soddisfano le caratteristiche tipiche di un sistema real-time: ad esempio, pur gestendo l'esecuzione di più processi con pre-rilascio, non è possibile prevedere in alcun modo quale sarà il tempo di esecuzione di un singolo processo. Inoltre l'utilizzo di hard disk per la conservazione dei dati, dispositivi USB o altri dispositivi che introducono forti latenze di esecuzione da parte della CPU, rende impossibile stabilire con certezza quanto tempo sarà necessario per reperire l'informazione utile alla corretta esecuzione del codice.
Ci sono diversi fattori che causano la non prevedibilità nella risposta del sistema operativo. Tra di essi, i principali sono i seguenti:
Tra gli RTOS commerciali troviamo il POSIX-conformant (ad esempio LynxOS che è Unix compatibile) e non POSIX-conformant come ad esempio VxWorks (che supporta in parte gli standard POSIX). Per quanto riguarda i sistemi Open Source è possibile l'uso di Linux, con opportune precauzioni, o di RTAI/Xenomai.
Alcuni sistemi operativi in grado di lavorare in real-time su adeguate architetture hardware sono:
| Nome | Licenza | Codice Sorgente | Utilizzi | Stato | Piattaforma |
|---|---|---|---|---|---|
| Apache Mynewt | Apache 2.0 | open source | embedded | attivo | ARM Cortex-M, MIPS32, Microchip PIC32, RISC-V |
| BeRTOS | Modified GNU GPL | open source | embedded | archiviato | ARM, Cortex-M3, ARM ARM7TDMI, Atmel AVR, PowerPC (emu), x86 (emu), x86-64 (emu) |
| ChibiOS/RT | GPL o commerciale | open source | embedded | attivo | x86, ARM7, ARM9, Cortex-M0-M3-M4, PowerPC e200z, STM8, STM32, AVR, MSP430, ColdFire, H8S |
| ChorusOS | ? | ? | ? | terminato | SPARC, x86, PowerPC |
| Contiki | BSD | open source | embedded, WSN | attivo | MSP430, AVR, ARM |
| Data General RDOS | Proprietaria | ? | general purpose | terminato | Data General Nova, Data General Eclipse |
| Deos | Proprietaria | chiusa | safety critical | attivo | x86, PowerPC, ARM, MIPS |
| DioneOS | Proprietaria | disponibile con licenza | embedded | MSP430, MSP430x | |
| DNIX | Proprietaria | chiusa | general purpose | terminato | Motorola 68000 |
| GEC DOS | Proprietaria | chiusa | process control | terminato | GEC 4000 series |
| DSOS | Proprietaria | chiusa | ? | terminato | TI-980A minicomputer |
| DSP/BIOS | Proprietaria | chiusa, disponibile con licenza | general purpose | manutenzione | La maggior parte dei chip Texas Instruments C2800, C5500, C6000 e OMAP DSP cores. Sostituito da TI-RTOS, ma ancora disponibile per il download. |
| eCos | Modified GNU GPL | open source | embedded | inattivo | ARM-XScale-Cortex-M, CalmRISC, 680x0-ColdFire, fr30, FR-V, H8, IA-32, MIPS, MN10300, OpenRISC, PowerPC, SPARC, SuperH, V8xx |
| eCosPro | Modified GNU GPL | open source con parti a pagamento | attivo | ARM7-9, Cortex-A5-A9-M3-M4-M7, 680x0-ColdFire, H8-H8S, IA-32, MIPS32, MIPS64, microMIPS, NIOS II, OpenRISC, PowerPC, SPARC, SH4/4A, TILE-Gx, XScale | |
| embOS | Proprietaria | chiusa, adisponibile ai clienti, parti libere per fini non commerciali. | embedded, industrial, IoT, safety critical | attivo | ARM7/9/11, ARM Cortex-A/R/M, AVR, AVR32, C16x, CR16C, ColdFire, H8, HCS12, M16C, M32C, MSP430, NIOS2, PIC18/24/32, R32C, R8C, RISC-V, RL78, RH850, RX100/200/600/700, RZ, SH2A, STM8, ST7, V850, 78K0, 8051 |
| ERIKA Enterprise | GPL e GPL linking exception | open source | embedded | ARM7, ARM Cortex-M, ARM Cortex-A, Hitachi H8, Altera Nios2, Microchip dsPIC (inclusi dsPIC30, dsPIC33 e PIC24), Microchip PIC32, ST Microelectronics ST10, Infineon C167, Infineon Tricore, Freescale PPC e200 (MPC 56xx) (inclusi PPC e200 z0, z6, z7), Freescale S12XS, EnSilica eSi-RISC, AVR, Lattice Mico32, MSP430, Renesas RX200, x86-64 | |
| EROS | Modified GNU GPL | open source | experimental research use | dormant | IA-32 |
| FlexOS | Proprietaria | chiusa | general purpose, industrial, POS | terminato | 186, 286, 386, V60, V70, 68000 |
| FreeRTOS | MIT | open source | embedded | attivo | ARM, AVR, AVR32, ColdFire, ESP32, HCS12, IA-32, Cortex-M3-M4-M7, Infineon XMC4000, MicroBlaze, MSP430, PIC, PIC32, Renesas H8/S, RISC-V, RX100-200-600-700, 8052, STM32, TriCore, EFM32 |
| Fuchsia | AArch64, x86-64 | ||||
| Keil RTX | Apache 2.0 | open source | embedded | Arm Cortex-M | |
| FunkOS | Modified Sleepycat License | open source | embedded | AVR, MSP430, Cortex-M3 | |
| HeartOS | Proprietaria | chiusa | safety critical | x86, PowerPC, ARM | |
| Huawei LiteOS | BSD | open source | embedded | terminato | ARM (M0/3/4/7, A7/17/53, ARM9/11), x86, RISC-V |
| HarmonyOS | Proprietaria | chiusa | embedded | attivo | AArch64, x86-64, RISC-V, LingxiISA |
| IBM 4680 OS | Proprietaria | chiusa | general purpose, industrial, POS | terminato | 286 |
| IBM 4690 OS | Proprietaria | attivo | 286, 386 | ||
| INTEGRITY | Proprietaria | embedded | ARM, XScale, Blackfin, ColdFire, MIPS, PowerPC, x86 | ||
| INtime | Proprietaria | x86 | |||
| ITRON | T-License | varia | embedded | ARM, MIPS, x86, Renesas RX100-200-600-700-altri | |
| Kaspersky OS | Proprietaria | open source | safety critical, virtualization | x86, x86_64, ARMV5, ARMV7, ARMV8, MIPS32 | |
| KolibriOS | GPL | embeddable | x86 | ||
| LynxOS | Proprietaria | source available | embedded | Motorola 68010, x86/IA-32, ARM, Freescale PowerPC, PowerPC 970, LEON | |
| Mbed OS | Apache 2.0 | open source | embedded | Arm Cortex-M | |
| MenuetOS | GPL | open source | ? | IA-32 | |
| MERT | Proprietaria | chiusa | OS for long-distance telephone switching systems | inattivo | PDP-11 |
| MicroC/OS-III | Apache 2.0 | open source | embedded | attivo | ARM7-9-11/Cortex-M1-3-4-A8/9, AVR, HC11/12/S12, ColdFire, Blackfin, MicroBlaze, NIOS, 8051, x86, Win32, H8S, M16C, M32C, MIPS, 68000, PIC24/dsPIC33/PIC32, MSP430, PowerPC, SH, StarCore, Renesas RX100-200-600-700, RL; STM32, ... |
| MontaVista Linux | GPL | open source | embedded | ? | |
| MP/M | Proprietaria | chiusa | general purpose, industrial | terminato | 8080, Z80, 8086 |
| MQX | Proprietaria | sorgente free disponibile | embedded | attivo | Freescale Power, ColdFire, Kinetis Cortex ARM |
| Multiuser DOS | Proprietaria | chiusa | general-purpose, industrial | terminato | 386 |
| Nano-RK | GPL o commerciale | open source | embedded, WSN | terminato | AVR, MSP430 |
| Neutrino | Proprietaria | some source provided | microkernel, embedded, industrial | attivo | ARM, ARM64, MIPS, PPC, SH, x86, x86-64, XScale |
| Nucleus RTOS | Proprietaria | source provided | embedded | ARM (Cortex-M3-M4-R4-R4F-A8-A9, ARM7-9-11), PowerPC, MIPS32-16e, microMIPS, ColdFire, SuperH | |
| NUT | Proprietaria | open source | embedded, industrial | ARM-M0, ARM-M0+, ARM Cortex-M3, ARM9, ARM Cortex-M7, Cortex-M3 | |
| Nut/OS | BSD | embedded, industrial | AVR, AVR32, ARM7, ARM9, Cortex-M3 | ||
| NuttX | Apache 2.0 | open source | embedded | Linux user mode, ARM7-9, Cortex-A5-A8-A9-M0-M3-M4-M7, 8052, Espressif ESP32, Lattice LM32, Renesas MC16C/26/SH-1, RISC-V, Zilog Z16F, Zilog eZ80 Acclaim!, Zilog Z8Encore!, Z80, MIPS PIC32MX, PIC32MZ | |
| OpenComRTOS | Proprietaria | sorgente disponibile | embedded | Freescale PowerPC, Texas Instruments C66xxx DSP, ARM, XMOS, MicroBlaze, LEON, NXP CoolFlux DSP, Melexis MLX16, Win32, Linux | |
| OS2000 | Proprietaria | ? | embedded | attivo | MIPS, KOMDIV-32, KOMDIV-64, Intel BSPs (x86) |
| OS4000 | Proprietaria | chiusa | process control | maintenance only | GEC 4000 series |
| OSE | Proprietaria | disponibile ai clienti | general purpose | attivo | ARM, PowerPC, x86, TI OMAP, ... |
| OS-9 | Proprietaria | disponibile ai clienti | embedded | ARM-strongARM, MIPS, PowerPC, SuperH, x86/Pentium, XSCALE, Motorola 6809, 680x0, SPARC | |
| OSEK | GPL o commerciale | specification | Engine Control Units | ||
| Phoenix-RTOS | BSD | open source | embedded | attivo | ARMv7 Cortex-M, ARMv7 Cortex-A, IA-32, RISC V |
| PikeOS | Proprietaria | disponibile ai clienti | certifiable safety & security, embedded virtualisation | PPC, x86, ARM, MIPS, SPARC-LEON, RISC-V | |
| Protothreads | BSD | open source | general purpose | attivo | Architetture indipendenti |
| pSOS | Proprietaria | ? | ? | discontinued | 680x0 |
| PX5 RTOS | Proprietaria | royalty-free | embedded | attivo | Embedded MCU e architetture MPU. ARM Cortex-M, Cortex-R, Cortex-A, RISC-V. AMP e configurazioni SMP. |
| QNX | Proprietaria | ? | microkernel, embedded, industrial | attivo | |
| QP | GPL o commerciale | dual | MCU, DSC, DSP SoC | ARM7/9, ARM Cortex-M3-M0, MSP430, TMS320C28x, AVR, AVRXmega, ColdFire, 68HC08, M16C/R8C, H8, 8051, 80251, PIC18, PIC24/dsPIC33, Nios II, PSoC1 | |
| REAL/32 | Proprietaria | chiusa | general-purpose, industrial | 386 | |
| Real-time Linux (PREEMPT RT) | GPL | open source | general purpose | x86, x86_64, RISC-V, ARM64 e LoongArch (ARM e POWER nel -rt branch) | |
| REX OS | Proprietaria | chiusa, disponibile con licenza. | embedded | inattivo | ARM |
| RIOT | GPL | open source | attivo | ARM7, ARM Cortex M, MSP430, AVR, RISC-V, Xtensa | |
| RMX | Proprietaria | chiusa | terminato | Intel 8080, 8086, 80386 | |
| RODOS | BSD | sorgente disponibile | attivo | ARMv7 (M3, A8, A9), AVR32, PowerPC 405, SPARC64
Platforms: SmartFusion2, RaspberryPi, STM32 su: Linux, Windows, macOS, FreeRTOS, RTEMS | |
| RSX-11 | Proprietaria | ? | ? | historic | PDP-11 |
| RT-11 | Proprietaria | ? | general purpose | terminato | PDP-11 |
| RTAI | GPL | open source | general purpose | attivo | x86 (with and without FPU and TSC), x86-64, PowerPC, ARM (StrongARM; ARM7: clps711x-family, Cirrus Logic EP7xxx, CS89712, PXA25x), m68k |
| RTEMS | BSD | embedded | AArch64, ARM, Blackfin, ColdFire, TI C3x/C4x, H8/300, x86, x86_64, 68k, Microblaze, Milkymist SoC, MIPS, Nios II, PowerPC, SuperH, SPARC, ERC32, LEON, Mongoose-V | ||
| RTLinux | GPL | general purpose | inattivo | Vedi Linux | |
| RT-Thread | Apache 2.0 | open source | embedded | attivo | ARM, ARM Cortex-M0-M3-R4-M4-M7, IA-32, AVR32, Blackfin, nios, PPC, M16C, MIPS, MicroBlaze, V850, unicore32, |
| RTXC Quadros | Proprietaria | sorgente disponibile | embedded | ARM - Atmel/Freescale/NXP/ST/TI, Blackfin, 680x0-ColdFire, PowerPC, StarCore, TI-Luminary Stellaris, TI OMAP, XScale | |
| RTX, RTX64 | Proprietaria | chiusa | MS Windows extension | x86, x86-64 | |
| RX116 | ? | ? | embedded, industrial | terminato | NEC V20, NEC V30, NEC V40, NEC V50 |
| RX616 | ? | ? | safety critical, embedded, industrial | NEC V60, NEC V70 | |
| RX-UX832 | ? | ? | embedded, industrial, general-purpose | NEC V60, NEC V70 | |
| SafeRTOS | Proprietaria | codice sorgente & Design Assurance Pack disponibili | embedded, safety critical | attivo | Vedi FreeRTOS |
| SHaRK | GPL | open source | ? | inattivo | ? |
| Simulink Real-Time | Proprietaria | chiusa | real-time testing-embedded | attivo | x86 |
| SINTRAN III | Proprietaria | ? | ? | ? | Norsk Data |
| Symbian OS | Eclipse | open source | embedded | terminato | ARM |
| T-Kernel | T-License | sorgente disponibile | embedded RTOS | attivo | ARM, MIPS, SH, altri |
| THEOS | Proprietaria | ? | ? | ? | ? |
| ThreadX | MIT | open source | embedded, IoT, safety critical | attivo | ARC, ARM/Thumb, AVR32, BlackFin, 680x0-ColdFire, H8-300H, Luminary Micro Stellaris, M-CORE, MicroBlaze, PIC24-dsPIC, PIC32, MIPS, V8xx, Nios II, PowerPC, Renesas RX100, RX200, RX600, RX700, Synergy, SH, SHARC, StarCore, STM32, StrongARM, TMS320C54x, TMS320C6x, x86/x386, XScale, Xtensa/Diamond, ZSP |
| TI-RTOS Kernel (SYS/BIOS) | BSD | open source | embedded | Texas Instruments: MSP430-432, C2000-5000-6000, TI ARM (Cortex M3-4F-R4-A8-A15), SimpleLink Wireless CC2xxx-CC3xxx | |
| TizenRT | Apache 2.0 | open source | embedded | attivo | |
| Transaction Processing Facility | Proprietaria | mista | general purpose | attivo | IBM Z |
| TRON project | Libera | mista | mixed | attivo | |
| UNIX-RTR | ? | ? | ? | terminato | PDP-11 |
| UNOS | ? | ? | ? | historic | 680x0 |
| μITRON | T-License | open source | embedded | attivo | ARM, MIPS, x86, Renesas RX100-200-600-700-altri |
| μ-velOSity | Proprietaria | ? | microkernel | attivo | ? |
| velOSity | Proprietaria | ? | ? | Power ISA, ARM/XScale, MIPS, x86/Pentium, ColdFire, Blackfin, OMAP, DaVinci | |
| VAXELN | Proprietaria | closed source | ? | historic | VAX |
| VRTX | Proprietaria | ? | ? | superseded by Nucleus RTOS | ARM, MIPS, PowerPC, RISC |
| VxWorks | Proprietaria | ? | embedded | attivo | ARM, IA-32, Intel 64, MIPS, PowerPC, SH-4, StrongARM, xScale |
| Windows CE | Proprietaria | Microsoft Shared Source | x86, MIPS, ARM, SuperH | ||
| Windows 10 IoT | Proprietaria | ? | Intel Atom, Celeron, Pentium; Qualcomm Snapdragon, Broadcom, NXP i.MX | ||
| Xenomai | GPL | open source | general | x86, x86-64, PowerPC, ARM, Analog Devices Blackfin BF52x, BF53x, BF54x e BF56x | |
| XINU | Libera | embedded | attivo | x86, MIPS, ARM, AVR | |
| XMK | BSD | open source | embedded | inattivo | |
| Zephyr | Apache 2.0 | open source | embedded | attivo | ARM (Cortex-M0, -M3, -M4, -M23, -M33, -R4, -R5, -A53), x86, ARC, RISC-V, Nios II, Xtensa, SPARC |