РТЛинукс
![]() | Эта статья включает список общих ссылок , но в ней отсутствуют достаточные соответствующие встроенные цитаты . ( июнь 2009 г. ) |
Оригинальный автор(ы) | Victor Yodaiken, Michael Barabanov |
---|---|
Разработчик(и) | ФСМЛабс, Wind River Systems |
Написано в | С |
Операционная система | Линукс |
Доступно в | Английский |
Тип | Ядро |
Лицензия | GPL2 |
RTLinux — это операционной системы реального времени (RTOS) микроядро , которое запускает всю Linux операционную систему как полностью вытесняющий процесс. Свойство жесткого реального времени позволяет управлять роботами, системами сбора данных, производственными предприятиями и другими чувствительными ко времени инструментами и машинами из приложений RTLinux. Конструкция была запатентована. [1] Несмотря на похожее название, оно не имеет отношения к Real-Time Linux проекту Linux Foundation . [2]
RTLinux был разработан Виктором Йодайкеном, Майклом Барабановым, Кортом Дуганом и другими в Институте горного дела и технологий Нью-Мексико , а затем как коммерческий продукт в FSMLabs. Wind River Systems приобрела встроенную технологию FSMLabs в феврале 2007 года и выпустила версию Wind River Real-Time Core для Wind River Linux . По состоянию на август 2011 года Wind River прекратила выпуск линейки продуктов Wind River Real-Time Core, фактически прекратив коммерческую поддержку продукта RTLinux.
Предыстория [ править ]
Ключевая цель разработки RTLinux [3] Целью было добавить возможности жесткого реального времени к стандартной операционной системе, чтобы облегчить разработку сложных программ управления с обеими возможностями. [4] [5] Например, можно разработать контроллер двигателя реального времени, который использовал бы базу данных товаров и экспортировал интерфейс веб-оператора. Вместо того, чтобы пытаться создать единую операционную систему, которая могла бы поддерживать возможности реального и нереального времени, RTLinux был разработан для совместного использования вычислительного устройства между операционной системой реального и нереального времени, чтобы (1) Операционная система реального времени никогда не может быть заблокирована от выполнения операционной системой, не работающей в режиме реального времени, и (2) компоненты, работающие в двух разных средах, могут легко обмениваться данными. Как следует из названия, RTLinux изначально был разработан для использования Linux в качестве системы, не работающей в режиме реального времени. [6] но со временем оно развилось так, что ядро реального времени RTCore могло работать как с Linux, так и с Berkeley Software Distribution (BSD) Unix .
Multi-Environment Real-Time (MERT) был первым примером операционной системы реального времени, сосуществующей с системой Unix. MERT полагался на традиционные методы виртуализации: ядром реального времени была хостовая операционная система (или гипервизор ), а Bell Systems Unix — гостевая система . RTLinux был попыткой обновить концепцию MERT с учетом эпохи ПК и массового оборудования. Это также была попытка преодолеть ограничения производительности MERT, особенно накладные расходы, вызванные виртуализацией.
Вместо инкапсуляции гостевой ОС в виртуальную машину RTLinux виртуализировал только управление гостевыми прерываниями. Этот метод позволил ядру реального времени преобразовать гостевую операционную систему в систему, которая была полностью вытесняемой, но при этом могла напрямую управлять, например, устройствами хранения данных. В частности, стандартные драйверы для гостя работали без изменения исходного кода, хотя их нужно было перекомпилировать для использования «хуков» виртуализации. См. также паравиртуализация . Unix Канал был адаптирован для обеспечения взаимодействия программ как в реальном времени, так и не в реальном времени, хотя были также добавлены и другие методы, такие как общая память.
С точки зрения программиста, RTLinux изначально выглядел как небольшая многопоточная среда для задач реального времени плюс стандартная среда Linux для всего остального. Операционная система реального времени была реализована в виде загружаемого модуля ядра , который начинался с виртуализации управления гостевыми прерываниями, а затем запускал планировщик реального времени. Задачам были назначены статические приоритеты, и планирование изначально основывалось исключительно на приоритетах. Гостевая операционная система была включена в качестве задачи с самым низким приоритетом и, по сути, выполняла роль простаивающей задачи для системы реального времени. Задачи реального времени выполнялись в режиме ядра. Более поздняя разработка RTLinux приняла интерфейс переносимой операционной системы ( POSIX ) и потоков POSIX интерфейс прикладного программирования ( API ), а затем разрешила создание потоков в пользовательском режиме с потоками, работающими в реальном времени внутри гостевых процессов. В многопроцессорных средах потоки были привязаны к ядрам процессора, и можно было предотвратить запуск гостевого потока на назначенном ядре (фактически резервируя ядра только для обработки в реальном времени).
Реализация [ править ]
RTLinux предоставляет возможность запускать специальные задачи реального времени и обработчики прерываний на той же машине, что и стандартный Linux. Эти задачи и обработчики выполняются тогда, когда им необходимо выполнить, независимо от того, что делает Linux. Наихудшее время между моментом обнаружения процессором аппаратного прерывания и моментом начала выполнения обработчика прерывания составляет менее 15 микросекунд в RTLinux, работающем на универсальной платформе x86 (около 2000 г.). Периодическая задача RTLinux выполняется в пределах 35 микросекунд от запланированного времени на том же оборудовании. Это время ограничено аппаратным обеспечением, и по мере совершенствования оборудования RTLinux также будет улучшаться. Стандартный Linux имеет отличную среднюю производительность и может даже обеспечить точность планирования на уровне миллисекунд для задач, использующих возможности POSIX мягкого реального времени. Однако стандартный Linux не предназначен для обеспечения точности до миллисекунды и надежных гарантий синхронизации. RTLinux был основан на облегченной виртуальной машине, где «гостю» Linux предоставлялся виртуальный контроллер прерываний и таймер, а доступ ко всему остальному оборудованию был прямым. С точки зрения «хоста» реального времени ядро Linux представляет собой поток. Прерывания, необходимые для детерминированной обработки, обрабатываются ядром реального времени, в то время как другие прерывания перенаправляются в Linux, который работает с более низким приоритетом, чем потоки реального времени. Драйверы Linux обрабатывают почти все ввод/вывод . Каналы «первым пришел — первым обслужен» ( FIFO ) или общая память могут использоваться для обмена данными между операционной системой и RTLinux.
Цель [ править ]
Ключевая цель разработки RTLinux заключается в том, что система должна быть прозрачной, модульной и расширяемой. [ нужна ссылка ] . Прозрачность означает, что не существует неоткрываемых черных ящиков и стоимость любой операции должна быть определена. Модульность означает, что можно отказаться от функциональности и затрат на эту функциональность, если она не нужна. А расширяемость означает, что программисты должны иметь возможность добавлять модули и адаптировать систему к своим требованиям. Базовая система RTLinux поддерживает высокоскоростную обработку прерываний и не более того. Он имеет простой планировщик приоритетов, который можно легко заменить планировщиками, более подходящими для нужд какого-либо конкретного приложения. При разработке RTLinux он был разработан для максимизации преимуществ, которые мы получаем от наличия Linux и его мощных возможностей.
Основные компоненты [ править ]
RTLinux структурирован как небольшой основной компонент и набор дополнительных компонентов. Базовый компонент позволяет устанавливать обработчики прерываний с очень низкой задержкой, которые не могут быть задержаны или вытеснены самим Linux, а также некоторые низкоуровневые процедуры синхронизации и управления прерываниями. Этот основной компонент был расширен для поддержки SMP и в то же время упрощен за счет удаления некоторых функций, которые могут предоставляться вне ядра.
Функции [ править ]
Большинство функций RTLinux находятся в наборе загружаемых модулей ядра, которые предоставляют дополнительные сервисы и уровни абстракции. Эти модули включают в себя:
- rtl sched — планировщик приоритетов, который поддерживает как интерфейс «lite POSIX», описанный ниже, так и исходный API RTLinux V1.
- rtl time — который управляет часами процессора и экспортирует абстрактный интерфейс для подключения обработчиков к часам.
- rtl posixio — поддерживает интерфейс чтения/записи/открытия в стиле POSIX для драйверов устройств.
- rtl fifo — соединяет задачи RT и обработчики прерываний с процессами Linux через уровень устройства, чтобы процессы Linux могли читать/записывать в компоненты RT.
- семафор — пакет, предоставленный Джерри Эпплином, который дает задачи RT, блокирующие семафоры.
- Планируется, что поддержка мьютексов POSIX будет доступна в следующем незначительном обновлении версии RTLinux.
- mbuff — это пакет, написанный Томашем Мотылевским для обеспечения общей памяти между компонентами RT и процессами Linux.
Задачи в реальном времени [ править ]
Задачи реального времени RTLinux реализуются в виде модулей ядра, аналогичных модулям, которые Linux использует для драйверов, файловых систем и т. д. Задачи реального времени имеют прямой доступ к оборудованию и не используют виртуальную память. При инициализации задача (модуль) реального времени сообщает ядру RTLinux об ограничениях крайнего срока, периода и времени выпуска.
Темы [ править ]
RT-Linux реализует POSIX API для манипулирования потоками. Поток создается путем вызова pthread_create
функция. Третий параметр pthread_create
— это функция, содержащая код, выполняемый потоком.
Необходимо установить приоритеты потоков в RTLinux. Потоки с более высоким приоритетом могут вытеснять потоки с более низким приоритетом. Например, у нас может быть поток, управляющий шаговым двигателем. Чтобы мотор двигался плавно, необходимо запускать эту нить строго через равные промежутки времени. Это можно гарантировать, назначив этому потоку высокий приоритет. В примере threads2.c устанавливаются разные приоритеты потоков. Установка приоритета потока выполняется с помощью кода, показанного ниже:
int init_module(void)
{
pthread_attr_t attr;
struct sched_param param;
pthread_attr_init(&attr);
param.sched_priority = 1;
pthread_attr_setschedparam(&attr, ¶m);
pthread_create(&t1, &attr, &thread_code, "this is thread 1");
rtl_printf("Thread 1 started\n");
...
}
Вывод программы следующий.
Thread 1 started Thread 2 started Thread 3 started Message: this is thread 1 Message: this is thread 2 Message: this is thread 2 Message: this is thread 2 Message: this is thread 1 Message: this is thread 1 Message: this is thread 3 Message: this is thread 3 Message: this is thread 3
Поток 2 имеет наивысший приоритет, а поток 3 — наименьший. Первое сообщение печатается потоком 1 со средним приоритетом, поскольку оно запускается незадолго до потока 2.
См. также [ править ]
- РТАИ . RTAI начинался как вариант RTLinux под названием «MyRTlinux», а в более поздних выпусках был заявлен [ сомнительно – обсудить ] его авторам не использовать запатентованную технику виртуализации RTLinux.
- RMX (операционная система)
- SCHED_DEADLINE
- Ксеномай
- Упреждение (вычисления)
- Linux во встроенных системах
- Тестирование в реальном времени
Ссылки [ править ]
- ^ йодайкен, победитель. «Добавление поддержки реального времени в операционные системы общего назначения» . ВПТЗ США . ВПТЗ США . Проверено 19 января 2022 г.
- ^ «realtime:start [Linux Foundation Wiki]» . wiki.linuxfoundation.org .
- ^ Барабанов Михаил. Представляем RTLinux (отчет). Linux-журнал. CiteSeerX 10.1.1.302.3221 .
- ^ Йодайкен, Виктор (1999). Манифест RTLinux (PDF) (отчет). Материалы 5-й конференции по Linux.
- ^ Йодайкен, Виктор (1996). Исследование дешевых операционных систем (Отчет). Кембридж, Массачусетс: Материалы первой конференции по свободно распространяемым системам. CiteSeerX 10.1.1.39.9505 .
- ^ Barabanov, Michael (1996). A Linux Based Real-Time Operating System (PDF) (M.S.).
Источники [ править ]
Внешние ссылки [ править ]
- Статья о синхронизации RTLinux
- Linux реального времени, заархивировано 18 марта 2007 г. на Wayback Machine . Виктор Йодайкен и Майкл Барабанов, Технологический институт Нью-Мексико
- Статья о концепции RT на archive.today (архивировано 28 января 2013 г.)