stringtranslate.com

Tolerancia a fallos

La tolerancia a fallos es la capacidad de un sistema de mantener un funcionamiento adecuado a pesar de fallos o averías en uno o más de sus componentes. Esta capacidad es esencial para sistemas de alta disponibilidad , de misión crítica o incluso de vida útil crítica .

La tolerancia a fallos se refiere específicamente a la capacidad de un sistema para manejar fallos sin degradación ni tiempo de inactividad. En caso de error, los usuarios finales no se dan cuenta de los problemas. Por el contrario, un sistema que experimenta errores con alguna interrupción en el servicio o una degradación gradual del rendimiento se denomina "resiliente". En la resiliencia, el sistema se adapta al error, manteniendo el servicio pero reconociendo un cierto impacto en el rendimiento.

Por lo general, la tolerancia a fallas describe los sistemas informáticos , lo que garantiza que el sistema general siga funcionando a pesar de los problemas de hardware o software . Los ejemplos no informáticos incluyen estructuras que conservan su integridad a pesar de los daños causados ​​por fatiga , corrosión o impacto.

Historia

El primer ordenador tolerante a fallos conocido fue el SAPO , construido en 1951 en Checoslovaquia por Antonín Svoboda . [1] : 155  Su diseño básico consistía en tambores magnéticos conectados a través de relés, con un método de votación de detección de errores de memoria ( triple redundancia modular ). Se desarrollaron varias otras máquinas en esta línea, principalmente para uso militar. Finalmente, se separaron en tres categorías distintas:

  1. Máquinas que durarían mucho tiempo sin necesidad de mantenimiento, como las que se utilizan en las sondas espaciales y los satélites de la NASA ;
  2. Computadoras que eran muy confiables pero requerían de un monitoreo constante, como las utilizadas para monitorear y controlar plantas de energía nuclear o experimentos de supercolisionadores ; y
  3. Computadoras con una gran cantidad de tiempo de ejecución que estarían sometidas a un uso intensivo, como muchas de las supercomputadoras utilizadas por las compañías de seguros para su monitoreo de probabilidad .

La mayor parte del desarrollo de la denominada computación LLNM (Long Life, No Maintenance) fue realizada por la NASA durante la década de 1960, [2] en preparación para el Proyecto Apolo y otros aspectos de investigación. La primera máquina de la NASA se instaló en un observatorio espacial , y su segundo intento, la computadora JSTAR, se utilizó en la Voyager . Esta computadora tenía una copia de seguridad de matrices de memoria para utilizar métodos de recuperación de memoria y, por lo tanto, se la llamó computadora de autoprueba y reparación del JPL. Podía detectar sus propios errores y corregirlos o poner en funcionamiento módulos redundantes según fuera necesario. La computadora todavía está funcionando, a principios de 2022. [3]

Los primeros en desarrollar computadoras hiperconfiables fueron los fabricantes de aeronaves , [1] : 210  las compañías de energía nuclear y la industria ferroviaria en los Estados Unidos. Estas entidades necesitaban computadoras con una gran cantidad de tiempo de funcionamiento que fallaran con la suficiente elegancia durante una falla para permitir el funcionamiento continuo, al tiempo que dependían de la supervisión humana constante de la salida de la computadora para detectar fallas. Nuevamente, IBM desarrolló la primera computadora de este tipo para la NASA para guiar los cohetes Saturno V , pero más tarde BNSF , Unisys y General Electric construyeron las suyas propias. [1] : 223 

En la década de 1970, se realizó mucho trabajo en este campo. [4] [5] [6] Por ejemplo, el CADC F14 tenía autoprueba y redundancia incorporadas. [7]

