Понимание теневой системы реестра и ее преимуществ
Понимание теневой системы реестра и ее преимуществ
Теневой учет является основополагающим методом при разработке надежных и безопасных встроенных систем. Он включает в себя поддержание копирования программного обеспечения & #8212; «тени» & #8212; аппаратного реестра, чтобы система могла манипулировать, проверять и контролировать критическое состояние аппаратного обеспечения без повторного доступа к физическому регистру. Этот подход снижает риск случайной коррупции, поддерживает детерминистическое поведение и позволяет использовать сложные механизмы обнаружения и восстановления ошибок. Поскольку встроенные системы становятся более сложными и развертываются в критически важных областях безопасности, таких как автомобильный, медицинский и промышленный контроль, теневой учет обеспечивает практический метод для достижения более высоких уровней целостности и ремонтопригодности без ущерба для производительности.
Что такое тень регистра?
По своей сути, теневое ведение реестра регистров дублирует содержимое аппаратного регистра в место памяти, которое программное обеспечение может быстро читать и записывать. Аппаратные регистры управляют периферийными устройствами, системными таймерами, контроллерами прерываний и функциями основного процессора. Прямое чтение или запись этих регистров может вводить проблемы с временем, условия гонки или случайные побочные эффекты. Поддерживая теневую копию, программное обеспечение может:
- Прочитайте текущее предполагаемое состояние без необходимости транзакции автобуса.
- Проверяйте предлагаемые изменения, прежде чем отправлять их на аппаратное обеспечение.
- Восстановление известного хорошего состояния после системной ошибки или временной ошибки.
- Обеспечить согласованное представление о состоянии аппаратного обеспечения в нескольких программных компонентах.
Теневые регистры обычно хранятся в оперативной памяти, доступной процессору. Методика особенно ценна, когда регистры имеют эффекты чтения (например, очистка флага прерывания при чтении) или когда обновления аппаратного обеспечения асинхронны потоку программного обеспечения. В таких случаях теневой регистр действует как стабильный прокси, позволяя программному обеспечению рассуждать о состоянии системы без помех.
Чем оно отличается от зеркального и буферного
Теневое отображение не то же самое, что зеркалирование аппаратного регистра, где несколько физических регистров имеют одинаковое значение для обеспечения избыточности (например, в конструкциях с отказоустойчивостью). Это также не простой буфер программного обеспечения, используемый для кэширования значений регистра. Истинное теневое отображение реестра означает, что копия программного обеспечения является авторитетным изображением того, что должен содержать аппаратный регистр . Любая запись в тень в конечном итоге применяется к аппаратному регистру (часто через специальную процедуру обратной записи), и любое чтение из тени, как ожидается, будет соответствовать аппаратному обеспечению, если не произошла ошибка. Эта связь имеет основополагающее значение для возможностей обнаружения ошибок, которые позволяет теневое обнаружение.
Преимущества теней в регистре
Ниже мы рассмотрим каждую выгоду более подробно, иллюстрируя, как тень непосредственно способствует правильности и надежности системы.
Повышение безопасности
В системах, имеющих критически важное значение для безопасности, непреднамеренное запись регистра может привести к непредсказуемому поведению устройства, что потенциально может привести к повреждению оборудования или вреду для человека. Затенение регистра снижает этот риск, требуя, чтобы программное обеспечение сначала проверило предлагаемое новое значение против теневого регистра перед записью на аппаратное обеспечение. Например, контроллер двигателя может затенить регистр рабочего цикла PWM. Программное обеспечение может проверить, что новый цикл дежурства попадает в разрешенные пределы (например, от 0% до 100%) и что нет одновременной записи до обновления фактического аппаратного регистра. Эта последовательность предотвращает вне диапазона значений и уменьшает вероятность сбоев, вызванных частичными обновлениями.
Кроме того, если в аппаратный реестр заносится поврежденное значение из-за ошибки программного обеспечения или небольшого переключения в шине, теневая копия может использоваться для восстановления правильного состояния. Многие стандарты безопасности, такие как ISO 26262 (автомобильный) и IEC 61508 (промышленный), требуют механизмов, которые обнаруживают и восстанавливают после одноточечных сбоев. Регистровое тень в сочетании с периодическими проверками здоровья удовлетворяет этим требованиям, не требуя дорогостоящего избыточного оборудования.
Повышение надежности
Надежность встраиваемых систем зависит от способности обнаруживать и изящно обрабатывать ошибки. Сравнивая значение теневого регистра с фактическим значением регистра аппаратного обеспечения (используя либо опрос прошивки, либо аппаратное обеспечение для считывания), система может обнаруживать расхождения, которые указывают на переходную ошибку, неправильно маршрутизированную запись или сбой в самом регистре. Это сравнение является легкой формой сквозного утверждения.
Например, в контроллере сетевого интерфейса (NIC) тень указателя хвоста передатчика может быть сопоставлена с аппаратным регистром после завершения операции DMA. Несоответствие может сигнализировать о том, что движок DMA некорректно обновил указатель, позволяя программному обеспечению восстанавливаться путем сброса очереди дескриптора, а не потери пакета. Такие механизмы обнаружения значительно улучшают среднее время между сбоями (MTBF) в системах, подверженных электромагнитным помехам или излучению.
Более быстрый ответ
Теневые регистры позволяют программному обеспечению быстро реагировать на изменения в состоянии системы, не дожидаясь цикла чтения аппаратного обеспечения. Рассмотрим регистр состояния прерывания, который защелкивает события из нескольких периферийных устройств. Вместо многократного чтения аппаратного регистра (который может включать в себя протокол медленной шины), рутина службы прерывания может считывать теневую копию, которая была обновлена более ранней процедурой опроса. Это особенно важно в высокоскоростных контурах управления, где важна каждая микросекунда.
Кроме того, тень позволяет прогнозировать техническое обслуживание. Отслеживая, сколько раз регистр был обновлен (через счетчик теней), прошивка может предвидеть, когда компонент может изнашиваться, или она может обнаружить аномально высокий уровень обновлений, которые могут указывать на состояние неисправности. Этот превентивный ответ возможен только потому, что программное обеспечение имеет локальный, последовательный взгляд на историю регистра.
Упрощенная отладка
Отладка встроенных систем часто включает в себя проверку содержимого регистра, чтобы понять, почему периферийное устройство ведет себя неожиданно. Традиционные методы отладки требуют нарушения выполнения для чтения аппаратного регистра, что может изменить состояние системы (например, очистка бита состояния). Теневые регистры могут быть прочитаны в любое время, не влияя на аппаратное обеспечение, что делает их идеальными для неинтрузивного мониторинга. Разработчики могут размещать точки останова, вызванные несоответствиями теневого регистра или лог-снимками теневого регистра во время нормальной работы.
Многие операционные системы реального времени (RTOS) и инструменты отладки поддерживают точки наблюдения на адресах памяти, принадлежащих теневым регистрам. Это позволяет разработчику обнаруживать первую запись в тень, тем самым определяя точный путь кода, который изменяет критическую настройку. Без тени разработчику пришлось бы использовать аппаратные точки наблюдения на самом регистровом адресе, которые часто ограничены по количеству и могут повлечь штрафы за производительность.
Рассмотрение осуществления
Эффективное затенение регистра требует тщательного проектирования, чтобы избежать введения новых режимов отказа.
Синхронизация после сброса и ошибок
После сброса системы аппаратные регистры инициализируются до их значений сброса, но теневые копии в ОЗУ не определены (или сохраняют значения несвоевременности). Код запуска должен скопировать значения сброса всех затененных регистров в область тени до использования любого периферийного устройства. Аналогично, после тайм-аута или исключения, теневые регистры могут больше не отражать состояние аппаратного обеспечения, поэтому этап ресинхронизации имеет важное значение. Некоторые проекты используют специальный флаг «теневой валидности», который очищается при сбросе и устанавливается только после полного пропуска ресинхронизации. Любой доступ к тени, чей флаг валидности является ложным, должен инициировать процедуру восстановления системы.
Атомность и последовательность
При обновлении регистра, который охватывает несколько широт шины (например, 32-битный регистр, доступ к которому осуществляется через 16-битную шину), запись в тень должна выполняться атомарно относительно записи аппаратного обеспечения. В противном случае может произойти прерывание между обновлением теней и записью аппаратного обеспечения, оставляя систему в непоследовательном состоянии. Использование барьеров памяти и критических секций (отключение прерываний или использование последовательностей без блокировки) является обязательным. Для многоядерных процессоров теневые регистры должны быть защищены шпинолами или аппаратной транзакционной памятью для предотвращения условий гонки.
Контроль доступа
Не каждому программному компоненту должно быть разрешено модифицировать каждый теневой регистр. В системах, выполняющих привилегированные RTOS и непривилегированные задачи, регистрационное тень может быть объединено с блоком защиты памяти (MPU), чтобы предоставить доступ к записи только драйверу, владеющему регистром. Это предотвращает задачу-изгой от повреждения критической настройки через тень. Конфигурация MPU должна быть проверена во время загрузки.
Выступление Overhead
Каждая запись в аппаратный регистр посредством теневого ввода вводит по меньшей мере две операции: запись в тень и (возможно, условная) запись в аппаратное обеспечение. В высокопроизводительных путях (например, буферные указатели DMA, обновляемые каждый пакет) эти накладные расходы могут быть неприемлемы. Дизайнеры должны тщательно выбирать, какие регистры в тень. Как правило, только регистры конфигурации и регистры состояния, которые читаются нечасто или что критически важные для безопасности функции управления скрыты. Регистры пути передачи данных, которые пишутся с линейной скоростью, обычно обрабатываются с прямым аппаратным доступом или с выделенными аппаратными теневыми регистрами (например, двойное буферирование).
Лучшие практики
Принятие следующих методов позволит максимизировать ценность теневого учета при минимизации связанных с этим рисков.
- Обновление тени сразу после любого изменения аппаратного регистра. Это гарантирует, что тень остается точным отражением предполагаемого состояния. Любая задержка вводит окно несоответствия, которое может быть использовано по ошибке. Используйте одну функцию или макрос, который записывает как тень, так и аппаратный регистр в критическом разделе.
- Используйте атомные операции для многословных регистров. Если регистр потребляет два адреса, отображаемых на памяти, используйте одну транзакцию (например, 64-битную нагрузку/хранитель на 32-битном процессоре) или отключите прерывания во время последовательности записи. Для процессоров, которые не поддерживают операции атомной памяти, очередь записи в буфере и применяйте ее в привилегированном контексте.
- Периодически проверить целостность тени. В низкоприоритетной фоновой задаче прочитайте аппаратные регистры и сравните их с теневыми копиями. Любое несоответствие должно быть зарегистрировано и, при необходимости, вызвать корректирующее действие (например, переписать значение тени на аппаратное обеспечение). Период проверки должен быть короче ожидаемой задержки неисправности, требуемой уровнем целостности безопасности.
- Внедрить ограничения доступа. Используйте MPU или список управления доступом к программному обеспечению, чтобы ограничить, какие модули кода могут изменять каждый регистр теней. Драйверы должны выставлять API, который инкапсулирует логику обновления теней, предотвращая прямые манипуляции.
- Рассматривают аппаратное обеспечение для теневой защиты. Некоторые микроконтроллеры предлагают выделенные «теневые регистры» в аппаратных средствах для критически важных периферийных устройств (например, конфигурация часов). Они обеспечивают те же преимущества с нулевыми накладными расходами на программное обеспечение для синхронизации. Там, где это доступно, предпочитают аппаратные теневые регистры программным теням, потому что они по своей сути последовательны после сброса.
Проблемы и торговые отношения
Хотя теневое наблюдение за регистром является полезным, оно не является серебряной пулей. Необходимо сопоставить несколько проблем с преимуществами:
- След памяти: Теневая передача каждого регистра в сложном периферийном устройстве может потреблять значительную оперативную память. В глубоко встроенных системах с только килобайтами оперативной памяти эти накладные расходы могут быть непомерно высокими.
- Увеличение сложности кода: Каждая запись в регистре становится многоступенчатой транзакцией. Это может затруднить обслуживание драйверов и сделать их более склонными к ошибкам, если они не абстрагированы должным образом.
- Скрытые побочные эффекты синхронизации: Если аппаратный регистр чувствителен к чтению (например, очистка прерывания, вызванного краем), процедура теневого обновления может непреднамеренно прочитать аппаратное обеспечение, вызывая немую потерю события. Функция обновления должна записываться только в аппаратный регистр, никогда не читать его, если не используется отдельная маска чтения.
- Согласованность в контексте прерывания: Если прерывание непосредственно изменяет аппаратный регистр (не проходя через тень), тень устареет. Это обычное явление, когда аппаратное обеспечение автоматически очищает бит состояния после прерывания. ISR должен синхронизировать тень после обработки прерывания.
Несмотря на эти проблемы, преимущества в безопасности, надежности и отладке обычно перевешивают затраты на системы с некрайним ограничением.
Реальные приложения World
Устройства управления автомобильными двигателями (ECU)
Современные ЭБУ управляют десятками приводов и датчиков через шины CAN и FlexRay. Для регистров времени двигателя используется теневое регулирование регистров. Несовпадающая тень может обнаружить поврежденную запись, вызванную переходным падением напряжения, что позволяет ЭБУ запускать режим хромоты, а не полного отключения. Стандарт ISO 26262 поощряет такое обнаружение для уровней ASIL-C и ASIL-D.
Медицинские имплантируемые устройства
Пейсмейкеры и инсулиновые помпы полагаются на теневые регистры, чтобы гарантировать, что параметры доставки терапии (например, ширина импульса, дозировка) никогда не пишутся неправильно. Тень хранится в отдельном банке оперативной памяти, который защищен кодом, исправляющим ошибки (ECC). Несоответствие между тенью и аппаратным регистром вызывает безопасное состояние, которое не наносит вреда пациенту.
Системы управления полетами в аэрокосмической сфере
Системы "лета по проводам", использующие тройное модульное резервирование, все еще могут извлечь выгоду из теневых регистров в каждой полосе. Даже при трех полосах временный сбой в регистре одной полосы может вызвать разногласия. Тень позволяет местной полосе обнаруживать сбой и сбрасывать регистр без участия избирателя. Это улучшает время безотказной работы и уменьшает неудобства отключения.
Альтернативные и дополнительные методы
Теневой регистрационный метод часто сочетается с другими методами надежности:
- Код исправления ошибок (ECC) на шине регистра: ECC может исправлять однобитные ошибки в аппаратном регистре, но не может защитить от программных ошибок, которые пишут неправильное значение.
- Прочитав запись: Вместо тени программное обеспечение может считывать аппаратный регистр после каждой записи и проверять значение. Это потребляет больше полосы пропускания шины и может изменить состояние регистра, если чтение имеет побочные эффекты.
- Следопыт аппаратного обеспечения, который контролирует целостность регистра: Некоторые SoC имеют аппаратную проверку целостности, которая периодически сравнивает теневые регистры (загруженные в выделенные компараторы) с состоянием аппаратного обеспечения.
Для систем, где требуется высокая производительность и безопасность, рекомендуется гибридный подход: теневые критические регистры безопасности, оставляя высокочастотные регистры пути передачи данных незатененными, но защищенными сквозным CRC или паритетом.
Заключение
Теневой учет - это практичный и мощный метод, который повышает безопасность, надежность и отладку встроенных систем. Поддерживая программную копию критических аппаратных регистров, разработчики получают возможность проверять записи, обнаруживать неисправности и восстанавливать правильное состояние без задержки и побочных эффектов непрерывного доступа к аппаратному обеспечению. В то время как реализация требует тщательного внимания к синхронизации, атомарности и накладным расходам на память, окупаемость инвестиций с точки зрения целостности системы существенна. Для любого проекта, ориентированного на критически важные для безопасности приложения, тень реестра должна быть частью базового инструментария проектирования.
Для дальнейшего чтения по управлению аппаратным регистром и отказоустойчивому встроенному дизайну обратитесь к справочному руководству по архитектуре ARM для обработки регистров на уровне процессора или ISO 26262 стандарта функциональной безопасности дорожных транспортных средств для руководства по диагностическому покрытию. Дополнительные сведения о практической реализации можно найти в белой книге Безопасный дизайн программного обеспечения для встроенных систем от NXP.