Программирование в режиме реального времени с помощью Linux

Я только что создал и настроил ядро ​​Linux с использованием исправления RT. Все прошло отлично, и теперь я могу корректно загрузиться в новое ядро.

Что мне интересно, так это: у меня есть программа симулятора, которую я сделал на C, и я хочу, чтобы она выполнялась в режиме жесткого реального времени, что должно быть разрешено новым ядром. Вероятно, весь симулятор не нужно запускать с приоритетом в реальном времени, но некоторые из задач внутри делают.

Как я могу это сделать? Я полагаю, что просто запустить программу не будет.

Ответ 1

Если вы спрашиваете, как запускать некоторые потоки в режиме реального времени, а другие - как обычные потоки обмена временем, тогда вам нужно установить используя sched_setscheduler.

Потоки с разделением времени хотят быть SCHED_OTHER; потоки симулятора реального времени должны быть SCHED_FIFO или SCHED_RR.

В Linux, чтобы работать в приоритетах в реальном времени, ваш пользователь должен иметь ограничения на ресурсы (man 2 rlimit), который позволяет это, В частности, ваш rtprio rlimit должен быть установлен на самый высокий приоритет, который вам понадобится. Кроме того, вы можете запустить приложение с правами администратора. В linux-системе с PAM это обычно выполняется путем добавления соответствующей строки к /etc/security/limits.conf

    @realtime   -  rtprio     99

Это предоставит rtprio ограничения до 99 приоритета в реальном времени для группы реального времени. Затем вы добавляете группу в режиме реального времени в /etc/groups и убедитесь, что ваш пользователь находится в группе.

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