En general, los primeros esfuerzos en el diseño tolerante a fallas se centraron principalmente en el diagnóstico interno, donde una falla indicaría que algo estaba fallando y un trabajador podría reemplazarlo. SAPO, por ejemplo, tenía un método por el cual los tambores de memoria defectuosos emitían un ruido antes de fallar. [8] Los esfuerzos posteriores demostraron que para ser completamente efectivo, el sistema tenía que ser autorreparador y autodiagnóstico: aislar una falla y luego implementar una copia de seguridad redundante mientras alertaba sobre la necesidad de una reparación. Esto se conoce como redundancia de modelo N, donde las fallas causan dispositivos de seguridad automáticos y una advertencia al operador, y sigue siendo la forma más común de diseño tolerante a fallas de nivel uno en uso hoy en día.

La votación fue otro método inicial, como se mencionó anteriormente, con múltiples copias de seguridad redundantes que operaban constantemente y verificaban los resultados de cada una. Por ejemplo, si cuatro componentes informaban una respuesta de 5 y un componente informaba una respuesta de 6, los otros cuatro "votaban" que el quinto componente era defectuoso y lo retiraban del servicio. Esto se llama votación por mayoría M de N.

Históricamente, la tendencia ha sido alejarse del modelo N y acercarse al modelo M de N, ya que la complejidad de los sistemas y la dificultad de garantizar que el estado transitivo de falla negativa a falla positiva no interrumpiera las operaciones.

Tandem Computers , en 1976 [9] y Stratus estuvieron entre las primeras empresas especializadas en el diseño de sistemas informáticos tolerantes a fallos para el procesamiento de transacciones en línea .

Ejemplos

"M2 Mobile Web", la interfaz web móvil original de Twitter, sirvió posteriormente como versión heredada de respaldo para clientes sin soporte para JavaScript o navegadores incompatibles hasta diciembre de 2020.

La tolerancia a fallos de hardware a veces requiere que las piezas rotas se extraigan y se reemplacen con piezas nuevas mientras el sistema aún está operativo (en informática, conocido como intercambio en caliente ). Un sistema de este tipo implementado con una única copia de seguridad se conoce como tolerante a un solo punto y representa la gran mayoría de los sistemas tolerantes a fallos. En tales sistemas, el tiempo medio entre fallos debe ser lo suficientemente largo para que los operadores tengan tiempo suficiente para reparar los dispositivos averiados ( tiempo medio de reparación ) antes de que la copia de seguridad también falle. Es útil que el tiempo entre fallos sea lo más largo posible, pero esto no es específicamente necesario en un sistema tolerante a fallos.

La tolerancia a fallos es especialmente exitosa en las aplicaciones informáticas. Tandem Computers basó toda su actividad en este tipo de máquinas, que utilizaban la tolerancia a fallos de un solo punto para crear sus sistemas NonStop con tiempos de funcionamiento medidos en años.

Las arquitecturas a prueba de fallos pueden abarcar también el software informático, por ejemplo mediante la replicación de procesos .

Los formatos de datos también pueden estar diseñados para degradarse de manera elegante. HTML , por ejemplo, está diseñado para ser compatible con versiones posteriores , lo que permite que los navegadores web ignoren las entidades HTML nuevas y no compatibles sin que el documento quede inutilizable. Además, algunos sitios, incluidas plataformas populares como Twitter (hasta diciembre de 2020), proporcionan una interfaz ligera opcional que no depende de JavaScript y tiene un diseño mínimo , para garantizar una amplia accesibilidad y alcance , como en consolas de juegos con capacidades limitadas de navegación web. [10] [11]

Terminología

Un ejemplo de degradación elegante por diseño en una imagen con transparencia. Cada una de las dos imágenes superiores es el resultado de ver la imagen compuesta en un visor que reconoce la transparencia. Las dos imágenes inferiores son el resultado de ver la imagen en un visor que no admite la transparencia. Como se descarta la máscara de transparencia (centro inferior), solo queda la superposición (centro superior). La imagen de la izquierda se ha diseñado para degradarse elegantemente, por lo que sigue siendo significativa sin su información de transparencia.

