Работа с аппаратурой

  • Исследование возможностей по созданию специализированных прошивок UEFI для Intel x86_64: Boot Guard, TPM, защита от DMA атак, ограничение доступа к устройствам, механизмы настройки, обновления и восстановления.
  • Разработка кода начальной загрузки платформы (bare metal firmware/loader) для встраиваемых систем с построением корня доверия.
  • Проектирование архитектуры и тестирование сетевого стека нижнего уровня для AFDX сетей в ARINC-совместимой ОСРВ на примере DPAA/DTSEC и GRETH.
  • Реализация криптостойкого генератора случайных чисел для встраиваемых систем на различных платформах.
  • Добавление поддержки внешнего контроллера кэшей на ARMv7, а также других механизмов кэширования на различных архитектурах. Обеспечение детерминизма и вычисление времени наихудшего выполнения.
  • Реализация гипервизора для аппаратного разделения доступа между параллельно запущенными операционными системами на одном устройстве для различных архитектур.
  • Реализация gdbserver для взаимодействия с JTAG устройством. Разработка скриптов для GDB, улучшающих взаимодействие с различными платами. Получение класса памяти по его адресу в ОСРВ со статической конфигурацией памяти.
  • Добавление поддержки специфических BSP в QEMU (PowerPC 476FP, вариации MIPS) с последующим слиянием с upstream.

Компоненты ОСРВ

  • Разработка интегрируемого модуля извлечения данных и конфигурации из работающей программы в пользовательском пространстве на лету с целью последующего её обновления с переиспользованием исходного состояния.
  • Разработка концепции обеспечения встроенного диагностирования корректной работы ОСРВ и оборудования (BITE, BIST) на разных этапах функционирования.
  • Разработка модулей поддержки платформы (PSP/ASP/BSP) для встраиваемых систем на базе архитектур AArch64, PowerPC 64-bit, SPARC.
  • Реализация и оптимизация компонентов стандартной библиотеки языка C 2018 года и их последующее тестирование и верификация (POSIX, BSD расширения, libm, работа с памятью).
  • Реализация стековых канареек и других механизмов контроля потока управления программного кода на различных платформах.
  • Добавление поддержки ADA/SPARK и других языков во встраиваемые операционные системы.
  • Интерактивный монитор для контроля состояния операционной системы и выполнения операций управления в отладочном режиме.
  • Реализация сетевой файловой системы как хранилища данных в отладочном режиме с прозрачным обновлением.

Инструментирование и тестирование

  • Адаптация инструмента вычисления размера стека в наихудшем случае (WCSU) для работы с бинарными компонентами и при использовании кода с неявной передачей управления.
  • Адаптация инструментов автоматической верификации для специализированных операционных систем.
  • Анализ времени работы в худшем случае (WCET) с учётом кэширования, периферийных устройств и независимо работающих ОС на различных ядрах.
  • Выявление недетерминированного поведения при эмуляции целевой платформы с помощью QEMU и иных инструментов и их устранению с целью обеспечения воспроизводимых результатов, в том числе при использовании многоядерного ПО (AMP и SMP).
  • Формализация требований стандарта на кодирование и проведение статического анализа на их соответствие с помощью различных инструментов, включая libTooling и Clang, а также дальнейший автоматический рефакторинг кодовых баз.
  • Разработка методики тестирования и реализация тестового набора для интерфейса файловых систем ARINC 653 Part II с поиском узких мест производительности.
  • Оптимизация процесса тестирования встраиваемых систем через распараллеливание и аркестрацию, агрегация аналитики и выгрузки артефактов в условиях множества тестовых наборов и ограниченного количества оборудования для проведения тестирования. Организация пула доступных аппаратных платформ для тестирования. Обеспечение идентификации задач на уникальность при запуске на оборудовании.
  • Автоматизация и оптимизация по времени создания инструментальных машин различных конфигураций для разработки ПО под ОСРВ.
  • Добавление поддержки инструментов поиска гонок во встраиваемых системах на базе ThreadSanitizer в ядре и пользовательском режиме.
  • Добавление поддержки инструментов поиска обращений к неинициализированной памяти во встраиваемых системах на базе MemorySanitizer в ядре.
  • Моделирование поведения кода операционной системы в функциях на ассемблере или на стыке уровней привилегий процессора для улучшения эффективности статического анализа.
  • Расширение возможностей механизмов сбора покрытия. Добавление поддержки LLVM Coverage. Оптимизация передачи данных по собранному покрытию. Реализация сбора покрытия по MC/DC и другим техникам.
  • Сбор трасс выполнения кода по моделям для применения в статических анализаторах.
  • Создание инструмента для автоматизации проведения инспекций кода для непроверяемых через тестирование сценариев.
  • Кодогенерация встроенных проверок через assert и средства LLVM Sanitizers на основе требований, написанных на полуформальном языке.

К.ф.-м.н. Алексей Хорошилов