Як змінити програмне забезпечення, щоб стати в режимі реального часу? [зачинено]


9

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

Питання коротко: Як реалізувати жорстке програмне забезпечення в реальному часі, щоб бути впевненим, що воно відповідає жорстким строкам? Потрібно використовувати деякі функції QNX? Або достатньо лише написати його для Linux, порту на QNX, і це буде за умовчанням у режимі реального часу?

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

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

Деякі додаткові відомості про наші платформи: Linux та Windows, які ми зараз використовуємо лише для тестування. Android - ми все ще не вирішили, чи потрібен він нам. QNX - це наша цільова ОС для виробництва. Я думаю, що відповідь на моє наступне питання - "НІ" :) Але чи взагалі можна реалізувати міжплатформенне програмне забезпечення в режимі реального часу (для ОС в режимі реального часу (RTOS), а також для ОС загального призначення (GPOS))?

Можливо, нам потрібно докласти зусиль для впровадження всіх функцій у режимі реального часу лише для QNX? Але я досі не розумію, як це зробити. Чи може хтось пролити світло на це питання?


55
Якщо ваш проект є критично важливим для безпеки, вам дійсно потрібен хтось, хто розуміє системи реального часу на вашій зарплаті.
Blrfl

18
Система в режимі реального часу - наскільки точним є ваш код з точки зору часу виконання, а не швидко чи повільно.
Паготті

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

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

4
Ви запитували: " чи взагалі можливо реалізувати міжплатформенне програмне забезпечення в режимі реального часу (для ОС в режимі реального часу (RTOS), а також для ОС загального призначення (GPOS))? " Моя здогадка - ні, інакше RTOS не буде існують. "Cross Platform" досить схожий на "Holy Graal".

Відповіді:


38

Швидкий не означає реального часу, а реальний - не швидкий.

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

Наприклад, подумайте про відеоплеєр. Якщо відеокадри не відображаються з потрібною швидкістю, користувачі не будуть задоволені. Гірше, якщо зображення та звук не синхронізуються.

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

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


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

7
@ user172825 - Відповіді на це питання охоплюють полиці бібліотек. Початковими пунктами можуть бути гуглінг "програмування в режимі реального часу", пов’язана стаття з вікіпедії або підручники RTOS, такі як QNX або RTEMS.
mouviciel

Це було для мене найскладніше питання. Я знайшов багато великих книг на цю тему. Але я сподівався, що це можливо пояснити в двох пропозиціях. :)
користувач172825

5
" У комп'ютерній науці є лише дві важкі речі: недійсність кешу та іменування речей ", - Філ Карлтон. Там одне речення пояснює, чому його не можна пояснити двома реченнями. Тепер ми повернемо вас до вашого регулярно запланованого програмування.

1
Я вважаю, що виклик "важкого в реальному часі" "детермінованого часу" зазвичай допомагає зрозуміти людей.
whatsisname

15

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

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

Типові джерела непередбачуваності можна знайти в

  • Динамічне розподіл пам’яті та збирання сміття
  • (Вищий пріоритет) перериває
  • Планувальник в ОС
  • Динамічне створення та руйнування предметів
  • Велика кількість умовно-виконаного коду

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


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

2
У деяких випадках вам може знадобитися зробити WCET- аналіз, передбачивши час виконання до мілісекунди
Базиль Старинкевич

3
@ user172825: Профілювання може допомогти, але багато чого зводиться до досвіду та знання мови та бібліотек дуже добре.
Барт ван Інген Шенау

3
Профілювання може бути недостатньо хорошим, якщо у вас є жорсткі вимоги в режимі реального часу. Якщо час запуску не є повністю детермінованим, то його профілювання може створити враження, що він завжди завершиться до встановленого терміну, коли насправді він відповідає лише кінцевому терміну 99 разів із 100. Якщо у вас є жорсткі вимоги в реальному часі, це потрібно зустріти його 100 разів із 100.
James_pic

2
@ user172825 У режимі реального часу - це програмне забезпечення, що стосується хірургії мозку для медицини - вам потрібно багато досвіду та навичок, щоб правильно їх зняти, і ви повинні бути справді, дуже впевнені в тому, що робите. Ці проекти краще здійснювати під наглядом кваліфікованого фахівця району. Вони не те, що можна кинути звичайному розробнику і сказати, "щоб ця річ працювала як система реального часу".
Т. Сар

8

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

Для цього потрібен аналіз, який охоплює всю систему. Скажімо, у вас є тривіальна система, яка складається з USB-клавіатури та гальмівного сервоприводу. Якої чуйності можна досягти за допомогою цієї системи? Можливо, вам доведеться врахувати:

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

У такому середовищі зазвичай також особлива увага приділяється надійності, наприклад, стандартам MISRA C.


Чи правда також, що реальний час включає розгляд того, чи є операція детермінованою, можливо, рекурсивною чи взагалі обчислюваною?

Так, все це було б "без обмежень". Рекурсивні алгоритми можуть бути дозволені за умови, що їх використання стека накладено на верхню межу.
pjc50

5
avoiding use of garbage collection- Це має бути avoiding use of non-deterministic memory management. Збір сміття може здійснюватися в режимі реального часу, а керування пам'яттю вручну не обов'язково детерміновано (див. Типову mallocреалізацію для C).
8bittree
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.