Блог "Дети ОИТа"
/поиск

операционная система реального времени

Многие считают, что операционная система реального времени (ОСРВ) — это «очень быстрая ОС». Это неверно.

Многие считают, что операционная система реального времени (ОСРВ) — это «очень быстрая ОС». Это неверно. Быстродействие само по себе не гарантирует предсказуемости. Обычная ОС может работать быстрее в среднем, но иногда давать непредсказуемо большие задержки. ОСРВ же даёт гарантию: операция будет выполнена не только быстро, но и в строго определённый, известный заранее интервал времени. Это свойство называется детерминизмом. Именно оно отличает ОСРВ от систем общего назначения.

Основные области применения операционных систем реального времени

Критерии выбора ОС РВ следующие

[pdf: /org/biblioteca/os<sub>real</sub>_time/ОС<sub>реального</sub>_времени<sub>и</sub>_технологии<sub>разработки</sub>_КПО.pdf::13++0.02;;annot−13−3ТребованиякоборудованиюдляОСРВ]

Основные определения

Стандарты на операционные системы реального времени

Page 40; Quoting: Основные требования к операционным системам реального времени

Page 42; Quoting: Параметры и характеристики операционной системы реального времени

1. Детерминизм против средней производительности

  • Обычная ОС (Windows, Linux без PREEMPT<sub>RT</sub>, macOS) оптимизирована для высокой средней пропускной способности. Может «задуматься» на десятки или сотни миллисекунд из-за кэширования, свопинга, фоновых процессов.
  • ОСРВ жертвует средней производительностью ради минимальной и предсказуемой максимальной задержки. В жёсткой ОСРВ время ответа на прерывание никогда не превысит заданную величину (например, 10 микросекунд).

2. Планировщик: приоритеты и вытеснение

  • Обычная ОС: используется планировщик с динамическими приоритетами, часто с «честным» распределением времени (fair scheduling). Высокоприоритетная задача может ждать, пока низкоприоритетная не завершит свой квант.
  • ОСРВ: строго приоритетное вытесняющее планирование. Задача с более высоким приоритетом немедленно вытесняет текущую, даже если та находится в середине системного вызова. Это обеспечивается механизмом прерываний ядра (kernel preemption).

3. Механизмы синхронизации и приоритетная инверсия

  • Обычная ОС: стандартные мьютексы могут приводить к приоритетной инверсии — когда высокоприоритетная задача неявно блокируется низкоприоритетной, захватившей общий ресурс. Это вносит непредсказуемые задержки.
  • ОСРВ: реализуют протоколы предотвращения инверсии:
    • Приоритетное наследование (priority inheritance) — задача-захватчик временно получает приоритет ожидающей высокой задачи.
    • Протокол потолка приоритетов (priority ceiling) — назначается максимальный приоритет, с которым ресурс может быть захвачен.

4. Управление памятью: отказ от свопинга

  • Обычная ОС: активно использует виртуальную память, подкачку (swap), кэширование. Страница может быть выгружена на диск, что вызывает непредсказуемую задержку при обращении.
  • ОСРВ: либо не использует виртуальную память вовсе, либо применяет закрепление страниц (wire‑locking) — все страницы памяти критических задач фиксируются в ОЗУ, свопинг запрещён.

5. Обработка прерываний

  • Обычная ОС: обработчики прерываний могут выполняться долго, откладывая другие прерывания. Часть работы переносится в «нижние половины» (tasklets, softirq), которые не имеют жёстких приоритетов.
  • ОСРВ: обработчики прерываний максимально короткие — только фиксация факта. Вся логика передаётся выделенной высокоприоритетной задаче. Это называется threaded interrupts.

6. API и системные вызовы

  • Обычная ОС: множество системных вызовов с переменным временем выполнения (сетевые, файловые, GUI). Сложно предсказать время.
  • ОСРВ: предоставляют минимальный, детерминированный набор API: семафоры, очереди сообщений, таймеры, управление памятью. Время выполнения каждого вызова ограничено сверху и известно.

7. Отладка и анализ

  • Обычная ОС: профайлеры показывают средние значения, «горячие точки». Не дают гарантий.

  • ОСРВ: используются специализированные инструменты для статического анализа времени выполнения (WCET — Worst-Case Execution Time). Код должен быть проанализирован на предмет худшего случая.

  • Жёсткие (Hard Real-Time): Нарушение сроков влечет катастрофические последствия (системы управления тормозами, авионика, медицинские аппараты).

  • Твёрдые (Firm Real-Time): Пропуск срока снижает полезность результата, но не приводит к катастрофе (системы обработки мультимедиа).

  • Мягкие (Soft Real-Time): Допустим процент нарушений при сохранении среднего качества обслуживания (видеоконференции, онлайн-игры).

Приведённые значения — типичные для реальных систем при тактовой частоте ~100–200 МГц для микроконтроллеров и 1–3 ГГц для процессоров общего назначения. Цифры включают аппаратную задержку + программный пролог обработчика + переключение контекста.

