Программирование реального времени
Характеристики, основы применения, архитектура жестких и операционных систем реального времени. Последовательное программирование задач реального времени. Структура и языки параллельного программирования, мультипрограммирования и многозадачности.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 17.12.2015 |
Размер файла | 195,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
Введение
1. Система реального времени
1.1 Характеристики систем реального времени
1.2 Применение систем реального времени
2. Операционная система реального времени
2.1 Системы жёсткого и мягкого реального времени
2.2 Архитектура операционных систем реального времени
3. Особенности программирования систем реального времени
3.1 Методы программирования в реальном времени
3.1.1 Последовательное программирование и программирование задач реального времени
3.1.2 Структура программы реального времени
3.1.3 Параллельное программирование, мультипрограммирование и многозадачность
3.2 Языки программирования реального времени
Заключение
Cписок использованной литературы
Введение
Система называется системой реального времени, если правильность ее функционирования зависит не только от логической корректности вычислений, но и от времени, за которое эти вычисления производятся. То есть для событий, происходящих в такой системе, то, когда эти события происходят, так же важно, как логическая корректность самих событий.
Говорят, что система работает в реальном времени, если ее быстродействие адекватно скорости протекания физических процессов на объектах контроля или управления. Так как окружающий нас мир весьма многообразен, здесь уместно добавить, что имеются в виду именно те процессы, которые непосредственно связаны с функциями, выполняемыми конкретной системой реального времени. То есть система управления должна собрать данные, произвести их обработку в соответствии с заданными алгоритмами и выдать управляющие воздействия за такой промежуток времени, который обеспечивает успешное решение поставленных перед системой задач.
Целью данной работы является описание программирования реального времени.
Предмет работы - это системы реального времени, в качестве объекта выступают методы программирования систем реального времени.
1. Система реального времени
Система реального времени (СРВ) - это система, которая должна реагировать на события во внешней по отношению к системе среде или воздействовать на среду в рамках требуемых временных ограничений. Оксфордский словарь английского языка говорит об СРВ как о системе, для которой важно время получения результата. Другими словами, обработка информации системой должна производиться за определённый конечный период времени, чтобы поддерживать постоянное и своевременное взаимодействие со средой [1]. Естественно, что масштаб времени контролирующей системы и контролируемой ей среды должен совпадать [2].
Под реальным временем понимается количественная характеристика, которая может быть измерена реальными физическими часами, в отличие от логического времени, определяющего лишь качественную характеристику, выражаемую относительным порядком следования событий. Говорят, что система работает в режиме реального времени, если для описания работы этой системы требуются количественные временные характеристики [2].
1.1 Характеристики систем реального времени
Процессы (задачи) систем реального времени могут иметь следующие характеристики и связанные с ними ограничения [3]:
1) дедлайн (англ. deadline) - критический срок обслуживания, предельный срок завершения какой-либо работы;
2) латентность (англ. latency) - время отклика (время задержки) системы на внешние события;
3) джиттер (англ. jitter) - разброс значений времени отклика. Можно различить джиттер запуска (англ. release jitter) - период времени от готовности к исполнению до начала собственно исполнения задачи и джиттер вывода (англ. output jitter) - задержка по окончании выполнения задачи. Джиттер может возникать под влиянием других, одновременно исполняемых задач.
В моделях систем реального времени могут фигурировать и другие параметры, например, период и количество итераций (для периодических процессов), нагрузка (англ. load) - количество команд процессора в худшем случае [3].
В зависимости от допустимых нарушений временных ограничений системы реального времени можно поделить на системы жёсткого реального времени (англ. hard real-time), для которых нарушения равнозначны отказу системы, и системы мягкого реального времени (англ. soft real-time), нарушения характеристик которых приводят лишь к снижению качества работы системы [1]. Также можно рассматривать твёрдые системы реального времени (англ. firm real-time), в которых допускается небольшое нарушение дедлайнов, но большее нарушение может привести к катастрофическому отказу системы [4-5].
События реального времени могут относиться к одной из трёх категорий [1]:
· Асинхронные события - полностью непредсказуемые события. Например, вызов абонента телефонной станции.
· Синхронные события -предсказуемые события, случающиеся с определённой регулярностью. Например, вывод аудио и видео.
· Изохронные события - регулярные события (разновидность асинхронных), случающиеся в течение интервала времени. Например, в мультимедийном приложении данные аудиопотока должны прийти за время прихода соответствующей части потока видео.
1.2 Применение систем реального времени
С развитием технологий системы реального времени нашли применения в самых различных областях. Особенно широко СРВ применяются в промышленности, включая системы управления технологическими процессами, системы промышленной автоматики, SCADA-системы, испытательное и измерительное оборудование, робототехнику. Применения в медицине включают в себя томографию, оборудование для радиотерапии, прикроватный мониторинг. СРВ встроены в периферийные устройства компьютеров, телекоммуникационное оборудование и бытовую технику, такую как лазерные принтеры, сканеры, цифровые камеры, кабельные модемы, маршрутизаторы, системы для видеоконференций и интернет-телефонии, мобильные телефоны, микроволновые печи, музыкальные центры, кондиционеры, системы безопасности. На транспорте СРВ применяются в бортовых компьютерах, системах регулирования уличного движения, управлении воздушного движения, аэрокосмической технике, системе бронирования билетов и т. п. СРВ находят применения и в военной технике: системах наведения ракет, противоракетных системах, системах спутникового слежения [8].
Примеры систем, работающих в режиме реального времени:
1. АСУ ТП химического реактора;
2. бортовая система управления космического аппарата;
3. АСНИ в области ядерной физики;
4. система обработки аудио- и видеопотоков при трансляции в прямом эфире;
5. интерактивная компьютерная игра.
При создании систем реального времени приходится решать проблемы привязки внутрисистемных событий к моментам времени, своевременного захвата и освобождения системных ресурсов, синхронизации вычислительных процессов, буферизации потоков данных и т. п. Системы реального времени обычно используют специализированное оборудование (например, таймеры) и программное обеспечение (например, операционные системы реального времени).
2. Операционная система реального времени
Операционная система реального времени, ОСРВ (англ. real-time operating system, RTOS) - тип операционной системы, основное назначение которой -- предоставление необходимого и достаточного набора функций для работы систем реального времени на конкретном аппаратном оборудовании.
Спецификация UNIX в редакции 2 даёт следующее определение:
Реальное время в операционных системах -- это способность операционной системы обеспечить требуемый уровень сервиса в определённый промежуток времени.
2.1 Системы жёсткого и мягкого реального времени
Операционные системы реального времени иногда делят на два типа -- системы жесткого реального времени и системы мягкого реального времени.
Операционная система, которая может обеспечить требуемое время выполнения задачи реального времени даже в худших случаях, называется операционной системой жёсткого реального времени.
Операционная система, которая может обеспечить требуемое время выполнения задачи реального времени в среднем, называется операционной системой мягкого реального времени.
Системы жёсткого реального времени не допускают задержек реакции системы, так как это может привести к:
· потере актуальности результатов;
· большим финансовым потерям;
· авариям и катастрофам.
Ситуация, в которой обработка событий происходит за время, большее предусмотренного, в системе жёсткого реального времени считается фатальной ошибкой. При возникновении такой ситуации операционная система прерывает операцию и блокирует её, чтобы, насколько возможно, не пострадала надёжность и готовность остальной части системы. Примерами систем жёсткого реального времени могут быть бортовые системы управления (на самолёте, космическом аппарате, корабле, и пр.), системы аварийной защиты, регистраторы аварийных событий.
В системе мягкого реального времени задержка реакции считается восстановимой ошибкой, которая может привести к увеличению стоимости результатов и снижению производительности, но не является фатальной. Примером может служить работа компьютерной сети. Если система не успела обработать очередной принятый пакет, это приведет к остановке на передающей стороне и повторной посылке (в зависимости от протокола). Данные при этом не теряются, но производительность сети снижается.
Основное отличие систем жёсткого и мягкого реального времени можно охарактеризовать так: система жёсткого реального времени никогда не опоздает с реакцией на событие, система мягкого реального времени не должна опаздывать с реакцией на событие.
Большинство программного обеспечения ориентировано на «мягкое» реальное время. Для подобных систем характерно:
· гарантированное время реакции на внешние события (прерывания от оборудования);
· жёсткая подсистема планирования процессов (высокоприоритетные задачи не должны вытесняться низкоприоритетными, за некоторыми исключениями);
· повышенные требования к времени реакции на внешние события или реактивности (задержка вызова обработчика прерывания не более десятков микросекунд, задержка при переключении задач не более сотен микросекунд).
Классическим примером задачи, где требуется ОСРВ, является управление роботом, берущим деталь с ленты конвейера. Деталь движется, и робот имеет лишь маленький промежуток времени, когда он может её взять. Если он опоздает, то деталь уже не будет на нужном участке конвейера, и следовательно, работа не будет выполнена, несмотря на то, что робот находится в правильном месте. Если он подготовится раньше, то деталь ещё не успеет подъехать, и он заблокирует ей путь.
2.2 Архитектура операционных систем реального времени
В своем развитии ОСРВ строились на основе следующих архитектур:
1. Монолитная архитектура (рисунок 1). ОС определяется как набор модулей, взаимодействующих между собой внутри ядра системы и предоставляющих прикладному ПО входные интерфейсы для обращений к аппаратуре. Основной недостаток этого принципа построения ОС заключается в плохой предсказуемости её поведения, вызванной сложным взаимодействием модулей между собой.
Рисунок 1 - Монолитная архитектура
2. Уровневая (слоевая) архитектура (рисунок 2). Прикладное ПО имеет возможность получить доступ к аппаратуре не только через ядро системы и её сервисы, но и напрямую. По сравнению с монолитной такая архитектура обеспечивает значительно большую степень предсказуемости реакций системы, а также позволяет осуществлять быстрый доступ прикладных приложений к аппаратуре. Главным недостатком таких систем является отсутствие многозадачности.
Рисунок 2 - Уровневая (слоевая) архитектура
3. Архитектура «клиент-сервер» (рисунок 3). Основной её принцип заключается в вынесении сервисов ОС в виде серверов на уровень пользователя и выполнении микроядром функций диспетчера сообщений между клиентскими пользовательскими программами и серверами -- системными сервисами. Преимущества такой архитектуры:
Повышенная надёжность, так как каждый сервис является, по сути, самостоятельным приложением и его легче отладить и отследить ошибки.
Улучшенная масштабируемость, поскольку ненужные сервисы могут быть исключены из системы без ущерба к её работоспособности.
Повышенная отказоустойчивость, так как «зависший» сервис может быть перезапущен без перезагрузки системы.
Рисунок 3 - Архитектура «клиент-сервер»
3. Особенности программирования систем реального времени
3.1 Методы программирования в реальном времени
3.1.1 Последовательное программирование и программирование задач реального времени
Последовательное программирование(sequential programming) является наиболее распространенным способом написания программ. Целью последовательной программы является преобразование входных данных, заданных в определенной форме, в выходные данные, имеющие другую форму, в соответствии с некоторым алгоритмом - методом решения (рисунок 4).
Рисунок 4 - Обработка данных последовательной программой
Программирование в реальном времени (real-time programming) отличается от последовательного программирования - разработчик программы должен постоянно иметь в виду среду, в которой работает программа, будь то контроллер микроволновой печи или устройство управления манипулятором робота. В системах реального времени внешние сигналы, как правило, требуют немедленной реакции процессора. В сущности, одной из наиболее важных особенностей систем реального времени является время реакции на входные сигналы, которое должно удовлетворять заданным ограничениям.
Специальные требования к программированию в реальном времени, в частности необходимость быстро реагировать на внешние запросы, нельзя адекватно реализовать с помощью обычных приемов последовательного программирования. Насильственное последовательное расположение блоков программы, которые должны выполняться параллельно, приводит к неестественной запутанности результирующего кода и вынуждает связывать между собой функции, которые, по сути, являются самостоятельными. В большинстве случаев применение обычных приемов последовательного программирования не позволяет построить систему реального времени. В таких системах независимые программные модули или задачи должны быть активными одновременно, то есть работать параллельно, при этом каждая задача выполняет свои специфические функции. Такая техника известна под названием параллельного программирования (concurrent programming). В названии делается упор на взаимодействие между отдельными программными модулями. Параллельное исполнение может осуществляться на одной или нескольких ЭВМ, связанных распределенной сетью.
Программирование в реальном времени представляет собой раздел мультипрограммирования, который посвящен не только разработке взаимосвязанных параллельных процессов, но и временным характеристикам системы, взаимодействующей с внешним миром.
Между программами реального времени и обычными последовательными программами, с четко определенными входом и выходом, имеются существенные различия. Перечислим отличия программ реального времени от последовательных программ:
1. Логика исполнения программы определяется внешними событиями.
2. Программа работает не только с данными, но и с сигналами, поступающими из внешнего мира, например, от датчиков.
3. Логика развития программы может явно зависеть от времени.
4. Жесткие временные ограничения. Невозможность вычислить результат за определенное время может оказаться такой же ошибкой, как и неверный результат ("правильный ответ, полученный поздно - это неверный ответ").
5. Результат выполнения программы зависит от общего состояния системы, и его нельзя предсказать заранее.
6. Программа, как правило, работает в многозадачном режиме. Соответственно, необходимы процедуры синхронизации и обмена данными между процессами.
7. Исполнение программы не заканчивается по исчерпании входных данных - она всегда ждет поступления новых данных.
Важность фактора времени не следует понимать как требование высокой скорости исполнения программы. Скорость исполнения программы реального времени должна быть достаточной для того, чтобы в рамках установленных ограничений реагировать на входные данные и сигналы и вырабатывать соответствующие выходные величины. "Медленная" система реального времени может великолепно управлять медленным процессом. Поэтому скорость исполнения программ реального времени необходимо рассматривать относительно управляемого процесса или необходимой скорости. Типичные приложения автоматизации производственных процессов требуют гарантированное время ответа порядка 1 мс, а в отдельных случаях - порядка 0.1 мс. При программировании в реальном времени особенно важными является эффективность и время реакции программ. Соответственно, разработка программ тесно связана с параметрами операционной системы, а в распределенных системах - и локальной сети.
Особенности программирования в реальном времени требуют специальной техники и методов, не использующихся при последовательном программировании, которые относятся к влиянию на исполнение программы внешней среды и временных параметров. Наиболее важными из них являются перехват прерываний, обработка исключительных (нештатных) ситуаций и непосредственное использование функций операционной системы (вызовы ядра из прикладной программы, минуя стандартные средства). Помимо этого при программировании в реальном времени используются методика мультипрограммирования и модель "клиент-сервер", поскольку отдельный процесс или поток обычно выполняют только некоторую самостоятельную часть всей задачи.
3.1.2 Структура программы реального времени
Разработка программы реального времени начинается с анализа и описания задачи. Функции системы делятся на простые части, с каждой из которых связывается программный модуль.
Например, задачи для управления движением манипулятора робота можно организовать следующим образом:
- считать с диска описание траекторий;
- рассчитать следующее положение манипулятора (опорное значение);
- считать с помощью датчиков текущее положение;
- вычислить необходимый сигнал управления;
- выполнить управляющее действие;
- проверить, что опорное значение и текущее положение совпадают в пределах заданной точности;
- получить данные от оператора;
- остановить робота в случае нештатной ситуации (например, сигнал прерывания от аварийной кнопки).
Принципиальной особенностью программ реального времени является постоянная готовность и отсутствие условий нормального, а не аварийного завершения. Если программа не исполняется и не обрабатывает данные, она остается в режиме ожидания прерывания/события или истечения некоторого интервала времени. Программы реального времени - это последовательный код, исполняющийся в бесконечном цикле.
При разработке каждого программного модуля должны быть четко выделены области, в которых происходит обращение к защищенным ресурсам, - критические секции. Вход и выход из этих областей координируется каким-либо методом синхронизации или межпрограммных коммуникаций, например с помощью семафоров. В общем случае, если процесс находится в критической секции, можно считать, что данные, с которыми он работает, не изменяются каким-либо другим процессом. Прерывание исполнения процесса не должно оказывать влияния на защищенные ресурсы. Это снижает риск системных ошибок.
Аналогичные предосторожности необходимо соблюдать и для потоков, порождаемых как дочерние процессы главного процесса. Разные потоки могут использовать общие переменные породившего их процесса, и поэтому программист должен решить, защищать эти переменные или нет.
Для гарантии живучести программы нештатные ситуации, которые могут блокировать или аварийно завершить процесс, должны своевременно распознаваться и исправляться - если это возможно - в рамках самой программы.
В системах реального времени различные процессы могут обращаться к общим подпрограммам. При простейшем решении эти подпрограммы связываются с соответствующими модулями после компиляции. При этом в памяти хранится несколько копий одной подпрограммы.
Эффективность исполнения является одним из наиболее важных параметров систем реального времени. Процессы должны выполняться быстро, и часто приходится искать компромисс между ясностью и структурированностью программы и ее быстродействием. Жизненный опыт показывает, что если для достижения цели нужно чем-то пожертвовать, что обычно и делается. Не всегда возникает противоречие между структурностью и эффективностью, но если первое должно быть принесено в жертву второму, необходимо полностью документировать все принятые решения, иначе существенно осложняется дальнейшее сопровождение программы.
3.1.3 Параллельное программирование, мультипрограммирование и многозадачность
Программирование в реальном времени требует одновременного исполнения нескольких процессов или задач на одной ЭВМ. Эти процессы используют совместно ресурсы системы, но более или менее независимы друг от друга.
Мультипрограммирование (multiprogramming) или многозадачность (multitasking) есть способ одновременного исполнения нескольких процессов. Такого эффекта можно добиться как для одного, так и для нескольких процессоров: процессы исполняются либо на одном, либо на нескольких связанных между собой процессорах. В действительности многие современные вычислительные системы состоят из нескольких процессоров, связанных между собой либо сетью передачи данных, либо общей шиной.
Для записи параллельных процессов можно использовать следующую нотацию
cobegin
х:= 1; х:= 2; х:= 3;
coend;
write (x);
Исполнение команд между ключевыми словами cobeginиcoend происходит параллельно (рисунок 5). Пара операторных скобок cobegin-coend приводит к генерации потоков в рамках многозадачной системы. Оператор cobe-ginне накладывает условий на относительный порядок исполнения отдельных процессов, а оператор coend достигается только тогда, когда все процессы внутри блока завершены. Если бы исполнение было последовательным, то окончательное значение переменной х было бы равно 3. Для параллельных процессов конечный результат однозначно предсказать нельзя; задачи выполняются, по крайней мере, с внешней точки зрения, в случайной последовательности. Поэтому окончательное значение х в приведенном примере может быть как 1, так и 2 или 3.
Рисунок 5 - Граф очередности для операторов cobegin - coend
Программирование в реальном времени основано на параллельном программировании и включает в себя технику повышения эффективности и скорости исполнения программ - управление прерываниями, обработку исключений и непосредственное использование ресурсов операционной системы. Кроме того, программы реального времени требуют специальных методов тестирования.
3.2 Языки программирования реального времени
Основными критериями при выборе языка для разработки приложения реального времени являются:
1. Получение наивысшей производительности приложения реального времени. Из этого требования вытекает, что язык должен быть компилируемого (как C, C++), а не интерпретируемого (как Java) типа, и для него должен существовать компилятор с высокой степенью оптимизации кода. Для современных процессоров качество компилятора особенно важно, поскольку для них оптимизация может ускорять работу программы в несколько раз по сравнению с не оптимизированным вариантом, причем часто оптимизирующий компилятор может породить код более быстрый, чем написанный на ассемблере. Технологии оптимизации развиваются достаточно медленно и часто требуются годы на разработку высокоэффективного компилятора. Поэтому обычно для более старых и с более простой структурой языков имеются более качественные компиляторы, чем для достаточно молодых, и сложно устроенных языков.
2. Получение доступа к ресурсам оборудования либо посредством языковых конструкций, либо посредством имеющихся для выбранного языка библиотечных функций.
3. Возможность вызова процедур, написанных на другом языке, например, на языке ассемблера. Из этого требования вытекает, что последовательность вызова подпрограмм (механизм именования объектов, передачи аргументов и получения возвращаемого значения) должна быть документирована для выбранного языка.
4. Переносимость приложения, под которой обычно понимают, как возможность его скомпилировать другим компилятором, имеющимся на той же платформе, так и возможность его скомпилировать на другой платформе и/или другой операционной системе.
5. Поддержка объектно-ориентированного подхода стала в последнее время необходимостью, зачастую выходя в списке требований на первое место. Это объясняет использование языка Java в ОСРВ.
Программирование в реальном времени требует специальных средств, которые не всегда встречаются в обычных языках последовательного программирования. Язык или операционная система для программирования в реальном времени должны предоставлять следующие возможности:
- описание параллельных процессов;
- переключение процессов на основе динамических приоритетов, которые могут изменяться, в том числе и прикладными процессами;
- синхронизацию процессов;
- обмен данными между процессами;
- функции, связанные с часами и таймером, абсолютное и относительное время ожидания;
- прямой доступ к внешним аппаратным портам;
- обработку прерываний;
- обработку исключений.
Немногие языки обеспечивают все эти возможности. Большинство имеет лишь часть из них, хотя для определенных приложений этого оказывается достаточно.
Ассемблер. Обеспечивает получение наивысшей производительности, прямой доступ к оборудованию, возможность вызова любых процедур на других языках. Однако, приложения получаются не переносимыми, объектно-ориентированный подход отсутствует. Обычно ассемблер используется только для написания небольших и четко локализованных фрагментов приложения, таких, как обработчики прерываний, драйверы устройств, критические по времени исполнения секции.
Язык программирования ADA. Первым полным языком программирования в реальном времени является ADA. В середине 1970-х годов Министерство обороны США для сокращения расходов на разработку и сопровождение своих систем управления реального времени приняло решение ввести единый язык программирования в качестве альтернативы сотням использовавшихся тогда языков. В 1979 году министерство одобрило предложения, выдвинутые французской компанией Honeywell Bull. Язык назван в честь Августы Ады Байрон, графини Лавлейс (Augusta Ada Byron, Countess of Lovelace, 1815-1852), которую можно считать первым программистом в истории - она писала программы для аналитической машины (механического компьютера, который никогда не был построен), спроектированной английским изобретателем Чарльзом Бэббиджем (Charles Babbage).
Язык ADA является полной средой разработки программ с текстовым редактором, отладочными средствами, системой управлениями библиотеками и т.д. Спецификации ADA закреплены американским стандартом ANSI/MIL-STD-1815A и включают средства контроля соответствия этому стандарту. Не допускаются диалекты языка - для сертификации компилятор должен правильно выполнить все эталонные тесты.
Структура языка ADA похожа на структуру языка Pascal, но его возможности значительно шире, в особенности применительно к системам реального времени. Процессу в ADA соответствует задача, которая выполняется независимо от других задач на выделенном виртуальном процессоре, то есть параллельно с другими задачами. Задачи могут быть связаны с отдельными прерываниями и исключениями, и работать как их обработчики.
Новым понятием, введенным в ADA, является пакет - модуль со своими собственными описаниями типов данных, переменных и подпрограмм, в котором явно указано, какие из программ и переменных доступны извне. Пакеты могут компилироваться отдельно с последующим объединением в один исполняемый модуль. Это средство поддерживает модульную разработку программ и создание прикладных библиотек. В начале 1990-х годов язык ADA был пополнен новыми функциями для объектно-ориентированного программирования и программирования в реальном времени.
Машинно-ориентированное программирование низкого уровня поддерживается ADA не достаточно эффективно - это следствие постулата, что все задачи должны решаться средствами высокого уровня. Например, для операций ввода/вывода в ADA используются прикладные пакеты с заранее определенными функциями для управления аппаратными интерфейсами и доступа к внешним данным.
Основным недостатком ADA является его сложность, которая делает язык трудным для изучения и применения. Существующие компиляторы являются дорогостоящими продуктами и требуют мощных процессоров. До сих пор ADA не получил ожидавшейся популярности, и сомнительно, что это когда-нибудь произойдет.
Языки С и C++.Язык программирования С, несмотря на отсутствие в нем многих средств, которые теоретики считают необходимыми для хорошего языка программирования, пользуется большим успехом, начиная с 1980-х годов и по настоящее время. Этот язык стал популярным для всех приложений, требующих высокой эффективности, в частности для программ реального времени. Для обычных микропроцессоров, используемых в системах управления, имеются С-компиляторы и системы разработки многих производителей. В промышленности существует явная тенденция к широкому применению языка С и операционной системы UNIX, которая сама написана на С, поскольку приложения, написанные на С, машинно-независимы и требуют не больших усилий для адаптации к работе в различной аппаратной среде.
Язык С предпочтителен для написания программ с обращениями к функциям операционной системы, так как он обладает отличной совместимостью между логикой определения переменных и синтаксисом обращения к системе. Поскольку наиболее распространенные операционные системы в приложениях автоматического управления процессами основываются на UNIX, язык С является почти вынужденным выбором при разработке программ. Почти все примеры в современной технической литературе представлены на С.
Главным преимуществом языка C++ является его способность поддерживать разработку легко используемых библиотек программ. Программирование в реальном времени непосредственно в C++ не поддерживается, но может быть реализовано с помощью специально разработанных программных модулей и библиотек классов.
C++ включает язык C как подмножество и наследует все его положительные качества. C++ добавляет поддержку объектно-ориентированного подхода на уровне языковых конструкций.
Java. Как язык интерпретируемого типа, имеет очень низкую эффективность получаемого кода. Доступ к оборудованию и вызовы процедур на других языках - только посредством библиотечных функций (обычно написанных на C). Java обеспечивает наивысшую переносимость приложения на уровне двоичного кода и является объектно-ориентированным языком.
BASIC. Язык BASIC является простейшим среди языков программирования высокого уровня. Этот язык был создан в 1964 году для поддержки интерактивной разработки программ с удаленных терминалов. Из-за своей простоты BASIC часто критикуется опытными программистами, и несомненно, что этот язык не является хорошим средством для создания больших структурированных систем. С другой стороны, небольшие приложения на BASIC можно разработать значительно быстрее, чем на других языках. Кроме того, BASIC имеется почти на всех мини- и микрокомпьютерах.
FORTRAN. FORTRAN - это первый язык программирования высокого уровня, который, по-видимому, способствовал, более чем какой-либо другой язык, распространению и практическому применению ЭВМ. Выпущенный в 1957 году, он до сих пор широко используется, в особенности для математических вычислений. В целом FORTRAN имеет ограниченные возможности определения типа, весьма сложный способ работы с нечисловыми данными и не содержит многих важных функций языков реального времени, чтобы его серьезно рассматривать для этой цели. Новые версии FORTRAN заимствовали некоторые возможности из других языков и поддерживают более развитые структуры данных. В этом смысле различия между FORTRAN и другими языками сглаживаются.
Благодаря тому, что язык имеет устойчивое применение в научных приложениях, нередко данные в системах реального времени обрабатываются существующими FORTRAN-программами, а новые программы анализа и статистики пишутся на FORTRAN. В подобных случаях основной проблемой является координация передачи информации между базами данных реального времени и прикладными модулями, написанными на FORTRAN. Такая координация обычно выполняется операционной системой. FORTRAN не рекомендуется для написания драйверов устройств или модулей на уровне операционной системы, так как для этой цели лучше подходят другие языки.
Pascal и Modula-2.Pascal был разработан швейцарцем Николасом Вир-том (Niklaus Wirth) в 1971 году как дидактический язык для обучения хорошей технике программирования. Он быстро перерос свои первоначальные рамки и в настоящее время используется во множестве разнообразных приложений. Успех Pascal, как в случае BASIC, основан на распространении микро- и персональных компьютеров, на которых он широко используется. Язык Modula-2 был разработан тем же автором в 1975 году специально для программирования встроенных промышленных и научных вычислительных систем реального времени. Pascal и Modula-2 весьма похожи по стилю и структуре, хотя Modula-2 обладает большим количеством функций и синтаксических конструкций.
В Pascal и Modula-2 предполагается, что программист постоянно остается в ограниченной среде, предоставляемой программой, что совсем не соответствует реальной практике. Гибкость их использования несколько выше, если некоторые программы для специальных приложений (драйверы устройств, обработчики прерываний) написаны на языке ассемблера. Оба языка поддерживают подключение внешних модулей на ассемблере. Pascal и Modula-2 являются хорошим средством для разработки встроенных систем, но не подходят для сложных приложений в распределенных компьютерных системах. Их ориентация на структуру делает программы хорошо читаемыми, что является существенным фактором для последующего сопровождения.
Языки четвертого поколения (CASE средства).Средства CASE (Computer Aided Software Engenering) получили широкое распространение при разработке приложений реального времени в силу большой сложности последних. Языки «четвертого поколения» представляют собой формализованный способ описания объектов, их свойств и взаимоотношений между собой. По этому формальному описанию «компилятор» строит текст приложения на языке более низкого уровня (обычно предоставляется выбор между C/C++/Java). Затем этот текст можно скомпилировать уже «обычным» компилятором.
Заключение
Системы реального времени сильно привязаны к окружающим событиям. Любое действие или бездействие такой системы не остается без последствий. Достаточно сложным является организация действий системы на параллельные запросы, поэтому особое внимание в работе уделяется синхронизации процессов. Для программ реального времени особенно важной проблемой становится распределение ресурсов и их управляемость. Создание программного обеспечения для информационных систем (ИС) реального времени достаточно сложная задача. Анализ результатов работы в жестких временных ограничениях и условиях параллелизма значительно труднее, чем в последовательных системах. В случае обнаружения ошибки в работе ИС реального времени достаточно сложно бывает обнаружить причину ошибки.
В данной работе было приведено описание:
1. Характеристик систем реального времени.
2. Применения систем реального времени.
3. Систем жёсткого и мягкого реального времени.
4. Архитектуры операционных систем реального времени.
5. Особенностей программирования систем реального времени.
6. Методов программирования в реальном времени.
реальный время программирование язык
Cписок использованной литературы
1. Jean J. Labrosse, et al. Chapter 8. DSP in Embedded Systems // Embedded Software. -- Newnes, 2007. -- 792 p.
2. Jack Ganssle and Michael Barr. Embedded systems dictionary. -- CMP Books, 2003. -- 293 p.
3. Dimosthenis Kyriazis, Theodora Varvarigou, Kleopatra Konstanteli. Achieving Real-Time in Distributed Computing. -- IGI Global, 2011. -- 452 p.
4. Rajib Mall. Real-Time Systems: Theory and Practice. -- IGI Global, 2006. -- 242 p.
5. Phillip A. Laplante, Seppo J. Ovaska. Real-Time Systems Design and Analysis: Tools for the Practitioner. -- John Wiley & Sons, 2011. -- 560 p.
6. Стивен Баррет, Даниэль Пак. Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68НС12 / НСS12 с применением языка С. -- ДМК-Пресс, 2014. -- 640 p.
7. Зыль С. Операционная система реального времени QNX: от теории к практике. -- 2-е изд. -- СПб.: БХВ-Петербург, 2004. -- 192 с.
8. Зыль С. QNX Momentics. Основы применения. -- СПб.: БХВ-Петербург, 2004. -- 256 с.
9. Кёртен Р. Введение в QNX/Neutrino 2. -- СПб.: Петрополис, 2001. -- 512 с.
10. Ослэндер Д.М., Риджли Дж.Р., Рингенберг Дж.Д. Управляющие программы для механических систем: Объектно-ориентированное проектирование систем реального времени. -- М.: Бином. Лаборатория знаний, 2004. -- 416 с.
Размещено на Allbest.ru
Подобные документы
Основные характеристики систем реального времени, типы архитектур. Система приоритетов процессов (задач) и алгоритмы диспетчеризации. Понятие отказоустойчивости, причины сбоев. Отказоустойчивость в существующих системах реального времени (QNX Neutrino).
контрольная работа [428,8 K], добавлен 09.03.2013Обзор требований проблемной области. Особенности управления задачами. Исполнительные системы реального времени. Программирование на уровне микропроцессоров. Модели и методы предметной области. Реализация прототипа системы реального времени.
курсовая работа [263,1 K], добавлен 15.02.2005Классификация систем реального времени. Ядра и операционные системы реального времени. Задачи, процессы, потоки. Преимущества и недостатки потоков. Свойства, планирование, синхронизация задач. Связанные задачи. Синхронизация с внешними событиями.
реферат [391,5 K], добавлен 28.12.2007Планирование задач в операционной системе реального времени. Основные виды планирования применительно к задачам реального времени. Выбор приемлемого алгоритма планирования при проектировании RTS. Статическое прогнозирование с использованием таблиц.
контрольная работа [40,7 K], добавлен 28.05.2014Рассмотрение основных принципов и методов проектирования систем реального времени. Описание конструктивных и функциональных особенностей объекта управления, построение диаграммы задач. Выбор аппаратной архитектуры, модели процессов-потоков, интерфейса.
курсовая работа [1,2 M], добавлен 19.01.2015Инструментальные средства проектирования интеллектуальных систем. Анализ традиционных языков программирования и представления знаний. Использование интегрированной инструментальной среды G2 для создания интеллектуальных систем реального времени.
контрольная работа [548,3 K], добавлен 18.05.2019Требования к операционной системе Linux, встраиваемые приложения. Предсказуемость поведения, свойства ОС реального времени. Структура ядра; системные вызовы; работа с файлами. Стандартные устройства; обзор программирования; компилирование и линковка.
лекция [112,2 K], добавлен 29.07.2012Особенности построения программ реального времени на основе параллельных процессов. Реализация простой программы, которая выводит на экран текст приветствия и завершается. Создание массива из трехсот параллельных процессов, получающих уникальный индекс.
статья [19,8 K], добавлен 08.12.2016Операционные системы пакетной обработки, разделения времени, реального времени. Особенности алгоритмов управления ресурсами. Поддержка многопользовательского режима. Вытесняющая и невытесняющая многозадачность. Операционные системы и глобальные сети.
реферат [55,0 K], добавлен 11.12.2011Техника создания графики при помощи API функций, экспортируемых библиотекой GDI32.DLL. Разработка на языке программирования С++ в среде программирования Microsoft Visual C++ программы для отображения часов реального времени в цифровом и аналоговом виде.
курсовая работа [2,8 M], добавлен 27.01.2010