Real-time Kernel

Real-time Kernel

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

Предоставляется богатый набор сервисов для реализации многопоточных приложений:

  • Потоки (нити)
  • Программные таймеры
  • События
  • Флаги событий
  • Семафоры (бинарные и считающие)
  • Мьютексы (рекурсивные, с защитой от инверсии приоритета)
  • Очереди сообщений
Кроме того, доступны примитивы POSIX:
  • Барьеры
  • RW-блокировки (rwlocks)
  • Условные переменные
Для управления памятью могут использоваться как пулы объектов фиксированного размера, так и произвольного.:

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

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

    Масштабируемость. Архитектура FX-RTOS построена на основе использования независимых компонентов и внедрения зависимостей. Это позволяет получить не просто настраиваемые параметры ядра, как у большинства других ОСРВ, но и реализовать концепцию конфигурируемой архитектуры с целью идеального соответствия требованиям приложения. Например, для некоторых приложений необходимо обеспечить максимальную производительность или минимальный размер занимаемой памяти, для других - латентность и скорость реакции на события. Кроме того, этот подход позволяет объединить в рамках одного API устройства различных классов: FX-RTOS способна работать в системах начиная с 16-битных микроконтроллеров с всего 1Кб оперативной памяти, до многоядерных процессоров с устройством защиты памяти (MMU) и изоляцией процессов.
  • Переносимость. В отличие от многих ОСРВ для микроконтроллеров, архитектура которых предполагает использование определенного типа устройств, FX-RTOS проектировалась как переносимая система, поэтому не только поддерживает все популярные микроконтроллеры, но и может быть легко портирована на любую платформу, в том числе на специфические процессоры, реализованные на базе FPGA.
  • Детерминизм. FX-RTOS изначально проектировалась как система жёсткого реального времени, поэтому время реакции на внешние события является абсолютным приоритетом и не зависит от количества системных объектов или нагрузки.
  • Эффективность. Модульная структура ОСРВ позволяет добиться эффективности использования ресурсов. В минимальных конфигурациях для использования с микроконтроллерами FX-RTOS занимает всего 2-4Кб ROM и менее 1Кб RAM.
  • Поддержка многоядерных процессоров. Ядро не содержит никаких глобальных блокировок, поэтому, для хорошо распределяемых задач, достигается линейный рост производительности при увеличении количества процессоров в системе.
  • Защита памяти. Для приложений, имеющих особые требования к безопасности, предоставляется также защищенная конфигурация ОСРВ. В этом случае приложение лишается возможности повредить ядро ОС или другие приложения.
  • Поддержка всех популярных инструментов разработки. Помимо поддержки всех популярных процессоров и контроллеров, FX-RTOS поддерживает также все основные средства разработки, начиная от свободных, таких как GNU GCC, и заканчивая проприетарными решениями Keil или IAR.
  • Легкость использования. Для использования совместно с микроконтроллерами, независимо от используемой конфигурации, ОС всегда представляет собой один заголовочный файл и одну библиотеку для компоновки с приложением. Данный подход избавляет от необходимости настройки путей поиска заголовочных файлов и т.д. При необходимости, ОС может быть использована также в виде исходных текстов.
  • Надежность. Возможны различные стратегии обработки ошибок: как классическая, предполагающая возврат кода ошибки из функции, так и централизованная, при которой в случае возникновения любой ошибки вызывается специальная пользовательская функция. Это исключает возможность проигнорировать ошибки.
  • Быстрое прототипирование. Все варианты FX-RTOS работают также в программном окружении Windows. Это позволяет начинать разработку встроенного ПО до готовности аппаратного обеспечения и пользоваться удобными инструментами отладки Visual Studio.

В основе концепции FX-RTOS лежит принцип разделения ядра на относительно независимые программные модули или компоненты, которые в дальнейшем статически связываются между собой с помощью механизма внедрения зависимостей, что позволяет подбирать наиболее подходящие для каждого применения компоненты.
Часто оказывается, что универсального алгоритма, который был бы оптимальным в любой возможной ситуации не существует. Например, многие алгоритмы и структуры данных, такие как деревья поиска, достаточно трудоемки в реализции и их применение оправдано только начиная с какого-то уровня, где их лучшие асимптотические характеристики начинают проявляться в достаточной степени. Иными словами нецелесообразно использовать дерево для хранения в нем 10 элементов. Для обеспечения оптимальных параметров при любом объеме входных данных следует заменять сам алгоритм.
Во многих случаях подобные проблемы возникают при разработке ОС: поддержка многопроцессорности усложняет ядро таким образом, что хотя оно и может работать на одном процессоре, оно выполняет много лишней работы, которая снижает производительность; обеспечение максимальной производительности может ухудшать параметры латентности и так далее. Поэтому при разработке ядра приходится идти на ряд компромиссов.
Внедрение зависимостей и замена компонентов, способ, с помощью которого в FX-RTOS решаются эти проблемы не нов. Он давно применяется в мире прикладного ПО и даже является одной из составляющих широко известного принципа разработки объекто-ориентированного ПО SOLID. Проблема заключается в том, что применение внедрения зависимостей часто сопряжено с накладными расходами времени выполнения, таких как вызовы виртуальных функций и поэтому не завоевало широкого применения во встроенном ПО, которое критично к ресурсам и производительности. В FX-RTOS применен фреймворк внедрения зависимостей для С собственной разработки, который работает во время сборки и, таким образом, исключает накладные расходы.

