Введение

Электронный таймер, используемый для обнаружения и восстановления после компьютерных сбоев.

Сторожевой таймер (WDT, или просто "сторож"), иногда называемый таймером контроля корректной работы компьютера (COP timer). В операционных системах реального времени сторожевой таймер может использоваться для мониторинга критически важной задачи, чтобы убедиться, что она завершается в пределах выделенного времени, и в случае неудачи – для завершения задачи и сообщения об ошибке.

Перезапуск

Перезапуск сторожевого таймера обычно называют "подпиткой" или "импульсом" сторожевого таймера. Подпитка обычно выполняется путем записи в порт управления сторожевым таймером или установки определенного бита в регистре. В качестве альтернативы, некоторые тесно связанные сторожевые таймеры подпитываются путем выполнения специальной машинной инструкции. Примером этого является инструкция CLRWDT (clear watchdog timer), присутствующая в наборе инструкций некоторых микроконтроллеров PIC. В компьютерах, работающих под управлением операционных систем, перезапуск сторожевого таймера обычно инициируется через драйвер устройства. Например, в операционной системе Linux, пользовательская программа подпитывает сторожевой таймер, взаимодействуя с драйвером устройства сторожевого таймера, как правило, путем записи нулевого символа или вызова ioctl KEEPALIVE. Драйвер устройства, который служит для абстрагирования аппаратного обеспечения сторожевого таймера от программ пользовательского пространства, также может использоваться для настройки периода таймаута и запуска и остановки таймера. Некоторые сторожевые таймеры допускают подпитку только в течение определенного временного окна. Время окна обычно отсчитывается относительно предыдущей подпитки или, если сторожевой таймер еще не подпитывался, с момента его включения. Окно начинается после задержки после предыдущей подпитки и заканчивается после дополнительной задержки. Если компьютер попытается подпитать сторожевой таймер до или после окна, таймер не будет перезапущен, и в некоторых реализациях это будет расценено как ошибка и приведет к принятию корректирующих мер.

Позволяет

Таймер сторожевой функции считается включенным в рабочем состоянии и отключенным в режиме простоя. После подачи питания таймер сторожевой функции может быть включен безусловно, либо изначально отключен и требовать внешний сигнал для включения. В последнем случае сигнал включения может генерироваться автоматически аппаратными средствами или под управлением программного обеспечения. При автоматической генерации сигнал включения обычно формируется на основе сигнала сброса компьютера. В некоторых системах сигнал сброса используется непосредственно для включения таймера сторожевой функции. В других случаях сигнал сброса задерживается, чтобы таймер сторожевой функции включался спустя некоторое время после сброса. Эта задержка позволяет компьютеру загрузиться до включения таймера сторожевой функции. Без этой задержки таймер сторожевой функции сработает по истечении времени и вызовет последующий сброс до того, как компьютер сможет запустить свое прикладное программное обеспечение – программное обеспечение, которое "поддерживает в тонусе" таймер сторожевой функции, – и система застрянет в бесконечном цикле незавершенных перезагрузок.

Одноступенчатая сторожевая собака

Таймеры сторожевого надзора выпускаются в различных конфигурациях, и многие из них позволяют изменять свои настройки. Например, таймер и процессор могут использовать общий тактовый сигнал, как показано на структурной схеме ниже, или же они могут иметь независимые тактовые сигналы. Базовый таймер сторожевого надзора имеет одну ступень таймера, которая по истечении времени обычно перезагружает процессор.

Многоступенчатая сторожевая собака

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