точно долгого времени. Для вывода систем из
сбойного состояния и
приведения её в нормальный режим
функционирования обычно используют
сторожевой таймер. Таким образом, сторожевой таймер является механизмом
защиты системы от сбоев.
Рассмотрим работу сторожевого таймера подробнее. В
работе участвуют
три процесса: наблюдаемый прикладной процесс, процесс сторожевого тай-
мера и служебный процесс, реализующий механизм защиты системы от ава-
рийных ситуаций. Суть механизма сторожевого таймера состоит в проверке
критерия, по которому можно определить, что наблюдаемый процесс ра-
ботает нормально. Если сторожевой таймер обнаруживает, что с наблю-
даемым процессом все в порядке, то ничего не происходит. Если сторо-
жевой таймер определил, что с наблюдаемым процессом что-то не так, про-
исходит передача информации системе разрешения аварийных ситуаций,
которая, в
свою очередь, принимает решение о дальнейшей судьбе наблю-
даемого процесса.
В самом примитивном варианте в качестве сторожевого таймера выступа-
ет обычный вычитающий счетчик. Во время инициализации в
счетчик
записывается какое-либо значение. Если в
процессе работы в счетчик
эпизодически вносится новая константа, то ничего не происходит. Если
же прикладной процесс не успевает записать константу, и счетчик успе-
вает досчитать до нуля, вырабатывается сигнал аппаратного рестарта и
процессор перезапускается. Естественно, простой вариант реализации
сторожевого таймера не является 100% гарантией от выхода системы из
сбойного состояния.
Рассмотрим типичную ошибку, допускаемую программистами при
использовании простого сторожевого таймера. Для того, чтобы контроли-
руемый процесс прекратил работу, достаточно вставить код обновления
счетчика сторожевого таймера внутрь цикла проверки, который будет
всегда давать ложное значение из-за какой-либо ошибки (в аппаратуре
или программе).
while( device_ready() == 0 ) reset_watchdog_timer();
Если функция device_ready всегда будет возвращать ноль, то мы
бесконечное время будем сбрасывать сторожевой таймер, и система бу-
дет всегда находиться в состоянии сбоя.
Нужно заметить, что в
большинстве микроконтроллеров реализована
самая простая схема работы сторожевого таймера. Для её нормальной работы
нужна дополнительная, сложная программная обработка. Ещё одним не-
удобством простой схемы сторожевого таймера является выработка аппа-
ратного сигнала рестарта (RESET). В
большинстве случаев гораздо кор-
ректнее производить повторную инициализацию или рестарт одной или не-
скольких взаимосвязанных частей системы, а полный горячий рестарт
осуществлять только при каких-либо фатальных сбоях.
Достарыңызбен бөлісу: