Я разрабатываю планировщик для встроенной системы.
Этот планировщик будет вызывать каждый процесс каждые X миллисекунд; Конечно, это время можно настроить отдельно для каждого процесса.
Все закодировано и вызывает каждый процесс как следует; проблема, с которой я сталкиваюсь, заключается в следующем:
Представьте, что я установил 4 процесса для вызова каждые 10, 15, 5 и 30 миллисекунд соответственно:
A: 10ms
B: 15ms
C: 5ms
D: 30ms
Результирующий вызов со временем будет:
A |
A B A B |
C C C C C C C | processes being called
D |
----------------------------------
0 5 10 15 20 25 30 35... ms
Проблема в том, что при достижении 30 мс все процессы вызываются в один и тот же момент (один за другим), и это может отсрочить правильное выполнение отсюда.
Эту проблему можно решить, добавив задержку к каждому процессу (но сохранив частоту его вызова), чтобы частоты перестали быть кратными друг другу. Моя проблема в том, что я не знаю, как рассчитать задержку, применяемую к каждому процессу, чтобы количество коллизий было минимальным.
Есть ли какой-нибудь известный алгоритм для этого или какое-то математическое руководство?
Спасибо.