Сторожевой таймер
Сторожевой таймер ( WDT , или просто сторожевой таймер ), иногда называемый таймером правильной работы компьютера ( таймер COP ), [1] представляет собой электронный или программный таймер , который используется для обнаружения и устранения неисправностей компьютера . Сторожевые таймеры широко используются в компьютерах для облегчения автоматического исправления временных сбоев оборудования и предотвращения нарушения работы системы ошибочным или вредоносным программным обеспечением.
Во время нормальной работы компьютер регулярно перезапускает сторожевой таймер, чтобы предотвратить его истечение или «тайм-аут». Если из-за аппаратного сбоя или ошибки программы компьютер не сможет перезапустить сторожевой таймер, таймер истечет и сгенерирует сигнал тайм-аута. Сигнал тайм-аута используется для инициирования корректирующих действий. Корректирующие действия обычно включают перевод компьютера и связанного с ним оборудования в безопасное состояние и перезагрузку компьютера .
Микроконтроллеры часто включают в себя встроенный сторожевой таймер. В других компьютерах сторожевой таймер может находиться в ближайшем чипе, который подключается непосредственно к ЦП , или на внешней плате расширения в корпусе компьютера.
Приложения [ править ]
Сторожевые таймеры обычно встречаются во встроенных системах и другом оборудовании с компьютерным управлением, где люди не могут легко получить доступ к оборудованию или не могут своевременно реагировать на неисправности. В таких системах компьютер не может зависеть от человека, который вызовет перезагрузку в случае зависания ; оно должно быть самостоятельным. Например, удаленные встроенные системы, такие как космические зонды, физически недоступны для людей-операторов; они могут стать постоянно отключенными, если не смогут самостоятельно восстанавливаться после сбоев. В роботах и других автоматизированных машинах неисправность управляющего компьютера может привести к повреждению оборудования или травмам до того, как человек сможет отреагировать, даже если доступ к компьютеру легко доступен. В подобных случаях обычно используется сторожевой таймер.
Сторожевые таймеры также используются для мониторинга и ограничения времени выполнения программного обеспечения на нормально функционирующем компьютере. Например, сторожевой таймер может использоваться при запуске ненадежного кода в « песочнице» , чтобы ограничить время ЦП, доступное для кода, и таким образом предотвратить некоторые типы атак типа «отказ в обслуживании» . [2] В операционных системах реального времени сторожевой таймер может использоваться для мониторинга критической по времени задачи, чтобы убедиться, что она завершается в течение максимально отведенного времени, и, если это не удается, завершить задачу и сообщить об ошибке.
Архитектура и эксплуатация [ править ]
Перезапуск [ править ]
Перезапуск сторожевого таймера обычно называют [а] сторожевой пес. [3] [4] Удаление обычно осуществляется путем записи в порт управления сторожевым таймером или установкой определенного бита в регистре . Альтернативно, некоторые тесно связанные [б] Сторожевые таймеры срабатывают при выполнении специальной инструкции машинного языка . Примером этого является инструкция CLRWDT (очистка сторожевого таймера), встречающаяся в наборе команд некоторых микроконтроллеров PIC .
На компьютерах под управлением операционных систем перезагрузка сторожевого таймера обычно вызывается через драйвер устройства . Например, в операционной системе Linux программа пользовательского пространства отключит сторожевой таймер, взаимодействуя с драйвером сторожевого устройства, обычно записывая нулевой символ в /dev/watchdog или вызвав KEEPALIVE ioctl . [5] Драйвер устройства, который служит для абстрагирования сторожевого устройства от программ пользовательского пространства, также может использоваться для настройки периода ожидания, а также запуска и остановки таймера.
Некоторые сторожевые таймеры разрешают срабатывание только в течение определенного временного окна. Время окна обычно отсчитывается от предыдущего кика или, если сторожевой таймер еще не был кикнут, к моменту включения сторожевого таймера. Окно начинается после задержки после предыдущего удара и заканчивается после следующей задержки. Если компьютер попытается отключить сторожевой таймер до или после окна, сторожевой таймер не будет перезапущен, а в некоторых реализациях это будет расценено как неисправность и инициирует корректирующие действия.
Включение [ править ]
Говорят, что сторожевой таймер включается во время работы и отключается в режиме ожидания. При включении питания сторожевой таймер может быть безусловно включен или может быть изначально отключен, и для его включения потребуется внешний сигнал. В последнем случае разрешающий сигнал может генерироваться автоматически аппаратно или под контролем программного обеспечения.
При автоматической генерации разрешающий сигнал обычно получается из сигнала сброса компьютера. В некоторых системах сигнал сброса используется непосредственно для включения сторожевого таймера. В других случаях сигнал сброса задерживается, так что сторожевой таймер включится через некоторое время после сброса. Эта задержка дает компьютеру время загрузиться до включения сторожевого таймера. Без этой задержки сторожевой таймер отключится и вызовет последующий сброс, прежде чем компьютер сможет запустить свое прикладное программное обеспечение — программное обеспечение, которое запускает сторожевой таймер — и система застрянет в бесконечном цикле неполных перезагрузок.
Одноступенчатый сторожевой таймер [ править ]
Сторожевые таймеры имеют множество конфигураций, и многие из них позволяют изменять их конфигурации. Например, сторожевой таймер и ЦП могут использовать общий тактовый сигнал , как показано на блок-схеме ниже, или они могут иметь независимые тактовые сигналы. Базовый сторожевой таймер имеет одну ступень таймера, которая по истечении времени обычно сбрасывает ЦП:
Многоступенчатый сторожевой таймер [ править ]
Два или более таймера иногда объединяются каскадом, образуя многоступенчатый сторожевой таймер , где каждый таймер называется этапом таймера или просто этапом . Например, на блок-схеме ниже показан трехступенчатый сторожевой таймер. В многоступенчатом сторожевом таймере процессор запускает только первый этап. По истечении времени ожидания первого этапа инициируется корректирующее действие и запускается следующий этап каскада. По истечении времени каждого последующего этапа активируется корректирующее действие и начинается следующий этап. По истечении времени ожидания конечного этапа инициируется корректирующее действие, но никакой другой этап не запускается, поскольку достигнут конец каскада. Обычно одноступенчатые сторожевые таймеры используются для простой перезагрузки компьютера, тогда как многоступенчатые сторожевые таймеры последовательно запускают серию корректирующих действий, а последний этап запускает перезагрузку компьютера. [4]
Временные интервалы [ править ]
Сторожевые таймеры могут иметь фиксированные или программируемые временные интервалы. Некоторые сторожевые таймеры позволяют программировать временной интервал путем выбора одного из нескольких выбираемых дискретных значений. В других интервал может быть запрограммирован на произвольные значения. Обычно временные интервалы сторожевого таймера варьируются от десяти миллисекунд до минуты и более. В многоступенчатом сторожевом таймере каждый таймер может иметь свой собственный уникальный временной интервал.
Корректирующие действия [ править ]
Сторожевой таймер может инициировать любой из нескольких типов корректирующих действий, включая маскируемое прерывание , немаскируемое прерывание , аппаратный сброс , отказоустойчивого активацию состояния, включение и выключение питания или их комбинации. В зависимости от архитектуры тип корректирующего действия или действий, которые может инициировать сторожевой таймер, может быть фиксированным или программируемым. Некоторым компьютерам (например, совместимым с ПК) требуется импульсный сигнал для выполнения аппаратного сброса. В таких случаях сторожевой таймер обычно запускает аппаратный сброс, активируя внутренний или внешний генератор импульсов, который, в свою очередь, создает необходимые импульсы сброса. [4]
Во встроенных системах и системах управления сторожевые таймеры часто используются для активации схем обеспечения безопасности . При активации схема отказоустойчивости переводит все управляющие выходы в безопасные состояния (например, отключает двигатели, нагреватели и подачу высокого напряжения ), чтобы предотвратить травмы и повреждение оборудования, пока неисправность сохраняется. В двухступенчатом сторожевом таймере первый таймер часто используется для активации выходов повышенной безопасности и запуска второй ступени таймера; второй этап перезагрузит компьютер, если неисправность не может быть устранена до истечения таймера.
Сторожевые таймеры иногда используются для запуска записи информации о состоянии системы, что может быть полезно при устранении сбоев. [4] — или отладочную информацию (которая может быть полезна для определения причины неисправности) на постоянный носитель. В таких случаях второй таймер, который запускается по истечении времени первого таймера, обычно используется для перезагрузки компьютера позже, после того, как будет достаточно времени для завершения записи данных. Это дает время для сохранения информации, но гарантирует, что компьютер будет перезагружен, даже если процесс записи завершится неудачно.
Например, на приведенной выше схеме показана вероятная конфигурация двухступенчатого сторожевого таймера. Во время нормальной работы компьютер регулярно запускает Stage1, чтобы предотвратить тайм-аут. Если компьютеру не удается запустить этап 1 (например, из-за аппаратного сбоя или ошибки программирования), этап 1 в конечном итоге истечет по тайм-ауту. Это событие запустит таймер Stage2 и одновременно уведомит компьютер (посредством немаскируемого прерывания) о неизбежности сброса. Пока не истечет время ожидания Stage2, компьютер может попытаться записать информацию о состоянии, информацию об отладке или и то, и другое. В крайнем случае, компьютер будет перезагружен по истечении времени ожидания Stage2.
Обнаружение неисправности [ править ]
Сторожевой таймер обеспечивает автоматическое обнаружение катастрофических неисправностей, которые не позволяют компьютеру его выгнать. Однако компьютеры часто имеют другие, менее серьезные типы неисправностей, которые не мешают работе, но все же требуют сторожевого контроля. Для их поддержки компьютерная система обычно проектируется таким образом, что ее сторожевой таймер срабатывает только в том случае, если компьютер считает систему работоспособной. Компьютер определяет работоспособность системы, проводя один или несколько тестов на обнаружение неисправностей, и запускает сторожевой таймер только в том случае, если все тесты пройдены. [ нужна ссылка ]
На компьютерах, на которых установлена операционная система и несколько процессов , одного простого теста может быть недостаточно, чтобы гарантировать нормальную работу, поскольку он может не обнаружить неявную неисправность и, следовательно, позволить активировать сторожевой таймер даже при наличии неисправности. Например, в случае операционной системы Linux демон сторожевого таймера в пользовательском пространстве может просто периодически отключать сторожевой таймер, не выполняя никаких тестов. Пока демон работает нормально, система будет защищена от серьезных сбоев системы, таких как паника ядра . Для обнаружения менее серьезных неисправностей демон [6] может быть настроен для выполнения тестов, которые охватывают доступность ресурсов (например, достаточную память и дескрипторы файлов , разумное время процессора), подтверждение ожидаемой активности процесса (например, работу системных демонов, наличие или обновление определенных файлов), перегрев и сетевую активность, Также можно запускать тестовые сценарии или программы, специфичные для системы. [7]
При обнаружении неудачного теста компьютер может попытаться выполнить последовательность корректирующих действий под контролем программного обеспечения, кульминацией которых является программная перезагрузка. Если программное обеспечение не может вызвать перезагрузку, сторожевой таймер истечет по истечении времени и вызовет аппаратный сброс. По сути, это многоступенчатый сторожевой таймер, в котором программное обеспечение включает в себя первый и промежуточный этапы таймера, а аппаратный сброс завершающего этапа. Например, в системе Linux сторожевой демон может попытаться выполнить программный перезапуск, который может быть предпочтительнее аппаратного сброса, поскольку файловые системы будут безопасно отключены , а информация о сбоях будет зарегистрирована. Однако важно иметь страховку, обеспечиваемую аппаратным таймером, поскольку программный перезапуск может завершиться неудачей при ряде сбоев. [ нужна ссылка ]
См. также [ править ]
- Таймер потери команд. Сбросьте соответствующий метод, чтобы космический корабль оставался управляемым.
- Безопасный режим (космический корабль)
- Таймер мертвеца (DMT)
- Таймер включения питания (PWRT)
- Сердцебиение (вычисления)
- Поддерживать активность
Примечания [ править ]
- ^ Jump up to: Перейти обратно: а б Для перезапуска сторожевого таймера используются различные термины. Некоторые (например , пнуть , погладить , покормить , пощекотать ) устанавливают связь со сторожевыми собаками , тогда как другие (например, метка , пинг , сброс ) нет. В этой статье для обеспечения последовательности используется удар .
- ^ Тесно связанный сторожевой таймер фактически является встроенным расширением процессора и, как таковой, к нему можно получить доступ с помощью специальных инструкций машинного языка , специфичных для него.
Ссылки [ править ]
- ^ «4.11 Двухступенчатый сторожевой таймер». Руководство пользователя Kontron — COMe-cBTi6R . Версия документа 1.0. Контрон . 2021. Архивировано из оригинала 23 сентября 2023 г. Проверено 23 сентября 2023 г. п. 39:
Сторожевой таймер (или таймер правильной работы компьютера (COP)) — это компьютерный аппаратный или программный таймер, который запускает сброс системы или другое корректирующее действие, если основная программа из-за какой-либо неисправности, например зависания, не выполняет регулярные действия. обслужить сторожевого пса (записав ему «служебный импульс», также называемый «пинать собаку», «поглаживать собаку», «кормить сторожевого пса» или «запускать сторожевого пса»). Цель состоит в том, чтобы вернуть систему из неотвечающего состояния в нормальную работу.
- ^ «Таймер гранаты: усиление сторожевого таймера против вредоносного мобильного кода» Фрэнк Стаджано и Росс Андерсон (2000).
- ^ Мерфи, Найл и Барр, Майкл (октябрь 2001 г.). «Сторожевые таймеры» . Программирование встраиваемых систем . Проверено 18 февраля 2013 г.
- ^ Jump up to: Перейти обратно: а б с д Ламберсон, Джим. «Одно- и многоступенчатые сторожевые таймеры» (PDF) . Сенсорэй . Проверено 10 сентября 2013 г.
- ^ Вайнгель, Кристер. «API драйвера Linux Watchdog» . Проверено 20 января 2021 г.
- ^ «Справочная страница Watchdog» . Проверено 10 сентября 2013 г.
- ^ Кроуфорд, Пол (5 сентября 2013 г.). «Linux Watchdog — Общие тесты» . Архивировано из оригинала 14 сентября 2013 г. Проверено 10 сентября 2013 г.
Дальнейшее чтение [ править ]
- «Раздел 9. Сторожевой таймер, таймер мертвеца и включения». Справочное руководство по семейству PIC32 (PDF) . Microchip Technology Inc., 2013 г. DS60001114G. Архивировано (PDF) из оригинала 10 января 2024 г. Проверено 10 января 2024 г. (26 страниц)
Внешние ссылки [ править ]
- Создание отличного сторожевого пса – статья Джека Ганссла
- Сторожевой таймер Arduino со сбросом — статья Адитьяпратапа Сингха