Какие компьютеры можно отнести к системам реального времени
Обновлено: 21.11.2024
Большинство людей ответили бы утвердительно, но, учитывая определение реального времени, ответ отрицательный. Независимо от того, насколько быстро загружалась статья, она была написана задолго до того, как вы запросили ее прочитать. Поскольку источник не был сгенерирован немедленно, он не считается в режиме реального времени.
Концептуально, под реальным временем понимается производство и передача информации со скоростью опыта, то есть так же быстро, как в настоящий момент.
Другими словами, информация, изображение, видео или звук создаются и доставляются так же быстро, как если бы мы разговаривали лицом к лицу.
Тем не менее, термин "реальное время" приобретает разные значения, поскольку применяется к разным контекстам. Эта статья дает определение реального времени и обсуждает его в контексте:
- Развлекательная программа
- Трансляция
- ТВ
- Вычисления
- Данные
- Операционные системы
- Общие системы
- Текст
- Платежи
- Информационные панели
- Маркетинг и
- Обновления программного обеспечения
Я также провел анализ, чтобы увидеть, "насколько на самом деле работает режим реального времени", изучив скорость доставки в таких контекстах, как отметки "Нравится" в Instagram и Facebook, размещение заказов Robinhood, обновления Google Планета Земля и другие популярные варианты использования.
Вне поля зрения: в реальном времени с Биллом Махером и полимеразной цепной реакцией
Если вы ищете информацию о шоу В реальном времени с Биллом Махером, это не тема этой статьи. Вместо этого посетите сайт сети HBO для получения дополнительной информации.
Эта статья также не имеет ничего общего с полимеразной цепной реакцией в реальном времени, которая относится к методу сбора данных для количественного определения мРНК. Несмотря на некоторые сходства, эта статья посвящена информационным технологиям и бизнесу, а не естественным наукам.
Определение в реальном времени
Под реальным временем понимается доставка информации через систему, максимально приближенная к скорости восприятия, то есть информация создается, передается и принимается так же быстро, как при личном разговоре.
Например, отметка «Нравится» в Instagram считается отметкой «Нравится» в режиме реального времени, потому что отметка «Нравится» появляется почти мгновенно. Точно так же вычисления в реальном времени относятся к системам, которые реагируют в течение милли- или микросекунд. Задержка незначительна, и это почти так же быстро, как разговор, что делает его в реальном времени.
«В реальном времени» и «в реальном времени»
Например, можно написать «это компьютер реального времени» и «этот компьютер обрабатывает информацию в реальном времени».
Вычисления в реальном времени
Вычисления в реальном времени — это общий термин для программ, которые должны предоставлять выходные данные в течение заданного пользователем периода времени после ввода. В большинстве случаев это время отклика составляет микросекунды. Например, платформы онлайн-торговли должны регистрировать транзакции за микросекунды, чтобы гарантировать цену.
Вычисления в реальном времени зависят от нескольких других систем реального времени, включая операционные системы реального времени, синхронные языки программирования и сети реального времени. Каждый из них обеспечивает правильную основу для выполнения вычислений в реальном времени.
Операционная система реального времени
Операционная система – это программное обеспечение самого низкого уровня на компьютере, которое управляет аппаратным обеспечением устройства. Операционная система реального времени — это операционная система с вычислительными ограничениями в реальном времени, совместимыми с разработкой программного обеспечения для работы в реальном времени.
Синхронные языки программирования
Синхронные языки программирования — это языки, которые постоянно взаимодействуют со своей средой, а не получают входные данные, обрабатывают их и передают выходные данные. Самые ранние синхронные языки, Esterel, Lustre и Signal, были изобретены во Франции в 80-х годах. Мы не будем вдаваться в подробности того, как они работают — просто знайте, что они необходимы для вычислений в реальном времени.
Сети реального времени
В то время как операционные системы и языки синхронного программирования находятся на одном компьютере, сети по определению представляют собой совокупность компьютеров. Сети реального времени — это не что иное, как паутины подключенных компьютеров, на которых установлены операционные системы и языки реального времени.
Распределенные и встроенные системы
На более высоком уровне сети реального времени можно рассматривать с точки зрения двух систем: распределенных и встроенных систем. Распределенные системы — это группы компьютеров, предназначенные для достижения общей цели. Другими словами, их можно сравнить с сетями.
Однако встроенные системы — это независимые аппаратные блоки внутри компьютера, выполняющие функцию, направленную на достижение цели, общей для компьютера и других встроенных систем.
В контексте вычислений в реальном времени общей целью как распределенных, так и встроенных систем является обработка данных в реальном времени.
Данные в реальном времени
Помимо вычислений, до сих пор мы обсуждали реальное время в основном в контексте развлечений.Данные в режиме реального времени аналогичны трансляциям и прямым трансляциям, но вместо контента пользователя передача представляет собой данные.
Данные в режиме реального времени – это информация, которая предоставляется сразу же после ее сбора. Отличным примером этого является размещение рекламы в Интернете. Объявления размещаются на основе алгоритма оптимизации, учитывающего цены, цели и временные ограничения.
Хорошим примером данных не в режиме реального времени являются данные Google Планета Земля. Хотя кажется, что Google Планета Земля всегда актуальна, спутниковые изображения многократно обрабатываются перед загрузкой на сайт.
Активные базы данных
Точно так же, как для вычислений в реальном времени требуются операционные системы, синхронные языки и сети, данные в реальном времени имеют технические требования. Активные базы данных позволяют непрерывно передавать данные в режиме реального времени от ввода до вывода.
Реальное время или пакетная обработка
Похожий, но совершенно другой тип обработки данных называется пакетной обработкой. Пакетная обработка собирает группы данных заданного пользователем размера, затем обрабатывает эти группы и выдает результат. Ранее мы упоминали, что Google Планета Земля работает не в режиме реального времени. Это потому, что данные обрабатываются пакетами — постфактум.
Насколько реальное время в реальном времени?
Прежде чем перейти к другим важным сравнениям и популярным контекстам, пора поговорить о слоне в комнате. Предполагается, что реальное время должно быть немедленным, но на самом деле ничто не может сравниться со скоростью опыта. В связи с этим возникает вопрос: насколько реальное время соответствует реальному времени?
Чтобы ответить на этот вопрос, я провел несколько экспериментов и собрал данные о 5 распространенных примерах передачи данных, которые, как мы часто представляем, происходят в режиме реального времени, то есть когда информация создается и принимается почти мгновенно. Пять примеров — это заказы на акции Robinhood, изменения в бизнес-информации Google, отметки "Нравится" в Instagram, отметки "Нравится" в Facebook, обновления Google Планета Земля.
Робин Гуд
Размещение ордеров Robinhood в обычные торговые часы (с 9:30 до 16:00 по восточному времени) в большинстве случаев осуществляется в режиме реального времени. Я провел эксперимент с 10 ордерами на акции с небольшим объемом и обнаружил, что 100% из них были выполнены мгновенно. Это означает, что технологию Robinhood действительно можно рассматривать в режиме реального времени.
Тем не менее, маршрутизация ордеров на акции Robinhood требует присутствия покупателя и продавца по обе стороны сделки. Это означает, что крупномасштабная сделка с акциями низкого порядка может привести к задержке транзакции.
Бизнес-информация Google
Когда вы ищете компании на Картах Google, может показаться, что информация о большинстве компаний актуальна. Однако в некоторых местах предприятия неактивны, и вы можете вообще не увидеть список. Этим владельцам необходимо обновить свою информацию.
Обновление не всегда происходит немедленно, и в некоторых случаях Google не позволяет вам вносить изменения, поскольку Google получает информацию из других источников (например, из отзывов). В целом это означает, что компании и карты Google не являются программным обеспечением для работы в реальном времени.
Нравится в Instagram
Чтобы проверить, сколько лайков в Instagram поступает в режиме реального времени, я поставил лайк четырем фотографиям моего друга и умножил на то, сколько времени потребовалось, чтобы уведомление появилось на изображении. Хотите верьте, хотите нет, но средняя задержка составляет 2,75 секунды. Эта задержка считается реальным временем, но я, например, думал, что это быстрее.
Нравится на Facebook
Отметки «Нравится» на Facebook имели такую же задержку, как и в Instagram. После тестирования четырех лайков средняя задержка составила 2,29 секунды. Как и в Instagram, это считается в режиме реального времени, но скорость, безусловно, улучшится в будущем.
Google Планета Земля
Google Планета Земля показывает спутниковые изображения и изображения улиц Земли. Процесс сбора этих данных требует, чтобы Google ездил на машине буквально по каждой главной дороге на Земле. Кроме того, после этого Google необходимо обработать изображения, чтобы размыть лица людей и избежать показа конфиденциальной личной информации. Из-за этой задержки Google Планета Земля не является системой реального времени.
В реальном времени и в реальном времени
Прямая передача означает загрузку информации для распространения, как только это происходит. Наиболее распространенными примерами являются прямые радио- и телепрограммы. Однако если эти программы не доставляются немедленно, они не работают в режиме реального времени.
Если вы когда-либо смотрели прямую трансляцию спортивных соревнований в баре, вы, вероятно, сожалели о том, что люди, смотрящие другой телевизор, кричат перед окончанием игры. В трансляции есть разные задержки, потому что это не мгновенно. Время загрузки в реальном времени, но доставка информации не в режиме реального времени.
Некоторые прямые трансляции действительно транслируются в режиме реального времени. Они постоянно совершенствуются, и в будущем самый быстрый провайдер захватит рынок.
Реальное время и потоковое вещание
Потоковая передача — это непрерывный поток данных из источника. Хотя мы чаще всего слышим, что это используется в контексте видео по запросу (например, Netflix и Disney+), потоковая передача также применима к живым развлечениям. Пока поток данных непрерывен, он является потоковым.
Однако видео по запросу не работает в режиме реального времени, так как оно не создается и не доставляется одновременно. Как эта статья была написана до того, как вы щелкнули ее, чтобы прочитать, так и видео по запросу.
Другими словами, если потоковая передача контента производится немедленно, например прямые трансляции без задержки, это происходит в реальном времени. В противном случае это не так.
ТВ в реальном времени
Так же, как и в потоковом вещании, поскольку ТВ записывается заранее, это не в реальном времени. Обратите внимание, однако, что в кинопроизводстве кинематографическая попытка изобразить события по мере их возникновения называется «техникой реального времени». Шоу 24 попыталось это сделать. Но это немного выходит за рамки статьи...
В реальном времени и почти в реальном времени
"Близкое к реальному времени" – это термин, используемый для обозначения того факта, что реальное время никогда не на самом деле является реальным. Как видно из примеров лайков в Instagram и Facebook, самая быстрая обработка, доступная сегодня, может составлять микросекунды, но она никогда не достигает 100% скорости взаимодействия.
Вы можете услышать, как кто-то говорит, что компьютерный процесс работает «почти в реальном времени». В большинстве случаев они имеют в виду задержку из-за интерпретации человеком выходных данных системы реального времени.
Например, результаты опроса в прямом эфире в студии могут быть собраны в режиме реального времени, но, поскольку их должен интерпретировать диктор, весь процесс происходит «почти в режиме реального времени».
Текст в реальном времени
Интересным нововведением стал текст в реальном времени. В сообщениях текст в реальном времени — это передача каждого символа по мере его ввода, независимо от того, авторизует ли отправитель сообщение. Сегодня его в основном используют для экранных субтитров, написанных из устной речи для слабослышащих или глухих.
Платежи в реальном времени
Платежи в режиме реального времени, вероятно, вызовут переворот в платежной индустрии в 2023 году, когда станет доступно решение Федеральной резервной системы США для работы в режиме реального времени. Но что это такое?
Платежи в режиме реального времени — это денежные переводы, которые происходят практически мгновенно, а не в течение нескольких часов или даже суток, чтобы перевести деньги с одного счета на другой.
Несмотря на то, что социальные платежные приложения, такие как Venmo, работают мгновенно внутри приложения, моментальный перевод денег на банковский счет пока невозможен.
А если денег нет на счету в банке, то для ежедневных покупок они не годятся. Кроме того, приложения для социальных платежей обычно имеют ограничение на перевод, например 300 долларов США.
Поэтому платежи в режиме реального времени, доступные на банковских счетах, несомненно, станут революционным нововведением. Снимаю шляпу перед ФРС США.
Панель управления в реальном времени
Информационная панель – это одностраничное представление нескольких показателей. Первоначально термин «приборная панель» использовался для обозначения приборной панели автомобиля или самолета, где были доступны такие показатели, как скорость и температура двигателя. И это было в режиме реального времени.
В цифровом мире информационные панели эволюционировали, чтобы показывать эффективность таких объектов, как веб-сайты или производительность производства.
Но во многих случаях эти информационные панели не работали в режиме реального времени. Вместо этого аналитики рисовали данные и создавали визуализации, которые затем копировали и вставляли в панель управления.
Информационная панель в реальном времени – это панель, в которой источник данных для метрик напрямую связан с источником сбора, состоящим из данных в реальном времени. Обычный инструмент для информационных панелей в реальном времени — Tableau.
Маркетинг в реальном времени
Маркетинг в реальном времени использует данные в режиме реального времени для создания индивидуального контента и решений для клиентов. Например, если в каком-то районе неожиданно идет дождь, маркетологи одежды могут быстро приспособиться к рекламе непромокаемых курток в социальных сетях. А когда дождь перестанет, продвигать сапоги.
Обновление в реальном времени
На очень высоком уровне понятие «обновление в реальном времени» относится к любому немедленному получению информации, которая позволяет получателю предпринять соответствующие действия. Вы можете применить это почти ко всем рассмотренным выше контекстам.
Узнайте, какое влияние системы реального времени оказывают на приложения Интернета вещей в самых разных отраслях: от производства до здравоохранения, нефтегазовой отрасли и робототехники.
Ключевые выводы
Система реального времени характеризуется способностью давать ожидаемый результат в установленные сроки (своевременность), а также координировать независимые часы и работать вместе в унисон (синхронизация времени).
Система жесткого реального времени имеет абсолютные крайние сроки, и если эти выделенные промежутки времени будут пропущены, произойдет сбой системы. В системах мягкого реального времени система продолжает функционировать даже при пропуске сроков, но с нежелательным более низким качеством вывода.
Возможности системы реального времени «измеряются» на основе двух требований: задержка и дрожание вычислений.
Intel предлагает оборудование и программное обеспечение на уровне эталонной системы для разработки приложений реального времени, в которых каждый элемент должен работать надежно и предсказуемо в течение определенного временного окна, чтобы соответствовать жестким требованиям реального времени.
Чтобы помочь компаниям удовлетворить растущие потребности в обработке данных в режиме реального времени с помощью надежных и предсказуемых систем реального времени, Intel предлагает решения, технологии и партнеров, чтобы это произошло.
Чтобы помочь компаниям удовлетворить растущие потребности в обработке данных в режиме реального времени с помощью надежных и предсказуемых систем реального времени, Intel предлагает решения, технологии и партнеров, чтобы это произошло.
Потребность в системах реального времени
Растущее глобальное подключение, изменяющиеся потребности потребителей в постоянно доступных данных и постоянно включенных корпоративных средах с датчиками стимулируют создание, сбор и анализ экспоненциальных объемов данных. По оценкам IDC, к 2025 году будет создано 79,4 1 зеттабайт данных, и почти 30% 2 из них потребуют обработки в режиме реального времени, обеспечиваемой системами реального времени.
Потребность в обработке данных в режиме реального времени особенно важна для компаний, работающих в сфере робототехники, производства, здравоохранения и высокоточных отраслей, таких как нефтегазовая и энергетическая отрасли, которые полагаются на данные в режиме реального времени для постоянного повышения безопасности и эффективности. и надежность.
Одним из ключевых факторов, обеспечивающих обработку данных в режиме реального времени для предприятий в таких отраслях, является способность системы расставлять приоритеты, управлять и выполнять рабочие нагрузки в реальном времени по сравнению с рабочими нагрузками, выполняемыми не в реальном времени.
Например, современные производители автомобилей в значительной степени полагаются на роботов для совместной работы на производственной линии по сборке автомобиля. Роботы будут передавать друг другу детали, сверлить или сваривать, а также проводить проверки безопасности — все это требует высокого уровня точности и тщательного расчета времени. В этом случае система реального времени должна иметь возможность не только обрабатывать данные в определенные и предсказуемые сроки, но и обеспечивать выполнение критических задач, таких как рабочие нагрузки, связанные с безопасностью, до выполнения менее важных задач. р>
Итак, как компании, работающие с данными, могут гарантировать, что данные обрабатываются в нужное время и в том виде, в каком они должны быть? Системы реального времени.
Эта статья представляет собой краткий обзор требований к вычислениям в реальном времени и методов достижения производительности в реальном времени.
Авторы: Джеки Кэй
Дата написания: 01 февраля 2016 г.
Последнее изменение: 2016-05
Этот документ призван обобщить требования к вычислениям в реальном времени и проблемы реализации производительности в реальном времени. В нем также представлены варианты структуры ROS 2 для обеспечения совместимости в реальном времени.
Роботизированные системы должны быстро реагировать. В критически важных приложениях задержка менее миллисекунды в системе может привести к катастрофическому отказу. Чтобы ROS 2 соответствовала потребностям сообщества робототехники, основные программные компоненты не должны противоречить требованиям вычислений в реальном времени.
Определение вычислений в реальном времени
Определение вычислений в реальном времени требует определения нескольких других ключевых терминов:
Детерминизм. Система является детерминированной, если она всегда выдает один и тот же результат при известном вводе. Выход недетерминированной системы будет иметь случайные вариации.
Крайний срок. Крайний срок – это конечное время, в течение которого должна быть выполнена определенная задача.
Качество обслуживания: общая производительность сети. Включает такие факторы, как полоса пропускания, пропускная способность, доступность, дрожание, задержка и частота ошибок.
Программное обеспечение, работающее в режиме реального времени, гарантирует правильные вычисления в нужное время.
Программные системыжесткого реального времени имеют набор строгих сроков, и нарушение срока считается системным сбоем. Примеры систем жесткого реального времени: сенсоры самолетов и системы автопилота, космические корабли и планетоходы.
Системы мягкого реального времени пытаются уложиться в сроки, но не терпят неудачу, если крайний срок пропущен. Однако в таком случае они могут ухудшить качество обслуживания, чтобы повысить скорость реагирования. Примеры систем мягкого реального времени: программное обеспечение для доставки аудио и видео для развлечения (задержка желательна, но не катастрофична).
Фирменные системы реального времени считают полученную информацию/вычисления, сделанные после крайнего срока, недействительными. Подобно системам мягкого реального времени, они не выходят из строя после пропущенного крайнего срока и могут ухудшить качество обслуживания, если крайний срок пропущен (1). Примеры фирменных систем реального времени: системы финансового прогнозирования, роботизированные сборочные линии (2).
Компьютерные системы реального времени часто ассоциируются с системами с малой задержкой. Многие приложения вычислений в реальном времени также являются приложениями с малой задержкой (например, автоматизированные системы пилотирования должны реагировать на внезапные изменения в окружающей среде). Однако система реального времени определяется не малой задержкой, а детерминированным расписанием: должно быть гарантировано, что система завершит определенную задачу к определенному времени. Поэтому важно, чтобы задержка в системе была измеряемой и была установлена максимально допустимая задержка для задач.
Компьютерной системе реального времени требуется как операционная система, работающая в реальном времени, так и пользовательский код, обеспечивающий детерминированное выполнение. Ни детерминированный пользовательский код в операционной системе, не работающей в реальном времени, ни недетерминированный код в операционной системе, работающей в реальном времени, не приведут к производительности в реальном времени.
Некоторые примеры сред реального времени:
Исправление ядра Linux RT_PREEMPT, которое изменяет планировщик Linux, делая его полностью вытесняемым (3).
Xenomai, совместное ядро (или гипервизор), совместимое с POSIX, которое обеспечивает взаимодействие ядра в реальном времени с ядром Linux. Ядро Linux рассматривается как бездействующая задача планировщика ядра реального времени (задача с самым низким приоритетом).
RTAI, альтернативное решение на базе ядра.
QNX Neutrino — POSIX-совместимая операционная система реального времени для критически важных систем.
Передовой опыт в области вычислений в реальном времени
В целом операционная система может гарантировать, что задачи, которые она обрабатывает для разработчика, такие как планирование потоков, являются детерминированными, но операционная система может не гарантировать, что код разработчика будет выполняться в режиме реального времени. Следовательно, разработчик должен знать, каковы детерминированные гарантии существующей системы и что он должен сделать, чтобы написать код жесткого реального времени поверх ОС.
В этом разделе рассматриваются различные стратегии разработки на основе ОС реального времени, поскольку эти стратегии могут быть применимы к ROS 2. Шаблоны сосредоточены на сценарии использования разработки на C/C++ в среде реального времени на основе Linux. время ОС (например, RT_PREEMPT ), но общие понятия применимы и к другим платформам. Большинство шаблонов ориентированы на обходные пути для блокировки вызовов в ОС, поскольку любая операция, включающая блокировку на неопределенное время, недетерминирована.
Привычно разделять код реального времени на три части. небезопасный в реальном времени раздел в начале процесса, который предварительно выделяет память в куче, запускает потоки и т. д., безопасный в реальном времени раздел (часто реализованный в виде цикла) и безопасный не в реальном времени «разрыв» ", который освобождает память по мере необходимости и т. д. "Путь к коду в реальном времени" относится к средней части выполнения.
Управление памятью
Правильное управление памятью имеет решающее значение для производительности в реальном времени. В общем, программист должен избегать ошибок страниц в пути кода реального времени. Во время ошибки страницы ЦП приостанавливает все вычисления и загружает недостающую страницу с диска в ОЗУ (или в кэш, или в регистры). Загрузка данных с диска — медленная и непредсказуемая операция. Однако ошибки страниц необходимы, иначе компьютеру не хватит памяти. Решение состоит в том, чтобы избежать ошибок страницы.
Динамическое выделение памяти может привести к снижению производительности в реальном времени. Вызовы malloc/new и free/delete, вероятно, приведут к ошибкам страницы. Кроме того, куча выделяет и освобождает блоки памяти таким образом, что это приводит к фрагментации памяти, что приводит к низкой производительности операций чтения и записи, поскольку ОС, возможно, придется сканировать в течение неопределенного времени в поисках свободного блока памяти.
Заблокировать память, предаварийный стек
mlockall – это системный вызов Linux для блокировки виртуального адресного пространства процесса в ОЗУ, предотвращающий выгрузку памяти, к которой будет обращаться процесс, в пространство подкачки.
Этот фрагмент кода, запускаемый в начале жизненного цикла потока, гарантирует, что во время выполнения потока не возникнет ошибок страниц. mlockall блокирует стек для потока. Вызов memset предварительно загружает каждый блок памяти стека в кеш, чтобы при доступе к стеку не возникало ошибок страницы (3).
Выделить пул динамической памяти
Во введении к этому разделу говорилось, что динамическое выделение памяти обычно небезопасно в реальном времени. Однако этот фрагмент кода показывает, как сделать динамическое выделение памяти безопасным в режиме реального времени (в основном). Он блокирует виртуальное адресное пространство до фиксированного размера, запрещает возврат освобожденной памяти ядру через sbrk и отключает mmap. Это эффективно блокирует пул памяти в куче в ОЗУ, что предотвращает ошибки страниц из-за malloc и free (3).
- Можно использовать контейнеры malloc/new, free/delete и даже STL
- Зависит от платформы/реализации
- Должен точно предсказывать размер ограниченной памяти для процесса!
- Поэтому использование контейнеров STL опасно (неограниченный размер)
- На практике работает только для процессов с небольшим объемом памяти.
Пользовательские безопасные распределители памяти в реальном времени
Распределитель по умолчанию в большинстве операционных систем не оптимизирован для обеспечения безопасности в реальном времени. Однако есть еще одна стратегия, являющаяся исключением из правила «избегать динамического выделения памяти». Исследования альтернативных распределителей динамической памяти — богатая тема для исследований (8).
Одним из таких альтернативных распределителей является TLSF (Two-Level Segregate Fit).Его также называют распределителем O(1), поскольку затраты времени на операции malloc, free и align в TLSF имеют постоянную верхнюю границу. Это создает низкий уровень фрагментации. Недостатки TLSF заключаются в том, что он не является потокобезопасным, а его текущая реализация зависит от архитектуры: предполагается, что система может осуществлять доступ с выравниванием по 4 байтам.
- Может безопасно выделять память в программе с границами памяти, неизвестными во время выполнения или компиляции
- Преимущества зависят от выбора распределителя
- Реализации пользовательских распределителей могут быть плохо протестированы, поскольку они менее широко используются.
- Дополнительная зависимость, потенциально более сложный код
- Недостатки зависят от выбора распределителя
Глобальные переменные и (статические) массивы
Глобальные переменные предварительно выделяются в начале процесса, поэтому их назначение и доступ к ним безопасны в режиме реального времени. Однако эта стратегия сопряжена со многими недостатками использования глобальных переменных.
Дружественность к кешу для доступа к указателям и vtable
Классы со многими уровнями наследования могут быть небезопасными в режиме реального времени из-за доступа к виртуальной таблице. При выполнении унаследованной функции программе необходимо получить доступ к данным, используемым в функции, виртуальной таблице для класса и инструкциям для функции, которые хранятся в разных частях памяти и могут храниться или не храниться в кеше. вместе (5).
В целом шаблоны C++ с плохой локализацией кэша плохо подходят для сред реального времени. Еще одним таким шаблоном является идиома непрозрачных указателей (PIMPL), которая удобна для совместимости с ABI и ускорения времени компиляции. Однако перескакивание между местом в памяти для объекта и указателем на его закрытые данные приводит к тому, что кеш «разливается», поскольку он загружает один фрагмент памяти, а затем другой, несвязанный фрагмент почти для каждой функции в PIMPLized объекте.
Исключения
Обработка исключений может привести к значительному снижению производительности. Столкновение с исключением имеет тенденцию помещать в стек много памяти, что часто является ограниченным ресурсом в программировании в реальном времени. Но если исключения используются правильно, они не должны беспокоить программистов реального времени (поскольку они указывают на место в программе с неопределенным поведением и являются неотъемлемой частью отладки) (6).
Знай свою проблему
Разные программы имеют разные потребности в памяти, поэтому стратегии управления памятью различаются между приложениями.
Требуемый объем памяти известен во время компиляции
- Пример: публикация сообщения фиксированного размера.
- Решение: используйте выделение стека для объектов фиксированного размера.
Требуемый объем памяти известен во время выполнения перед выполнением в реальном времени.
- Пример: публикация сообщения размера, указанного в командной строке.
- Предварительно распределите объекты переменного размера в куче, как только станет известен требуемый размер, а затем выполните код в реальном времени.
Требуемый объем памяти вычисляется в режиме реального времени
Пример: сообщение, полученное датчиками робота, определяет размер публикуемых им сообщений.
Существует несколько решений
Ввод/вывод устройства
Взаимодействие с физическими устройствами (дисковый ввод-вывод, печать на экран и т. д.) может привести к неприемлемой задержке в пути выполнения кода в реальном времени, поскольку процесс часто вынужден ждать из-за медленных физических явлений. Кроме того, многие вызовы ввода-вывода, такие как fopen, приводят к ошибкам страницы.
Держите чтение/запись диска в начале или в конце программы вне пути кода RT.
Запускать потоки, которые не запланированы в режиме реального времени, для вывода вывода на экран.
Многопоточное программирование и синхронизация
Требования к вычислениям в реальном времени меняют типичную парадигму многопоточного программирования. Выполнение программы не может блокироваться асинхронно, а потоки должны планироваться детерминировано. Операционная система реального времени удовлетворит этому требованию планирования, но разработчик все еще может попасть в ловушку. В этом разделе приведены рекомендации, как избежать этих ошибок.
Руководство по созданию темы
Создавайте потоки в начале программы. Это ограничивает недетерминированные накладные расходы на выделение потока определенной точкой процесса.
Создавайте потоки с высоким приоритетом (но не 99) с помощью планировщика FIFO, Round Robin или Deadline (см. POSIX sched API).
Избегайте инверсии приоритетов
Инверсия приоритета может произойти в системе с вытесняющим планировщиком задач и привести к взаимоблокировке. Это происходит, когда: задача с низким приоритетом получает блокировку, а затем ее вытесняет задача со средним приоритетом, а затем задача с высоким приоритетом получает блокировку, удерживаемую задачей с низким приоритетом.
Три задачи застряли в треугольнике: задача с высоким приоритетом заблокирована для задачи с низким приоритетом, которая заблокирована для задачи со средним приоритетом, потому что она была вытеснена задачей с более высоким приоритетом, а задача со средним приоритетом -приоритетная задача также блокируется для задачи с более высоким приоритетом.
Вот некоторые решения для инверсии приоритетов:
- Не используйте блокирующие примитивы синхронизации
- Отключить вытеснение для задач, удерживающих блокировки (может привести к дрожанию)
- Повысить приоритет задачи, удерживающей блокировку.
- Использовать наследование приоритета: задача, которой принадлежит блокировка, наследует приоритет задачи, пытающейся получить блокировку.
- Используйте структуры данных и алгоритмы без блокировок.
Временные кадры
Одним из способов синхронизации в реальном времени является вычисление потоком своего следующего "выстрела" (начало следующего периода выполнения). Например, если от потока требуется предоставлять обновление каждые 10 миллисекунд, и он должен выполнить операцию, которая занимает 3-6 миллисекунд, поток должен получить время перед операцией, выполнить операцию, а затем подождать оставшиеся 7 миллисекунд. -4 миллисекунды в зависимости от времени, измеренного после операции.
Самым важным для разработчика является использование во время ожидания высокоточного таймера, такого как nanosleep на платформах Linux. В противном случае в системе возникнет дрейф.
Спин-блокировки
Спин-блокировки обычно вызывают дрейф часов. Разработчику следует избегать реализации собственных спин-блокировок. Патч RT Preempt заменяет большую часть спин-блокировок ядра мьютексами, но это не может быть гарантировано на всех платформах.
Избегайте форка
Форкне является безопасным в реальном времени, поскольку он реализован с использованием копирования при записи. Это означает, что когда разветвленный процесс изменяет страницу памяти, он получает свою собственную копию этой страницы. Это приводит к ошибкам страницы!
При программировании в реальном времени следует избегать ошибок страниц, поэтому следует избегать fork в Linux, а также программ, вызывающих fork.
Тестирование и сравнение производительности
циклический тест
cycletest — это простой инструмент командной строки Linux для измерения джиттера в среде реального времени. Он принимает в качестве входных данных количество потоков, приоритет для потоков и тип планировщика. Он запускает n потоков, которые спят через равные промежутки времени (период ожидания также можно указать из командной строки) (7).
Для каждого потока циклический тест измеряет время между тем, когда поток должен проснуться, и тем, когда он действительно просыпается. Изменчивость этой задержки является дрожанием планирования в системе. Если в системе запущены процессы с недетерминированным блокирующим поведением, средняя задержка вырастет до большого числа (порядка миллисекунд), поскольку планировщик не может уложиться в сроки периодически спящих потоков, профилированных в программе.< /p>
Инструментирование кода для тестирования
Более точный способ измерить дрожание планирования в программе – это настроить цикл периодического обновления существующего кода в реальном времени для записи дрожания планирования.
Ошибки страницы
Системный вызов Linux getrusage возвращает статистику о многих событиях использования ресурсов, имеющих отношение к производительности в реальном времени, таких как незначительные и серьезные сбои страниц, свопы и блочный ввод-вывод. Он может получить эту статистику для всего процесса или для одного потока. Таким образом, легко настроить код для проверки этих событий. В частности, getrusage следует вызывать непосредственно перед и сразу после участка кода, работающего в реальном времени, и эти результаты следует сравнивать, поскольку getrusage собирает статистику за всю продолжительность потока/процесса.
Сбор этой статистики дает представление о том, какие события могут вызвать задержку/дрожание расписания, измеренные ранее описанными методами.
Руководство по дизайну для ROS 2
Стратегия реализации
При разумном применении шаблонов производительности и контрольных тестов, предложенных в этом документе, реализация кода реального времени на C/C++ возможна. Вопрос о том, как ROS 2 будет обеспечивать совместимость в реальном времени, остается открытым.
Допускается, чтобы этапы установки и демонтажа узла ROS не были безопасными в режиме реального времени. Однако взаимодействие с интерфейсами ROS, особенно в рамках внутрипроцессного контекста, должно быть безопасным в режиме реального времени, поскольку эти действия могут выполняться в кодовом пути процесса в реальном времени.
Существует несколько возможных стратегий для «закалки» существующего и будущего кода ROS 2 в режиме реального времени:
Создайте параметр конфигурации, чтобы стек работал в режиме реального времени.
- Может позволить пользователю динамически переключаться между режимами реального и обычного времени.
- Накладные расходы на рефакторинг. Интеграция кода реального времени с существующим кодом может оказаться сложной задачей.
Внедрите новый стек реального времени (rclrt, rmwrt и т. д.), разработанный с учетом вычислений в реальном времени.
Легче проектировать и поддерживать.
Код в реальном времени «изолирован» от существующего кода. Может полностью оптимизировать библиотеку для приложений реального времени.
- Больше пакетов для написания и обслуживания.
- Потенциально менее удобно для пользователя.
Предоставьте возможность безопасности в реальном времени до определенной точки стека и внедрите безопасную языковую оболочку в реальном времени (rclrt или rclc)
- Существующий код разработан таким образом, чтобы этот рефакторинг был довольно простым
- Пользователь может указать стратегию выделения памяти для rcl/rmw, чтобы обеспечить детерминированную работу.
- Синхронизация происходит на верхнем уровне языка/ОС, поэтому рефакторинг rcl/rmw проще
- Может быть проще поддерживать несколько встроенных платформ с разными оболочками.
- Дополнительный код для проверки безопасности в реальном времени.
- Большая гибкость для пользователя-разработчика может означать большую сложность.
Третий вариант наиболее привлекателен, потому что он предполагает наименьший объем работы для получения наибольшего количества преимуществ.
Операционная система реального времени (RTOS) – это операционная система, предназначенная для обслуживания приложений реального времени, которые обрабатывают данные по мере их поступления, в основном без буферной задержки. Полная форма RTOS — операционная система реального времени.
В RTOS требования к времени обработки рассчитываются с шагом в десятые доли секунды. Это ограниченная по времени система, которую можно определить как фиксированные временные ограничения. В системе этого типа обработка должна выполняться в рамках указанных ограничений. В противном случае система выйдет из строя.
Из этого руководства по операционной системе вы узнаете:
Зачем использовать RTOS?
Вот важные причины для использования RTOS:
- Он предлагает планирование на основе приоритетов, что позволяет отделить аналитическую обработку от некритической обработки.
- Операционная система реального времени предоставляет функции API, которые позволяют создавать более чистый и компактный код приложения.
- Абстрагирование временных зависимостей и проектирование на основе задач приводит к уменьшению взаимозависимостей между модулями.
- ОСРВ предлагает модульную разработку на основе задач, что позволяет выполнять модульное тестирование на основе задач.
- API на основе задач поощряет модульную разработку, так как задача обычно имеет четко определенную роль. Это позволяет дизайнерам/командам работать над своими частями проекта независимо друг от друга.
- ОСРВ управляется событиями и не тратит время на обработку события, которое не произошло
Компоненты RTOS
Здесь важны компоненты RTOS
Планировщик: этот компонент RTOS сообщает, в каком порядке могут выполняться задачи, что обычно зависит от приоритета.
Симметричная многопроцессорная обработка (SMP). Это ряд различных задач, которые может обрабатывать ОСРВ, чтобы можно было выполнять параллельную обработку.
Библиотека функций. Это важный элемент ОСРВ, выступающий в роли интерфейса, помогающего соединить код ядра и приложения. Это приложение позволяет отправлять запросы в ядро с помощью библиотеки функций, чтобы приложение могло выдавать желаемые результаты.
Управление памятью: этот элемент необходим в системе для выделения памяти каждой программе, что является наиболее важным элементом RTOS.
Быстрая задержка отправки: это интервал между завершением задачи, который может быть определен ОС, и фактическим временем, затраченным потоком, находящимся в очереди готовности, который начал обработку.
Определяемые пользователем объекты данных и классы: система RTOS использует языки программирования, такие как C или C++, которые должны быть организованы в соответствии с их работой.
Типы ОСРВ
Жесткое реальное время:
В Hard RTOS крайний срок обрабатывается очень строго, что означает, что данная задача должна начать выполняться в указанное запланированное время и должна быть завершена в течение назначенного времени.
Пример: медицинская система интенсивной терапии, авиационные системы и т. д.
Фирма в режиме реального времени:
Этот тип RTOS также должен соблюдать сроки. Однако нарушение срока может не иметь большого значения, но может привести к нежелательным последствиям, например значительному снижению качества продукта.
Пример: различные типы мультимедийных приложений.
Мягкое реальное время:
Мягкая ОСРВ реального времени допускает некоторые задержки операционной системы. В этом типе RTOS для конкретной работы назначается крайний срок, но допустима задержка на небольшой промежуток времени. Таким образом, этот тип RTOS мягко обрабатывает дедлайны.
Пример: система онлайн-транзакций и система котировок цен на скот.
Термины, используемые в RTOS
Вот основные термины, используемые в RTOS:
- Задача – набор связанных задач, которые в совокупности могут обеспечить некоторые системные функции.
- Задание. Задание — это небольшая часть работы, которую можно поручить процессору и которая может требовать или не требовать ресурсов.
- Время выпуска задания — это время, когда задание становится готовым к выполнению.
- Время выполнения задания: время, необходимое заданию для завершения его выполнения.
- Крайний срок выполнения задания. Время, к которому задание должно завершить свое выполнение.
- Процессоры. Их также называют активными ресурсами. Они важны для выполнения задания.
- Максимальное Это допустимое время отклика задания называется его относительным сроком.
- Время отклика задания: это время, прошедшее с момента выпуска задания до завершения момента.
- Абсолютный крайний срок: это относительный крайний срок, который также включает время выпуска.
Возможности ОСРВ
Вот важные особенности RTOS:
- Занимает очень мало памяти
- Потребляйте меньше ресурсов
- Время отклика легко предсказуемо
- Непредсказуемая среда
- Ядро сохраняет состояние прерванной задачи, а затем определяет, какую задачу следует запустить следующей.
- Ядро восстанавливает состояние задачи и передает управление ЦП для этой задачи.
Факторы выбора ОСРВ
Вот основные факторы, которые необходимо учитывать при выборе RTOS:
Читайте также: