В видеоролике Smarter Every Day Как НАСА управляло Saturn V? - Smarter Every Day 223 Дестин беседует с Люком Талли о модулях памяти, используемых в компьютере Saturn V LVDC.
Этот компьютер управляет всем временем; запуск двигателя, остановка двигателя, разделение огня, запуск ретро-ракет и все такое прочее.
Он выполняет навигацию и руководство. Вы сохранили в памяти профиль; в данный момент мне нужно быть здесь и двигаться так быстро в этом направлении[…]
Теперь, когда «Сатурн» летит, обе эти памяти выполняют одну и ту же программу полета и сравнивают выходные данные, чтобы убедиться, что получают один и тот же ответ.
Если они не получат один и тот же ответ, войдите в подпрограмму и скажите: «На данном этапе полета у меня есть эти два числа, что имеет смысл продолжать использовать, используйте это число, чтобы продолжать».
Вопрос: с тройной избыточностью вы можете (надеюсь) отказаться от одного результата, если он не совпадает с двумя другими. Однако какой метод использовался для разрешения возможных расхождений между данными, возвращаемыми из двух резервных модулей памяти, используемых в системах LVDC? Как узнать, "...что имеет смысл продолжать использовать..."?
обновление: эта ссылка от @OrganicMarble полезна и объясняет, что архитектура IBM предоставляет два режима, называемые SIMPLEX и DUPLEX. Только в одном режиме была избыточна память (предмет моего вопроса), но похоже, что во время полета этот режим не использовался. Тем не менее, я спрашиваю о режиме, разработанном IBM, в котором два модуля памяти будут использоваться с двойной избыточностью.
Связанный: это действительно только компьютер Saturn V или здесь есть и другие системы?
Этот ответ является предположением, основанным на Техническом примечании НАСА 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 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)
Обратите внимание, что:
тогда как в симплексном режиме:
Таким образом, при наличии четности дуплексирование значительно повышает надежность. Я не пытался делать какие-либо вычисления того, насколько вероятны различные возможности: хотя я уверен, что НАСА сделало это!
Единственное, что они могли бы сделать, это использовать ECC в памяти. Это обеспечило бы ту же надежность, что и дуплекс. Но:
Энтони Х
пользователь21103
ооо
ооо