Сторожевой таймер ( WDT или просто сторожевой таймер ), иногда называемый таймером исправной работы компьютера ( таймер COP ), [1] — это электронный или программный таймер , который используется для обнаружения и устранения неисправностей компьютера . Сторожевые таймеры широко используются в компьютерах для облегчения автоматического исправления временных аппаратных сбоев и предотвращения нарушения работы системы ошибочным или вредоносным программным обеспечением.
Во время нормальной работы компьютер регулярно перезапускает сторожевой таймер, чтобы предотвратить его истечение или «тайм-аут». Если из-за аппаратного сбоя или ошибки программы компьютер не перезапустит сторожевой таймер, таймер истечет и сгенерирует сигнал тайм-аута. Сигнал тайм-аута используется для инициирования корректирующих действий. Корректирующие действия обычно включают перевод компьютера и связанного с ним оборудования в безопасное состояние и вызов перезагрузки компьютера .
Микроконтроллеры часто включают в себя интегрированный, встроенный сторожевой таймер. В других компьютерах сторожевой таймер может находиться в соседнем чипе, который подключается непосредственно к ЦП , или он может быть расположен на внешней карте расширения в корпусе компьютера.
Сторожевые таймеры обычно встречаются во встроенных системах и другом оборудовании с компьютерным управлением, где люди не могут легко получить доступ к оборудованию или не смогут своевременно отреагировать на неисправности. В таких системах компьютер не может зависеть от человека, который будет вызывать перезагрузку в случае его зависания ; он должен быть самостоятельным. Например, удаленные встроенные системы, такие как космические зонды , физически недоступны для операторов-людей; они могут стать навсегда отключенными, если не смогут автономно восстановиться после неисправностей. В роботах и других автоматизированных машинах неисправность в управляющем компьютере может привести к повреждению оборудования или травмам до того, как человек сможет среагировать, даже если к компьютеру легко получить доступ. Сторожевой таймер обычно используется в таких случаях.
Сторожевые таймеры также используются для контроля и ограничения времени выполнения программного обеспечения на нормально функционирующем компьютере. Например, сторожевой таймер может использоваться при запуске ненадежного кода в песочнице , чтобы ограничить процессорное время, доступное коду, и таким образом предотвратить некоторые типы атак типа «отказ в обслуживании» . [2] В операционных системах реального времени сторожевой таймер может использоваться для контроля за критичной по времени задачей, чтобы гарантировать ее завершение в течение максимально отведенного времени, и, если она не может этого сделать, для завершения задачи и сообщения об ошибке.
Процесс перезапуска сторожевого таймера обычно называют « выбиванием» [a] сторожевого таймера. [3] [4] Выбивание обычно выполняется путем записи в порт управления сторожевым таймером или путем установки определенного бита в регистре . В качестве альтернативы некоторые тесно связанные [b] сторожевые таймеры выбиваются путем выполнения специальной инструкции машинного языка . Примером этого является инструкция CLRWDT (clear watchdog timer), которая находится в наборе инструкций некоторых микроконтроллеров PIC .
На компьютерах, работающих под управлением операционных систем , перезапуск сторожевого таймера обычно вызывается через драйвер устройства . Например, в операционной системе Linux программа пользовательского пространства выключает сторожевой таймер, взаимодействуя с драйвером устройства сторожевого таймера, обычно записывая нулевой символ в /dev/watchdog или вызывая KEEPALIVE ioctl . [5] Драйвер устройства, который служит для абстрагирования оборудования сторожевого таймера от программ пользовательского пространства, также может использоваться для настройки периода тайм-аута и запуска и остановки таймера.
Некоторые сторожевые таймеры допускают кик только в течение определенного временного окна. Время окна обычно относится к предыдущему кик или, если сторожевой таймер еще не был кикнут, к моменту включения сторожевого таймера. Окно начинается после задержки, следующей за предыдущим киком, и заканчивается после дальнейшей задержки. Если компьютер попытается кикнуть сторожевой таймер до или после окна, сторожевой таймер не будет перезапущен, и в некоторых реализациях это будет рассматриваться как ошибка и вызовет корректирующее действие.
Говорят, что сторожевой таймер включен во время работы и выключен во время простоя. При включении питания сторожевой таймер может быть включен безусловно или изначально выключен и требовать внешнего сигнала для включения. В последнем случае сигнал включения может быть автоматически сгенерирован аппаратным обеспечением или может быть сгенерирован под управлением программного обеспечения.
При автоматической генерации разрешающий сигнал обычно выводится из сигнала сброса компьютера. В некоторых системах сигнал сброса используется напрямую для включения сторожевого таймера. В других системах сигнал сброса задерживается, так что сторожевой таймер включится позже после сброса. Эта задержка дает время компьютеру загрузиться до включения сторожевого таймера. Без этой задержки сторожевой таймер истечет и вызовет последующий сброс, прежде чем компьютер сможет запустить свое прикладное программное обеспечение — программное обеспечение, которое выключает сторожевой таймер, — и система застрянет в бесконечном цикле незавершенных перезагрузок.
Сторожевые таймеры бывают разных конфигураций, и многие из них позволяют изменять свои конфигурации. Например, сторожевой таймер и ЦП могут использовать общий тактовый сигнал , как показано на блок-схеме ниже, или они могут иметь независимые тактовые сигналы. Базовый сторожевой таймер имеет одну стадию таймера, которая по истечении времени ожидания обычно сбрасывает ЦП:
Иногда два или более таймера каскадируются для формирования многоступенчатого сторожевого таймера , где каждый таймер называется стадией таймера или просто стадией . Например, на блок-схеме ниже показана трехступенчатая сторожевая схема. В многоступенчатой сторожевой схеме процессор запускает только первую стадию. По истечении времени ожидания первой стадии инициируется корректирующее действие, и запускается следующая стадия в каскаде. По истечении времени ожидания каждой последующей стадии она запускает корректирующее действие и запускает следующую стадию. По истечении времени ожидания последней стадии инициируется корректирующее действие, но никакая другая стадия не запускается, поскольку достигнут конец каскада. Обычно одноступенчатые сторожевые таймеры используются для простого перезапуска компьютера, тогда как многоступенчатые сторожевые таймеры последовательно запускают ряд корректирующих действий, а последняя стадия запускает перезапуск компьютера. [4]
Сторожевые таймеры могут иметь фиксированные или программируемые временные интервалы. Некоторые сторожевые таймеры позволяют программировать временной интервал путем выбора из нескольких выбираемых дискретных значений. В других интервал может быть запрограммирован на произвольные значения. Обычно временные интервалы сторожевых таймеров находятся в диапазоне от десяти миллисекунд до минуты и более. В многоступенчатом сторожевом таймере каждый таймер может иметь свой собственный, уникальный временной интервал.
Таймер сторожевого таймера может инициировать любой из нескольких типов корректирующих действий, включая маскируемое прерывание , немаскируемое прерывание , аппаратный сброс , активацию отказоустойчивого состояния, включение-выключение питания или их комбинации. В зависимости от его архитектуры тип корректирующего действия или действий, которые может запустить сторожевой таймер, может быть фиксированным или программируемым. Некоторые компьютеры (например, совместимые с ПК) требуют импульсного сигнала для вызова аппаратного сброса. В таких случаях сторожевой таймер обычно запускает аппаратный сброс, активируя внутренний или внешний генератор импульсов, который, в свою очередь, создает требуемые импульсы сброса. [4]
Во встроенных системах и системах управления сторожевые таймеры часто используются для активации отказоустойчивых схем. При активации отказоустойчивая схема переводит все управляющие выходы в безопасное состояние (например, отключает двигатели, нагреватели и высокие напряжения ) для предотвращения травм и повреждения оборудования, пока сохраняется неисправность. В двухступенчатом сторожевом таймере первый таймер часто используется для активации отказоустойчивых выходов и запуска второго этапа таймера; второй этап сбросит компьютер, если неисправность не может быть устранена до истечения таймера.
Сторожевые таймеры иногда используются для запуска записи информации о состоянии системы, которая может быть полезна при восстановлении после сбоя [4] , или отладочной информации (которая может быть полезна для определения причины сбоя) на постоянный носитель. В таких случаях второй таймер, который запускается по истечении времени первого таймера, обычно используется для перезагрузки компьютера позже, после того как будет предоставлено достаточно времени для завершения записи данных. Это дает время для сохранения информации, но гарантирует, что компьютер будет перезагружен, даже если процесс записи завершится неудачей.
Например, на приведенной выше схеме показана вероятная конфигурация двухступенчатого сторожевого таймера. Во время нормальной работы компьютер регулярно выключает Stage1, чтобы предотвратить тайм-аут. Если компьютеру не удается выключить Stage1 (например, из-за аппаратной неисправности или ошибки программирования), Stage1 в конечном итоге выйдет из строя. Это событие запустит таймер Stage2 и одновременно уведомит компьютер (с помощью немаскируемого прерывания) о том, что сброс неизбежен. Пока не истечет время ожидания Stage2, компьютер может попытаться записать информацию о состоянии, отладочную информацию или и то, и другое. В крайнем случае компьютер будет сброшен по тайм-ауту Stage2.
Таймер-сторож обеспечивает автоматическое обнаружение катастрофических неисправностей, которые не позволяют компьютеру выключить его. Однако компьютеры часто имеют другие, менее серьезные типы неисправностей, которые не мешают выключить, но которые все равно требуют надзора со стороны сторожевого таймера. Для поддержки этих неисправностей компьютерная система обычно проектируется таким образом, что ее таймер-сторож будет выключаться только в том случае, если компьютер сочтет систему работоспособной. Компьютер определяет, работоспособна ли система, проводя один или несколько тестов на обнаружение неисправностей, и выключит сторожевой таймер только в том случае, если все тесты пройдены. [ необходима цитата ]
На компьютерах, работающих под управлением операционной системы и нескольких процессов , одного простого теста может быть недостаточно для гарантии нормальной работы, поскольку он может не обнаружить скрытое состояние сбоя и, следовательно, позволить отключить сторожевой таймер, даже если состояние сбоя существует. Например, в случае операционной системы Linux, демон сторожевого таймера пользовательского пространства может просто периодически отключать сторожевой таймер, не выполняя никаких тестов. Пока демон работает нормально, система будет защищена от серьезных системных сбоев, таких как паника ядра . Для обнаружения менее серьезных сбоев демон [6] можно настроить на выполнение тестов, которые охватывают доступность ресурсов (например, достаточный объем памяти и дескрипторов файлов , разумное время ЦП), доказательства ожидаемой активности процесса (например, работающие системные демоны, наличие или обновление определенных файлов), перегрев и сетевую активность, а также можно запустить специфичные для системы тестовые скрипты или программы. [7]
При обнаружении неудачного теста компьютер может попытаться выполнить последовательность корректирующих действий под управлением программного обеспечения, что завершится перезагрузкой, инициированной программным обеспечением. Если программное обеспечение не может вызвать перезагрузку, сторожевой таймер истечет по тайм-ауту и вызовет аппаратный сброс. По сути, это многоступенчатый сторожевой таймер, в котором программное обеспечение включает в себя первый и промежуточный этапы таймера, а аппаратное обеспечение сбрасывает последний этап. Например, в системе Linux сторожевой демон может попытаться выполнить программный перезапуск, который может быть предпочтительнее аппаратного сброса, поскольку файловые системы будут безопасно размонтированы , а информация об ошибке будет зарегистрирована. Однако важно иметь страховку, предоставляемую аппаратным таймером, поскольку программный перезапуск может не сработать при ряде условий сбоя. [ необходима цитата ]
Сторожевой таймер (или таймер исправной работы компьютера (COP)) — это аппаратный или программный таймер компьютера, который запускает сброс системы или другие корректирующие действия, если основная программа из-за какого-либо сбоя, например зависания, пренебрегает регулярным обслуживанием сторожевого таймера (записывая ему «служебный импульс», также называемый «пинком собаки», «поглаживанием собаки», «кормлением сторожевого таймера» или «запуском сторожевого таймера»). Цель состоит в том, чтобы вернуть систему из состояния без ответа в нормальное состояние работы.