Ключевым отличием FX-RTOS от конкурирующих продуктов является применение механизма внедрения зависимостей для конфигурирования ядра ОС. При этом подходе ядро перестает быть единым неделимым компонентом, а составляется из более мелких частей, поэтому состав и возможности ОС могут изменяться в широких пределах. Ниже представлены предопределенные конфигурации для типичных сценариев применения.
FX-RTOS Nanokernel
Представляет собой статическую библиотеку для использования совместно с микроконтроллерами. Использует одно адресное пространство, не используется разделение режимов процессора (ядро и приложение выполняются в одном режиме). Максимальная компактность и скорость работы.
FX-RTOS Secure Nanokernel
Многие микроконтроллеры, несмотря на ограниченные ресурсы, нуждаются в повышенном уровне безопасности. Поскольку реализация полноценных изолированных процессов для таких систем избыточна, FX-RTOS использует подход с одним процессом: одно адресное пространство, но выполнение ядра и приложения происходит в kernel mode и user mode соответственно. Привилегированная часть приложения работает в режиме ядра и его скорость реакции близка к скорости работы системы без разделения режимов. Непривилегированное приложение использует механизм системных вызовов для обращения к функциям ОС.
FX-RTOS Microkernel
Флагман семейства операционных систем Eremex. Предназначена для использования совместно с процессорами имеющими механизмы защиты памяти MPU/MMU. ОС построена с использованием классической микроядерной архитектуры. Поддерживаются изолированные процессы и межпроцессное взаимодействие на основе синхронного обмена сообщениями.
- FX-RTOS Nanokernel
Представляет собой статическую библиотеку для использования совместно с микроконтроллерами. Использует одно адресное пространство, не используется разделение режимов процессора (ядро и приложение выполняются в одном режиме). Максимальная компактность и скорость работы. - FX-RTOS Secure Nanokernel
Многие микроконтроллеры, несмотря на ограниченные ресурсы, нуждаются в повышенном уровне безопасности. Поскольку реализация полноценных изолированных процессов для таких систем избыточна, FX-RTOS использует подход с одним процессом: одно адресное пространство, но выполнение ядра и приложения происходит в kernel mode и user mode соответственно. Привилегированная часть приложения работает в режиме ядра и его скорость реакции близка к скорости работы системы без разделения режимов. Непривилегированное приложение использует механизм системных вызовов для обращения к функциям ОС. - FX-RTOS Microkernel
Флагман семейства операционных систем Eremex. Предназначена для использования совместно с процессорами имеющими механизмы защиты памяти MPU/MMU. ОС построена с использованием классической микроядерной архитектуры. Поддерживаются изолированные процессы и межпроцессное взаимодействие на основе синхронного обмена сообщениями.
Краткое описание особенностей и возможностей каждой из конфигураций FX-RTOS.
- Nanokernel
В большинстве устройств на основе микроконтроллеров ОС используется в виде статической библиотеки. Ядро компонуется с приложением в единый исполняемый образ, а затем загружается в энергонезависимую память устройства. Далее создаются пользовательские потоки, которые выполняются независимо друг от друга. В такой архитектуре граница между ОС и приложением размыта: вызовы сервисов ОС являются обычными вызовами функций.
FX-RTOS предоставляет следующие сервисы для приложений: потоки, объекты синхронизации (семафоры, мьютексы, очереди, события, барьеры, RW-блокировки), программные таймеры (однократные и периодические), а также механизмы управления памятью (блоки произвольного или фиксированного размера). Количество любых объектов ограничено только объемом имеющейся памяти и не влияет на производительность ОС. Планировщик поддерживает кооперативные и вытесняющие алгоритмы планирования потоков (Priority, Round-robin, Timeslicing).
ОСРВ реализована с использованием языка С99. Возможно использование непосредственно в виде исходных текстов в любой поддерживаемой IDE, а также использование в виде библиотеки. В последнем случае ОС представляет собой только два файла: библиотеку и заголовочный файл.
Минимальный размер ядра около 2Кб ROM и 1Кб RAM. Функции включаются в результирующий образ, только если они используются.
Secure Nanokernel
Главным минусом использования ОС в виде библиотеки является то, что ядро, драйверы, промежуточное ПО, а также, собственно, пользовательское приложение выполняются в одном режиме процессора без какой-либо защиты. В целях повышения надежности и упрощения отладки можно использовать подход, в котором ядро ОСРВ выполняется в защищенном контексте и не может быть повреждено в результате действий приложений.
Использование Secure Nanokernel предполагает разделение приложения на доверенную и недоверенную части, которые компилируются в два независимых бинарных файла. Доверенная часть компонуется в один образ с ядром и используется точно так же, как и с библиотекой. Это приложение работает в привилегированном режиме работы процессора и имеет полный доступ к периферии. Недоверенная часть загружается в устройство отдельно и работает в непривилегированном режиме процессора.При попытке доступа к системным участкам памяти, использовании привилегированных инструкций и т. д., управление перехватывается и приложение аварийно завершается. Привилегированный модуль при этом продолжает работать. В отличие от настольных систем, используется только разделение режимов, для процесса не создается отдельного виртуального адресного пространства, поэтому затрачиваемые ресурсы приемлемы для этого класса устройств — требуется около 15Кб памяти.
Приложению предоставляется подмножество основного API в виде потоков и наиболее часто используемых примитивов синхронизации (семафоры, мьютексы, очереди).
Синтаксически это подмножество полностью совместимо с Nanokernel, поэтому программы можно переносить между этими профилями без изменений.
Microkernel
FX-RTOS Microkernel — микроядро реального времени с полной поддержкой процессов, которые могут создаваться и завершаться во время работы. Каждый процесс имеет собственное виртуальное адресное пространство и взаимодействует с другими процессами с помощью передачи сообщений.Ядро ОС и приложения компилируются и загружаются в устройство отдельно. В отличие от предыдущих вариантов, ОС используется в виде бинарного образа и выполнение прикладного кода в привилегированном режиме процессора не предполагается. Тем не менее, при необходимости, возможно использование так называемых «приложений ядра» (kernel-based applications), которые статически компонуются с ядром.
Этот вариант ОСРВ поддерживает многоядерные процессоры (до 64 ядер) и предназначен для использования в системах имеющих от 512Кб оперативной памяти. Несмотря на ряд дополнительных сервисов, таких как передача сообщений и управление процессами, интерфейс потоков и объектов синхронизации является общим для всех вариантов ОС, поэтому многие приложения могут быть легко перенесены с одного профиля ОС в другой.
Опционально возможно построение специализированных ОС, с переносом функциональности одного профиля в другие. Например поддержка многоядерных процессоров в Nanokernel или использование отложенных прерываний для снижения времени отклика. Также возможно применение специальных вариантов Microkernel в системах без MMU, например на основе процессоров семейства Cortex-R.
В основе концепции FX-RTOS лежит принцип разделения ядра на независимые программные модули или компоненты, которые в дальнейшем статически связываются между собой с помощью механизма внедрения зависимостей, что позволяет подбирать наиболее подходящие для каждого применения компоненты.
Для реализации этого механизма применен FX-Manager — фреймворк внедрения зависимостей для С собственной разработки, который работает во время сборки и, таким образом, исключает накладные расходы. FX-Manager реализован в виде приложения .NET, которое принимает список папок, содержащих исходные тексты, а в качестве вывода отдает список путей к файлам исходных текстов, которые нужно скомпилировать для сборки заданной конфигурации. Для сборки файлов может использоваться любая система сборки.
Внедрение зависимостей позволяет добиться:
- Слабой связности
Возможна разработка модульных приложений, в которых компоненты являются слабо связанными между собой, что позволяет заменять компоненты, комбинировать их в различных конфигурациях, а также упрощает разработку и поддержку. - Повторного использования кода
Поскольку компоненты слабо связаны, это позволяет использовать многие из них повторно в различных приложениях и продуктах, что особенно важно при разработке линейки продуктов. Все варианты FX-RTOS собираются из единой кодовой базы, для конфигурирования не используется условная компиляция, а функционал можно переносить между конфигурациями без изменения исходных текстов. Например, при необходимости, поддержка многоядерных процессоров может быть добавлена в варианты FX-RTOS для микроконтроллеров. - Универсальной платформы
Код компонентов и код систем, который из этих компонентов собирается, хранится отдельно друг от друга, что упрощает использование репозитория и не требует создания дополнительных ветвей для разработки нового функционала.
Подробнее о механизме внедрения зависимостей в С можно прочитать в нашем блоге.
Для знакомства с FX-RTOS доступны демо-версии, которые включают скомпилированную библиотеку и заголовочный файл ОС, демо-приложение (которое зависит от возможностей аппаратного обеспечения), а также сконфигурированный проект для использования с определенным инструментарием и оборудованием. Описание функций API и руководство пользователя представлены в разделе документации.
В целях развития платформы компания Eremex выпустила версию FX-RTOS Nanokernel под свободной лицензией, допускающей, в том числе, бесплатное коммерческое использование ОСРВ. Исходные тексты, релизные сборки и демо доступны на нашем аккаунте на github:
https://github.com/eremex
Последнюю версию инструментария GNU для платформы ARM можно скачать на сайте ARM.
Для получения консультации вы можете:
- Задать вопрос на форуме сообщества FX-RTOS
- Задать вопрос в группе FX-RTOS t.me/fxrtos
- Отправить запрос с помощью электронной формы
- Связаться с нами по телефону +7 (495) 232-18-64
- Написать на e-mail: info@eremex.ru
Документы