Sistema operativo real-time

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.

Task periodici/aperiodici e hard/soft real-time

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.

Caratteristiche di un sistema real-time

Un sistema real-time dovrebbe possedere le seguenti caratteristiche:

Scheduling di sistemi Real Time

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 fattori che minano la prevedibilità

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:

Scelta del sistema operativo real time

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.

Problemi del real-time in Linux

Esempi di sistemi operativi RT

Alcuni sistemi operativi in grado di lavorare in real-time su adeguate architetture hardware sono:

NomeLicenzaCodice SorgenteUtilizziStatoPiattaforma
Apache MynewtApache 2.0open sourceembeddedattivoARM Cortex-M, MIPS32, Microchip PIC32, RISC-V
BeRTOSModified GNU GPL open sourceembeddedarchiviatoARM, Cortex-M3, ARM ARM7TDMI, Atmel AVR, PowerPC (emu), x86 (emu), x86-64 (emu)
ChibiOS/RTGPL o commercialeopen sourceembedded attivox86, ARM7, ARM9, Cortex-M0-M3-M4, PowerPC e200z, STM8, STM32, AVR, MSP430, ColdFire, H8S
ChorusOS???terminatoSPARC, x86, PowerPC
ContikiBSDopen sourceembedded, WSNattivoMSP430, AVR, ARM
Data General RDOSProprietaria?general purposeterminatoData General Nova, Data General Eclipse
DeosProprietariachiusasafety criticalattivox86, PowerPC, ARM, MIPS
DioneOSProprietariadisponibile con licenzaembeddedMSP430, MSP430x
DNIXProprietariachiusageneral purposeterminatoMotorola 68000
GEC DOSProprietariachiusaprocess controlterminatoGEC 4000 series
DSOSProprietariachiusa?terminatoTI-980A minicomputer
DSP/BIOSProprietariachiusa, disponibile con licenzageneral purposemanutenzioneLa maggior parte dei chip Texas Instruments C2800, C5500, C6000 e OMAP DSP cores. Sostituito da TI-RTOS, ma ancora disponibile per il download.
eCosModified GNU GPLopen source embeddedinattivoARM-XScale-Cortex-M, CalmRISC, 680x0-ColdFire, fr30, FR-V, H8, IA-32, MIPS, MN10300, OpenRISC, PowerPC, SPARC, SuperH, V8xx
eCosProModified GNU GPLopen source con parti a pagamentoattivoARM7-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
embOSProprietariachiusa, adisponibile ai clienti, parti libere per fini non commerciali.embedded, industrial, IoT, safety criticalattivoARM7/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 EnterpriseGPL e GPL linking exceptionopen sourceembeddedARM7, 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
EROSModified GNU GPLopen sourceexperimental
research use
dormantIA-32
FlexOSProprietariachiusageneral purpose, industrial, POSterminato186, 286, 386, V60, V70, 68000
FreeRTOSMIT open source embedded attivoARM, 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
FuchsiaAArch64, x86-64
Keil RTXApache 2.0open sourceembeddedArm Cortex-M
FunkOSModified Sleepycat Licenseopen sourceembeddedAVR, MSP430, Cortex-M3
HeartOSProprietariachiusasafety criticalx86, PowerPC, ARM
Huawei LiteOSBSDopen sourceembeddedterminatoARM (M0/3/4/7, A7/17/53, ARM9/11), x86, RISC-V
HarmonyOSProprietariachiusaembeddedattivoAArch64, x86-64, RISC-V, LingxiISA
IBM 4680 OSProprietariachiusageneral purpose, industrial, POSterminato286
IBM 4690 OSProprietariaattivo286, 386
INTEGRITYProprietariaembeddedARM, XScale, Blackfin, ColdFire, MIPS, PowerPC, x86
INtimeProprietariax86
ITRONT-LicensevariaembeddedARM, MIPS, x86, Renesas RX100-200-600-700-altri
Kaspersky OSProprietariaopen sourcesafety critical, virtualizationx86, x86_64, ARMV5, ARMV7, ARMV8, MIPS32
KolibriOSGPLembeddablex86
LynxOSProprietariasource availableembeddedMotorola 68010, x86/IA-32, ARM, Freescale PowerPC, PowerPC 970, LEON
Mbed OSApache 2.0open sourceembeddedArm Cortex-M
MenuetOSGPLopen source?IA-32
MERTProprietariachiusaOS for long-distance telephone switching systemsinattivoPDP-11
MicroC/OS-IIIApache 2.0open sourceembeddedattivoARM7-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 LinuxGPLopen sourceembedded?
MP/MProprietariachiusageneral purpose, industrialterminato8080, Z80, 8086
MQXProprietariasorgente free disponibileembeddedattivoFreescale Power, ColdFire, Kinetis Cortex ARM
Multiuser DOSProprietariachiusageneral-purpose, industrialterminato386
Nano-RKGPL o commercialeopen sourceembedded, WSNterminatoAVR, MSP430
NeutrinoProprietariasome source providedmicrokernel, embedded, industrialattivoARM, ARM64, MIPS, PPC, SH, x86, x86-64, XScale
Nucleus RTOSProprietariasource provided embeddedARM (Cortex-M3-M4-R4-R4F-A8-A9, ARM7-9-11), PowerPC, MIPS32-16e, microMIPS, ColdFire, SuperH
NUTProprietaria open sourceembedded, industrialARM-M0, ARM-M0+, ARM Cortex-M3, ARM9, ARM Cortex-M7, Cortex-M3
Nut/OSBSDembedded, industrialAVR, AVR32, ARM7, ARM9, Cortex-M3
NuttXApache 2.0open sourceembeddedLinux 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
OpenComRTOSProprietariasorgente disponibileembeddedFreescale PowerPC, Texas Instruments C66xxx DSP, ARM, XMOS, MicroBlaze, LEON, NXP CoolFlux DSP, Melexis MLX16, Win32, Linux
OS2000Proprietaria?embeddedattivoMIPS, KOMDIV-32, KOMDIV-64, Intel BSPs (x86)
OS4000Proprietariachiusaprocess controlmaintenance onlyGEC 4000 series
OSEProprietariadisponibile ai clientigeneral purpose attivoARM, PowerPC, x86, TI OMAP, ...
OS-9Proprietariadisponibile ai clientiembeddedARM-strongARM, MIPS, PowerPC, SuperH, x86/Pentium, XSCALE, Motorola 6809, 680x0, SPARC
OSEKGPL o commercialespecificationEngine Control Units
Phoenix-RTOSBSD open sourceembedded attivoARMv7 Cortex-M, ARMv7 Cortex-A, IA-32, RISC V
PikeOSProprietariadisponibile ai clienticertifiable safety & security, embedded virtualisationPPC, x86, ARM, MIPS, SPARC-LEON, RISC-V
ProtothreadsBSDopen sourcegeneral purpose attivoArchitetture indipendenti
pSOSProprietaria??discontinued680x0
PX5 RTOSProprietariaroyalty-freeembeddedattivoEmbedded MCU e architetture MPU. ARM Cortex-M, Cortex-R, Cortex-A, RISC-V. AMP e configurazioni SMP.
QNXProprietaria?microkernel, embedded, industrialattivo
QPGPL o commercialedualMCU, DSC, DSP SoCARM7/9, ARM Cortex-M3-M0, MSP430, TMS320C28x, AVR, AVRXmega, ColdFire, 68HC08, M16C/R8C, H8, 8051, 80251, PIC18, PIC24/dsPIC33, Nios II, PSoC1
REAL/32Proprietariachiusageneral-purpose, industrial386
Real-time Linux (PREEMPT RT)GPLopen sourcegeneral purposex86, x86_64, RISC-V, ARM64 e LoongArch (ARM e POWER nel -rt branch)
REX OSProprietariachiusa, disponibile con licenza.embeddedinattivoARM
RIOTGPLopen sourceattivoARM7, ARM Cortex M, MSP430, AVR, RISC-V, Xtensa
RMXProprietariachiusaterminatoIntel 8080, 8086, 80386
RODOSBSDsorgente disponibileattivoARMv7 (M3, A8, A9), AVR32, PowerPC 405, SPARC64

