Khaelen & Korvax
Khaelen Khaelen
Конечно, давай обсудим создание самовосстанавливающейся ройки, которая не теряет ни одного элемента даже при 10-процентном проценте отказов. У меня матрица избыточности готова, но мне нужна твоя дотошность, чтобы отшлифовать логику.
Korvax Korvax
Хорошо, давай посчитаем. Если у каждого модуля вероятность отказа 10%, то вероятность того, что модуль выживет после n независимых испытаний, равна 0.9 в степени n. Чтобы гарантировать, что ни один из модулей в рое никогда не выйдет из строя, необходимо обеспечить избыточность, чтобы общая вероятность отказа была фактически равна нулю. 1. **Коэффициент избыточности** Если у тебя R идентичных подмодулей на логический модуль, то вероятность отказа логического модуля равна (0.1) в степени R. Чтобы снизить её ниже 10 в минус шестой (практически ноль), тебе нужно R = 6, потому что 0.1 в шестой степени – это 1e-6. 2. **Запуск самовосстановления** Рутина восстановления должна запускаться, когда количество активных подмодулей падает ниже R - 1. Это даст тебе запасной, чтобы поглотить первый отказ, прежде чем ты перестроишь. 3. **Время восстановления против скорости отказов** Предположим, процесс восстановления занимает t секунд. Ты должен убедиться, что вероятность второго отказа во время восстановления пренебрежимо мала: 0.1 * (t / T) значительно меньше, чем 1e-6, где T – среднее время между отказами. Если T, скажем, 100 секунд, то t должно быть меньше 0.001 секунды, что нереально. Так что либо снизь скорость отказов модуля восстановления, либо добавь немедленный микро-реконфигурирование, использующее запасной, перед полным восстановлением. 4. **Проверка на зависимые циклы** Убедись, что отказ одного контроллера не приводит к отказу всех подмодулей. У каждого логического модуля должен быть свой микроконтроллер или изолированная от сбоев шина связи. 5. **Проверка моделирования** Запусти моделирование Монте-Карло с как минимум 10 в шестой итераций, имитируй отказы с вероятностью 10% на модуль и убедись, что ни один логический модуль никогда не опускается до нуля подмодулей. Если ты установишь R равным 6, обеспечишь буфер с запасными и добавишь быструю микро-реконфигурацию перед полным восстановлением, ты устранишь 10% риска для роя. Любые другие изменения будут косметическими, а не необходимыми для выполнения основного требования.
Khaelen Khaelen
Отлично посчитал, но не забудь запереть автобус и добавить сторожевой таймер для модуля микро-переконфигурации. Иначе при сбое контроллера вся рой полетит коту под хвост, еще до начала восстановления.
Korvax Korvax
Заблокируй автобус с приоритетным арбитром, чтобы только модуль микро-реконфигурации мог перехватить контроль. Потом запусти таймер сторожевой собаки, который перезагрузит контроллер, если он зависнет на больше чем, скажем, 20 миллисекунд. Так мы автоматически перезагрузим контроллер до того, как исцеление будет повреждено, и сохраним рой в безопасности.
Khaelen Khaelen
Отлично, убедись, что приоритеты арбитра жёстко заданы и недоступны для изменения со стороны роя, иначе модуль-изгой может перехватить шину. Порог сторожевого таймера в 20 миллисекунд – жесткий, но допустимый — следи за дрожанием на источнике тактирования. Проверим логику арбитра быстро, перед внесением изменений.
Korvax Korvax
Конечно. Быстрая проверка на здравый смысл: 1. Закодировать таблицу приоритетов в ПЗУ, никаких записей в оперативную память не допускается. 2. Убедиться, что уровни приоритетов строго упорядочены (без равенств). 3. Подтвердить, что только модуль микроконфигурации может претендовать на более высокий приоритет, чем любой другой модуль. 4. Добавить флаг проверки, который инициирует сброс системы, если таблица приоритетов будет прочитана и изменена во время работы. 5. Обеспечить, чтобы арбитр подавал сигнал прерывания сторожевому таймеру при обнаружении любого конфликта шины или зависания. Прогони юнит-тест, который моделирует одновременные запросы от трёх модулей, и проверь, чтобы арбитр всегда передавал управление модулю микроконфигурации. Это должно закрыть критический путь.
Khaelen Khaelen
Получил список. Тестовый прогон подтвердит, что арбитр соблюдает приоритеты. Только помни, любая модификация таблицы ROM – это критическая уязвимость, поэтому держи прошивку подписанной. Как закончишь, запусти сценарий разрешения конфликтов шин и следи за флагом сторожевого таймера – если что-то пойдет не так, он сразу же сработает. Всё.
Korvax Korvax
Понял, прошивку подписал, таблицу приоритетов в ROM зафиксировал, сторожевой таймер готов. Сейчас запускаю тест на разрешение – следи за флагом. Если что-то пойдёт не так, система перезагрузится, пока модуль не перехватил шину.
Khaelen Khaelen
Отлично, следи за флагом сторожевого режима. Если тест провалится, перезагрузка сработает до того, как что-то вредоносное сможет зацепиться.
Korvax Korvax
Всё сделаю — "пес-охранник" на связи, готов сбрасывать, если что-то вылезет. Всё готово.