+7 (495) 665-02-01

Встраиваемая ОС жесткого реального времени FX-RTOS

FX-RTOS - быстрая, компактная и масштабируемая ОСРВ для встраиваемых систем с ограниченными ресурсами. ОС предоставляет все необходимые сервисы для реализации многопоточных встраиваемых приложений. Кроме того, поддерживается также безнитевая (управляемая событиями) модель исполнения. Благодаря модульной архитектуре и простым межмодульным интерфейсам, FX-RTOS допускает конфигурирование в очень широких пределах, что позволяет получить оптимальную по функциональности ОС для каждого конкретного применения.
ОСРВ не содержит никаких обязательных компонентов, поэтому накладные расходы минимальны - в состав ОС входит только то, что используется приложением. В конфигурациях, предназначенных для работы в реальном времени, также гарантируется детерминизм и фиксированное время отклика, независимо от количества активных потоков, таймеров и примитивов синхронизации.

Возможности

ОС допускает выполнение из read-only памяти, такой как флеш память, которая используется в большинстве микроконтроллеров.
Предоставляется богатый набор сервисов для реализации многопоточных приложений:

  • Потоки (нити)
  • Барьеры
  • Блоки памяти
  • Семафоры (в том числе бинарные)
  • События
  • Таймеры
  • Мьютексы (с защитой от инверсии приоритета)
  • RW-блокировки
  • Условные переменные
  • Очереди сообщений

В некоторых случаях может быть эффективна безнитевая модель исполнения: в этом случае приложение разделяется на набор обработчиков событий, которые могут обмениваться сигналами между собой. Использование безнитевой модели упрощает программирование и синхронизацию, а также сокращает размер кода до 40%.

Количество объектов ограничивается только размером свободной памяти. Все имеющиеся примитивы синхронизации используют общее API ядра, которое допускает также реализацию пользовательских примитивов. При этом пользователь должен заботиться только о логике примитива, всю заботу о синхронизации (в т.ч. в многопроцессорных системах) ОС берет на себя.

Модульная структура ОС позволяет реализовывать также собственные конфигурации, имеющие пользовательский планировщик и прочие компоненты. Встраивание пользовательских компонентов в ядро не влечет изменение кода ядра, которое может быть легко возвращено к изначальной конфигурации. Это открывает большие возможности для использования FX-RTOS в экспериментальных стендах, а также для академических работ в области операционных систем.

Ядро ОС не содержит никаких глобальных блокировок, поэтому, для хорошо распараллеливаемых задач, достигается линейный рост производительности при увеличении количества процессоров в системе.

Возможны также различные стратегии обработки ошибок: как классическая, предполагающая возврат кода ошибки из функции, так и централизованная, при которой в случае возникновения любой ошибки вызывается специальная пользовательская функция. Это исключает возможность проигнорировать ошибки.

Для приложений, имеющих особые требования к безопасности, предоставляется также защищенная конфигурация ОС.


Легкость использования

Независимо от используемой конфигурации, ОС всегда представляет собой один заголовочный файл и одну библиотеку для компоновки с приложением. Данный подход избавляет от необходимости настройки путей поиска заголовочных файлов и т.д. При необходимости, ОС может быть использована также в виде исходных текстов. Поддерживаются все основные инструменты и средства разработки, как проприетарные, так и свободные.

Исходные тексты

Для удобства отладки исходные тексты FX-RTOS входят в поставку вместе с библиотекой ОС, что также позволяет ее использовать с различными инструментами и компиляторами.

ОСРВ реализована с использованием стандарта С99, цикломатическая сложность функций (в стандартной конфигурации с отключенной проверкой аргументов), входящих в ядро, не превышает 10, что соответствует критериям простого, тестируемого кода.

Механизм конфигурирования

В отличие от "настольных" ОС, в которых операционная система определяет возможности и правила написания приложений, во встраиваемых системах главную роль играет приложение, а от ОС требуется максимальное соответствие требованиям конкретного приложения. В отличие от прочих ОС, FX-RTOS позволяет использование компонентов ОС, оптимизированных для конкретной задачи, что позволяет достичь показателей производительности и эффективности недостижимых при использовании других ОС.

Для конфигурирования ОС используется механизм внедрения зависимости основанный на аннотациях, поэтому несмотря на повторное использование кода в различных конфигурациях, код ОС не содержит директив условной компиляции, что упрощает его понимание и использование.

Поскольку ОС не содержит никаких обязательных компонентов, возможно ее масштабирование вплоть до сотен байт.

Безнитевая модель

Многие встраиваемые системы управляются событиями и могут быть представлены как набор обработчиков. В большинстве случаев, использование нитей для таких задач является слишком тяжеловесным, поэтому FX-RTOS предоставляет специальный профиль, предназначенный для асинхронной обработки событий. Реализация нитей из системы удаляется, вместо них используются обработчики событий, называемые ESR (event service routine), похожие на программные прерывания.

При использовании ESR достигается сокращение размера кода, с одновременным увеличением производительности и сокращением размера занимаемой памяти (т.к. в отличие от нитей, для каждого обработчика не требуется выделять собственный стек), упрощается синхронизация и программирование приложений, что, в конечном итоге, сокращает сроки разработки.

Поддержка многопроцессорных конфигураций

FX-RTOS изначально проектировалась с учетом поддержки симметричных многопроцессорных систем. Ядро не содержит никаких глобальных блокировок, это позволяет максимально эффективно использовать вычислительные ресурсы. Для большего детерминизма ядро не распределяет потоки по процессорам самостоятельно, поэтому исключается фактор влияния миграций потоков на временные характеристики приложения; в то же время доступна миграция потоков по запросу, что позволяет реализовать балансировку нагрузки на стороне приложения.

