<
  • Главная
Статьи

Системи реального часу: від Linux до Java

  1. Відкритий код для реального часу
  2. Системи реального часу на Java

Системи реального часу відрізняє те, що вони покликані працювати в умовах жорстких часових обмежень. Програмно-апаратний комплекс повинен гарантовано реагувати на зовнішні події з заданим інтервалом часу. Основну роль в реалізації таких комплексів грає операційна система, до її дизайну і реалізації висуваються дуже серйозні вимоги.

Прийнято виділяти два типи таких систем: жорсткого і м'якого реального часу ( Рис. 1 ). Перші використовуються тоді, коли затримка реакції системи не допускається ні за яких обставин, у разі запізнення результати вже нікому не потрібні, а запізнення вважається катастрофічним збоєм. Наприклад, в сучасних комп'ютеризованих військових комплексах негайна і передбачувана реакція на дії противника є необхідною умовою роботи. Системи м'якого реального часу допускають можливість затримки щодо заданого інтервалу, але при цьому кожна затримка має певну ціну. Для нормальної роботи такі системи повинні мінімізувати число можливих затримок. Наприклад, фінансовим організаціям доводиться мати справу з мільйоном транзакцій в секунду, і кожна затримка може призвести до втрати грошових коштів. Таким чином, видно, що різниця між жорсткою і м'якою системами залежить від пред'явлених до них вимог - система жорстка, якщо вона не має спізнюватися ніколи, і м'яка, якщо не спізнюється, як правило.

Такий поділ є досить умовним, і для конкретних завдань зазвичай застосовується якийсь проміжний варіант, а в ряді областей потрібні рішення, що забезпечують передбачувана поведінка і гарантований час відгуку: військові системи (управління повітряним трафіком, управління озброєнням); енергетика (відмовостійкі обчислювальні системи); фінансові служби (управління торгами і аналітика); гри та симулятори; промисловість (управління автоматизованим виробництвом, контроль якості); телекомунікації (доставка повідомлень, управління медіапотоків).

Потреба в системах реального часу існує вже давно, але, як правило, ці системи створювалися для вирішення приватних завдань конкретних замовників, а тому вимагали спеціалізованого апаратного забезпечення і операційних систем. Такі рішення не можна назвати гнучкими, а витрати на їх створення і підтримання завжди були дуже високими. Звичайні операційні системи (наприклад, Unix і Linux) для вирішення завдань реального часу традиційно не використовувалися - їх технічні характеристики не дозволяли гарантувати відгук за заданий час:

  • звичайні ОС використовують непередбачуване планування процесів, при якому в кожен момент часу невідомо, який процес або потік буде виконуватися наступним;

  • низький дозвіл системного таймера (порядку десятків мілісекунд) не дозволяє обробляти запити з мікро- і наносекундной інтервалами;

  • невивантажуваного (невитісняючі) ядро, в якому обробники переривань і інших системних функцій не можуть бути перервані іншими процедурами, не дозволяє встановити пріоритет обробки запитів реального часу.

Для розробки систем реального часу зазвичай використовувалися мови асемблера, Сі, C ++, Ада, що передбачало наявність висококваліфікованих фахівців. Додатки реального часу досить складно використовувати повторно і переносити на інші платформи.

З іншого боку, сучасні операційні системи, і зокрема Linux, крім низької вартості, універсальності і простоти освоєння, мають цілий ряд переваг - для них створено величезний портфель доступного програмного забезпечення, підтримується широкий ряд апаратних платформ, є велика кількість підготовлених фахівців. З технологічної точки зору в сучасних системах реального часу все частіше потрібна підтримка різних комунікаційних протоколів, кластерних конфігурацій, мов високого рівня - все це вже давно реалізовано в ОС Linux. Таке зближення інтересів не могло залишитися непоміченим, і ряд компаній, що підтримують розробку ядра Linux, стали пропонувати її модифікації для вирішення завдань реального часу. Появі широко доступних систем реального часу сприяла і віртуальна машина Java, що дозволяє створювати додатки для систем реального часу на мові Java з застосуванням всіх його достоїнств: автоматичним управлінням пам'яттю, складанням сміття і т.п.

Відкритий код для реального часу

