Двойное резервирование компьютерной памяти Saturn V LVDC, как разрешились разногласия?

В видеоролике Smarter Every Day Как НАСА управляло Saturn V? - Smarter Every Day 223 Дестин беседует с Люком Талли о модулях памяти, используемых в компьютере Saturn V LVDC.

Этот компьютер управляет всем временем; запуск двигателя, остановка двигателя, разделение огня, запуск ретро-ракет и все такое прочее.

Он выполняет навигацию и руководство. Вы сохранили в памяти профиль; в данный момент мне нужно быть здесь и двигаться так быстро в этом направлении[…]

Теперь, когда «Сатурн» летит, обе эти памяти выполняют одну и ту же программу полета и сравнивают выходные данные, чтобы убедиться, что получают один и тот же ответ.

Если они не получат один и тот же ответ, войдите в подпрограмму и скажите: «На данном этапе полета у меня есть эти два числа, что имеет смысл продолжать использовать, используйте это число, чтобы продолжать».

Вопрос: с тройной избыточностью вы можете (надеюсь) отказаться от одного результата, если он не совпадает с двумя другими. Однако какой метод использовался для разрешения возможных расхождений между данными, возвращаемыми из двух резервных модулей памяти, используемых в системах LVDC? Как узнать, "...что имеет смысл продолжать использовать..."?

обновление: эта ссылка от @OrganicMarble полезна и объясняет, что архитектура IBM предоставляет два режима, называемые SIMPLEX и DUPLEX. Только в одном режиме была избыточна память (предмет моего вопроса), но похоже, что во время полета этот режим не использовался. Тем не менее, я спрашиваю о режиме, разработанном IBM, в котором два модуля памяти будут использоваться с двойной избыточностью.


Связанный: это действительно только компьютер Saturn V или здесь есть и другие системы?

Умнее с каждым днем ​​Память Saturn V LVDC Умнее с каждым днем ​​Память Saturn V LVDC

Тэлли совершенно ясно говорит, что память была дважды избыточной, а обработка — тройной избыточной. Для памяти, предполагая бит четности, если одно устройство сталкивается с ошибкой четности, используйте другое и перезапишите хорошее слово обратно туда, где была ошибка, чтобы исправить ее. Для обработки тройным резервированием будет голосование 2 из 3. Что касается ситуации с памятью, то одиночные ошибки, вероятно, возникали нечасто, двухбитовые ошибки (в одном и том же слове) или одиночные ошибки в одном и том же слове в обоих блоках были, вероятно, настолько маловероятными, что дальнейшая защита не стоила бы затрат/сложности/ массовый бюджет.
@uhoh: я не знаю, получаете ли вы уведомления об изменениях ответов в SE, но теперь мой ответ касается всего вопроса четности после того, как я много прочитал.
@tfb спасибо за пинг, нет, кажется, изменения существующих ответов не генерируют флаги для OP, поэтому я бы не узнал без вашего комментария. Теперь это настоящий ответ, вау!

Ответы (1)

Этот ответ является предположением, основанным на Техническом примечании НАСА D-5869 : Описание и характеристики системы навигации, наведения и управления ракеты-носителя «Сатурн» (обозначаемой ниже как «D-5869»), а также на страницах цифрового компьютера ракеты-носителя (обозначаемых как «LVDC» ниже) и, наконец, описание видео в вопросе (именуемое «видео» ниже).

Это сильно измененное редактирование предыдущей версии самого себя: я подумал о добавлении нового ответа, но решил, что старый недостаточно интересен, чтобы его сохранить.

Подводя итог, можно сказать, что использовались как минимум четыре метода, из которых как минимум два относятся к системе памяти.

Система

Во-первых, сам компьютер (включая регистры и т. д., но исключая оперативную память) был тройным резервом, поэтому он мог путем голосования обнаруживать внутренние ошибки.