Архитектура Пример ОСРВ Типичная макс. задержка (мкс) Примечание
ARM Cortex-M0+ (48 МГц) FreeRTOS 3–5 Без FPU, простое ядро
ARM Cortex-M4 (168 МГц) FreeRTOS / Zephyr 1.5–2.5 С поддержкой MPU
ARM Cortex-M7 (400 МГц) FreeRTOS + cache 0.8–1.2 Кэш увеличивает разброс
ARM Cortex-A53 (1.2 ГГц) Linux PREEMPT<sub>RT</sub> 15–30 Связано с TLB, кэшем, многоядерностью
x86<sub>64</sub> (2.5 ГГц) Linux PREEMPT<sub>RT</sub> 10–25 Зависит от чипсета и ACPI
x86<sub>64</sub> (2.5 ГГц) QNX 2–5 Микроядро, оптимизированные драйверы
PowerPC e500 (1 ГГц) VxWorks 1–3 Используется в авионике
RISC-V (100 МГц) FreeRTOS 2–4 Зависит от реализации CLIC/PLIC
ARM Cortex-R5 (lockstep) INTEGRITY 0.5–1 Специализированный для безопасности, без кэша
Тактовая частота Задержка прерывания (FreeRTOS, Cortex-M) Задержка (Linux PREEMPT<sub>RT</sub>, x86)
32 МГц 8–12 мкс —
100 МГц 2.5–4 мкс —
400 МГц (Cortex-M7) 0.8–1.2 мкс —
1 ГГц (ARM Cortex-A) — 30–50 мкс
3 ГГц (x86<sub>64</sub>) — 8–15 мкс

Сравнение обработки прерывания в обычной ОС и ОСРВ

Обычная ОС (Linux без PREEMPT_RT):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Событие   → Прерывание   → Долгий обработчик → Планировщик → Задача
(IRQ)        (100 мкс)       (возможна задержка >1 мс)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

ОСРВ (FreeRTOS / QNX):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Событие → Короткий обработчик (5 мкс) → Планировщик (1 мкс) → Задача (немедленно)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Приоритетная инверсия и её решение (протокол наследования)

Без протокола:
  Высокий приоритет (H)   ──────XXX────────────────
  Средний приоритет (M)   ──────────────────XXX───
  Низкий приоритет (L)    ──XXX───────────────────
  Ресурс                  ────[ L захватил ]──────[ H ждёт → инверсия ]

С протоколом наследования:
  Высокий приоритет (H)   ──────[ ожидание ]──────
  Средний приоритет (M)   ──────────────── (не вытесняет, пока L наследует приоритет H)
  Низкий приоритет (L)    ──XXX[ наследует H ]────[ отпускает ресурс ]

Диаграмма вытеснения задачи в ОСРВ

  Задача A (приоритет 1, самый низкий)   ████████████████████ (выполняется)
  Прерывание                             ^ (произошло)
  Обработчик прерывания (короткий)       █ (1-2 мкс)
  Задача B (приоритет 10, высокий)                      ███████ (вытесняет A)
  Задача A (возврат)                                              ████
Время →─────────────────────────────────────────────────────────────────►

Визуализация разброса задержек для разных систем

                        0   10   20   30   40   50   60   70   80   90   100 мкс
                        ├────┼────┼────┼────┼────┼────┼────┼────┼────┼────┤
FreeRTOS (Cortex-M4)     █ (1.5-2.5)
QNX (x86)                ██ (2-5)
Linux PREEMPT_RT (x86)       ████████ (10-25)
Windows 10 IoT (with RT)        █████████████ (15-40)

Специализированные встраиваемые ОСРВ

  • Класс A: простые, очень малый footprint (единицы КБ). Вытесняющее ядро, семафоры, очереди. Предсказуемое поведение на голом железе.
  • Класс B: более функциональные, с поддержкой сетевых стеков, файловых систем, многозадачности с равными приоритетами. Могут работать на микроконтроллерах с MPU.

Проприетарные ОСРВ для критических систем

  • Отличаются наличием сертификационных пакетов (DO-178C, ISO 26262, IEC 61508). Обеспечивают пространственную и временную изоляцию задач. Используются в авионике, автомобилях, медицинском оборудовании.

ОС общего назначения с расширениями реального времени

  • Linux + PREEMPT<sub>RT</sub>: патч, превращающий Linux в вытесняемое ядро с задержками 10–50 мкс. Годится для твёрдого реального времени.
  • Xenomai: двухъядерная архитектура (микроядро + Linux). Даёт задержки 1–10 мкс, но сложнее в настройке.
  • FreeBSD: упреждающая многозадачность ядра (KERN<sub>PREEMPTION</sub>), но нет полноценного вытеснения в критических секциях. Используется в мягком реальном времени.
  • Windows: собственная ОСРВ отсутствует. Однако отдельные встраиваемые продукты (например, Azure RTOS) представляют собой классическую ОСРВ для микроконтроллеров.

Многоядерность и детерминизм

Одноядерные ОСРВ легче анализировать. На многоядерных системах возникают:

  • Конкуренция за кэш и шину памяти;
  • Непредсказуемость, на каком ядре возникнет прерывание;
  • Необходимость использования блокировок с приоритетным наследованием, которые сложнее реализовать корректно.

Решения: привязка прерываний к конкретным ядрам (IRQ affinity), разделение кэша (cache partitioning), использование асинхронных межъядерных сообщений.

Формальная верификация

Для жёсткого реального времени тестирования недостаточно. Применяются:

  • Проверка моделей (model checking) — например, UPPAAL для временных автоматов.
  • Дедуктивная верификация — математическое доказательство корректности планировщика.

Наиболее известный пример верифицированного ядра — seL4 (микроядро, доказанное в Isabelle/HOL).

Ресурсные ограничения

ОСРВ нередко работают на устройствах с 32 КБ ОЗУ или менее. Поэтому:

  • Ядро должно быть модульным и масштабируемым.
  • Динамическое выделение памяти (malloc) часто запрещено или разрешено только на этапе инициализации.
  • Стек каждой задачи выделяется статически, его переполнение недопустимо.

Операционные системы реального времени интересны не «скоростью», а предсказуемостью. Они позволяют строить системы, где время — такой же ресурс, как память или процессор, и его можно распределять и гарантировать. Отличие от обычных ОС лежит в архитектурных решениях: вытесняемость ядра, протоколы синхронизации, отказ от свопинга, анализ WCET. Понимание этих различий критически важно при выборе платформы для систем, где опоздание недопустимо.