Как изменить программное обеспечение, чтобы стать в режиме реального времени? [закрыто]

9

Во-первых, я хотел бы отметить, что я новичок в системном программировании в реальном времени, поэтому я не уверен, что мои вопросы верны. Извините за это, но мне нужна помощь

Короче вопрос: как внедрить жесткое программное обеспечение в реальном времени, чтобы быть уверенным, что оно соответствует жестким срокам? Нужно использовать некоторые функции QNX? Или достаточно написать его для linux, портировать на QNX и по умолчанию он будет в реальном времени?

Полный вопрос: Мы реализовали несколько сложных кроссплатформенных многопроцессорных программ с межпроцессным взаимодействием для Linux, Windows, Android и QNX. Язык программирования - C ++, мы используем Boost и другие библиотеки. Наше программное обеспечение делает свою работу хорошо и быстро, но все еще является прототипом. Для производственных целей мы должны делать это в режиме реального времени. Некоторые из наших функций должны быть в режиме реального времени и очень надежными, потому что они очень важны, и от них может зависеть безопасность людей, использующих наше программное обеспечение. Они работают довольно быстро - до сотен миллисекунд. Но я не уверен, что наша система действительно работает в режиме реального времени из-за этого факта (я прав?).

Поэтому возникает главный вопрос: как изменить наше программное обеспечение в режиме реального времени? Я много гуглил, но до сих пор не знаю, как это сделать.

Некоторая дополнительная информация о наших платформах: Linux и Windows в настоящее время мы используем только для целей тестирования. Android - мы до сих пор не решили, нужен ли он нам. QNX - наша целевая ОС для производства. Я предполагаю, что ответом на мой следующий вопрос будет «НЕТ» :) Но возможно ли вообще внедрить кроссплатформенное программное обеспечение реального времени (для ОС реального времени (RTOS), а также для ОС общего назначения (GPOS))?

Возможно, нам нужно приложить усилия для реализации всех функций реального времени только для QNX? Но я до сих пор не понимаю, как это сделать. Может ли кто-нибудь пролить свет на этот вопрос?

user172825
источник
55
Если ваш проект критически важен для безопасности, вам действительно нужен кто-то, кто понимает системы реального времени в вашей платежной ведомости.
Blrfl
18
Система реального времени - насколько точен ваш код с точки зрения времени выполнения, а не является ли он быстрым или медленным.
Паготти
22
Мне кажется, что вы не модифицируете существующее программное обеспечение, чтобы оно стало в реальном времени, вы разрабатываете и пишете новое программное обеспечение с нуля, принимая во внимание явные ограничения в реальном времени. И ваш вопрос слишком широкий: что конкретно делает ваше программное обеспечение? На какой именно системе реального времени, для какой конкретной встроенной системы (какая цель: информационно-развлекательная система в коммерческих самолетах не совпадает с управлением ядерным реактором)? Вы должны отредактировать свой вопрос, чтобы быть более конкретным, точным и мотивировать его.
Старынкевич
24
Перечитайте комментарий @ Blrfl. И затем перечитайте это снова, и снова, и снова, пока вы не наймете человека с надлежащим опытом. Или убедитесь, что ваша страховка ответственности оплачена. Потому что, если вы создаете критически важное для безопасности программное обеспечение с требованиями в реальном времени и не имеете такого опыта, вы подвергаетесь преступной халатности.
kdgregory
4
Вы спросили: « Возможно ли вообще реализовать кроссплатформенное программное обеспечение реального времени (для ОС реального времени (RTOS), а также для ОС общего назначения (GPOS))? » Я предполагаю, что нет, в противном случае ОСРВ не будут существовать. «Cross Platform» очень похож на «Святой Грааль».

Ответы:

38

Быстрый не означает в реальном времени, а в реальном времени не означает быстрый.

В реальном времени означает, что дата, когда результат доставлен, так же важен, как и его ценность. Другими словами, если результат имеет правильное значение, но доставлен слишком рано или слишком поздно, тогда общий результат неверен.

Например, подумайте о видеоплеере. Если видеокадры не отображаются с правильной скоростью, пользователи не будут удовлетворены. Хуже, если изображение и звук не синхронизированы.

Этот пример показывает, что некоторые приложения реального времени могут быть реализованы в современных ОС общего назначения.

Но существует различие между жестким в реальном времени и мягким в реальном времени в отношении последствий пропущенного срока: в мягких системах в реальном времени это просто раздражение или ухудшенный сервис (представьте, что замерзшие изображения в течение нескольких секунд пример видеоплеера), хотя это (потенциально катастрофический) сбой в системе реального времени, например, на атомной электростанции.

