Диссертация (1150736), страница 9
Текст из файла (страница 9)
Кроме того, требуется наличие драйверов устройств, таких как сенсоры, Wi-Fi, Bluetooth, ZigBee и модулей сетевыхпротоколов, например, TCP/IP. Все эти программные модули увеличивают расходы памяти и энергопотребление устройства.46Еще одной существенной проблемой является то, что все достаточно сложные программы в процессе разработки и эксплуатации содержат в себе ошибки. Существует три различных подхода к обнаружению ошибок.∙ статическое доказательство правильности программы на основе спецификаций;∙ тестирование и отладка на программном или ПЛИС эмуляторе;∙ обнаружение ошибок и отладка во время исполнения программы на реальном устройстве.Подход на основе анализа правильности программы является ограниченным из-за комбинаторного взрыва состояний.
На практике он может применяться либо для очень простых программ, либо для ограниченного классаошибок, либо является эвристическим и не дает гарантии отсутствия ошибок. С усложнением полупроводниковых устройств и увеличением их вычислительной производительности происходит и рост их функциональности, чтоприводит к взрывному росту объема программного обеспечения. Большинствометодов автоматической проверки правильности проверяют программу на соответствие спецификации.
Но затраты на составление спецификации многократно превосходят затраты на разработку кода программы. Кроме того, самаспецификация не гарантирована от ошибок. Более подробно о статическомобнаружении одного класса ошибок написано в разделе 1.11.Тестирование и отладка на эмуляторе обеспечивает возможность обнаружения ошибок в контролируемой среде с помощью тестового покрытия.
Однако эмуляция обладает многими недостатками, которые не позволяют обнаружить этим методом существенную долю ошибок:∙ малая скорость эмуляции, не соответствующая скорости работы реального устройства, приводит к невозможности тестирования длительныхсценариев работы;∙ оборудование и его драйверы представлены абстрактными моделями, которые могут существенно отличаться по поведению от реального оборудования, что связано с трудоемкостью разработки моделей;47∙ из-за неточностей моделей оборудования и низкой скорости эмуляциивременные характеристики отличаются от реальных, что приводит кневозможности обнаружить многие ошибки синхронизации;∙ тесты являются синтетическими и не покрывают реальные сценарии использования устройства;∙ даже 100% тестовое покрытие по операторам программы не гарантирует отсутствия ошибок, кроме того, оно обычно не включает драйверыоборудования.Таким образом, обнаружение ошибок на работающем устройстве остаетсяодним из основных практических методов тестирования и отладки.
Среда исполнения программы должна обеспечит обнаружение ошибок и возможностьих отладки. Ситуация затрудняется ограниченным интерфейсом устройства свнешним миром. Это приводит к необходимости существенной избыточностив коде программы и, возможно, в функциональности микропроцессора. Длявыполнения отладочных функций среда исполнения должна обеспечивать раннее обнаружение и протоколирование ошибок с возможностью определениясостояния программы в момент ошибки с точностью до оператора, вызвавшего ошибку, и состояния локальных переменных в момент ошибки.
Кроме того,желательна защита протокола ошибок от разрушения в результате ошибок впрограмме. Все эти требования обычно ассоциируются с функциональностьюоперационной системы. Внесение операционной системы на устройство увеличивает расходы памяти и энергопотребление устройства.Существует несколько типов операционных систем для малопотребляющих устройств и сред исполнения, частично или полностью реализующихданные требования:∙ операционные системы с поддержкой страничной памяти;∙ операционные системы без поддержки страничной памяти;∙ среды управляемого исполнения.481.10.1Операционные системы с поддержкой страничнойпамятиК этому классу относятся все операционные системы общего применения свытесняющей многозадачностью, такие как Linux, FreeBSD и многие системыреального времени, такие как QNX, VxWorks, WinCE.Контролер памяти с поддержкой страничной памяти (Memory ManagementUnit, MMU) обеспечивает динамическую подкачку страниц и загрузку данныхс внешних накопителей.
В случае малопотребляющих устройств это перезаписываемая память. Для некоторых процессоров, например, архитектуры ARM9,управление страничной памятью связано с кэшированием данных. Кроме того, MMU обеспечивает защиту памяти и разделение адресного пространстваразличных процессов. Подкачка страниц обычно не используется для системреального времени, к которым относятся большинство малопотребляющихустройств, из-за увеличения задержек и ухудшения предсказуемости работысистемы.Защита памяти и наличие операционной системы с вытесняющей многозадачностью в большинстве случаев обеспечивают выживание системы протоколирования ошибок и системного отладчика даже при критических сбоях.
Это часто позволяет обнаружить причину ошибки и провести отладку наустройстве. Наличие механизмов защиты памяти не гарантирует немедленноеобнаружение ошибки. Ошибка внутри одного процесса часто обнаруживаетсяпосле продолжительного периода работы программы на испорченных данных.Это приводит к высокой трудоемкости определения первопричины ошибкипосле ее обнаружения.Типичный размер памяти для таких операционных систем начинается отнескольких мегабайт.Наличие механизмов страничной памяти существенно замедляет обращение к процессорной шине из-за трансляции адресов и может приводить кпромахам буфера трансляции, что приводит к большим задержкам.
Эти механизмы в основном поддерживаются процессорами с 32 битной архитектурой,которые имеют большую площадь и пиковое энергопотребление, что можетбыть неприемлемо для малопотребляющих устройств.491.10.2Операционные системы без поддержки страничнойпамятиЭти операционные системы могут быть полноценными многозадачнымиоперационными системами или однопроцессными операционными системами, подключаемыми к пользовательской программе в виде библиотеки.
К этому классу относятся uCLinux, Free RTOS, eCos RTOS, Nucleus RTOS, IntegrityRTOS, LynxOS, ThreadX RTOS и другие.Наличие защиты от ошибок хорошо осознается разработчиками процессоров и микроконтроллеров. Блок защиты памяти (Memory Protection Unit,MPU) встраивается в процессорные архитектуры без поддержки страничнойпамяти. Аккуратное использование этих механизмов в операционной системепозволяет получить близкую функциональность по обнаружению ошибок нанебольшом объеме памяти по сравнению с страничной памятью. Основнымограничением является количество регионов памяти, поддерживаемых MPU,например, для ARM-R5, не более 16 блоков по 8 подблоков фиксированногоразмера [49].
Защита памяти оказывает незначительное влияние на энергопотребление процессора.Типичный размер памяти для таких операционных систем начинается отнескольких сотен килобайт.Сравнение схожих по производительности процессоров семейства ARMпо наличию MMU и энергопотреблению дано в таблице 1.6.Таблица 1.6: Сравнение процессоров ARM, отличающихсяпо наличию MMU.ПараметрARM-A5 [50] ARM-R5 [51]Процесс изготовленияTSMC 40LPTSMC 40LPЧастота480480ШинаAXIAXI1.11.11.571.66MMUMPU1324Напряжение питания (V)Производительность на (DMIPS/MHz)Тип контролера памятиЭнергоэффективность (DMIPS/mW)501.10.3Cреды управляемого исполненияСреда управляемого исполнения (Managed Runtime Environment, MRE) окружение исполнения для языка высокого уровня, обеспечивающее потенциальное программное восстановление любых ошибок времени исполненияв управляем коде программы.
Это требование не распространяется на сбоиаппаратного обеспечения.Такое определение является идеализированным, поскольку ошибки связанные с исчерпанием физических ресурсов не всегда могут быть восстановленыбез использования того же вида ресурсов. Реализации могут обеспечить приближение к идеальному поведению, гарантируя восстановление от первичныхошибок, то есть ошибок возникших не в обработчике ошибки.Ошибки в реализации среды управляемого исполнения и во внешнихнеуправляемых модулях не гарантированы для восстановления. Не все ошибки могут быть восстановлены по логике работы программы.
Таким образом,в программе могут присутствовать фатальные ошибки. Фатальные ошибки поопределению приводят к преждевременному завершению программы.Наличие среды управляемого исполнения гарантирует обнаружение первопричины ошибки, если она произошла в управляемом коде, и, в большинствеслучаев, позволяет исключить потерю данных, даже при фатальной ошибке.К средам управляемого исполнения традиционно относят среды исполнения Java и CLI(.NET).
Но согласно общему определению к тому же классуможно отнести среды исполнения таких языков, как Python, Java Script.Возможность и преимущества системного программирования с их использованием рассматриваются во многих работах [52–55] на основе практической разработки драйверов, виртуальных машин и операционных систем, втом числе в работах автора [17–19] на основе практической разработки виртуальной машины Moxie.К основным особенностям сред управляемого исполнения, согласно [56],относятся:∙ верификация кода при загрузке, гарантирующая строгое соответствиесемантики языка высокого уровня и исполняемого представления скомпилированной программы;51∙ строгая типизация, гарантирующая безопасное приведение типов и контроль типов во время исполнения;∙ автоматическое управление памятью на основе сборки мусора, обеспечивающая возможность работы с памятью без использования небезопасных указателей;∙ обработка исключений.Эти свойства обеспечивают больший уровень безопасности и устойчивости програмных компонент к ошибкам по сравнению с бинарной компиляциейиз традиционных языков для разработки встроенного программного обеспечения, таких как С, С++, без необходимости использования аппаратных средствзащиты памяти и многозадачной операционной системой.