Сторожевой таймер для отказоустойчивых систем


PDF версия

В статье обсуждается необходимость повышения надежности системного монитора в критичных с точки зрения безопасности приложениях, и содержатся рекомендации по проектированию отказоустойчивого сторожевого таймера. Описаны новые методы восстановления сторожевого таймера, механизм защиты от случайной записи, методы раннего обнаружения сбоя программы и быстрого тестирования сторожевого таймера. Статья представляет собой сокращенный перевод работы [1].


Потребность в отказоустойчивых системах

Электронные блоки управления (ЭБУ) находят все большее применение в таких критичных с точки зрения безопасности приложениях, которые должны надежно работать при любых условиях внешней среды. В реальных условиях эксплуатации в программном обеспечении ЭБУ происходят сбои, что может приводить к частичному или полному отказу системы. Использование сторожевого таймера — это наилучший способ вывода системы из неопределенного состояния в безопасный режим.
Примером приложения, требующего обеспечения повышенной безопасности и надежности, является использование робота-манипулятора в хирургии. Во время операции врач начинает выполнение определенной процедуры, а затем передает управление процессом роботу-манипулятору, оперирующему скальпелем. В случае сбоя программы робот может начать действовать непредсказуемо и с риском для пациента.
Введение стандарта IEC 60730 требует обеспечения безопасности и надежности блоков управления и других компонентов даже для таких распространенных устройств как бытовые приборы.

Причины системных сбоев

В различных приложениях при эксплуа­тации встраиваемых систем наблюдаются два вида отказов: систематические и случайные ошибки. Систематические ошибки означают не­обратимые повреждения в системе, например, разрушение корпуса микросхемы в результате воздействия повышенной вибрации. В результате действия случайных ошибок, которые приводят к нарушению данных в системе, она способна восстанавливаться. Причины появления таких сбоев могут быть самыми разными: от воздействия космических излучений, электромагнитных помех (ЭМП) до использования несовершенного программного обес­печения.
С увеличением системной тактовой частоты, применением все более высокоскоростных последовательных интерфейсов и уменьшением шага выводов корпусов микросхем влияние ЭМП становится все более заметным. Космическое излучение может вызывать случайные переключения состояния ячеек памяти, а ЭМП и помехи ИП могут приводить к считыванию и записи в память или регистры неправильных данных.
Когда происходит такая потеря данных, выполнение программы нарушается, т.к. состояние, например, программного счетчика может быть изменено. Модификация памяти программ или чтение некорректных данных из их памяти может привести к выполнению совершенно непредсказуемых команд. Подобный сбой может быть также результатом разработки некорректной программы.
Вместе с проведением повторных измерений для восстановления потерянных данных в системе необходимо применять системный монитор, который может детектировать сбои и предпринимать необходимые действия для перевода в безопасное/известное состояние с минимальной задержкой. Монитор должен быть устойчив к программным сбоям.

Системный монитор — сторожевой таймер

В настоящее время роль системного монитора во встраиваемых системах выполняет специальная логическая схема, называемая сторожевой схемой или сторожевым таймером. Таймер регулярно принимает некоторый системный сигнал «все хорошо». Этот сигнал выполняет функцию восстановления (сброса) сторожевого таймера и может быть реализован в разных формах: например, в виде записи центральным процессором (ЦП) определенного кода в регистр сторожевого таймера или в виде выполнения ЦП специальной команды. Если по истечении определенного времени такой сигнал не поступал, сторожевой таймер генерирует сигнал системного сброса. Минимальная частота, с которой происходит восстановление сторожевого таймера, определяется установленной величиной интервала ожидания. На рисунке 1 представлена базовая концепция сторожевого таймера.

Рис. 1. Концепция сторожевого таймера

Работа системы организована таким образом, что сначала встроенная программа сортируется для определения последовательности и времени выполнения команд. Затем процедуры восстановления сторожевого таймера вводятся в код программы таким образом, чтобы интервал между выполнением двух последовательных процедур восстановления не превышал периода ожидания сторожевого таймера. Если происходит сбой программы и ее выполнение нарушается, то процедуры восстановления таймера либо не выполняются вовсе, либо они запускаются через интервал времени, превышающий период ожидания таймера. В этом случае через определенное время сторожевой таймер сгенерирует сигнал системного сброса и вернет систему в известное состояние. Важное требование к сторожевому таймеру — невосприимчивость к программным сбоям.

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