Для знакомства с FX-RTOS доступны демо-версии, которые включают скомпилированную библиотеку и заголовочный файл ОС, демо-приложение (которое зависит от возможностей аппаратного обеспечения), а также сконфигурированный проект для использования с определенным инструментарием и оборудованием (например, тестовый проект для IAR embedded workbench и тестовой платы Keil MCB1700).

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

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

После загрузки демо-проекта, следует открыть его в используемой IDE и собрать, после этого полученные бинарные файлы могут быть загружены в используемое устройство.

FX-RTOS - ядро реального времени для широкого спектра устройств, реализующее приоритетное вытесняющее планирование (preemptive multitasking). Опционально может использоваться также карусельное планирование (round-robin). Количество приоритетов конфигурируется, и, как правило, лежит в диапазоне от 32 до 1024. ОСРВ реализована с использованием стандарта С99, цикломатическая сложность функций (в стандартной конфигурации с отключенной проверкой аргументов), входящих в ядро, не превышает 10, что соответствует критериям простого, тестируемого кода. Для удобства отладки исходные тексты FX-RTOS входят в поставку вместе с бинарными файлами, что также позволяет ее использовать с различными инструментами и компиляторами, а также вносить изменения, если таковые потребуются.

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


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

Защита памяти
Для приложений, которым требуется повышенная безопасность, FX-RTOS предоставляет возможности защиты памяти. При этом приложение разделяется на доверенную и недоверенную части, последняя работает в непривилегированном режиме процессора и не имеет возможности влиять на доверенное приложение, работающее в привилегированном режиме. Для защиты памяти может использоваться либо MPU, либо MMU, в зависимости от используемого процессора, причем недоверенное приложение не имеет доступа к памяти ядра и других приложений даже для чтения. Такой подход повышает устойчивость системы к атакам извне. Непривилегированные приложения также имеют ограничения на создание и использование ресурсов, в том числе квоты на приоритеты потоков, таким образом, даже получив возможность удаленного выполнения произвольного кода на промышленной системе, злоумышленник не сможет ни нарушить работу привилегированных приложений, ни повлиять на их временные характеристики и время реакции, ни даже считать их код для возможного последующего анализа на уязвимости. Кроме того, попытки непривилегированных приложений выполнить недопустимые действия могут быть перехвачены ОС, что не позволяет выполнять такие атаки (даже неудачные) незаметно для администратора системы.
Несмотря на то, что FX-RTOS предоставляет широкие возможности конфигурирования, предлагается также несколько стандартных, предварительно сконфигурированных и скомпилированных версий, различающихся возможностями, набором доступного API и сферой применения. Стандартные профили включают следующие варианты:
  • FX-RTOS Nanokernel
    Представляет собой статическую библиотеку для использования совместно с микроконтроллерами. Использует одно адресное пространство, не используется разделение режимов процессора (ядро и приложение выполняются в одном режиме. Максимальная компактность и скорость работы.
  • FX-RTOS Secure Nanokernel
    Многие микроконтроллеры, несмотря на ограниченные ресурсы, тем не менее нуждаются в повышенном уровне безопасности. Например, если контроллер управляет некоторым устройством и получает команды по сети, целесообразно отделить реализацию сетевого стека от приложения, чтобы исключить компрометацию последнего, поскольку реализация сетевого стека довольно тяжеловесна и полная верификация может потребовать много времени. Реализация полноценных изолированных процессов для таких систем избыточна, поскольку приложение всего одно, но разделенное на доверенную и недоверенную части. Данный вариант FX-RTOS использует подход с монолитным ядром: одно адресное пространство, но выполнение ядра и приложения происходит в kernel mode и user mode соответственно. Привилегированная часть приложения работает в режиме ядра и его скорость реакции близка к скорости работы системы без разделения режимов. Непривилегированное приложение использует механизм системных вызовов для обращения к функциям ОСРВ.

Работа в реальном времени и детерминизм
Ядро во всех вариантах конфигурации является полностью вытесняемым, поэтому реакция на внешнее событие произойдет в заданный интервал времени, причем это время можно выяснить заранее с помощью встроенных средств профилирования и трассировки. Все примитивы синхронизации поддерживают ожидание с таймаутом, что позволяет предотвращать взаимоблокировки. Поддерживается механизм потолка приоритета для мьютексов, что позволяет предотвращать инверсии приоритета. Все пользовательские объекты, а также внутренние объекты ОС используют статическое выделение памяти во время компиляции. Это исключает влияние алгоритмов выделения памяти на детерминизм ОСРВ и позволяет использовать не непрерывные области памяти, а также располагать объекты в наиболее подходящих для этого областях (например, располагать стеки высокоприоритетных потоков в самой быстрой памяти).
Для снижения требований к объему памяти, используется также выделенный стек прерываний. С помощью встроенной в ядро поддержки трассировки, возможна визуализация работы ядра и приложений, а также анализ взаимодействий объектов.
ОС поддерживает механизмы сбора статистики во время выполнения приложения, что может использоваться для контроля штатной работы системы Собирается также информация о:
  • Максимальном времени блокировки планировщика
  • Максимальном времени блокировки прерываний
  • Использовании стека
  • Переключениях контекста
Централизованная обработка ошибок
Помимо стандартного подхода с возвращением статуса операции из функции, возможен альтернативный вариант с вызовом специальной пользовательской функции в случае возникновения ошибок (т.н. централизованная схема обработки ошибок). Использование такой схемы обработки снижает количество кода, анализирующего статусы, а также исключает возможность проигнорировать ошибку.

Будьте в курсе новостей и спецпредложений

Авторизация
Чтобы продолжить покупку, пожалуйста, авторизируйтесь на сайте.
Забыли пароль?