Un sistema con alta tolerancia a fallas puede continuar con el mismo nivel de rendimiento aunque uno o más componentes hayan fallado. Por ejemplo, un edificio con un generador eléctrico de respaldo proporcionará el mismo voltaje a las tomas de corriente de la pared incluso si falla la red eléctrica.

Un sistema diseñado para funcionar a prueba de fallos , o para garantizar su seguridad, o para fallar con elegancia , ya sea que funcione a un nivel reducido o falle por completo, lo hace de una manera que protege a las personas, la propiedad o los datos de lesiones, daños, intrusiones o divulgación. En las computadoras, un programa puede funcionar a prueba de fallos ejecutando una salida elegante (en lugar de un bloqueo incontrolado) para evitar la corrupción de datos después de que ocurre un error. [12] Se hace una distinción similar entre "fallar bien" y " fallar mal ".

Un sistema diseñado para experimentar una degradación elegante o para fallar de manera suave (usado en informática, similar a "a prueba de fallas" [13] ) opera a un nivel reducido de rendimiento después de que falla algún componente. Por ejemplo, si falla la red eléctrica, un edificio puede operar la iluminación a niveles reducidos o los ascensores a velocidades reducidas. En informática, si no hay suficiente ancho de banda de red disponible para transmitir un video en línea, se puede transmitir una versión de menor resolución en lugar de la versión de alta resolución. La mejora progresiva es otro ejemplo, donde las páginas web están disponibles en un formato funcional básico para navegadores web más antiguos, de pantalla pequeña o de capacidad limitada, pero en una versión mejorada para navegadores capaces de manejar tecnologías adicionales o que tienen una pantalla más grande.

En los sistemas informáticos tolerantes a fallos, los programas que se consideran robustos están diseñados para seguir funcionando a pesar de un error, una excepción o una entrada no válida, en lugar de bloquearse por completo. La fragilidad del software es lo opuesto a la robustez. Las redes resilientes siguen transmitiendo datos a pesar de la falla de algunos enlaces o nodos. Asimismo, se espera que los edificios y las infraestructuras resilientes eviten fallas totales en situaciones como terremotos, inundaciones o colisiones.

Un sistema con alta transparencia de fallos alertará a los usuarios de que se ha producido un fallo en un componente, incluso si sigue funcionando a pleno rendimiento, de modo que se pueda reparar el fallo o anticipar un fallo total inminente. [14] Asimismo, un componente de respuesta rápida a fallos está diseñado para informar en el primer punto de fallo, en lugar de generar informes cuando fallan los componentes posteriores. Esto permite un diagnóstico más sencillo del problema subyacente y puede evitar un funcionamiento incorrecto en un estado averiado.

Una condición de falla única es una situación en la que uno de los medios de protección contra un peligro es defectuoso. Si una condición de falla única da lugar inevitablemente a otra condición de falla única, las dos fallas se consideran una condición de falla única. [15] Una fuente ofrece el siguiente ejemplo:

Una condición de falla única es una condición en la que un solo medio de protección contra peligros en el equipo está defectuoso o está presente una sola condición anormal externa, por ejemplo, un cortocircuito entre las partes activas y la parte aplicada. [16]

Criterios

Normalmente no es una opción ofrecer un diseño tolerante a fallos para cada componente. La redundancia asociada conlleva una serie de inconvenientes: aumento de peso, tamaño, consumo de energía, coste y tiempo de diseño, verificación y prueba. Por lo tanto, se deben examinar varias opciones para determinar qué componentes deberían ser tolerantes a fallos: [17]

Un ejemplo de un componente que pasa todas las pruebas es el sistema de retención de ocupantes de un automóvil. Si bien normalmente no se piensa en el sistema de retención de ocupantes principal , es la gravedad . Si el vehículo vuelca o sufre fuerzas g severas, entonces este método principal de retención de ocupantes puede fallar. Sujetar a los ocupantes durante un accidente de este tipo es absolutamente crítico para la seguridad, por lo que se pasa la primera prueba. Los accidentes que causaban la expulsión de los ocupantes eran bastante comunes antes de los cinturones de seguridad , por lo que se pasa la segunda prueba. El costo de un método de retención redundante como los cinturones de seguridad es bastante bajo, tanto económicamente como en términos de peso y espacio, por lo que se pasa la tercera prueba. Por lo tanto, agregar cinturones de seguridad a todos los vehículos es una excelente idea. Otros "sistemas de retención complementarios", como los airbags , son más caros y, por lo tanto, pasan esa prueba por un margen menor.

Otro excelente ejemplo a largo plazo de la puesta en práctica de este principio es el sistema de frenos: si bien los mecanismos de freno en sí son fundamentales, no son especialmente propensos a fallar de manera repentina (en lugar de progresiva) y, en cualquier caso, se duplican necesariamente para permitir una aplicación uniforme y equilibrada de la fuerza de frenado a todas las ruedas. También resultaría prohibitivamente costoso duplicar aún más los componentes principales y añadirían un peso considerable. Sin embargo, los sistemas igualmente críticos para accionar los frenos bajo el control del conductor son inherentemente menos robustos y, por lo general, utilizan un cable (puede oxidarse, estirarse, atascarse, romperse) o líquido hidráulico (puede tener fugas, hervir y desarrollar burbujas, absorber agua y, por lo tanto, perder efectividad). Por lo tanto, en la mayoría de los automóviles modernos, el circuito de freno hidráulico del pedal del freno está dividido en diagonal para dar lugar a dos puntos de fallo más pequeños: la pérdida de uno de ellos solo reduce la potencia de frenado en un 50% y no causa un desequilibrio de fuerza de frenado tan peligroso como una división directa entre la parte delantera y trasera o entre la izquierda y la derecha; y si el circuito hidráulico falla por completo (algo relativamente poco frecuente), existe un mecanismo de seguridad en forma de freno de estacionamiento accionado por cable que hace funcionar los frenos traseros, que de otro modo serían relativamente débiles, pero que puede detener el vehículo de forma segura junto con el frenado de la transmisión y el motor, siempre que las exigencias que se le imponen estén en línea con el flujo de tráfico normal. La combinación, acumulativamente improbable, de un fallo total del freno de pie con la necesidad de frenar bruscamente en una emergencia probablemente dé lugar a una colisión, pero a una velocidad inferior a la que se habría producido de otro modo.

En comparación con el freno de servicio activado por pedal, el freno de estacionamiento en sí es un elemento menos crítico y, a menos que se utilice como respaldo de una sola vez para el freno de pie, no causará un peligro inmediato si se descubre que no funciona en el momento de la aplicación. Por lo tanto, no tiene redundancia incorporada en sí (y normalmente utiliza un sistema de accionamiento por cable más económico, más ligero, pero menos resistente), y puede ser suficiente, si esto sucede en una pendiente, utilizar el freno de pie para mantener el vehículo quieto momentáneamente, antes de salir a buscar un tramo de carretera llano en el que detenerse. Alternativamente, en pendientes suaves, la transmisión se puede cambiar a Estacionamiento, Marcha atrás o Primera marcha, y el bloqueo de la transmisión / compresión del motor se utilizan para mantenerlo estacionario, ya que no es necesario que incluyan la sofisticación para detenerlo primero.

En las motocicletas, se proporciona un nivel similar de seguridad contra fallas mediante métodos más simples; primero, los sistemas de freno delantero y trasero están completamente separados, independientemente de su método de activación (que puede ser de cable, de varilla o hidráulico), lo que permite que uno falle por completo mientras que el otro no se ve afectado. Segundo, el freno trasero es relativamente fuerte en comparación con su primo automotriz, siendo un disco potente en algunos modelos deportivos, aunque la intención habitual es que el sistema delantero proporcione la gran mayoría de la fuerza de frenado; como el peso total del vehículo está más centrado, el neumático trasero generalmente es más grande y tiene mejor tracción, de modo que el conductor puede inclinarse hacia atrás para poner más peso sobre él, lo que permite aplicar más fuerza de frenado antes de que la rueda se bloquee. En las máquinas utilitarias más baratas y lentas, incluso si la rueda delantera debe usar un disco hidráulico para una mayor fuerza de frenado y un empaque más fácil, la trasera generalmente será un tambor accionado por varilla primitivo, algo ineficiente, pero excepcionalmente robusto, gracias a la facilidad de conectar el pedal a la rueda de esta manera y, lo que es más importante, la casi imposibilidad de una falla catastrófica incluso si el resto de la máquina, como muchas bicicletas de bajo precio después de sus primeros años de uso, está al borde del colapso por un mantenimiento descuidado.

Requisitos

Las características básicas de la tolerancia a fallos requieren:

  1. No hay un único punto de falla : si un sistema experimenta una falla, debe continuar funcionando sin interrupción durante el proceso de reparación.
  2. Aislamiento de fallas en el componente que falla: cuando ocurre una falla, el sistema debe poder aislar la falla en el componente que la causa. Esto requiere la incorporación de mecanismos de detección de fallas dedicados que existen solo con el propósito de aislar fallas. La recuperación de una condición de falla requiere clasificar la falla o el componente que falla. El Instituto Nacional de Estándares y Tecnología (NIST) clasifica las fallas según la ubicación, la causa, la duración y el efecto. [ ¿Dónde? ] [ Se necesita aclaración ]
  3. Contención de fallas para evitar la propagación de la falla: algunos mecanismos de falla pueden hacer que un sistema falle al propagar la falla al resto del sistema. Un ejemplo de este tipo de falla es el "transmisor no autorizado" que puede saturar la comunicación legítima en un sistema y causar una falla general del sistema. Se requieren firewalls u otros mecanismos que aíslen un transmisor no autorizado o un componente defectuoso para proteger el sistema.
  4. Disponibilidad de modos de reversión [ aclaración necesaria ]

Además, los sistemas tolerantes a fallos se caracterizan en términos de interrupciones del servicio planificadas y no planificadas. Estas se miden generalmente a nivel de aplicación y no solo a nivel de hardware. La cifra de mérito se denomina disponibilidad y se expresa como un porcentaje. Por ejemplo, un sistema de cinco nueves proporcionaría estadísticamente una disponibilidad del 99,999 %.

Los sistemas tolerantes a fallos normalmente se basan en el concepto de redundancia.

Técnicas de tolerancia a fallos

La investigación sobre los tipos de tolerancias necesarias para sistemas críticos implica una gran cantidad de trabajo interdisciplinario. Cuanto más complejo sea el sistema, más cuidadosamente se deben considerar y prepararse todas las interacciones posibles. Considerando la importancia de los sistemas de alto valor en el transporte, los servicios públicos y el ejército, el campo de temas que toca la investigación es muy amplio: puede incluir temas tan obvios como el modelado y la confiabilidad del software o el diseño de hardware , hasta elementos arcanos como los modelos estocásticos , la teoría de grafos , la lógica formal o excluyente, el procesamiento paralelo , la transmisión remota de datos y más. [18]

Replicación

Los componentes de repuesto abordan la primera característica fundamental de la tolerancia a fallos de tres maneras:

Todas las implementaciones de RAID , matriz redundante de discos independientes , excepto RAID 0, son ejemplos de un dispositivo de almacenamiento tolerante a fallas que utiliza redundancia de datos .

Una máquina tolerante a fallos con sincronización continua utiliza elementos replicados que funcionan en paralelo. En cualquier momento, todas las réplicas de cada elemento deben estar en el mismo estado. Se proporcionan las mismas entradas a cada réplica y se esperan las mismas salidas. Las salidas de las réplicas se comparan utilizando un circuito de votación. Una máquina con dos réplicas de cada elemento se denomina redundante modular dual (DMR). El circuito de votación solo puede detectar una falta de coincidencia y la recuperación depende de otros métodos. Una máquina con tres réplicas de cada elemento se denomina redundante modular triple (TMR). El circuito de votación puede determinar qué réplica tiene un error cuando se observa una votación de dos a uno. En este caso, el circuito de votación puede generar el resultado correcto y descartar la versión errónea. Después de esto, se supone que el estado interno de la réplica errónea es diferente al de las otras dos, y el circuito de votación puede cambiar a un modo DMR. Este modelo se puede aplicar a cualquier número mayor de réplicas.

Las máquinas tolerantes a fallos con sincronización sincronizada se hacen más fácilmente completamente sincrónicas , con cada puerta de cada réplica haciendo la misma transición de estado en el mismo borde del reloj y los relojes de las réplicas estando exactamente en fase. Sin embargo, es posible construir sistemas con sincronización sincronizada sin este requisito.

Para sincronizar las réplicas es necesario que sus estados internos almacenados sean iguales. Se pueden iniciar desde un estado inicial fijo, como el estado de reinicio. Alternativamente, el estado interno de una réplica se puede copiar a otra réplica.

Una variante de DMR es el sistema de emparejamiento y repuesto . Dos elementos replicados funcionan en sintonía como un par, con un circuito de votación que detecta cualquier desajuste entre sus operaciones y emite una señal que indica que hay un error. Otro par funciona exactamente de la misma manera. Un circuito final selecciona la salida del par que no anuncia que tiene un error. El sistema de emparejamiento y repuesto requiere cuatro réplicas en lugar de las tres de TMR, pero se ha utilizado comercialmente.

Computación que no tiene en cuenta los fallos

La computación sin tener en cuenta los errores es una técnica que permite que los programas informáticos sigan ejecutándose a pesar de los errores . [19] La técnica se puede aplicar en diferentes contextos. Puede gestionar lecturas de memoria no válidas devolviendo un valor fabricado al programa, [20] que a su vez, hace uso del valor fabricado e ignora el valor de memoria anterior al que intentó acceder, este es un gran contraste con los verificadores de memoria típicos , que informan al programa del error o abortan el programa.

Este enfoque tiene costos de rendimiento: debido a que la técnica reescribe el código para insertar controles dinámicos de validez de la dirección, el tiempo de ejecución aumentará entre un 80% y un 500%. [21]

Pastoreo de recuperación

El pastoreo de recuperación es una técnica liviana que permite que los programas de software se recuperen de errores que de otro modo serían fatales, como la desreferencia de puntero nulo y la división por cero. [22] En comparación con la técnica de computación ajena a fallas, el pastoreo de recuperación funciona directamente en el binario del programa compilado y no necesita volver a compilarlo para programar.

Utiliza el marco de instrumentación binaria justo a tiempo Pin . Se conecta al proceso de aplicación cuando ocurre un error, repara la ejecución, rastrea los efectos de la reparación a medida que continúa la ejecución, contiene los efectos de la reparación dentro del proceso de aplicación y se separa del proceso después de que todos los efectos de la reparación se eliminan del estado del proceso. No interfiere con la ejecución normal del programa y, por lo tanto, incurre en una sobrecarga insignificante. [22] Para 17 de 18 errores de desreferencia nula y división por cero del mundo real recopilados sistemáticamente, una implementación de prototipo permite que la aplicación continúe ejecutándose para proporcionar una salida y un servicio aceptables a sus usuarios en las entradas que activan el error. [22]

Cortacircuitos

El patrón de diseño de disyuntores es una técnica para evitar fallas catastróficas en sistemas distribuidos.

Redundancia

La redundancia es la provisión de capacidades funcionales que serían innecesarias en un entorno libre de fallas. [23] Esto puede consistir en componentes de respaldo que se activan automáticamente si falla un componente. Por ejemplo, los camiones de carga grandes pueden perder un neumático sin mayores consecuencias. Tienen muchos neumáticos y ninguno es crítico (con la excepción de los neumáticos delanteros, que se utilizan para dirigir, pero generalmente llevan menos carga, cada uno y en total, que los otros cuatro a dieciséis, por lo que es menos probable que fallen). La idea de incorporar redundancia para mejorar la confiabilidad de un sistema fue iniciada por John von Neumann en la década de 1950. [24]

Existen dos tipos de redundancia posibles: [25] redundancia espacial y redundancia temporal. La redundancia espacial proporciona componentes, funciones o elementos de datos adicionales que no son necesarios para un funcionamiento sin fallos. La redundancia espacial se clasifica además en redundancia de hardware, software e información, según el tipo de recursos redundantes añadidos al sistema. En la redundancia temporal, el cálculo o la transmisión de datos se repite y el resultado se compara con una copia almacenada del resultado anterior. La terminología actual para este tipo de pruebas se conoce como "Prueba de tolerancia a fallos en servicio" o ISFTT para abreviar.

Desventajas

Las ventajas del diseño tolerante a fallos son obvias, mientras que muchas de sus desventajas no lo son:

Términos relacionados

Existe una diferencia entre la tolerancia a fallos y los sistemas que rara vez tienen problemas. Por ejemplo, los sistemas de barras transversales de Western Electric tenían tasas de fallos de dos horas cada cuarenta años y, por lo tanto, eran muy resistentes a los fallos . Pero cuando se producía un fallo, dejaban de funcionar por completo y, por lo tanto, no eran tolerantes a fallos .

Véase también

