ИИ-агенты помогли формально верифицировать ядро xv6 вплоть до уровня железа

· Искусственный интеллект
Исследователи из MIT построили фреймворк MachCSL, который рассуждает о работе RISC-V на субинструкционном уровне, и с помощью LLM-агентов доказали корректность учебного ядра xv6, попутно обнаружив 11 ошибок.

cover.svg

Франс Каашук и Николай Зельдович представили MachCSL — фреймворк для формальной верификации системного программного обеспечения поверх низкоуровневой семантики RISC-V-компьютера. В основе лежит официальная семантика Sail RISC-V.

Рассуждения на уровне железа

Ключевая идея MachCSL — приспособить конкурентную сепарационную логику (на базе Iris) к рассуждениям о работе оборудования на субинструкционном уровне. Речь идёт о тех деталях, которые обычно прячутся за абстракциями: трансляция таблиц страниц, TLB, уровни привилегий, конфигурационные регистры, цикл выборки-декодирования-исполнения инструкций, ловушки и прерывания, DMA, разделяемая память и даже сбои питания. Доказательство на таком уровне детализации гарантирует, что системный код корректно управляет всеми тонкостями железа.

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

Случай xv6

В качестве показательного примера исследователи верифицировали учебное ядро xv6 — 6657 строк на C и ассемблере. Это ядро предоставляет традиционный Unix-интерфейс системных вызовов (процессы, файловая система, файловые дескрипторы, вытесняющее планирование) и содержит заметную внутреннюю конкурентность: поддержку многоядерности с мелкогранулярными блокировками, разделяемую память, прерывания, DMA.

В ходе работы обнаружилось 11 ошибок в самой реализации xv6, а также по одной ошибке в семантике Sail RISC-V и в её извлечении в Lean. Весь труд занял 102 дня — включая время на разработку самого фреймворка MachCSL.

Теорема про echo

Поверх верифицированного ядра авторы доказали теорему о поведении на уровне консоли. Если пользователь набирает на UART-консоли echo hello world, то единственный вывод, который может произвести система, — это hello world (при отсутствии сбоев и прочих ошибок). Теорема охватывает не только ядро, но и бинарники init, sh, echo, cat, grep, sync и seccomp из начального образа файловой системы.


Источник: Lobsters

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.