Согласно закону Мура, сложность компьютерных микросхем удваивается каждые 18 месяцев, а сложность программного обеспечения растет еще быстрее. Это побуждает разработчиков компьютерных систем к поиску технологий, способных самостоятельно адаптироваться к изменению окружающей среды. Одна из таких технологий, адаптивная декомпозиция ресурсов, представляющая собой расширение операционной системы реального времени на уровне ядра, позволяет создавать безопасные группы из нескольких приложений и потоков, максимально эффективно используя ресурсы процессора.
Как правило, множество подсистем, процессов и потоков, составляющих современную встраиваемую систему, разрабатываются параллельно друг другу. Проект распределяется между многочисленными группами разработки; каждая из них имеет свои собственные цели, схемы назначения приоритетов задач и подходы к оптимизации процесса выполнения. Когда эти подсистемы интегрируются в общую среду исполнения, все ее части должны обеспечивать требуемый ответ при любом сценарии работы. Однако при таком способе разработки неизбежно возникают вопросы, связанные с производительностью. Многие из этих вопросов появляются только в процессе интеграции и проверочного тестирования, когда стоимость перепроектирования и перекодирования программного обеспечения оказывается чрезвычайно высокой. Разработчикам приходится манипулировать приоритетами задач с возможным изменением поведения потоков в системе, а затем проводить повторное тестирование и уточнять собственные модификации. На это нередко требуется несколько рабочих недель, что приводит к увеличению затрат и задержке выпуска продукта. К сожалению, лишь немногие разработчики и проектировщики могут диагностировать и решать такие проблемы на системном уровне.
Усугубляет ситуацию то обстоятельство, что многие современные встраиваемые системы являются динамическими устройствами, работающими в сети, которые могут (или должны) поддерживать новые функциональные возможности программного обеспечения на протяжении всего срока службы. Подобная гибкость дает многочисленные преимущества, но и влечет за собой множество проблем в ходе проектирования. К примеру, каким образом устройство может загружать и запускать новые программные компоненты, не согласовываясь с режимом работы и выполнением в реальном времени существующих компонентов? И как устройство может безопасно выполнить эти обновления во время объединения в операционной системе, поддерживая постоянную доступность и высокий уровень надежности? В таких случаях редко удается осуществить добавление новых аппаратных средств или вычислительных мощностей, чтобы обеспечить работу новых компонентов. Следовательно, системные разработчики должны применять технологии, гарантирующие, что каждый программный компонент — как и старый, так и новый — всегда получить иметь доступ к требуемым вычислительным ресурсам.