При разработке надежной схемы сторожевого таймера следует учитывать следующие рекомендации.
– Разрядность сторожевого таймера должна обеспечивать полный диапазон интервалов ожидания для всех источников тактового сигнала в системе.
– Сторожевой таймер должен работать от отдельного источника тактовой частоты. Желательно, чтобы был использован специальный источник тактовой частоты для сторожевого таймера, например RC-генератор. Это означает, что если даже по каким-либо причинам источник системной тактовой частоты выйдет из строя и система зависнет, сторожевой таймер сможет продолжить работу и выполнить сброс.
– Метод, используемый для формирования сигнала о сбое системы, должен быть отказоустойчивым.
– Критически важные биты регистров управления и конфигурации сторожевого таймера должны быть защищены от случайной перезаписи.
– Метод восстановления сторожевого таймера должен быть таким, чтобы вероятность случайного восстановления при сбое программы была минимальной.
– Реакция сторожевого таймера на обнаружение сбоя программы должна быть быстрой. Если сторожевой таймер потратит слишком много времени на восстановление системы, то возможны серьезные последствия, особенно в критичных с точки зрения безопасности приложениях.
– Работоспособность сторожевого таймера должна быть доступна для проверки, а тестирование не должно занимать много времени.
– Сторожевой таймер должен облегчать диагностику программного сбоя.
На основе указанных выше принципов была спроектирована схема сторожевого таймера повышенной надежности (СТПН), которая отличается от существующих схем следующими усовершенствованиями:
– улучшенный механизм восстановления;
– синхронизированный по времени доступ к регистрам управления и конфигурации с помощью паролей;
– обнаружение «следов» сбоя программы до запуска интервала ожидания;
– более быстрая и в то же время надежная реакция таймера;
– быстрая проверка сторожевого таймера.

Разрядность сторожевого таймера

При проектировании схемы сторожевого таймера необходимо корректно выбрать его разрядность.
Например, для формирования интервалов задержки в диапазоне 1 мс…1 с необходимо учитывать то обстоятельство, что частота источника тактового сигнала для сторожевого таймера может изменяться в широком диапазоне от нескольких кГц (например, RTC-генератор) до сотен МГц (системная тактовая частота). На рисунке 2 показаны значения времени ожидания для 8-, 16-, 24- и 32-разрядных таймеров при различных тактовых частотах. Вертикальная зеленая полоса отмечает диапазон времени ожидания 1 мс…1 с. Как видно из рисунка, для того, чтобы охватить все значения тактовой частоты и расчетный диапазон времени ожидания сторожевого таймера, необходимо использовать 32-разрядный счетчик.

Рис. 2. Возможные значения времени ожидания таймера (логарифмическая шкала)
Независимый источник тактовой частоты

В СТПН имеются два входа тактового сигнала, один из которых подключен к специальному источнику тактовой частоты, например, к встроенному в микросхему RC-генератору. Другим источником тактового сигнала может быть системная тактовая частота. Для приложений, некритичных с точки зрения безопасности, разработчик системы может вместо специального источника тактового сигнала использовать системную тактовую частоту.

Защита от случайной записи

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

Уникальная схема восстановления

Существуют различные типы механизмов восстановления — простая запись определенного кода (скажем, 0x35), выполнение специальной команды восстановления из набора команд процессора или запись последовательности двух кодов в определенном порядке (например, 0xAA после 0x55). Схема восстановления, использованная для СТПН, представляет собой последовательность двух кодов, но в отличие от существующих схем, в ней установлено предельное время между записью двух чисел. Если записано первое число последовательности и за ним в течение определенного количества циклов системной тактовой частоты не следует записи второго числа, то сторожевой таймер делает заключение о наличии сбоя и производит сброс системы.
Такой подход аналогичен тому, который применяется для описанной выше схемы защиты от случайной записи с помощью паролей. Ограничение интервала времени между записью двух кодов позволяет предотвратить ситуацию, при которой происходит сбой программы и случайное восстановление сторожевого таймера, что затрудняет сброс системы. Кроме того, специальные меры были предприняты для исключения вероятности выбора в качестве кодов последовательности чисел 0x55 и 0xAA, которые обычно используются в тестах записи-чтения памяти. Такие тесты иногда являются частью загрузочного кода, что означает многократное повторение этих чисел в программе.

Оконный режим восстановления

Схема СТПН имеет режим оконного восстановления, что является стандартным для большинства существующих систем. Принцип оконного восстановления заключается в том, что сторожевой таймер может быть восстановлен только в определенном интервале (или окне) времени. В схеме СТПН это временное окно совпадает с интервалом времени ожидания таймера. Если восстановление происходит вне этого окна, это говорит о том, что код программы выполняется быстрее, чем ожидается, и, значит, программа работает в нештатном режиме. Рисунок 3 иллюстрирует концепцию оконного восстановления.

Рис. 3. Оконный режим восстановления
Быстрая реакция на программный сбой