Сучасні системи реального часу на кшталт QNX і VxWorks мають значну універсальністю, однак сьогодні все більше рішень будується на основі відкритих стандартів і відкритого програмного забезпечення. Корпорація IBM вже більше п'яти років інтегрує свої розробки та інновації в продукти категорії Open Source. Операційна система Linux підтримується безліччю компаній і розробниками по всьому світу, і, використовуючи її, можна не боятися потрапити в залежність від окремого постачальника апаратного або програмного забезпечення.

Операційна система Linux спочатку не проектувалася як система реального часу, і для її застосування в цій якості потрібно провести серйозні дослідження, проте вже існує кілька дистрибутивів Linux, що підтримують розширення реального часу: дистрибутиви компаній IBM, RT Linux від Novell і Red Hat.

У RT Linux реалізовані таймери високої точності: для подання системного часу тепер використовується 64-бітна величина, що дозволяє зберігати час з наносекундной точністю. Код управління таймерами і системним часом повністю переписаний, і тепер не допускається виникнення затримок, що перевищують кілька мікросекунд.

Іншим важливим розширенням стало витісняється ядро ​​- до існуючих в основному ядрі Linux моделям витіснення було додано повне витіснення, при якому більшість абсолютних блокувань всередині ядра замінені на семафори. Функції ядра і обробники переривань, «загорнуті» в звичайні системні потоки, тепер можуть витіснятися іншими більш пріоритетними потоками.

Важлива функція спадкування пріоритетів дозволяє вирішити проблему інверсії пріоритетів. Інверсією пріоритетів називають ситуацію, коли процес з низьким пріоритетом блокує об'єкт, необхідний процесу з високим пріоритетом. Проблема в тому, що фоновий процес ніяк не може звільнити блокування, так як диспетчер відправляє на виконання інші процеси із середнім пріоритетом, а очікує процес з високим пріоритетом змушений простоювати. При спадкуванні пріоритетів пріоритет першого процесу підвищується на час, поки він блокує процес з більш високим пріоритетом. Велика увага в RT Linux приділено плануванню в симетричних багатопроцесорних системах. Якщо завдання передбачуваного планування на одиночному процесорі вирішується легко - достатньо лише вибрати самий пріоритетний процес з черги планувальника, то в багатопроцесорних системах така черга існує вже для кожного процесора. Ядро операційної системи має регулярно «переглядати» черги, щоб забезпечити першочергове виконання потоків з високим пріоритетом на будь-якому з процесорів.

Деякі зміни в операційній системі вимагають також апаратної підтримки. Наприклад, багато сучасних сервери використовують переривання з управління системою (System Management Interrupt, SMI), пов'язані з помилками обладнання та управлінням харчування. Ці переривання мають непередбачуваною латентностью і тому складно поєднуються з роботою систем реального часу. Деякі апаратні платформи, такі як сервери-леза IBM, були спеціально модифіковані для роботи з системами реального часу, і основна частина SMI-переривань обробляється в BIOS та інших апаратних контролерів в обхід основної ОС.

Системи реального часу на Java

Прості в освоєнні мови програмування високого рівня, такі як Java, ніколи всерйоз не розглядалися для систем реального часу:

  • потоки на Java так само складно планувати в умовах реального часу, як і процеси в звичайних операційних системах;

  • прибирання сміття, що забезпечує базову функціональність Java, зазвичай перериває виконання інших потоків;

  • завантаження класів в процесі виконання програм вносить непередбачуваність, так само як і компіляція в ході виконання програм (just-in-time compilation).

Однак додатки стають все більше і складніше, і використовувати низькорівневі мови програмування для створення додатків реального часу стає все важче і дорожче.

Все це послужило стимулом для нової розробки WebSphere Real-Time Java (WRT) - віртуальної Java-машини, заснованої на технології IBM J9, що містить унікальну функціональність для повноцінної підтримки систем жорсткого і м'якого реального часу. WRT підтримує Java 2 Standard Edition версії 5, включаючи стандартну бібліотеку класів Java. WRT реалізує специфікацію Java реального часу (JSR 1), забезпечуючи інтерфейс для потоків реального часу і різних схем управління пам'яттю в умовах продуктивності реального часу. Cборщик сміття Metronome, розроблений в Дослідницькому центрі IBM ім. Томаса Ватсона, дозволяє налаштовувати збірку так, що переривання виконання програми на Java не перевищують однієї мікросекунди. WRT підтримує компіляцію в ході виконання програм в умовах реального часу і містить набір утиліт для діагностики та оптимізації коду.

