RTLinux

Операционная система реального времени
RTLinux
Оригинальный автор(ы)Виктор Йодайкен, Михаил Барабанов
Разработчик(и)FSMLabs, Системы Wind River
Написано вС
Операционная системаЛинукс
Доступно вАнглийский
ТипЯдро
Лицензия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 приняла интерфейс прикладного программирования ( API ) потоков Portable Operating System Interface ( POSIX ), а затем разрешила создание потоков в пользовательском режиме с потоками реального времени, работающими внутри гостевых процессов. В многопроцессорных средах потоки были привязаны к ядрам процессора, и можно было предотвратить запуск гостевого потока на назначенном ядре (фактически резервируя ядра только для обработки в реальном времени).

Выполнение

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 находятся в наборе загружаемых модулей ядра, которые предоставляют дополнительные службы и уровни абстракции. Эти модули включают:

  1. rtl sched — приоритетный планировщик, поддерживающий как «облегченный» интерфейс POSIX, описанный ниже, так и оригинальный API V1 RTLinux.
  2. rtl time — управляет часами процессора и экспортирует абстрактный интерфейс для подключения обработчиков к часам.
  3. rtl posixio - поддерживает интерфейс чтения/записи/открытия в стиле POSIX для драйверов устройств.
  4. rtl fifo — подключает задачи RT и обработчики прерываний к процессам Linux через уровень устройств, чтобы процессы Linux могли читать/писать в компоненты RT.
  5. semaphore — пакет, предоставленный Джерри Эпплином, который предоставляет RT-задачам блокировку семафоров.
  6. Планируется, что поддержка мьютекса POSIX будет доступна в следующем обновлении младшей версии RTLinux.
  7. 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 , & param ); pthread_create ( & t1 , & attr , & thread_code , "это поток 1" ); rtl_printf ( "Поток 1 запущен \n " ); /* ... */ }                  

Вывод программы следующий.

Тема 1 начатаТема 2 начатаТема 3 начатаСообщение: это тема 1Сообщение: это тема 2Сообщение: это тема 2Сообщение: это тема 2Сообщение: это тема 1Сообщение: это тема 1Сообщение: это тема 3Сообщение: это тема 3Сообщение: это тема 3

Поток 2 имеет наивысший приоритет, а поток 3 — самый низкий. Первое сообщение печатается потоком 1 со средним приоритетом, поскольку он запускается незадолго до потока 2.

Смотрите также

Ссылки

  1. ^ yodaiken, victor. «Добавление поддержки реального времени в операционные системы общего назначения». USPTO . USPTO . Получено 19 января 2022 г. .
  2. ^ "realtime:start [Linux Foundation Wiki]". wiki.linuxfoundation.org .
  3. ^ Барабанов, Михаил. Знакомство с RTLinux (отчет). Linux Journal. CiteSeerX 10.1.1.302.3221 . 
  4. ^ Йодайкен, Виктор (1999). Манифест RTLinux (PDF) (Отчет). Труды 5-й конференции Linux.
  5. ^ Yodaiken, Victor (1996). Исследование дешевых операционных систем (отчет). Кембридж, Массачусетс: Труды первой конференции по свободно распространяемым системам. CiteSeerX 10.1.1.39.9505 . 
  6. ^ Барабанов, Михаил (1996). Операционная система реального времени на базе Linux (PDF) (MS).

Источники

  • Дуган, Корт (2004), «Точность и предсказуемость для Linux и RTLinuxPro», журнал доктора Доббса, 1 февраля 2004 г.
  • Йодайкен, Виктор (1997), Патент США 5,995,745
  • Статья о синхронизации RTLinux
  • Linux в реальном времени Архивировано 18.03.2007 на Wayback Machine . Виктор Йодайкен и Майкл Барабанов, Технологический институт Нью-Мексико
  • Статья о концепции RT на archive.today (архив 2013-01-28)
Retrieved from "https://en.wikipedia.org/w/index.php?title=RTLinux&oldid=1234148773"