Platforms: SmartFusion2, RaspberryPi, STM32 su: Linux, Windows, macOS, FreeRTOS, RTEMS

RSX-11Proprietaria??historicPDP-11
RT-11Proprietaria?general purposeterminatoPDP-11
RTAIGPLopen sourcegeneral purposeattivox86 (with and without FPU and TSC), x86-64, PowerPC, ARM (StrongARM; ARM7: clps711x-family, Cirrus Logic EP7xxx, CS89712, PXA25x), m68k
RTEMSBSDembeddedAArch64, 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 GPLgeneral purposeinattivoVedi Linux
RT-ThreadApache 2.0open sourceembedded attivoARM, ARM Cortex-M0-M3-R4-M4-M7, IA-32, AVR32, Blackfin, nios, PPC, M16C, MIPS, MicroBlaze, V850, unicore32,
RTXC QuadrosProprietariasorgente disponibileembeddedARM - Atmel/Freescale/NXP/ST/TI, Blackfin, 680x0-ColdFire, PowerPC, StarCore, TI-Luminary Stellaris, TI OMAP, XScale
RTX, RTX64ProprietariachiusaMS Windows extensionx86, x86-64
RX116??embedded, industrialterminatoNEC V20, NEC V30, NEC V40, NEC V50
RX616??safety critical, embedded, industrialNEC V60, NEC V70
RX-UX832??embedded, industrial, general-purposeNEC V60, NEC V70
SafeRTOSProprietariacodice sorgente & Design Assurance Pack disponibiliembedded, safety criticalattivoVedi FreeRTOS
SHaRKGPL open source?inattivo?
Simulink Real-TimeProprietariachiusareal-time testing-embeddedattivox86
SINTRAN IIIProprietaria???Norsk Data
Symbian OSEclipseopen sourceembeddedterminatoARM
T-KernelT-Licensesorgente disponibileembedded RTOSattivoARM, MIPS, SH, altri
THEOSProprietaria????
ThreadXMITopen sourceembedded, IoT, safety criticalattivoARC, 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)BSDopen source embeddedTexas Instruments: MSP430-432, C2000-5000-6000, TI ARM (Cortex M3-4F-R4-A8-A15), SimpleLink Wireless CC2xxx-CC3xxx
TizenRTApache 2.0open sourceembeddedattivo
Transaction Processing FacilityProprietariamistageneral purposeattivoIBM Z
TRON projectLiberamistamixedattivo
UNIX-RTR???terminatoPDP-11
UNOS???historic680x0
μITRONT-Licenseopen sourceembeddedattivoARM, MIPS, x86, Renesas RX100-200-600-700-altri
μ-velOSityProprietaria?microkernelattivo?
velOSityProprietaria??Power ISA, ARM/XScale, MIPS, x86/Pentium, ColdFire, Blackfin, OMAP, DaVinci
VAXELNProprietariaclosed source?historicVAX
VRTXProprietaria??superseded by Nucleus RTOSARM, MIPS, PowerPC, RISC
VxWorksProprietaria?embeddedattivoARM, IA-32, Intel 64, MIPS, PowerPC, SH-4, StrongARM, xScale
Windows CEProprietariaMicrosoft Shared Sourcex86, MIPS, ARM, SuperH
Windows 10 IoTProprietaria?Intel Atom, Celeron, Pentium; Qualcomm Snapdragon, Broadcom, NXP i.MX
XenomaiGPLopen sourcegeneralx86, x86-64, PowerPC, ARM, Analog Devices Blackfin BF52x, BF53x, BF54x e BF56x
XINULiberaembeddedattivox86, MIPS, ARM, AVR
XMKBSDopen sourceembeddedinattivo
ZephyrApache 2.0open sourceembeddedattivoARM (Cortex-M0, -M3, -M4, -M23, -M33, -R4, -R5, -A53), x86, ARC, RISC-V, Nios II, Xtensa, SPARC

Note

  1. ↑ PREEMPT_RT patch versions, su wiki.linuxfoundation.org.

Altri progetti

Collegamenti esterni

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica