Doble redundancia para la memoria de la computadora Saturn V LVDC, ¿cómo se resolvieron los desacuerdos?

En el video Smarter Every Day ¿ Cómo dirigió la NASA el Saturn V? - Smarter Every Day 223, Destin está hablando con Luke Talley sobre los módulos de memoria utilizados en la computadora Saturn V LVDC.

Esta computadora controla todo el tiempo; encender el motor, detener el motor, disparar la separación, disparar cohetes retro, todo este tipo de cosas.

Hace navegación y guía. Tienes almacenado en la memoria un perfil; en este momento necesito estar aquí yendo tan rápido en esta dirección[…]

Ahora, cuando Saturno vuela, ambas memorias ejecutan el mismo programa de vuelo y comparan los resultados para asegurarse de que obtienen la misma respuesta.

Si no obtuvieran la misma respuesta, ingrese a una subrutina y diga 'en este punto del vuelo tengo estos dos números, lo que tiene más sentido seguir usando, use ese número para continuar'.

Pregunta: con la triple redundancia puede (con suerte) optar por descartar un resultado si no está de acuerdo con los otros dos. Sin embargo, ¿cuál fue la técnica utilizada para resolver los posibles desacuerdos entre los datos devueltos por los dos módulos de memoria redundantes utilizados en los sistemas LVDC? ¿Cómo saber "...qué tiene más sentido seguir usando..."?

actualización: este enlace de @OrganicMarble es útil y explica que la arquitectura de IBM proporciona dos modos, llamados SIMPLEX y DUPLEX. Solo en un modo la memoria era redundante (el tema de mi pregunta), pero parece que durante el vuelo no se usó este modo. No obstante, estoy preguntando sobre el modo diseñado por IBM en el que las dos unidades de memoria se utilizarían de forma doblemente redundante.


Relacionado: ¿Es esta realmente solo la computadora Saturn V, o también hay otros sistemas aquí?

Smarter Every Day Saturn V LVDC memoria Smarter Every Day Saturn V LVDC memoria

Talley dice claramente que la memoria era doblemente redundante, el procesamiento era triplemente redundante. Para la memoria, asumiendo un bit de paridad, si una unidad encuentra un error de paridad, use la otra y reescriba la palabra correcta donde estaba el error para corregirlo. Para el procesamiento, triple redundancia sería 2 de 3 votaciones. Para la situación de la memoria, los errores de un solo bit probablemente ocurrieron con poca frecuencia, los errores de doble bit (en la misma palabra) o los errores de un solo bit en la misma palabra en ambas unidades probablemente eran tan poco probables que las protecciones adicionales no hubieran valido la pena el costo/complejidad/ presupuesto masivo.
@uhoh: no sé si recibe una notificación sobre las ediciones de respuesta en SE, pero mi respuesta ahora se ocupa de todo el asunto de la paridad después de leer un montón.
@tfb gracias por el ping, no, parece que las ediciones de las respuestas existentes no generan indicadores para el OP, por lo que no lo habría sabido sin su comentario. Ahora es toda una respuesta, ¡ guau!

Respuestas (1)

Esta respuesta es una conjetura basada en la nota técnica de la NASA D-5869 : Descripción y rendimiento del sistema de navegación, guía y control del vehículo de lanzamiento de Saturn (referido como 'D-5869' a continuación), también las páginas de la computadora digital del vehículo de lanzamiento (referido a como 'LVDC' a continuación) y finalmente la descripción en el video de la pregunta (referido como 'el video' a continuación).

Esta es una edición muy modificada de una versión anterior de sí misma: consideré agregar una nueva respuesta, pero decidí que la anterior no era lo suficientemente interesante como para conservarla.

En resumen, parece que se usaron al menos cuatro técnicas, de las cuales al menos dos se aplican al sistema de memoria.

El sistema

En primer lugar, la computadora en sí (incluidos los registros, etc., pero excluyendo la memoria principal) tenía triple redundancia, por lo que podía, votando, detectar errores internos.

No es el caso de que cada una de las tres copias de la computadora tuviera su propia memoria principal: solo había una parte de la memoria principal que todos leían (o que se leía una vez y luego se enviaban los datos a las tres copias de todo) .

El sistema de memoria principal era básico y escribible, y constaba de una serie de módulos, cada uno de los cuales tenía 4096 palabras de 28 bits divididas en dos sílabas de 14 bits (esto se debe a que cabían dos instrucciones por palabra). Ser central significaba que podía parchear los programas mucho más tarde, pero también significaba que era menos confiable que la memoria no grabable en el AGC. Podías usar la memoria en modo simplex o modo dúplex, donde había dos copias de todo.

Las páginas de LVDC afirman que la configuración utilizada para ejecutar Saturn se ejecutó en modo simplex. Sin embargo, claramente hay cierta confusión:

Para el programa de vuelo AS-206RAM LVDC, se requería un modelo simplex

y

Sin embargo, un rompecabezas que no entiendo es la cuestión de las configuraciones de memoria SIMPLEX vs DUPLEX. Recuerde que hay dos configuraciones de memoria posibles, "SIMPLEX" y "DUPLEX". En el modo DÚPLEX, la mitad de la memoria se usa para duplicar con precisión la otra mitad, por lo tanto, aunque la misma cantidad de módulos de memoria puede estar disponible en uno como en el otro, solo la mitad de la memoria es realmente accesible para el software en el modo DÚPLEX. como en el modo SIMPLEX. Las dos sílabas de cualquier palabra de memoria dada generalmente no son idénticas, lo que implica una configuración SIMPLEX. Por otro lado, en las constantes HOP que decodificamos arriba, invariablemente encontramos que los bits DUPIN y DUPDN son 1, lo que implica el modo DUPLEX. Entonces, obviamente, estoy confundido acerca del trabajo de las banderas DUPIN y DUPDN.

