не в состоянии понять, почему, однако, что, если задачи с высоким приоритетом продолжают выполняться, а задание бездействия запускается до истечения времени ожидания.
Ну, это как раз то, что нужно. Если поток с наименьшим приоритетом (или, что лучше, свободный поток) истощен, то в вашей системе будут отсутствовать крайние сроки, либо она будет плохо спроектирована, либо возникло непредвиденное состояние.
Если он был сброшен с высоким приоритетомили прерывание, тогда все потоки с более низким приоритетом могут находиться в состоянии сбоя, либо заняты, либо вообще не работают, и сторожевой таймер будет бесполезно поддерживаться, не предоставляя никакой защиты.
Тем не менее, это только частичныйрешение для мониторинга целостности системы. Он решает проблему ошибочной задачи, приводящей к перегрузке ЦП, но он не решает проблему блокировки задачи и никогда не распределяется по назначению. Существует множество способов справиться с этим, но простой подход состоит в том, чтобы иметь «программные сторожевые таймеры», счетчики, которые сбрасываются при каждой задаче и уменьшаются в высокоприоритетном потоке или обработчике таймера. Если какой-либо счетчик потока достигает нуля, то соответствующий поток блокируется дольше, чем предполагалось, и действие может быть предпринято. Для этого требуется, чтобы каждый поток работал с интервалом, меньшим, чем его значение сброса счетчика контроля. Для потоков, которые в противном случае блокируют неограниченное время ожидания нечастых апериодических событий, вы можете использовать тайм-аут блокировки только для обновления программного сторожевого таймера.