Додаток реального часу в WRT може будуватися як на базі стандартних класів Java, так і на розширеннях реального часу. При цьому старий код годі й переписувати, а тільки частково перекомпіліровать в новому оточенні ( Рис. 2 ).

Традиційні збирачі сміття для Java - один з джерел непередбачуваної поведінки програм. Прибирання сміття перериває виконання програм в момент, коли досягається певний рівень використання пам'яті, і в цей час програма вже не зможе гарантовано відреагувати на важливе зовнішнє подія. Складальник сміття Metronom - всього лише один з процесів, який планується в системі нарівні з іншими ( Рис. 3 ). Складальник запускається з заданими часовими інтервалами і гнучким рівнем використання процесорного часу, так що повністю задовольняє вимогам систем реального часу. При цьому не потрібні додаткові зовнішні схеми виділення пам'яті, що дозволяє лише замінити збирач сміття і обійтися без повної пересборки програм на Java.

Ще один дуже важливий поліпшення віртуальної Java-машини - реалізація специфікації Real-Time Specifications for Java (RTSJ, або JSR 1), яка розширює функціональність Java для вирішення завдань реального часу. Звичайний планувальник Java не використовує інформацію про пріоритети потоків, що робить планування непередбачуваним. У реалізації RTSJ від IBM підтримується пріоритет потоків, так само як і успадкування пріоритетів (рішення, аналогічне механізму в ядрі RT Linux). У WRT реалізовані потоки реального часу: з підтримкою пріоритетів, заданими інтервалами реакції системи, доступом до зовнішніх областям пам'яті і виявленням блокувань. Існує можливість запуску потоків реального часу без доступу до купи, за рахунок чого можна відмовитися від переривання виконання таких потоків складальником сміття. У системах реального часу такі потоки можуть використовуватися для задач з найсерйознішими вимогами до латентності. Для виділення пам'яті в цих потоках використовується спеціальна «безсмертна» область пам'яті, для якої не діє збирач сміття.

Ще одне джерело непередбачуваності віртуальної машини Java - компіляція в ході виконання - був в WRT перероблений, і тепер код компілюється в спеціальних фонових потоках задовго до виконання, так що компіляція не заважає основної функціональності системи. Також був доданий програмний інтерфейс управління процесом компіляції в ході виконання, наприклад, щоб заборонити цю функцію для ряду класів або додатків. Для повноцінної підтримки систем реального часу в віртуальній машині Java були реалізовані функції з управління синхронізацією потоків, доступу до системного високоточній таймером і роботі з асинхронними подіями. Багато ділянок коду віртуальної машини повністю переписані, щоб відповідати необхідної продуктивності.

Таким чином, додатки на базі WebSpere Real-Time Java можуть істотно спростити створення і підтримку систем реального часу. Повне рішення для систем реального часу від IBM включає в себе сервери-леза IBM на платформі x86-64, операційну систему реального часу RT Linux (дистрибутив IBM, Red Hat MRG або Novell SLERT), віртуальну машину і середовище розробки WebSphere Real-Time Java.

Олексій Федосєєв ( [email protected] ) - фахівець з рішенням на Linux компанії IBM (Москва).

Linux реального часу

Компактні спеціалізовані системи реального часу, такі так VxWorks, OS-9, PSOS, QNX і LynxOS, володіють всіма необхідними для вирішення своїх завдань якостями, проте є такі завдання, для вирішення яких потрібна підтримка реального часу, але неприпустимі великі витрати на розробку. У цих випадках співтовариство розробників Linux пропонує спеціальні розширення, такі як RTLinux, KURT або UTIME.

ОС РВ на службі в авіації

До вибору систем для потреб авіації підходять надзвичайно суворо, і стосується це, зокрема, операційних систем реального часу. Розібравшись з вимогами, що пред'являються до операційних систем з боку організацій, що відповідають за безпеку польотів, можна зрозуміти і вимоги, суттєві для багатьох інших галузей, в яких потрібна швидка реакція на події, висока надійність, живучість і безпеку програмних засобів.



Новости
  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью