Родос (операционная система)
![]() Логотип Родоса | |
Разработчик | Вюрцбургский университет – информатика 8 |
---|---|
Написано в | C , C++ и язык ассемблера |
Исходная модель | Открытый исходный код |
Репозиторий | Родос на GitLab |
Платформы | См. #Поддерживаемые архитектуры. |
Лицензия | Лицензия Apache версии 2.0 |
Официальный сайт | Информация и загрузка |
Rodos ( времени ) операционная система реального встроенная надежная надежности . для — это операционная система реального времени , встраиваемых систем разработанная для областей приложений, требующих высокой
История
[ редактировать ]Rodos был разработан в Немецком аэрокосмическом центре и основан на операционной системе BOSS . Он используется для текущей микроспутниковой программы Немецкого аэрокосмического центра . Система работает на действующем спутнике ТЕТ-1 и будет использоваться для разрабатываемого в настоящее время спутника BiROS .
В дальнейшем Rodos совершенствуется и расширяется в Немецком аэрокосмическом центре , а также на факультете аэрокосмических информационных технологий Вюрцбургского университета .
Функции
[ редактировать ]Важным аспектом Rodos является интегрированное промежуточное программное обеспечение реального времени. Разработка программного обеспечения управления и полезной нагрузки на основе промежуточного программного обеспечения обеспечивает сегодня максимальную модульность. Приложения/модули можно разрабатывать независимо, и впоследствии очень просто обмениваться модулями, не беспокоясь о побочных эффектах, поскольку все модули инкапсулированы как строительные блоки (BB), и к ним можно получить доступ, а к другим ресурсам они могут получить доступ только через четко определенные интерфейсы.
Rodos был реализован как программная платформа на C++ с объектно-ориентированным интерфейсом приложений (API). он организован по уровням: самый нижний уровень (1) отвечает за управление аппаратным обеспечением встроенной системы (HAL: уровень абстракции оборудования). Ядро следующего уровня (2): управляет локальными ресурсами, потоками и временем. Поверх ядра у нас есть промежуточное программное обеспечение (уровень 3), которое обеспечивает связь между BB с использованием протокола многоадресной рассылки издатель-подписчик. А поверх промежуточного программного обеспечения пользователь может реализовать свои приложения (уровень 4) в виде распределенной программной сети простых ББ. API Building Blocks в верхней части промежуточного программного обеспечения представляет собой сервис-ориентированный интерфейс. BB взаимодействуют, предоставляя услуги другим BB и используя услуги других BB.
Как упоминалось ранее, первоначальной целью Родоса было управление спутниками. Он был разработан как мозг системы Avionic и впервые (2001 г.) представляет концепцию NetworkCentric. Базовая машина авионики networkCentric состоит из нескольких согласованных компонентов, которые работают вместе, чтобы простым способом реализовать надежные вычисления. В системе NetworkCentric у нас есть программная сеть, состоящая из BB, и аппаратная сеть, соединяющая транспортные средства (радиосвязь), компьютеры внутри транспортных средств (автобусы и каналы связи «точка-точка»), интеллектуальные устройства (подключенные к автобусам) и простые устройства, подключенные к внешним компьютерам. . Для связи с внешними блоками (узлами), включая устройства и другие вычислительные блоки, каждый узел обеспечивает шлюз в сеть, и к системе могут быть подключены несколько сетевых устройств (устройства ввода-вывода и вычислительные узлы). Обмен сообщениями, обеспечиваемый промежуточным программным обеспечением и шлюзами, является асинхронным с использованием протокола издатель-подписчик. Никакие фиксированные пути связи не устанавливаются, и систему можно легко переконфигурировать во время работы. Например, несколько копий одного и того же программного обеспечения могут работать на разных узлах и публиковать результаты в одной и той же теме, не зная друг друга. Избиратель может подписаться на эту тему и проголосовать за правильный результат. Приложение может мигрировать с узла на узел или даже на другие транспортные средства без необходимости перенастройки системы связи. Ядро промежуточного программного обеспечения распределяет сообщения только локально, но с помощью интегрированных шлюзов в сеть NetworkCentric сообщения могут достигать любого узла и приложения в сети. Связь во всей системе включает в себя программные приложения, вычислительные узлы и даже устройства ввода-вывода. Издатели публикуют сообщения по определенной теме. Подписчики (ноль, один или несколько) на данную тему получают все сообщения, опубликованные в этой теме. Как упоминалось ранее, для этой связи нет разницы, на каком узле (вычислительном блоке или устройстве) работают издатель и подписчики, и, кроме того, это может быть любая комбинация программных задач и аппаратных устройств! Чтобы установить путь передачи, издатель и подписчик должны использовать одну и ту же тему. Тема — это пара, состоящая из типа данных и целого числа, представляющего идентификатор темы. И программное обеспечение промежуточного уровня, и аппаратный сетевой коммутатор (называемый коммутатором промежуточного программного обеспечения) интерпретируют один и тот же протокол издателя/подписчика. [ 1 ]
писать приложения реального времени для различных архитектур Rodos позволяет пользователю легко и эффективно . При разработке особое внимание было уделено простой, но надежной реализации различных функций Rodos. Избегали ненужной сложности, чтобы предоставить пользователю простую и четко организованную систему. Rodos поддерживает типичные функции операционных систем реального времени, такие как потоки и семафоры .
Среди других возможностей Rodos предлагает: [ 2 ]
- объектно-ориентированные C++ , интерфейсы
- сверхбыстрая загрузка
- в режиме реального времени вытесняющая многопоточность ,
- тайм-менеджмент (как центральный пункт),
- потокобезопасная связь и синхронизация,
- распространение событий
Примеры
[ редактировать ]Привет, мир
[ редактировать ]Типичный пример программы Hello world в Rodos выглядит следующим образом.
#include "rodos.h"
class HelloWorld : public StaticThread<> {
void run(){
PRINTF("Hello World!\n");
}
} helloworld;
Класс Thread расширяется специальной процедурой run(), которая записывает Hello World в стандартный вывод с помощью PRINTF. Все компоненты Rodos, необходимые для разработки приложений, доступны через заголовочный файл Rodos.h.
Темы
[ редактировать ]Rodos использует упреждающее планирование со справедливым приоритетом . Поток вытесняющая с наивысшим приоритетом выполняется, в то время как работающие потоки с более низким приоритетом приостанавливаются ( многозадачность ). Если существует более одного потока с одинаковым приоритетом, каждому из них выделяется фиксированная доля вычислительного времени, и они выполняются по очереди.
Пример:
#include <rodos.h>
class HighPriorityThread: public StaticThread<> {
public:
HighPriorityThread() : StaticThread("HiPriority", 25) {
}
void run() {
while (1) {
PRINTF("*");
suspendCallerUntil(NOW() + 1*SECONDS);
}
}
} highprio;
class LowPriorityThread: public StaticThread<> {
public:
LowPriorityThread() : StaticThread("LowPriority", 10) {
}
void run() {
while (1) {
PRINTF(".");
}
}
} lowprio;
Поток LowPriorityThread постоянно записывает символ "." и каждую секунду прерывается потоком HighPriorityThread , который записывает символ «*».
Темы
[ редактировать ]Rodos использует так называемые темы для обеспечения связи между потоками и шлюзами между различными системами. Тема представляет собой сообщение определенного типа. Поток может публиковать темы , а также подписываться на тему , чтобы получать все сообщения, относящиеся к определенному типу сообщений. Система сообщений соответствует шаблону публикации-подписки .
Вот простой пример с одним издателем и одним подписчиком, которые используют тем1 счетчик , содержащий только одно целочисленное значение.
Пример:
#include <rodos.h>
Topic<long> counter1(-1, "counter1");
class MyPublisher : public StaticThread<> {
public:
MyPublisher() : StaticThread("SenderSimple") { }
void run() {
long cnt = 0;
TIME_LOOP(3*SECONDS, 3*SECONDS) {
PRINTF("Publish: %ld\n", ++cnt);
counter1.publish(cnt);
}
}
} publisher;
class MySubscriber : public SubscriberReceiver<long> {
public:
MySubscriber() : SubscriberReceiver<long>(counter1) { }
void put(long &data) {
PRINTF("Received: %ld\n", data);
}
}subscriber;
каждые Поток издателя три секунды публикует возрастающее значение счетчика, а поток подписчика просто отображает полученное целочисленное значение.
Поддерживаемые архитектуры
[ редактировать ]Поддерживаемые архитектуры набора команд :
- ARM7 (например, ARM Cortex-M3 , Raspberry Pi ) SoC
- Атмел АВР32
- STM32 32-битный
- PowerPC (ПауэрПК 405)
Кроме того, Rodos может работать в качестве гостя в операционной системе другого хоста.