Базовые концепции реального-времени (RT) . Жесткое реальное время и LINUX.
Что такое реальное-время?
До того как перейти к введению в RT-LINUX, необходимо рассмотреть несколько идей связанных с понятием "реальное время" (real time, RT).
Мы будем говорить, что:
" система реального времени это информационная система , в которой корректность выходной информация зависит не только от примененных алгоритмов, но и от момеyнтов времени появления информации. "
Не достаточно чтобы информация была правильной, необходимо чтобы она появлялась в строго определенных временных интервалах. Заметим, что из вышесказанного определения система реального времени необязательно быстрая, как кто либо мог считать. Например, система навигации корабля в начале могла бы показаться не системой реального времени, потому что скорость мала и обычно "достаточно" времени (порядка минут) для принятия решения. Тем не менее, в соответствии с нашим определением, это действительно система реального времени.
Заметим что мы определили "систему реального времени", а не систему в ральном времени. Системы в реальном времени, в основном быстрые системы, создают иллюзию "реальности". Обычно от всех симуляторов и интерактивных игр требуется, создать впечатление реального мира, и чем больше картинок генерится в единицу времени тем лучше.
Давайте теперь более детально рассмотрим понятие "временые ограничения" (temporal restriction), предположим кто-либо хочет управлять скоростью двигателя с различной нагрузкой на валу с использованием ПИД-закона регулирования. (ПИД-закон это пропорционально- интегрально- дифференциальный закон регулирования). С нашей точки зрения, ПИД-закон, это функция со своим набором параметров.
В этом примере скорость двигателя - параметр, получаемый от двигателя и напряжение питания двигателя - параметр, управляющей скоростью вращения двигателя.
Теория алгоритмов управления, которая кстати весьма обширна, не принимает в расчет время вычисления алгоритма ПИД-функции, т.е. время от измерения скорости двигателя, до момента, когда мы воздействуем на двигатель, очень мало.
В обычных условиях системы позволяют иметь небольшую задержку. Другая характеристика ПИД-закона это периодичность, другими словами необходимо постоянно, через определенные интервалы времени, вычислять ПИД-функцию. Если время между последовательными вызовами ПИД-функции слишком велико, двигатель может достичь нежелаемой скорости.
Подводя итог, ПИД-закон может быть рассмотрен как функция, исполняемая периодически с периодом (Pi); с максимальной допускаемой ПИД-законом задержкой, (Di), и, в соответствии от скорости процессора исполнение ПИД кода требует определенного количества времени (Сi). .
Pi: Период задачи i.
Di: Максимальная допустимая задержка выдачи управления, задачи i.
Ci: наихудшее время выполнения задачи i.
Нет проблем использовать однозадачную систему как систему реального времени:, или процессор может выполнить задачу за заданное время или нет. Если он недостаточно быстр- надо заменить его на более быстрый.
Проблемы появляются, когда в системе может выполняться несколько задач и они вынужденны делить процессор (процессоры) между собой. Это препятствует нам использовать класические системы с разделением ресурсов типа LINUX.
Конечно нет необходимости упоминать: даже не пытайтесь писать программы, требующие реального времени под Windows .... И еще совет, не пишите вообще никаких программ для этой платформы.
Не все системы реального времени идентичны, совсем не одно и то же, что управлять системой вспрыска топлива двигателя самолета или показом mpeg-файлов. В первом случае, малейшая задержка в выполнении может привести к потере человеческих жизней или большим материальным потерям, во втором случае это означает простое ухудшение качества системы - картинка может замирать или часть кадров будет пропадать. Первый тип известен как системы "жесткого реального времени" (hard real time, HRT), а второй, как системы "мягкого реального времени" (soft real time, SRT). . Мы будем иметь дело c системами HRT.
Разработка RT-систем проходит различные фазы: во первых, определяются задачи, что должно быть выполyено и в каких временных границах (time restriction); во вторых, пишется код и окончательно измеряется время выполнения каждой задачи, а планирование запуском задач осуществляется, таким образом, чтобы быть уверенным что задачи не выйдут за временные границы в работающей системе.
Тестовое планирование основано на применении ряда тестов ко всей группе задач, и если они проходят тест, то возможно гарантировать, что ни одна из задач не перейдет временные границы. Если нет, необходимо начать разработку сначала, выбрать более быстрый процессор или другие алгоритмы для решения задачи.
Подведем итог. Задачи определяются трямя временными параметрами Pi, Di и Ci. Система должна гарантировать время выполнения задач, т.е. при выполении любого набора задач, все задачи остануться внутри своих временных границ. Гарантировать время выполнения - это значит что система должна быть предсказуемой (predictable). Говоря, что система является системой реального времени или система предсказуема, обычно подразумевают одно и то же. .
Какая связь между операционной системой и реальным временем?
Семантическая реализация сигналов управления - ответственность программиста а временные ограничения зависят от операционной системы.
Операционная система обязана поддерживать и организовывать выполнение всех задач, а также управлять прерываниями. ОС должна предлагать:
- Алгоритм планирования выполнением задач.
- Механизм взаимодействия процессов в системе ( семафоры, сообщения ...)
- Управление прерываниеми.
- Запуском задач в указанные для каждой моменты времени.
По сравнению с "нормальной" ОС, целью ОС реального времени является уменьшить сложность. Мы не нуждаемся в ОС которая делает много вещей, что важно, так это чтобы задачи запускались предсказуемо и быстро.
Более предпочтительными являются такие ОС, где контекст обычно меняется за 10 условных временных тактов, в худшем случае за 12, чем ОС, где хотя в среднем это происходит за 3, но иногда может быть и за 20 условных временных тактов.
Не следует удивляться что ОС реального времени медлительнее, чем обычные ОС. Иногда, в целях получения предсказуемого поведения, необходимо даже запретить использование кеша, соответственно с потерей производительности. Кеш, процессоры с конвеерной выборкой и алгоритмами предсказания ветвления являются настоящими врагами предсказуемости и, следовательно, системам реального времени.
POSIX RT рассширения.
POSIX это абревиатура Portable Operating Systems Interface (Переносимый интерфейс операционных систем). Cтандарт, предназначенный для достижения переносимости программного обеспечения на уровне исходных кодов. Другими словами, программа для POSIX совместимой операционной системы должна компилироваться и выполняться на любой другой POSIX совместимой ОС, даже, если последняя и от другого поставщика. POSIX стандарт определяет интерфейс который ОС предлагает прикладным программам: набор системных вызовов (set of system calls).
POSIX стандарт разрабатывается IEEE (Instiute of Electrical and Electronic Engineering) и стандартизуется ANSI (American National Standards Institute) and ISO (International Standards Organisation). Очевидно, что POSIX основан на UNIX. Большинство ОС, включая Windows NT, стремятся от версии к версии достичь совместимости с POSIX стандартом.
Работа над POSIX стандартом разделена между несколькими рабочими группами, в которых работают представители компьютерных фирм, программистских компаний, официальные представители государства и частные лица, профессионалы в той или иной области програмиррования. Каждая группа заботится о разработке какого-либо аспекта ОС. Для примера, группа называемая POSIX.4 занимается вопросами относящимися к реальному времени.
POSIX.4-дополнение, переименованное в 1003.1b в 1993 г., позволяет использовать ОС для реального времени. Совершенно очевидно что большинство этих расширений относится к управлению временем и приоритетами процессов, а также системным вызовам для взаимодействия между процессами (the inter-process communication).
POSIX-дополнения разрабатываются для повышения контроля над системой управления ресурсами ОС.
LINUX 2.0 поддерживает многие POSIX-совместимые системные вызовы реального времени ..., но этот аспект LINUX мы будем обсуждать в будущей статье. Версия 2.2. с большой вероятностью будет на 100% совместима с POSIX 1003.1b.
Linux реального времени (real-time Linux, RT-LINUX)
Victor Yodiken и Michael Barabanov разработали RT-LINUX будучи на факультете компьютерных наук института добычи полезных ископаемых и технологий, расположенного в New Mexico. Michael сделал эту работу частью диплома, Master of computer science. Последняя доступная версия 0.6. На момент написания этой статьи RT-LINUX был доступен только для Intel платформ.
RT-Linux решает проблему поновому. Вместо того, чтобы менять ядро LINUX, пытаясь сделать его предсказуеммым, они написали не зависимое от основного ядра свое маленькое ядро - планировщик. Основное ядро LINUX запускается, как задача этого ядра, разделяя процессор с другими задачами реального времени. Linux использует процессор наравне c другими задачами реального времени, более точно LINUX является фоновой задачей, и исполняется только, если не исполняется ни одна из задач реального времени.
В этом месте многие читатели наверное будут смущены, поскольку они думают что ОС всемогуща и с ней нельзя обращаться подобным образом.
.
Тем более будет приятно узнать, что установка и удаление планировщика возможны динамически, так как он скомпилирован как модуль.
Ядро LINUX (как и большинство ОС) обычно запрещает прерывания, как средство синхронизации или при выполнении критических участов кода. Если во время, когда Linux запретит прерывания, придет прерывание от часов, оно будет блокированно и, следовательно, потеряна временная точность. В RT-LINUX применено оригинальное решение: все вызовы cli, sti, and iret (ассемблерные команды управления прерываниями) заменены на S_CLI, S_STI и S_IRET, и LINUX никогда не может запретить прерывания.
Недостаток планировщика, приходящего с RT-LINUX, это то, что он приоритетный планировщик, с фиксированными приоритетами и для LINUX выделен самый низкий приоретет. Если задачи реального времени возьмут все процессорное время, тогда Linux не получит времени и может сложится впечатление, что система остановилась.
В случае RT-LINUX мы не только имеем систему реального времени, но и класическую ОС. Мы можем гонять WEB, в то время как измеряется и контролируется физический объект.
Установка RT-LINUX.
Файлы дистрибутива находятся на:
http://luz.cs.nt.edu/~rtlinux.
Для преобразования LINUX в RT-LINUX, нужно модифицировать исходные коды ядра, наложив заплату, которая приходит с RT-LINUX и скомпилировать ядро. Теперь, как это сделать. Я предполагаю, что файл rtlinux-0.6-2.0.33.tgz лежит в директории /usr/src и что он был распакован в директорию /usr/src/rtlinux-0.6. Я также допускаю, что ядро уже сконфигурировано ( make config), и тогда:
# cd /usr/src/linux
# patch -p1 <../rtlinux-0.6-2.0.33/kernel_path
# make dep; make clean; make zlilo; make modules; make modules_install
# reboot
Новое ядро появится как и "нормальное" ядро, однако уже приготовленное стать системой реального времни. В директории /usr/src/rtlinux-0.6-2.0.33/testing находятся различные демонстрационные программы.
Кроме примеров, пришедших с дистрибутивом (директория testing), вы можете взять на интеренет (Internet) другой пример подготовленный Олегом, который позволяет нам создать карту времени выполнения задач. Один из файлов этой демо-программы, планировщик с изменениями, он не только планирует выполнение задач, но так же посылает информацию, связанную с принятыми решениями. Это информация накапливается и сохраняется в файле, который может быть отображен графически. В результате мы увидим, в каком порядке различные задачи выполнялись и как задачи с высшим приоритетом захватывали время задач с низшим приоритетом. LINUX, как задача, не представлен.
Каждой задаче соответствует горизонтальная ось. Прямоугольниками показано время использования задачей процессора (в нашем случае мы имели моно-процессорную систему и только одна задача могда быть выполнена в единицу времени). В этом примере границы каждой задачи равны их периоду. Период каждой задачи, временной интервал ( представлен как) в течение которого задача должна быть выполнена. Задачи в верхней части, имели высший приоритет и возможность захвата процессорного времени у других задач, что и произошло в момент времени равный 600.
Будущее RT-LINUX.
Уже существует много-процессорная версия RT-LINUX.
Количество сервисов предлагаемых RT-LINUX преднамеренно уменьшенно, нет необходимости включать функции которые не очень нужны, если надо сохранить систему предсказуемой. Тем не менее, некоторые расширения уже доступны, такие, как семафоры и возможность управлять задачами реального времени через /proc/sys.
Несколько недель назад начато создание руководства по RT-LINUX.
Заключение
До появления RT-LINUX многие инженеры, которые хотели использовать системы реального времени, были вынужденны использовать MS-DOS и писать все необходимые драйверы или покупать системы реального времени (за запредельные цены). Теперь разработчики имеют полнофункциональную ОС и возможность разрабатывать приложения на той же системе, где они будут запущены. В действительности мы можем запустить несколько приложений реального времени, и в то же время рабоатать на интернет, и без всяких проблем.
Наша следующая статья в этой серии будет рассматривать несколько примеров приложений реального времени, и мы обсудим написание собственных приложений реального времени.
|