Referencias

  1. ^ abc Daniel P. Siewiorek; C. Gordon Bell; Allen Newell (1982). Estructuras de computadoras: principios y ejemplos . McGraw-Hill . ISBN 0-07-057302-6.
  2. ^ Algirdas Avižienis; George C. Gilley; Francis P. Mathur; David A. Rennels; John A. Rohr; David K. Rubin. "El ordenador STAR (autoprueba y reparación): una investigación de la teoría y la práctica del diseño de ordenadores tolerantes a fallos" (PDF) .
  3. ^ "Estado de la misión Voyager (la mayoría de las veces, con al menos tres meses de retraso)". NASA . Consultado el 1 de abril de 2022 .
  4. ^ Randell, Brian ; Lee, PA; Treleaven, PC (junio de 1978). "Cuestiones de fiabilidad en el diseño de sistemas informáticos". Encuestas de informática de la ACM . 10 (2): 123–165. doi :10.1145/356725.356729. ISSN  0360-0300. S2CID  16909447.
  5. ^ PJ Denning (diciembre de 1976). "Sistemas operativos tolerantes a fallos". ACM Computing Surveys . 8 (4): 359–389. doi :10.1145/356678.356680. ISSN  0360-0300. S2CID  207736773.
  6. ^ Theodore A. Linden (diciembre de 1976). "Estructuras de sistemas operativos para respaldar la seguridad y la fiabilidad del software". ACM Computing Surveys . 8 (4): 409–445. doi :10.1145/356678.356682. hdl : 2027/mdp.39015086560037 . ISSN  0360-0300. S2CID  16720589.
  7. ^ Ray Holt. "El ordenador central de datos aéreos del F14A y la tecnología LSI de última generación en 1968".
  8. ^ Computación tolerante a fallos en el diseño de computadoras Neilforoshan, MR Archivo de la revista Journal of Computing Sciences in Colleges Volumen 18, Número 4 (abril de 2003) Páginas: 213 – 220, ISSN  1937-4771
  9. ^ "Historia de TANDEM COMPUTERS, INC". FundingUniverse . Consultado el 1 de marzo de 2023 .
  10. ^ Nathaniel (17 de marzo de 2021). "Por qué tu sitio web debería funcionar sin JavaScript". DEV Community . Consultado el 16 de mayo de 2021 .
  11. ^ Fairfax, Zackerie (28 de noviembre de 2020). "El cierre de Twitter de Legacy significa que ya no se puede tuitear desde la 3DS". Screen Rant . Consultado el 1 de julio de 2021 .
  12. ^ Hudak, JJ; Suh, B.-H.; Siewiorek, DP; Segall, Z. (1993). "Evaluación y comparación de técnicas de software tolerantes a fallos". IEEE Transactions on Reliability . 42 (2): 190–204. doi :10.1109/24.229487. ISSN  1558-1721.
  13. ^ Stallings, W (2009): Sistemas operativos. Principios internos y de diseño , sexta edición
  14. ^ Thampi, Sabu M. (23 de noviembre de 2009). "Introducción a los sistemas distribuidos". arXiv : 0911.4395 [cs.DC].
  15. ^ "Control". IEEE . Archivado desde el original el 8 de octubre de 1999 . Consultado el 6 de abril de 2016 .
  16. ^ Baha Al-Shaikh, Simon G. Stacey, Elementos esenciales del equipamiento en anestesia, cuidados intensivos y medicina perioperatoria (2017), pág. 247.
  17. ^ Dubrova, E. (2013). "Diseño tolerante a fallas", Springer, 2013, ISBN 978-1-4614-2112-2 
  18. ^ Evaluación de la fiabilidad de algunas arquitecturas informáticas tolerantes a fallos . Springer-Verlag. Noviembre de 1980. ISBN 978-3-540-10274-8.
  19. ^ Herzberg, Amir; Shulman, Haya (2012). "Computación bipartita asistida por servidor, imparcial y obvia". Séptima Conferencia Internacional sobre Disponibilidad, Confiabilidad y Seguridad , 2012. IEEE. págs. 75–84. doi :10.1109/ares.2012.28. ISBN . 978-1-4673-2244-7.S2CID6579295  .​
  20. ^ Rigger, Manuel; Pekarek, Daniel; Mössenböck, Hanspeter (2018), "Computación consciente del contexto que no tiene en cuenta los fallos como medio para prevenir desbordamientos de búfer", Seguridad de redes y sistemas , Lecture Notes in Computer Science, vol. 11058, Cham: Springer International Publishing, págs. 376–390, arXiv : 1806.09026 , doi :10.1007/978-3-030-02744-5_28, ISBN 978-3-030-02743-8, consultado el 7 de octubre de 2020
  21. ^ Keromytis, Angelos D. (2007), "Caracterización de sistemas de autorreparación de software", en Gorodetski, Vladimir I.; Kotenko, Igor; Skormin, Victor A. (eds.), Caracterización de sistemas de autorreparación de software , Seguridad de redes informáticas: Cuarta Conferencia internacional sobre métodos, modelos y arquitecturas matemáticas para la seguridad de redes informáticas, Springer , ISBN 978-3-540-73985-2
  22. ^ abc Long, Fan; Sidiroglou-Douskos, Stelios; Rinard, Martin (2014). "Reparación y contención automática de errores en tiempo de ejecución mediante el control de recuperación". Actas de la 35.ª Conferencia ACM SIGPLAN sobre diseño e implementación de lenguajes de programación . PLDI '14'. Nueva York, NY, EE. UU.: ACM. págs. 227–238. doi : 10.1145/2594291.2594337 . ISBN . 978-1-4503-2784-8.S2CID6252501 .​ 
  23. ^ Laprie, JC (1985). "Computación confiable y tolerancia a fallas: conceptos y terminología", Actas del 15.° Simposio internacional sobre computación tolerante a fallas (FTSC-15), págs. 2-11
  24. ^ von Neumann, J. (1956). "Lógica probabilística y síntesis de organismos fiables a partir de componentes no fiables", en Automata Studies, eds. C. Shannon y J. McCarthy, Princeton University Press, págs. 43-98
  25. ^ Avizienis, A. (1976). "Sistemas tolerantes a fallos", IEEE Transactions on Computers, vol. 25, núm. 12, págs. 1304-1312