Дело не в том, что у каждой из трех копий компьютера была своя основная память: был только один кусок основной памяти, который они все читали (или который читался один раз, а затем данные отправлялись всем трем копиям всего) .

Основная система памяти была основной и, следовательно, доступной для записи, и состояла из нескольких модулей, каждый из которых представлял собой 4096 28-битных слов, разделенных на два 14-битных слога (это потому, что вы могли уместить две инструкции в слово). Ядро означало, что вы могли исправлять программы намного позже, но это также означало, что оно было менее надежным, чем недоступная для записи память в AGC. Вы могли использовать память в симплексном режиме или в дуплексном режиме, где было две копии всего.

На страницах LVDC утверждается, что конфигурация, используемая для запуска Saturn, работала в симплексном режиме. Однако здесь явно присутствует некоторая путаница:

Для программы полета AS-206RAM LVDC требовалась симплексная модель.

и

Одна загадка, которую я не понимаю, однако, это вопрос конфигураций памяти SIMPLEX и DUPLEX. Напомним, что есть две возможные конфигурации памяти: «SIMPLEX» и «DUPLEX». В режиме DUPLEX половина памяти используется для точного отражения другой половины, поэтому, даже если в одном из них может быть доступно такое же количество модулей памяти, как и в другом, в режиме DUPLEX для программного обеспечения фактически доступна только половина объема памяти. как в режиме SIMPLEX. Два слога любого данного слова памяти обычно не идентичны, что подразумевает конфигурацию SIMPLEX. С другой стороны, в константах HOP, которые мы расшифровали выше, мы неизменно обнаруживали, что биты DUPIN и DUPDN равны 1, что подразумевает режим DUPLEX. Так что, очевидно, я запутался в работе флагов DUPIN и DUPDN.

(Обе цитаты со страниц LVDC.)

У нас также есть доказательства из видео, что программа работала в дуплексном режиме.

Я также думаю, что мы можем сделать сильное предположение, что они запустили бы его в дуплексном режиме, если бы могли это сделать: почему бы вам не сделать что-то, что сделает систему более надежной и что ничего не стоит, если программа достаточно мала?

Я полагаю, что путаницу с LVDC можно разрешить, если предположить, что дуплексирование происходило на уровне слов , а не на уровне слогов: когда система была дуплексирована, в двух разных модулях было две копии каждого слова, а не две копии каждого слога. одним словом. Однако я не уверен, что это правильно.

Ниже я предполагаю, что программа действительно работала в дуплексном режиме, или, в более общем смысле, что программы могут это делать, и отвечаю на вопрос, как это сделает их более избыточными.

Механизмы обнаружения ошибок

Кажется, их было как минимум четыре, и не все из них применимы к памяти.

Во-первых, сам компьютер, за исключением оперативной памяти, был тройным резервом и имел некую систему голосования 2 из 3. На надежность памяти это никак не повлияло, т.к. основная память не была тройной избыточной. D-5869 довольно подробно рассказывает об этом и приводит цифры, насколько это повышает надежность при стоимости компонентов в 3,4 (3 на каждую копию, 0,4 на схему сравнения): (3R - 2R 2 ) N , где R - надежность модуля и N количество модулей в компьютере.

Во-вторых, данные явно проверялись на работоспособность: D-5869 говорит об обнаружении застрявших значений акселерометров и т.д. В более ранней версии этого ответа предполагалось, что этот метод можно использовать для проверки памяти, поскольку ошибка в одном бите может привести к явно безумному ответу). Я думаю, что это вряд ли было на самом деле, так как программа выполнялась из памяти (т.е. в этой машине не было ПЗУ, как было в AGC), а инструкции и адреса памяти не имеют условий непрерывности. что данные из физических систем имеют.