Также есть поддержка асимметричных многопроцессорных конфигураций, при этом возможно прозрачное использование общих примитивов синхронизации, находящихся в разделяемой памяти. Данный подход позволяет совместить удобство программирования симметричных систем с гибкостью асимметричных.

Защита памяти

Для приложений, которым требуется повышенная безопасность, FX-RTOS предоставляет возможности защиты памяти. При этом приложение разделяется на доверенную и недоверенную части, последняя работает в непривилегированном режиме процессора и не имеет возможности влиять на доверенное приложение, работающее в привилегированном режиме. Для защиты памяти может использоваться либо MPU, либо MMU, в зависимости от используемого процессора, причем недоверенное приложение не имеет доступа к памяти ядра и других приложений даже для чтения. Такой подход повышает устойчивость системы к атакам извне. Непривилегированные приложения также имеют ограничения на создание и использование ресурсов, в том числе квоты на приоритеты потоков, таким образом, даже получив возможность удаленного выполнения произвольного кода на промышленной системе, злоумышленник не сможет ни нарушить работу привилегированных приложений, ни повлиять на их временные характеристики и время реакции, ни даже считать их код для возможного последующего анализа на уязвимости. Кроме того, попытки непривилегированных приложений выполнить недопустимые действия могут быть перехвачены ОС, что не позволяет выполнять такие атаки (даже неудачные) незаметно для администратора системы.

Стек сетевых протоколов FX-Net также поддерживает защищенный профиль и имеет возможность выполнения в непривилегированном режиме, при этом вся сложность его реализации переносится в непривилегированный режим.

Работа в реальном времени и детерминизм
Все примитивы синхронизации поддерживают ожидание с таймаутом, что позволяет предотвращать взаимоблокировки.
Все примитивы синхронизации поддерживают (в дополнение к таймаутам) также специальные отменяющие события, что позволяет легко прерывать ожидание.
Поддерживается механизм потолка приоритета для мьютексов, что позволяет предотвращать инверсии приоритета.

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

Поддерживаются как FIFO-планировщик, так и Round-robin, возможна также реализация пользовательских планировщиков.

Статическое выделение памяти

Все пользовательские объекты, а также внутренние объекты ОС используют статическое выделение памяти во время компиляции. Это исключает влияние алгоритмов выделения памяти на детерминизм ОСРВ.

Гибкость использования памяти

Все пользовательские объекты, а также стеки потоков допускают явное размещение в определенных областях памяти, что позволяет использовать не непрерывные области памяти, а также располагать объекты в наиболее подходящих для этого областях (например, располагать стеки высокоприоритетных потоков в самой быстрой памяти).

Расширяемость пользователем
В случае, если предоставляемые сервисы или планировщик не подходят по каким-либо причинам для конкретного приложения, механизм конфигурирования позволяет заменять компоненты ОС без изменения ее исходных текстов, то есть возможны ориентированные на задачу примитивы синхронизации, планировщики и даже модели исполнения (потоковая с вытеснением, управляемая событиями, кооперативная и тп)
Все объекты ядра поддерживают динамическое создание, при этом их количество ограничено только размером имеющейся памяти, количество объектов не влияет на скорость работы системы

Статистика

С помощью встроенной в ядро поддержки трассировки, возможна визуализация работы ядра и приложений, а также анализ взаимодействий объектов.
ОС поддерживает механизмы сбора статистики во время выполнения приложения, что может использоваться для контроля штатной работы системы

Собирается также информация о:

Максимальном времени блокировки планировщика
Максимальном времени блокировки прерываний
Использовании стека
Переключениях контекста

Поддержка популярных процессоров

FX-RTOS поддерживает все основные типы встраиваемых процессоров, среди которых ARMv6-M (Cortex-M0/M1), ARMv7-M (Cortex-M3), ARMv7-A (включая Cortex A9 MPCore), x86, AVR32, PIC32, MIPS M4K, TI MSP430. ОСРВ не зависит от разрядности слова процессора, а также от порядка байт в слове (endian).

Легкость портирования на новые платформы

Количество ассемблерного кода в FX-RTOS сведено к минимуму, все компоненты, кроме самых низкоуровневых, сделаны универсальными и написаны на С. Благодаря этому, портирование ОС на новую аппаратную платформу осуществляется за несколько недель и возможно ее использование с нестандартными (например, реализованными на FPGA) процессорами.


Поддерживаемые инструменты

FX-RTOS совместима со всеми популярными инструментами для разработки встраиваемых приложений:

IAR Embedded Workbench

Keil uVision IDE

GNU toolchain

Для Win32-портов используется компилятор Microsoft.

Обработка ошибок

Помимо стандартного подхода с возвращением статуса операции из функции, возможен альтернативный вариант с вызовом специальной пользовательской функции в случае возникновения ошибок (т.н. централизованная схема обработки ошибок). Использование такой схемы обработки снижает количество кода, анализирующего статусы, а также исключает возможность проигнорировать ошибку.

Прочее

Выделенный стек прерываний

Очереди сообщений без копирования

Конфигурируемая схема синхронизации ОСРВ

Профили

Несмотря на то, что FX-RTOS предоставляет широкие возможности конфигурирования, предлагается также несколько стандартных, предварительно сконфигурированных и скомпилированных версий, различающихся возможностями и набором доступного API.