mouviciel
источник
Мистер Мувичиэль, Спасибо, что ответили на мой вопрос. Нам нужны некоторые функции, чтобы они были сложными в реальном времени, другие могут быть мягкими в реальном времени. Я не понимаю, как писать программы, чтобы гарантировать сроки? Не могли бы вы пролить свет на этот вопрос, пожалуйста?
user172825
7
@ user172825 - Ответы на этот вопрос охватывают полки библиотек. Отправной точкой может быть поиск в «программировании в реальном времени», соответствующая статья в Википедии или учебные пособия по ОСРВ, таким как QNX или RTEMS.
mouviciel
Это был самый сложный вопрос для меня. Я нашел много больших книг по этой теме. Но я надеялся, что это можно объяснить несколькими предложениями. :)
user172825
5
« В информатике есть только две сложные вещи: аннулирование кэша и присвоение имен ». - Фил Карлтон, ОК, и в режиме реального времени. Там одно предложение объясняет, почему это нельзя объяснить двумя предложениями. Теперь мы вернемся к вашему регулярному программированию.
1
Я считаю, что называть «тяжелое в реальном времени» «детерминированным временем» обычно помогает людям понять смысл.
whatsisname
15

Как уже сказал @mouviciel , в режиме реального времени и быстрый - это два независимых свойства, хотя многие крайние сроки в реальном времени подразумевают необходимость относительно быстрого отклика.

При написании программного обеспечения для реального времени наиболее важным свойством рядом с правильным ответом является то, что вы можете точно предсказать, насколько быстро будет получен ответ. Для сложных функций реального времени вы даже должны быть в состоянии гарантировать, что крайний срок будет соблюден при всех возможных условиях, за исключением полного сбоя питания.

Типичные источники непредсказуемости можно найти в

  • Динамическое выделение памяти и сборка мусора
  • (Более высокий приоритет) прерывания
  • Планировщик в ОС
  • Динамическое создание и уничтожение объектов
  • Большие объемы условно исполняемого кода

Я не говорю, что вы должны избегать этих областей (как вы, скорее всего, не можете), но вы должны знать, как они могут повлиять на легкость, с которой вы можете предсказать, что вы будете соблюдать сроки в реальном времени для соответствующих функций.

Барт ван Инген Шенау
источник
4
В условно исполняемом коде будьте осторожны с амортизированными алгоритмами, в которых большую часть времени операция является дешевой, но может иногда превращаться в гораздо более дорогую операцию, например, когда вектор добавляется, когда требуется realloc.
урод
2
В некоторых случаях вам может потребоваться выполнить анализ WCET , прогнозируя время выполнения с точностью до миллисекунды
Старынкевич
3
@ user172825: Профилирование может помочь, но многое зависит от опыта и знания языка и библиотек.
Барт ван Инген Шенау
3
Профилирование может быть недостаточно хорошим, если у вас есть жесткие требования в реальном времени. Если время выполнения не является полностью детерминированным, то его профилирование может создать впечатление, что оно всегда будет выполнено к крайнему сроку, тогда как на самом деле он соответствует только крайнему сроку 99 раз из 100. Если у вас есть жесткие требования в реальном времени, он нужно встретить его 100 раз из 100.
James_pic
2
@ user172825 В режиме реального времени для программного обеспечения то же самое, что операция на головном мозге для медицины - вам нужен большой опыт и навыки, чтобы правильно его реализовать, и вы должны быть действительно, действительно уверены в том, что вы делаете. Эти проекты лучше сделать под наблюдением квалифицированного специалиста области. Они не являются чем-то, что вы можете бросить обычному разработчику и сказать «заставить эту штуку работать как система реального времени».
Т. Сар
8

Я полагаю , что два-предложение объяснение реального времени является то , что система реального времени предназначена для понимания и управления в наихудшем случае времени отклика от входов к выходам изменяющихся меняется.

Это требует анализа, охватывающего всю систему. Допустим, у вас есть тривиальная система, состоящая из клавиатуры USB и усилителя тормозов. Какую отзывчивость вы можете достичь с помощью этой системы? Возможно, вам придется рассмотреть:

  • частота входного опроса и сколько времени это займет
  • задержка входного прерывания
  • время переключения контекста операционной системы после ввода события
  • операционная система приоритетов задач
  • избегая использования динамического выделения или виртуальной памяти в программе, чтобы избежать непредсказуемой задержки ответа или событий OOM
  • избегая использования сборки мусора
  • избегая использования алгоритмов O (n) или хуже с высоким или непредсказуемым значением N (замедляет ли загрузка очень большого списка воспроизведения в развлекательную систему вашего автомобиля замедление его торможения?)
  • учитывать задержку диска или сети (например, использование шины CAN в автомобилях)
  • задержка управления выходом

В такой среде, как правило, особое внимание уделяется надежности, например, стандартам MISRA C.

pjc50
источник
Верно ли и то, что реальное время включает рассмотрение того, является ли операция детерминированной, возможно рекурсивной или даже вообще вычисляемой в некоторых случаях?
Да, все они были бы «неограниченными». Рекурсивные алгоритмы могут быть разрешены, если их использование стека имеет верхнюю границу.
pjc50
5
avoiding use of garbage collection- Это должно быть avoiding use of non-deterministic memory management. Сборка мусора может выполняться в режиме реального времени, и ручное управление памятью не обязательно является детерминированным (см. Типичную mallocреализацию для C).
8bittree