5.5 Сторожевой таймер

Предыдущая  Содержание  Следующая V*D*V

Сторожевые таймеры (watchdog) представляют собой аппаратные компоненты, которые используются, чтобы помочь системе восстановиться от аномалий программного обеспечения путём сброса процессора. Сторожевой таймер должен быть загружен начальным числом, после чего сторожевой таймер начинает отсчёт от заданного значения до нуля. Если счётчик достигает нуля до того, как программное обеспечение перезагрузит его начальным значением, предполагается, что система работает нестабильно и требуется перезагрузка системы. Некоторые сторожевые таймеры имеют встроенные в них дополнительные возможности, такие как мониторинг температуры и напряжения питания.

Обычно сторожевые таймеры обеспечивают четыре набора операций:

 

Старт работы сторожевого таймера

Настройка времени работы сторожевого таймера

Остановка сторожевого таймера

Перезагрузка сторожевого таймера начальным значением

 

В Linux сторожевой таймер экспортируется приложениям в виде символьного устройства. Устройства сторожевого таймера регистрируются в качестве второстепенных устройств специального символьного устройства, названного вспомогательным устройством (miscellaneous device). Драйвер сторожевого таймера использует младший номер 130.

Символьное устройство сторожевого таймера может быть использовано какой-либо службой, чтобы перезагружать сторожевой таймер после заданного интервала времени. Многие дистрибутивы предоставляют службу, называемую службой сторожевого таймера (* Busybox тоже имеет простую реализацию сторожевого таймера), которая выполняет эту работу. Этот подход может быть использован в ядре версии 2.6 из-за улучшения возможностей реального времени ядра. В ядре версии 2.4, или если сторожевой таймер имеет очень маленький интервал перезагрузки, для перезагрузки сторожевого таймера лучше использовать таймер ядра. (5* Некоторые драйверы используют этот подход; посмотрите код драйвера сторожевого таймера процессора AMD Elan SC520.)

Типичный драйвер сторожевого таймера должен реализовать следующие функции:

 

Функцию инициализации: она включает в себя
– Регистрацию драйвера сторожевого таймера в качестве вспомогательного символьного драйвера (с помощью функции misc_register)
– Регистрацию функции, которая отключает сторожевой таймер при оповещении о перезагрузке системы (используя функцию register_boot_notifier). Эта зарегистрированная функция вызывается до перезагрузки системы. Это гарантирует, что после перезагрузки системы сторожевой таймер не работает, чтобы не вызвать повторный сброс системы.

Функцию открытия: она вызывается, когда открывается устройство /dev/watchdog. Эта функция должна запускать сторожевой таймер.

Функции освобождения ресурсов: закрытие драйвера должно вызывать остановку сторожевого таймера. Однако, в Linux, когда задача завершает работу, все файловые дескрипторы автоматически закрываются, независимо от того, было ли завершение работы благополучным или же произошло в результате отказа. Так что, если служба сторожевого таймера не завершает работу благополучно, есть шанс, что сторожевой таймер отключён. Чтобы предотвратить такую ситуацию, в ядре версии 2.6 до благополучного завершения работы службы сторожевого таймера, она должна подать сигнал драйверу, что намерена явным образом отключить сторожевой таймер. Обычно в драйвер сторожевого таймера записывается системный символ "V", после чего вызывается эта функция. В качестве альтернативы вы можете выбрать вообще не реализовывать отключение сторожевого таймера в вашем драйвере. Существующие драйверы сторожевого таймера в Linux предоставляют такую возможность при выборе опции конфигурации CONFIG_WATCHDOG_NOWAYOUT.

Функция записи: эта функция вызывается приложением для перезагрузки сторожевого таймера начальным значением.

Ioctl: однако, для перезагрузки сторожевого таймера начальным значением вы также можете использовать ioctl. Это выполняет команда WDIOC_KEEPALIVE. Также вы можете установить время работы таймера с помощью WDIOC_SETTIMEOUT.

 

В случае отсутствия поддержки сторожевого таймера в оборудовании, Linux предоставляет программный сторожевой таймер. Программный сторожевой таймер использует внутренние таймеры, однако, программные сторожевые таймеры не всегда работают; их работоспособность зависит от состояния системы и состояния прерываний.

 

Предыдущая  Содержание  Следующая