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

Для удобства отладки исходные тексты 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.