(Ambas citas de las páginas de LVDC).

También tenemos evidencia del video de que el programa se ejecutó en modo dúplex.

También creo que podemos suponer firmemente que lo habrían ejecutado en modo dúplex si hubieran podido hacerlo: ¿por qué no haría algo que hace que el sistema sea más confiable y que no cueste nada si el programa es lo suficientemente pequeño?

Creo que la confusión de LVDC se puede resolver asumiendo que el dúplex fue a nivel de palabra , no a nivel de sílaba: cuando el sistema se dúplex, hay dos copias de cada palabra distribuidas en dos módulos diferentes, no dos copias de cada sílaba en una sola palabra. Sin embargo, no estoy seguro de que esto sea correcto.

En lo que sigue, supondré que el programa se ejecutó en modo dúplex, o más generalmente que los programas podrían hacer esto, y responderé a la pregunta de cómo esto los haría más redundantes.

Los mecanismos de detección de errores.

Parece que hubo al menos cuatro de estos, no todos los cuales se aplican a la memoria.

En primer lugar, la computadora en sí, excluyendo la memoria principal, era triplemente redundante y tenía algún tipo de sistema de votación 2 de 3. Esto no tiene ningún impacto en la confiabilidad de la memoria, porque la memoria principal no era triplemente redundante. D-5869 habla extensamente sobre esto y da cifras de cuánto mejora esto la confiabilidad a un costo de 3.4 en el recuento de componentes (3 para cada copia, 0.4 para el circuito de comparación): (3R - 2R 2 ) N donde R es el confiabilidad de un módulo y N el número de módulos en la computadora.

En segundo lugar, claramente hubo controles de cordura para los datos: D-5869 habla sobre la detección de valores atascados de acelerómetros, etc. Una versión anterior de esta respuesta asumió que esta técnica podría usarse para verificaciones de memoria, ya que es probable que un error de un solo bit dé una respuesta que obviamente es una locura). Creo que es poco probable que este sea el caso, ya que el programa se estaba ejecutando desde la memoria (es decir, no había ROM en esta máquina, como sí lo había en el AGC), y las instrucciones y las direcciones de memoria no tienen el tipo de condiciones de continuidad. que tienen los datos de los sistemas físicos.

En tercer lugar, había paridad en el sistema de memoria. Cada sílaba de 14 bits tenía un bit de paridad, por lo que una palabra de 28 bits tenía dos bits de paridad. Esto significa que se puede detectar cualquier error de un solo bit en una sílaba y se pueden detectar más de la mitad (14/27) de errores de palabra de dos bits. No se pueden corregir errores: no hay ECC (no estoy seguro de si las técnicas de ECC para la memoria estaban en uso para entonces).

En cuarto lugar, el programa, por suposición, se ejecutaba en modo dúplex, cada palabra se duplicaba en dos (quizás cuatro con una sílaba cada uno) módulos de memoria.

Cómo el dúplex mejora la confiabilidad

Y ahora podemos responder a la pregunta. Para simplificar, voy a pensar en ello como si hubiera un solo bit de paridad: en la vida real, para duplicar a nivel de palabra, podemos hacerlo mejor que esto.

Llamaré a las dos mitades de la memoria L y R, y aquí hay una tabla de los casos incorrectos (como texto preformateado, porque Stack Exchange). Los encabezados de las columnas son

  • LE: error en L
  • LP: la paridad detecta error en L;
  • RE: error en R;
  • RP: la paridad detecta error en R;
  • EB: número de bits que deben invertirse
    • n significa exactamente n,
    • n+ significa n o más,
    • n+? significa n y algunas combinaciones de más de n
  • resultado: el resultado
    • OK significa que puede continuar con un comentario sobre qué lado debe usarse,
    • pánico significa que se detectó un error, pero no podemos continuar desde aquí a menos que sepamos cómo verificar la cordura de los datos de alguna manera,
    • malo significa un error no detectado.
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)

Tenga en cuenta que:

  • se recuperan todos los errores de bit único;
  • todos los errores con 2 bits se recuperan o provocan pánico;
  • ningún error de menos de 3 bits pasa desapercibido.

mientras que en modo símplex :

  • todos los errores de un solo bit causan pánico;
  • algunos errores de 2 bits pasan desapercibidos.

Entonces, en presencia de paridad, el dúplex mejora significativamente la confiabilidad. No he intentado hacer ningún cálculo de la probabilidad de las diversas posibilidades: ¡aunque estoy seguro de que la NASA hizo esto!


Una posibilidad contrafactual: ECC

Una cosa que podrían haber hecho es usar ECC en la memoria. Esto habría logrado la misma confiabilidad que el dúplex. Pero:

  • no protege contra la falla física general de un módulo en la forma en que lo hace el dúplex;
  • creo que requiere una lógica más compleja;
  • es posible que simplemente no se supiera cuándo se estaba diseñando esta máquina.
¡Gran análisis!
¡¡Guau!! ¡Gracias por tomarse el tiempo para escribir una respuesta tan completa y pensada! Voy a necesitar algo de tiempo y café para superar esto ;-)
Consideraría el uso de memorias duales combinado con el uso de paridad para seleccionar automáticamente qué copia creer como una forma de ECC que tiene una sobrecarga del 114%. Bastante alto, pero la capacidad de recuperarse de ciertas fallas sistémicas, así como errores de un solo bit, agregaría un valor considerable.
@supercat: bueno, creo que 'ECC' puede tener algún significado técnico restrictivo que excluye lo que hicieron, pero sí, estoy de acuerdo, especialmente dada la capacidad de recuperarse de una falla a gran escala (digamos que falla un módulo de memoria completo), que ECC convencional no te atrapa.