В-третьих, был паритет в системе памяти. Каждый 14-битный слог имел бит четности, поэтому 28-битное слово имело два бита четности. Это означает, что может быть обнаружена любая однобитовая ошибка в слоге, и может быть обнаружено более половины (14/27) двухбитовых ошибок в словах. Никакие ошибки не могут быть исправлены: нет ECC (я не уверен, что к тому времени использовались методы ECC для памяти).

В-четвертых, программа, по предположению, работала в дуплексном режиме, при этом каждое слово дублировалось в двух (возможно, четырех по одному слогу в каждом) модулях памяти.

Как дуплекс повышает надежность

А теперь мы можем ответить на вопрос. Для простоты я буду думать об этом так, как если бы имелся один бит четности: в реальной жизни для дуплексирования на уровне слов мы можем добиться большего, чем это.

Я назову две половины памяти L и R, а вот таблица плохих случаев (в виде предварительно отформатированного текста, потому что Stack Exchange). Заголовки столбцов

  • LE: ошибка в L
  • LP: четность обнаруживает ошибку в L;
  • RE: ошибка в R;
  • RP: четность обнаруживает ошибку в R;
  • EB: количество битов, которые необходимо перевернуть
    • n означает ровно n,
    • n+ означает n или более,
    • п+? означает n и некоторые комбинации из более чем n
  • результат: результат
    • OK означает, что можно продолжать с комментарием о том, какую сторону следует использовать,
    • паника означает, что обнаружена ошибка, но мы не можем продолжать дальше, если не знаем, как каким-то образом проверить данные на работоспособность,
    • bad означает необнаруженную ошибку.
LE  LP  RE  RP  EB  result
N   N   N   N   0   OK (either)
Y   Y   N   N   1+? OK (use R)
Y   N   N   N   2+  panic (R is right but we can’t know it is)
N   N   Y   Y   1+? OK (use L)
Y   Y   Y   Y   2+? panic (both sides in error)
Y   N   Y   Y   3+  bad (undetected >= 2-bit error in L)
N   N   Y   N   2+  panic (L is right, but we can’t know it is)
Y   Y   Y   N   3+  bad (undetected >= 2-bit error in R)
Y   N   Y   N   4+  if equal then bad (two identical undetected >= 2-bit errors)
                    if not equal then panic (we know there are errors
                    but not what they are)

Обратите внимание, что:

  • устраняются все однобитовые ошибки;
  • все ошибки с 2 битами либо восстанавливаются, либо вызывают панику;
  • ни одна ошибка менее 3 бит не остается незамеченной.

тогда как в симплексном режиме:

  • все однобитовые ошибки вызывают панику;
  • некоторые 2-битные ошибки остаются незамеченными.

Таким образом, при наличии четности дуплексирование значительно повышает надежность. Я не пытался делать какие-либо вычисления того, насколько вероятны различные возможности: хотя я уверен, что НАСА сделало это!


Контрфактическая возможность: ECC

Единственное, что они могли бы сделать, это использовать ECC в памяти. Это обеспечило бы ту же надежность, что и дуплекс. Но:

  • он не защищает от полного физического сбоя модуля, как это делает дуплекс;
  • я думаю, это требует более сложной логики;
  • возможно, просто не было известно о том, когда эта машина проектировалась.
Отличный анализ!
Ух ты!! Спасибо, что нашли время написать такой подробный и продуманный ответ! Мне понадобится немного времени и кофе, чтобы пройти через это ;-)
Я бы расценил использование двойной памяти в сочетании с использованием четности для автоматического выбора, какой копии верить, как форму ECC, которая имеет 114% накладных расходов. Довольно высокая, но способность восстанавливаться после определенных системных сбоев, а также при однобитовых ошибках могла бы значительно повысить ценность.
@supercat: ну, я думаю, что «ECC» может иметь какое-то ограничительное техническое значение, которое исключает то, что они сделали, но да, я согласен, особенно с учетом возможности восстановления после крупномасштабного сбоя (скажем, отказа всего модуля памяти), который обычный ECC вас не достанет.