Как уже было сказано выше, необходимо, чтобы реакция сторожевого таймера на сбой программы была быстрой. Программный сбой — это состояние, когда действия системы не детерминированы, поэтому из него необходимо выйти как можно быстрее. В схеме СТПН для уменьшения времени реакции сторожевого таймера применен упреждающий метод.
Если сбой программы в обычных системах произошел в начале периода ожидания сторожевого таймера, то до того, как будут предприняты соответствующие действия по сбросу системы, может пройти слишком много времени. В некоторых приложениях задержка может составлять до 1 с. СТПН заранее распознает признаки сбоя кода и производит сброс системы немедленно. Признаками сбоя кода могут быть следующие факторы.
– Наличие неизвестных кодов в регистрах сторожевого таймера. Программный код пользователя содержит только команды записи определенных чисел в эти регистры, поэтому наличие других кодов в регистрах говорит о возможном сбое.
– Сбой команды записи в регистр конфигурации в короткий фиксированный промежуток времени после разблокирования регистра.
– Сбой команды записи, по крайней мере, в один регистр конфигурации в короткий фиксированный промежуток времени после восстановления системы. После системного сброса пользователь должен как можно скорее сконфигурировать регистры сторожевого таймера.
Во время ожидания сторожевого таймера логика, формирующая сигнал системного сброса, синхронизируется от быстрого системного тактового сигнала (частотой от десятков до сотен МГц), а не от медленного тактового сигнала сторожевого таймера (частотой от нескольких кГц до нескольких МГц). Если сигнал сброса начнет формироваться от медленного тактового сигнала, например частотой 1 кГц, то для восстановления системы уже после периода ожидания потребуется почти 1 мс. За такой длительный промежуток времени программный сбой может вызвать хаос в системе. Опасность генерирования сигнала сброса от системного тактового сигнала заключается в том, что в случае отказа источника системной частоты время ожидания сторожевого таймера будет неопределенным. Чтобы исключить такую ситуацию, в СТПН предусмотрена резервная цепь, которая после дополнительного второго периода ожидания сторожевого таймера передает сигнал системного сброса, как показано на рисунке 4.

Рис. 4. Логика формирования сигнала сброса
Быстрая проверка сторожевого таймера

Стандарты по безопасности, такие как IEC 60730, требуют, чтобы все системы, управляющие функциями, связанными с обеспечением безопасности, были протестированы, причем эти тесты должны быть устойчивы к отказам. Для большинства существующих сторожевых таймеров проводится простой тест на переполнение. Для 32-разрядного таймера, работающего на частоте 1 кГц, тест на переполнение занимает примерно 4 · 106 с, что недопустимо много. При тестировании СТПН производится его разделение на звенья длиной один байт, проверка которых осуществляется независимо друг от друга. На рисунке 5 показана блок-схема, поясняющая концепцию «разделения». На этом рисунке изображен процесс тестирования 3-го звена (байта) таймера.

Рис. 5. Блок-схема тестирования сторожевого таймера с разделением на звенья

Каждое звено таймера представляет собой 8-разрядный синхронный счетчик и комбинационную логику, которая формирует сигнал переполнения. Сигнал переполнения действует как сигнал разрешения для N + 1-го звена. В тестовом режиме выбирается отдельный байт, например байт N, затем в байты с 0-го по N – 1-й загружается число 0xFF. Звено N – 1 сразу же формирует сигнал переполнения, который разрешает работу звена N. В процессе работы звена N происходит сравнение с байтом N регистра значения времени ожидания. Таким путем тестируется звено N, а также все связи между звеньями таймера. При тестировании байта N все другие звенья — N – 2, N – 3, N + 1 и N + 2 — заблокированы. Эти заблокированные звенья (за исключением самого старшего звена счетчика) загружены кодом 0xFF. При тактовой частоте 1 кГц последовательное тестирование каждого звена заняло бы 4 × 256 мс (~103 мс) для 32-разрядного значения интервала ожидания, установленного на 1 с, т.е. 0xFFFFFFFF. Фактическое время тестирования будет зависеть от установленного значения времени ожидания.

Подсчет числа сбросов сторожевого таймера

СТПН хранит также количество сгенерированных системных сбросов. Это число доступно программе из специального регистра, который сбрасывается только при включении питания. Когда это число достигает определенного порогового значения, система выполняет некоторые действия помимо обычной реакции на сброс сторожевого таймера.

Заключение

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

Литература
1. Need a watchdog for improved system fault tolerance?//commsdesign.com/showArticle.jhtml?articleID=211600055&pgno=1

Оставьте отзыв

Ваш емейл адрес не будет опубликован. Обязательные поля отмечены *